Watch Next behavior and settings

This commit is contained in:
Arkadiusz Fal
2022-12-18 19:39:03 +01:00
parent b90c856e21
commit 39fc23c5dc
23 changed files with 487 additions and 451 deletions

View File

@@ -6,10 +6,6 @@ struct PlayerSettings: View {
@Default(.playerInstanceID) private var playerInstanceID
@Default(.playerSidebar) private var playerSidebar
@Default(.playerActionsButtonLabelStyle) private var playerActionsButtonLabelStyle
@Default(.playerDetailsPageButtonLabelStyle) private var playerDetailsPageButtonLabelStyle
@Default(.detailsToolbarPosition) private var detailsToolbarPosition
@Default(.showInspector) private var showInspector
@Default(.playerControlsLayout) private var playerControlsLayout
@Default(.fullScreenPlayerControlsLayout) private var fullScreenPlayerControlsLayout
@Default(.horizontalPlayerGestureEnabled) private var horizontalPlayerGestureEnabled
@@ -17,7 +13,6 @@ struct PlayerSettings: View {
@Default(.seekGestureSensitivity) private var seekGestureSensitivity
@Default(.showKeywords) private var showKeywords
@Default(.pauseOnHidingPlayer) private var pauseOnHidingPlayer
@Default(.closeLastItemOnPlaybackEnd) private var closeLastItemOnPlaybackEnd
#if os(iOS)
@Default(.honorSystemOrientationLock) private var honorSystemOrientationLock
@Default(.enterFullscreenInLandscape) private var enterFullscreenInLandscape
@@ -27,7 +22,6 @@ struct PlayerSettings: View {
@Default(.closePiPOnOpeningPlayer) private var closePiPOnOpeningPlayer
@Default(.closePlayerOnOpeningPiP) private var closePlayerOnOpeningPiP
#if !os(macOS)
@Default(.closePlayerOnItemClose) private var closePlayerOnItemClose
@Default(.pauseOnEnteringBackground) private var pauseOnEnteringBackground
@Default(.closePiPAndOpenPlayerOnEnteringForeground) private var closePiPAndOpenPlayerOnEnteringForeground
#endif
@@ -35,6 +29,10 @@ struct PlayerSettings: View {
@Default(.enableReturnYouTubeDislike) private var enableReturnYouTubeDislike
@Default(.systemControlsCommands) private var systemControlsCommands
@Default(.openWatchNextOnClose) private var openWatchNextOnClose
@Default(.openWatchNextOnFinishedWatching) private var openWatchNextOnFinishedWatching
@Default(.openWatchNextOnFinishedWatchingDelay) private var openWatchNextOnFinishedWatchingDelay
@ObservedObject private var accounts = AccountsModel.shared
private var player = PlayerModel.shared
@@ -73,12 +71,16 @@ struct PlayerSettings: View {
pauseOnHidingPlayerToggle
#if !os(macOS)
pauseOnEnteringBackgroundToogle
closePlayerOnItemCloseToggle
#endif
closeLastItemOnPlaybackEndToggle
systemControlsCommandsPicker
}
Section(header: SettingsHeader(text: "Watch Next")) {
openWatchNextOnFinishedWatchingToggle
openWatchNextOnFinishedWatchingDelayTextField
openWatchNextOnCloseToggle
}
#if !os(tvOS)
Section(header: SettingsHeader(text: "Controls".localized()), footer: controlsLayoutFooter) {
horizontalPlayerGestureEnabledToggle
@@ -122,21 +124,6 @@ struct PlayerSettings: View {
}
#endif
#if !os(tvOS)
Section(header: SettingsHeader(text: "Video Details").padding(.bottom, videoDetailsHeaderPadding)) {
SettingsHeader(text: "Actions buttons".localized(), secondary: true)
playerActionsButtonLabelStylePicker
SettingsHeader(text: "Pages buttons".localized(), secondary: true)
detailsButtonLabelStylePicker
SettingsHeader(text: "Show Inspector".localized(), secondary: true)
showInspectorPicker
SettingsHeader(text: "Pages toolbar position".localized(), secondary: true)
detailsToolbarPositionPicker
}
#endif
#if os(iOS)
Section(header: SettingsHeader(text: "Orientation".localized())) {
if idiom == .pad {
@@ -196,6 +183,33 @@ struct PlayerSettings: View {
.modifier(SettingsPickerModifier())
}
private var openWatchNextOnCloseToggle: some View {
Toggle("Open after manual close of video", isOn: $openWatchNextOnClose)
}
private var openWatchNextOnFinishedWatchingToggle: some View {
Toggle("Open after watching video", isOn: $openWatchNextOnFinishedWatching)
}
private var openWatchNextOnFinishedWatchingDelayTextField: some View {
HStack {
Text("Autoplay delay")
.frame(minWidth: 140, alignment: .leading)
#if !os(iOS)
Spacer()
#endif
TextField("Delay", text: $openWatchNextOnFinishedWatchingDelay)
#if !os(iOS)
.frame(maxWidth: 100, alignment: .trailing)
#endif
.labelsHidden()
#if !os(macOS)
.keyboardType(.numberPad)
#endif
}
.multilineTextAlignment(.trailing)
}
private var sidebarPicker: some View {
Picker("Sidebar", selection: $playerSidebar) {
#if os(macOS)
@@ -211,39 +225,6 @@ struct PlayerSettings: View {
.modifier(SettingsPickerModifier())
}
private var playerActionsButtonLabelStylePicker: some View {
Picker("Video actions buttons", selection: $playerActionsButtonLabelStyle) {
Text("Show only icons").tag(ButtonLabelStyle.iconOnly)
Text("Show icons and text when space permits").tag(ButtonLabelStyle.iconAndText)
}
.modifier(SettingsPickerModifier())
}
private var detailsButtonLabelStylePicker: some View {
Picker("Pages buttons", selection: $playerDetailsPageButtonLabelStyle) {
Text("Show only icons").tag(ButtonLabelStyle.iconOnly)
Text("Show icons and text when space permits").tag(ButtonLabelStyle.iconAndText)
}
.modifier(SettingsPickerModifier())
}
private var showInspectorPicker: some View {
Picker("Inspector visibility", selection: $showInspector) {
Text("Always").tag(ShowInspectorSetting.always)
Text("Only for local files and URLs").tag(ShowInspectorSetting.onlyLocal)
}
.modifier(SettingsPickerModifier())
}
private var detailsToolbarPositionPicker: some View {
Picker("Pages toolbar position", selection: $detailsToolbarPosition) {
ForEach(DetailsToolbarPositionSetting.allCases, id: \.self) { setting in
Text(setting.rawValue.capitalized.localized()).tag(setting)
}
}
.modifier(SettingsPickerModifier())
}
private var horizontalPlayerGestureEnabledToggle: some View {
Toggle("Seek with horizontal swipe on video", isOn: $horizontalPlayerGestureEnabled)
}
@@ -310,16 +291,8 @@ struct PlayerSettings: View {
private var pauseOnEnteringBackgroundToogle: some View {
Toggle("Pause when entering background", isOn: $pauseOnEnteringBackground)
}
private var closePlayerOnItemCloseToggle: some View {
Toggle("Close player when closing video", isOn: $closePlayerOnItemClose)
}
#endif
private var closeLastItemOnPlaybackEndToggle: some View {
Toggle("Close video after playing last in the queue", isOn: $closeLastItemOnPlaybackEnd)
}
#if os(iOS)
private var honorSystemOrientationLockToggle: some View {
Toggle("Honor orientation lock", isOn: $honorSystemOrientationLock)

View File

@@ -38,7 +38,7 @@ struct SettingsView: View {
.tabItem {
Label("Browsing", systemImage: "list.and.film")
}
.tag(Optional(Tabs.browsing))
.tag(Tabs.browsing)
Form {
PlayerSettings()
@@ -46,7 +46,7 @@ struct SettingsView: View {
.tabItem {
Label("Player", systemImage: "play.rectangle")
}
.tag(Optional(Tabs.player))
.tag(Tabs.player)
Form {
QualitySettings()
@@ -54,7 +54,7 @@ struct SettingsView: View {
.tabItem {
Label("Quality", systemImage: "4k.tv")
}
.tag(Optional(Tabs.quality))
.tag(Tabs.quality)
Form {
HistorySettings()
@@ -62,7 +62,7 @@ struct SettingsView: View {
.tabItem {
Label("History", systemImage: "clock.arrow.circlepath")
}
.tag(Optional(Tabs.history))
.tag(Tabs.history)
if !accounts.isEmpty {
Form {
@@ -71,7 +71,7 @@ struct SettingsView: View {
.tabItem {
Label("SponsorBlock", systemImage: "dollarsign.circle")
}
.tag(Optional(Tabs.sponsorBlock))
.tag(Tabs.sponsorBlock)
}
Form {
LocationsSettings()
@@ -79,7 +79,7 @@ struct SettingsView: View {
.tabItem {
Label("Locations", systemImage: "globe")
}
.tag(Optional(Tabs.locations))
.tag(Tabs.locations)
Group {
AdvancedSettings()
@@ -87,7 +87,7 @@ struct SettingsView: View {
.tabItem {
Label("Advanced", systemImage: "wrench.and.screwdriver")
}
.tag(Optional(Tabs.advanced))
.tag(Tabs.advanced)
Form {
Help()
@@ -95,7 +95,7 @@ struct SettingsView: View {
.tabItem {
Label("Help", systemImage: "questionmark.circle")
}
.tag(Optional(Tabs.help))
.tag(Tabs.help)
}
.padding(20)
.frame(width: 600, height: windowHeight)
@@ -225,9 +225,9 @@ struct SettingsView: View {
private var windowHeight: Double {
switch selection {
case .browsing:
return 680
return 700
case .player:
return 900
return 730
case .quality:
return 420
case .history: