From 1ddb6eca0035b03541a5b14e02d41d7eedc82069 Mon Sep 17 00:00:00 2001 From: advplyr Date: Sat, 24 Jun 2023 10:37:56 -0500 Subject: [PATCH] Fix:iOS local podcast episode progress #719 --- ios/App/App/plugins/AbsDatabase.swift | 8 ++++++-- .../Shared/models/local/LocalMediaProgress.swift | 7 ++++++- pages/item/_id/_episode/index.vue | 14 +++++--------- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/ios/App/App/plugins/AbsDatabase.swift b/ios/App/App/plugins/AbsDatabase.swift index 85d7ec66..12bc1eec 100644 --- a/ios/App/App/plugins/AbsDatabase.swift +++ b/ios/App/App/plugins/AbsDatabase.swift @@ -193,10 +193,14 @@ public class AbsDatabase: CAPPlugin { @objc func updateLocalMediaProgressFinished(_ call: CAPPluginCall) { let localLibraryItemId = call.getString("localLibraryItemId") let localEpisodeId = call.getString("localEpisodeId") - let localMediaProgressId = call.getString("localMediaProgressId") let isFinished = call.getBool("isFinished", false) - logger.log("updateLocalMediaProgressFinished \(localMediaProgressId ?? "Unknown") | Is Finished: \(isFinished)") + var localMediaProgressId = localLibraryItemId ?? "" + if localEpisodeId != nil { + localMediaProgressId += "-\(localEpisodeId ?? "")" + } + + logger.log("updateLocalMediaProgressFinished \(localMediaProgressId) | Is Finished: \(isFinished)") do { let localMediaProgress = try LocalMediaProgress.fetchOrCreateLocalMediaProgress(localMediaProgressId: localMediaProgressId, localLibraryItemId: localLibraryItemId, localEpisodeId: localEpisodeId) diff --git a/ios/App/Shared/models/local/LocalMediaProgress.swift b/ios/App/Shared/models/local/LocalMediaProgress.swift index 17572870..c80e3123 100644 --- a/ios/App/Shared/models/local/LocalMediaProgress.swift +++ b/ios/App/Shared/models/local/LocalMediaProgress.swift @@ -111,6 +111,7 @@ extension LocalMediaProgress { if let episode = episode { self.id += "-\(episode.id)" self.episodeId = episode.id + self.localEpisodeId = episode.id self.duration = episode.duration ?? 0.0 } } @@ -133,6 +134,10 @@ extension LocalMediaProgress { if self.isFinished != finished { self.progress = finished ? 1.0 : 0.0 } + + if finished { + self.currentTime = 0.0 + } if self.startedAt == 0 && finished { self.startedAt = Date().timeIntervalSince1970 * 1000 @@ -149,7 +154,7 @@ extension LocalMediaProgress { self.currentTime = playbackSession.currentTime self.progress = playbackSession.progress self.lastUpdate = Date().timeIntervalSince1970 * 1000 - self.isFinished = playbackSession.progress >= 100.0 + self.isFinished = playbackSession.progress >= 0.99 self.finishedAt = self.isFinished ? self.lastUpdate : nil } } diff --git a/pages/item/_id/_episode/index.vue b/pages/item/_id/_episode/index.vue index 9bc5ea00..ceb9c768 100644 --- a/pages/item/_id/_episode/index.vue +++ b/pages/item/_id/_episode/index.vue @@ -12,16 +12,12 @@ -

- {{ title }} -

+

{{ title }}

Episode #{{ episodeNumber }}
Season #{{ season }}
-
- {{ episodeType }} -
+
{{ episodeType }}
@@ -227,13 +223,13 @@ export default { return this.$store.getters['user/getUserMediaProgress'](this.serverLibraryItemId, this.serverEpisodeId) }, progressPercent() { - return this.userItemProgress ? this.userItemProgress.progress : 0 + return this.userItemProgress?.progress || 0 }, userIsFinished() { - return this.userItemProgress ? !!this.userItemProgress.isFinished : false + return !!this.userItemProgress?.isFinished }, userProgressFinishedAt() { - return this.userItemProgress ? this.userItemProgress.finishedAt : 0 + return this.userItemProgress?.finishedAt || 0 }, userTimeRemaining() { if (!this.userItemProgress) return 0