episode/movie cinematic view toggle

This commit is contained in:
Ethan Pippin 2022-01-04 00:17:03 -07:00
parent 25b4e382f2
commit e21aa66372
8 changed files with 37 additions and 12 deletions

View File

@ -63,6 +63,7 @@ struct EpisodesRowView: View {
.padding(.horizontal, 50)
.padding(.vertical)
.onAppear {
// TODO: Get this working
reader.scrollTo(viewModel.item.name)
}
}

View File

@ -5,9 +5,10 @@
* Copyright 2021 Aiden Vigue & Jellyfin Contributors
*/
import SwiftUI
import Defaults
import Introspect
import JellyfinAPI
import SwiftUI
// Useless view necessary in tvOS because of iOS's implementation
struct ItemNavigationView: View {
@ -23,6 +24,10 @@ struct ItemNavigationView: View {
}
struct ItemView: View {
@Default(.tvOSEpisodeItemCinematicView) var tvOSEpisodeItemCinematicView
@Default(.tvOSMovieItemCinematicView) var tvOSMovieItemCinematicView
private var item: BaseItemDto
init(item: BaseItemDto) {
@ -32,13 +37,21 @@ struct ItemView: View {
var body: some View {
Group {
if item.type == "Movie" {
CinematicMovieItemView(viewModel: MovieItemViewModel(item: item))
if tvOSMovieItemCinematicView {
CinematicMovieItemView(viewModel: MovieItemViewModel(item: item))
} else {
MovieItemView(viewModel: MovieItemViewModel(item: item))
}
} else if item.type == "Series" {
SeriesItemView(viewModel: .init(item: item))
} else if item.type == "Season" {
SeasonItemView(viewModel: .init(item: item))
} else if item.type == "Episode" {
CinematicEpisodeItemView(viewModel: EpisodeItemViewModel(item: item))
if tvOSEpisodeItemCinematicView {
CinematicEpisodeItemView(viewModel: EpisodeItemViewModel(item: item))
} else {
EpisodeItemView(viewModel: EpisodeItemViewModel(item: item))
}
} else {
Text(L10n.notImplementedYetWithType(item.type ?? ""))
}

View File

@ -20,6 +20,8 @@ struct SettingsView: View {
@Default(.videoPlayerJumpBackward) var jumpBackwardLength
@Default(.downActionShowsMenu) var downActionShowsMenu
@Default(.confirmClose) var confirmClose
@Default(.tvOSEpisodeItemCinematicView) var tvOSEpisodeItemCinematicView
@Default(.tvOSMovieItemCinematicView) var tvOSMovieItemCinematicView
var body: some View {
GeometryReader { reader in
@ -37,6 +39,7 @@ struct SettingsView: View {
Text(viewModel.user.username)
.foregroundColor(.jellyfinPurple)
}
.focusable()
Button {
settingsRouter.route(to: \.serverDetail)
@ -101,6 +104,13 @@ struct SettingsView: View {
}
}
}
Section {
Toggle("Episode Item Cinematic View", isOn: $tvOSEpisodeItemCinematicView)
Toggle("Movie Item Cinematic View", isOn: $tvOSMovieItemCinematicView)
} header: {
Text("Views")
}
}
}
}

View File

@ -196,7 +196,7 @@ class VLCPlayerViewController: UIViewController {
guard let buttonPress = presses.first?.type else { return }
switch(buttonPress) {
case .menu: () // Captured by other gesture
case .menu: () // Captured by other recognizer
case .playPause:
hideConfirmCloseOverlay()
@ -207,13 +207,6 @@ class VLCPlayerViewController: UIViewController {
didGenerallyTap()
case .upArrow:
hideConfirmCloseOverlay()
if displayingContentOverlay {
hideOverlayContent()
showOverlay()
restartOverlayDismissTimer()
}
case .downArrow:
hideConfirmCloseOverlay()
@ -776,6 +769,8 @@ extension VLCPlayerViewController: PlayerOverlayDelegate {
case .playing:
viewModel.sendPauseReport(paused: true)
vlcMediaPlayer.pause()
showOverlay()
restartOverlayDismissTimer(interval: 5)
case .paused:
viewModel.sendPauseReport(paused: false)

View File

@ -32,6 +32,7 @@ struct SliderView: UIViewRepresentable {
slider.minimumTrackTintColor = .white
slider.focusScaleFactor = 1.4
slider.panDampingValue = 50
slider.fineTunningVelocityThreshold = 1000
return slider
}

View File

@ -33,7 +33,6 @@ private let defaultFocusScaleFactor: CGFloat = 1.05
private let defaultStepValue: Float = 0.1
private let decelerationRate: Float = 0.92
private let decelerationMaxVelocity: Float = 1000
private let fineTunningVelocityThreshold: Float = 600
/// A control used to select a single value from a continuous range of values.
public final class TvOSSlider: UIControl {
@ -117,6 +116,8 @@ public final class TvOSSlider: UIControl {
// Size for thumb view
public var thumbSize: CGFloat = 30
public var fineTunningVelocityThreshold: Float = 600
/**
Sets the sliders current value, allowing you to animate the change visually.

View File

@ -60,4 +60,6 @@ extension Defaults.Keys {
// tvos specific
static let downActionShowsMenu = Key<Bool>("downActionShowsMenu", default: true, suite: SwiftfinStore.Defaults.generalSuite)
static let confirmClose = Key<Bool>("confirmClose", default: false, suite: SwiftfinStore.Defaults.generalSuite)
static let tvOSEpisodeItemCinematicView = Key<Bool>("tvOSEpisodeItemCinematicView", default: false, suite: SwiftfinStore.Defaults.generalSuite)
static let tvOSMovieItemCinematicView = Key<Bool>("tvOSMovieItemCinematicView", default: false, suite: SwiftfinStore.Defaults.generalSuite)
}

View File

@ -48,6 +48,8 @@ final class ConnectToServerViewModel: ViewModel {
uri = "http://localhost:8096"
}
#endif
let uri = uri.trimmingCharacters(in: .whitespaces)
LogManager.shared.log.debug("Attempting to connect to server at \"\(uri)\"", tag: "connectToServer")
SessionManager.main.connectToServer(with: uri)