From f4e39ec7ca00c1c17e7f4e668cf86f03a27300dd Mon Sep 17 00:00:00 2001 From: ronaldheft Date: Thu, 11 Aug 2022 20:38:51 -0400 Subject: [PATCH] Functions to update local progress --- ios/App/Shared/models/LocalLibrary.swift | 2 ++ .../models/LocalLibraryExtensions.swift | 28 +++++++++++++++++++ ios/App/Shared/models/PlaybackSession.swift | 7 +++++ ios/App/Shared/util/NowPlayingInfo.swift | 2 ++ 4 files changed, 39 insertions(+) diff --git a/ios/App/Shared/models/LocalLibrary.swift b/ios/App/Shared/models/LocalLibrary.swift index fde755df..b13c3cdb 100644 --- a/ios/App/Shared/models/LocalLibrary.swift +++ b/ios/App/Shared/models/LocalLibrary.swift @@ -151,6 +151,8 @@ struct LocalMediaProgress: Realmable, Codable { var libraryItemId: String? var episodeId: String? + var progressPercent: Int { Int(self.progress * 100) } + static func primaryKey() -> String? { return "id" } diff --git a/ios/App/Shared/models/LocalLibraryExtensions.swift b/ios/App/Shared/models/LocalLibraryExtensions.swift index 1d5ee885..4ef0159a 100644 --- a/ios/App/Shared/models/LocalLibraryExtensions.swift +++ b/ios/App/Shared/models/LocalLibraryExtensions.swift @@ -152,4 +152,32 @@ extension LocalMediaProgress { self.startedAt = progress.startedAt self.finishedAt = progress.finishedAt } + + mutating func updateIsFinished(_ finished: Bool) { + if self.isFinished != finished { + self.progress = finished ? 1.0 : 0.0 + } + + self.isFinished = finished + self.lastUpdate = Int(Date().timeIntervalSince1970) + self.finishedAt = finished ? lastUpdate : nil + } + + mutating func updateFromPlaybackSession(_ playbackSession: PlaybackSession) { + self.currentTime = playbackSession.currentTime + self.progress = playbackSession.progress + self.lastUpdate = Int(Date().timeIntervalSince1970) + self.isFinished = playbackSession.progress >= 100.0 + self.finishedAt = self.isFinished ? self.lastUpdate : nil + } + + mutating func updateFromServerMediaProgress(_ serverMediaProgress: MediaProgress) { + self.isFinished = serverMediaProgress.isFinished + self.progress = serverMediaProgress.progress + self.currentTime = serverMediaProgress.currentTime + self.duration = serverMediaProgress.duration + self.lastUpdate = serverMediaProgress.lastUpdate + self.finishedAt = serverMediaProgress.finishedAt + self.startedAt = serverMediaProgress.startedAt + } } diff --git a/ios/App/Shared/models/PlaybackSession.swift b/ios/App/Shared/models/PlaybackSession.swift index 802ec809..5fb9480e 100644 --- a/ios/App/Shared/models/PlaybackSession.swift +++ b/ios/App/Shared/models/PlaybackSession.swift @@ -29,4 +29,11 @@ struct PlaybackSession: Decodable, Encodable { var localLibraryItem: LocalLibraryItem? var serverConnectionConfigId: String? var serverAddress: String? + + var totalDuration: Double { + var total = 0.0 + self.audioTracks.forEach { total += $0.duration } + return total + } + var progress: Double { self.currentTime / self.totalDuration } } diff --git a/ios/App/Shared/util/NowPlayingInfo.swift b/ios/App/Shared/util/NowPlayingInfo.swift index fbb4181e..001ddcf1 100644 --- a/ios/App/Shared/util/NowPlayingInfo.swift +++ b/ios/App/Shared/util/NowPlayingInfo.swift @@ -65,6 +65,7 @@ class NowPlayingInfo { MPNowPlayingInfoCenter.default().nowPlayingInfo = nowPlayingInfo } + public func reset() { nowPlayingInfo = [:] MPNowPlayingInfoCenter.default().nowPlayingInfo = nil @@ -89,6 +90,7 @@ class NowPlayingInfo { nowPlayingInfo[MPMediaItemPropertyArtist] = metadata!.author ?? "unknown" nowPlayingInfo[MPMediaItemPropertyAlbumTitle] = metadata!.series } + private func shouldFetchCover(id: String) -> Bool { nowPlayingInfo[MPNowPlayingInfoPropertyExternalContentIdentifier] as? String != id || nowPlayingInfo[MPMediaItemPropertyArtwork] == nil }