Merge pull request #570 from stonerl/close-fullscreen-on-end

add option to exit fullscreen on end
This commit is contained in:
Arkadiusz Fal 2024-08-24 12:16:26 +02:00 committed by GitHub
commit 13d4a592bc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 32 additions and 6 deletions

View File

@ -7,6 +7,7 @@ final class PlayerSettingsGroupExporter: SettingsGroupExporter {
"playerInstanceID": Defaults[.playerInstanceID] ?? "", "playerInstanceID": Defaults[.playerInstanceID] ?? "",
"pauseOnHidingPlayer": Defaults[.pauseOnHidingPlayer], "pauseOnHidingPlayer": Defaults[.pauseOnHidingPlayer],
"closeVideoOnEOF": Defaults[.closeVideoOnEOF], "closeVideoOnEOF": Defaults[.closeVideoOnEOF],
"exitFullscreenOnEOF": Defaults[.exitFullscreenOnEOF],
"expandVideoDescription": Defaults[.expandVideoDescription], "expandVideoDescription": Defaults[.expandVideoDescription],
"collapsedLinesDescription": Defaults[.collapsedLinesDescription], "collapsedLinesDescription": Defaults[.collapsedLinesDescription],
"showChapters": Defaults[.showChapters], "showChapters": Defaults[.showChapters],

View File

@ -17,6 +17,10 @@ struct PlayerSettingsGroupImporter {
Defaults[.closeVideoOnEOF] = closeVideoOnEOF Defaults[.closeVideoOnEOF] = closeVideoOnEOF
} }
if let exitFullscreenOnEOF = json["exitFullscreenOnEOF"].bool {
Defaults[.exitFullscreenOnEOF] = exitFullscreenOnEOF
}
if let expandVideoDescription = json["expandVideoDescription"].bool { if let expandVideoDescription = json["expandVideoDescription"].bool {
Defaults[.expandVideoDescription] = expandVideoDescription Defaults[.expandVideoDescription] = expandVideoDescription
} }

View File

@ -111,15 +111,22 @@ extension PlayerBackend {
model.prepareCurrentItemForHistory(finished: true) model.prepareCurrentItemForHistory(finished: true)
if model.queue.isEmpty { if model.queue.isEmpty {
if Defaults[.closeVideoOnEOF] { #if os(tvOS)
#if os(tvOS) if Defaults[.closeVideoOnEOF] {
if model.activeBackend == .appleAVPlayer { if model.activeBackend == .appleAVPlayer {
model.avPlayerBackend.controller?.dismiss(animated: false) model.avPlayerBackend.controller?.dismiss(animated: false)
} }
#endif model.resetQueue()
model.resetQueue() model.hide()
model.hide() }
} #else
if Defaults[.closeVideoOnEOF] {
model.resetQueue()
model.hide()
} else if Defaults[.exitFullscreenOnEOF], model.playingFullScreen {
model.exitFullScreen()
}
#endif
} else { } else {
model.advanceToNextItem() model.advanceToNextItem()
} }

View File

@ -1001,6 +1001,7 @@ final class PlayerModel: ObservableObject {
logger.info("entering fullscreen") logger.info("entering fullscreen")
toggleFullscreen(false, showControls: showControls) toggleFullscreen(false, showControls: showControls)
self.playingFullScreen = true
} }
func exitFullScreen(showControls: Bool = true) { func exitFullScreen(showControls: Bool = true) {
@ -1008,6 +1009,7 @@ final class PlayerModel: ObservableObject {
logger.info("exiting fullscreen") logger.info("exiting fullscreen")
toggleFullscreen(true, showControls: showControls) toggleFullscreen(true, showControls: showControls)
self.playingFullScreen = false
} }
func updateNowPlayingInfo() { func updateNowPlayingInfo() {

View File

@ -75,6 +75,7 @@ extension Defaults.Keys {
static let expandVideoDescription = Key<Bool>("expandVideoDescription", default: expandVideoDescriptionDefault) static let expandVideoDescription = Key<Bool>("expandVideoDescription", default: expandVideoDescriptionDefault)
static let collapsedLinesDescription = Key<Int>("collapsedLinesDescription", default: 5) static let collapsedLinesDescription = Key<Int>("collapsedLinesDescription", default: 5)
static let exitFullscreenOnEOF = Key<Bool>("exitFullscreenOnEOF", default: true)
static let showChapters = Key<Bool>("showChapters", default: true) static let showChapters = Key<Bool>("showChapters", default: true)
static let showChapterThumbnails = Key<Bool>("showChapterThumbnails", default: true) static let showChapterThumbnails = Key<Bool>("showChapterThumbnails", default: true)

View File

@ -12,6 +12,7 @@ struct PlayerSettings: View {
#if !os(tvOS) #if !os(tvOS)
@Default(.showScrollToTopInComments) private var showScrollToTopInComments @Default(.showScrollToTopInComments) private var showScrollToTopInComments
@Default(.collapsedLinesDescription) private var collapsedLinesDescription @Default(.collapsedLinesDescription) private var collapsedLinesDescription
@Default(.exitFullscreenOnEOF) private var exitFullscreenOnEOF
#endif #endif
@Default(.expandVideoDescription) private var expandVideoDescription @Default(.expandVideoDescription) private var expandVideoDescription
@Default(.pauseOnHidingPlayer) private var pauseOnHidingPlayer @Default(.pauseOnHidingPlayer) private var pauseOnHidingPlayer
@ -86,6 +87,9 @@ struct PlayerSettings: View {
} }
pauseOnHidingPlayerToggle pauseOnHidingPlayerToggle
closeVideoOnEOFToggle closeVideoOnEOFToggle
#if !os(tvOS)
exitFullscreenOnEOFToggle
#endif
#if !os(macOS) #if !os(macOS)
pauseOnEnteringBackgroundToogle pauseOnEnteringBackgroundToogle
#endif #endif
@ -300,6 +304,13 @@ struct PlayerSettings: View {
Toggle("Close video and player on end", isOn: $closeVideoOnEOF) Toggle("Close video and player on end", isOn: $closeVideoOnEOF)
} }
#if !os(tvOS)
private var exitFullscreenOnEOFToggle: some View {
Toggle("Exit fullscreen on end", isOn: $exitFullscreenOnEOF)
.disabled(closeVideoOnEOF)
}
#endif
#if !os(macOS) #if !os(macOS)
private var pauseOnEnteringBackgroundToogle: some View { private var pauseOnEnteringBackgroundToogle: some View {
Toggle("Pause when entering background", isOn: $pauseOnEnteringBackground) Toggle("Pause when entering background", isOn: $pauseOnEnteringBackground)