Add setting for closing player after playing last item (fix #98)

This commit is contained in:
Arkadiusz Fal
2022-06-25 15:14:16 +02:00
parent 164e68e5a1
commit 288d06e120
7 changed files with 44 additions and 20 deletions

View File

@@ -464,20 +464,24 @@ final class AVPlayerBackend: PlayerBackend {
}
@objc func itemDidPlayToEndTime() {
model.prepareCurrentItemForHistory(finished: true)
if Defaults[.closeLastItemOnPlaybackEnd] {
model.prepareCurrentItemForHistory(finished: true)
}
if model.queue.isEmpty {
#if !os(macOS)
try? AVAudioSession.sharedInstance().setActive(false)
#endif
model.resetQueue()
#if os(tvOS)
controller?.playerView.dismiss(animated: false) { [weak self] in
self?.controller?.dismiss(animated: true)
}
#else
model.hide()
#endif
if Defaults[.closeLastItemOnPlaybackEnd] {
model.resetQueue()
#if os(tvOS)
controller?.playerView.dismiss(animated: false) { [weak self] in
self?.controller?.dismiss(animated: true)
}
#else
model.hide()
#endif
}
} else {
if model.playingInPictureInPicture {
startPictureInPictureOnPlay = true

View File

@@ -376,6 +376,8 @@ final class MPVBackend: PlayerBackend {
}
func handle(_ event: UnsafePointer<mpv_event>!) {
logger.info(.init(stringLiteral: "RECEIVED event: \(String(cString: mpv_event_name(event.pointee.event_id)))"))
switch event.pointee.event_id {
case MPV_EVENT_SHUTDOWN:
mpv_destroy(client.mpv)
@@ -401,9 +403,11 @@ final class MPVBackend: PlayerBackend {
onFileLoaded = nil
case MPV_EVENT_PAUSE:
isPlaying = false
networkStateTimer.resume()
case MPV_EVENT_UNPAUSE:
isPlaying = true
isLoadingVideo = false
isSeeking = false
networkStateTimer.resume()
@@ -413,7 +417,7 @@ final class MPVBackend: PlayerBackend {
case MPV_EVENT_END_FILE:
DispatchQueue.main.async { [weak self] in
self?.handleEndOfFile(event)
self?.handleEndOfFile()
}
default:
@@ -421,20 +425,26 @@ final class MPVBackend: PlayerBackend {
}
}
func handleEndOfFile(_: UnsafePointer<mpv_event>!) {
func handleEndOfFile() {
guard handleEOF, !isLoadingVideo else {
return
}
model.prepareCurrentItemForHistory(finished: true)
getClientUpdates()
if Defaults[.closeLastItemOnPlaybackEnd] {
model.prepareCurrentItemForHistory(finished: true)
}
if model.queue.isEmpty {
#if !os(macOS)
try? AVAudioSession.sharedInstance().setActive(false)
#endif
model.resetQueue()
model.hide()
if Defaults[.closeLastItemOnPlaybackEnd] {
model.resetQueue()
model.hide()
}
} else {
model.advanceToNextItem()
}

View File

@@ -48,6 +48,7 @@ final class MPVClient: ObservableObject {
checkError(mpv_set_option_string(mpv, "cache-pause-initial", "yes"))
checkError(mpv_set_option_string(mpv, "cache-secs", "20"))
checkError(mpv_set_option_string(mpv, "cache-pause-wait", "2"))
checkError(mpv_set_option_string(mpv, "keep-open", "yes"))
checkError(mpv_set_option_string(mpv, "hwdec", "auto-safe"))
checkError(mpv_set_option_string(mpv, "vo", "libmpv"))

View File

@@ -41,16 +41,21 @@ extension PlayerModel {
return
}
self.prepareCurrentItemForHistory(finished: true)
self.pause()
if Defaults[.closeLastItemOnPlaybackEnd] {
self.prepareCurrentItemForHistory(finished: true)
}
if self.queue.isEmpty {
#if !os(macOS)
try? AVAudioSession.sharedInstance().setActive(false)
#endif
self.resetQueue()
self.hide()
if Defaults[.closeLastItemOnPlaybackEnd] {
self.resetQueue()
self.hide()
}
} else {
self.advanceToNextItem()
}