mirror of
https://github.com/advplyr/audiobookshelf-app.git
synced 2025-08-04 10:04:39 +02:00
Update:iOS saving progress for offline ebooks
This commit is contained in:
parent
f8fbeef9b7
commit
f42c624cba
4 changed files with 50 additions and 2 deletions
|
@ -16,6 +16,8 @@ class LocalMediaProgress: Object, Codable {
|
|||
@Persisted var progress: Double = 0
|
||||
@Persisted var currentTime: Double = 0
|
||||
@Persisted var isFinished: Bool = false
|
||||
@Persisted var ebookLocation: String?
|
||||
@Persisted var ebookProgress: Double?
|
||||
@Persisted var lastUpdate: Double = 0
|
||||
@Persisted var startedAt: Double = 0
|
||||
@Persisted var finishedAt: Double?
|
||||
|
@ -29,7 +31,7 @@ class LocalMediaProgress: Object, Codable {
|
|||
var progressPercent: Int { Int(self.progress * 100) }
|
||||
|
||||
private enum CodingKeys : String, CodingKey {
|
||||
case id, localLibraryItemId, localEpisodeId, duration, progress, currentTime, isFinished, lastUpdate, startedAt, finishedAt, serverConnectionConfigId, serverAddress, serverUserId, libraryItemId, episodeId
|
||||
case id, localLibraryItemId, localEpisodeId, duration, progress, currentTime, isFinished, ebookLocation, ebookProgress, lastUpdate, startedAt, finishedAt, serverConnectionConfigId, serverAddress, serverUserId, libraryItemId, episodeId
|
||||
}
|
||||
|
||||
override init() {
|
||||
|
@ -47,6 +49,8 @@ class LocalMediaProgress: Object, Codable {
|
|||
progress = try values.decode(Double.self, forKey: .progress)
|
||||
currentTime = try values.decode(Double.self, forKey: .currentTime)
|
||||
isFinished = try values.decode(Bool.self, forKey: .isFinished)
|
||||
ebookLocation = try values.decodeIfPresent(String.self, forKey: .ebookLocation)
|
||||
ebookProgress = try values.doubleOrStringDecoder(key: .ebookProgress)
|
||||
lastUpdate = try values.decode(Double.self, forKey: .lastUpdate)
|
||||
startedAt = try values.decode(Double.self, forKey: .startedAt)
|
||||
finishedAt = try values.decodeIfPresent(Double.self, forKey: .finishedAt)
|
||||
|
@ -70,6 +74,8 @@ class LocalMediaProgress: Object, Codable {
|
|||
try container.encode(currentTime, forKey: .currentTime)
|
||||
}
|
||||
try container.encode(isFinished, forKey: .isFinished)
|
||||
try container.encode(ebookLocation, forKey: .ebookLocation)
|
||||
try container.encode(ebookProgress, forKey: .ebookProgress)
|
||||
try container.encode(lastUpdate, forKey: .lastUpdate)
|
||||
try container.encode(startedAt, forKey: .startedAt)
|
||||
try container.encode(finishedAt, forKey: .finishedAt)
|
||||
|
@ -97,6 +103,7 @@ extension LocalMediaProgress {
|
|||
self.progress = 0.0
|
||||
self.currentTime = 0.0
|
||||
self.isFinished = false
|
||||
self.ebookProgress = 0.0
|
||||
self.lastUpdate = Date().timeIntervalSince1970 * 1000
|
||||
self.startedAt = 0
|
||||
self.finishedAt = nil
|
||||
|
@ -114,6 +121,8 @@ extension LocalMediaProgress {
|
|||
self.progress = progress.progress
|
||||
self.currentTime = progress.currentTime
|
||||
self.isFinished = progress.isFinished
|
||||
self.ebookLocation = progress.ebookLocation
|
||||
self.ebookProgress = progress.ebookProgress
|
||||
self.lastUpdate = progress.lastUpdate
|
||||
self.startedAt = progress.startedAt
|
||||
self.finishedAt = progress.finishedAt
|
||||
|
@ -148,6 +157,8 @@ extension LocalMediaProgress {
|
|||
func updateFromServerMediaProgress(_ serverMediaProgress: MediaProgress) throws {
|
||||
try self.realm?.write {
|
||||
self.isFinished = serverMediaProgress.isFinished
|
||||
self.ebookLocation = serverMediaProgress.ebookLocation
|
||||
self.ebookProgress = serverMediaProgress.ebookProgress
|
||||
self.progress = serverMediaProgress.progress
|
||||
self.currentTime = serverMediaProgress.currentTime
|
||||
self.duration = serverMediaProgress.duration
|
||||
|
@ -157,6 +168,14 @@ extension LocalMediaProgress {
|
|||
}
|
||||
}
|
||||
|
||||
func updateEbookProgress(ebookLocation:String, ebookProgress:Double) throws {
|
||||
try self.realm?.write {
|
||||
self.ebookLocation = ebookLocation
|
||||
self.ebookProgress = ebookProgress
|
||||
self.lastUpdate = Date().timeIntervalSince1970 * 1000
|
||||
}
|
||||
}
|
||||
|
||||
static func getLocalMediaProgressId(localLibraryItemId: String?, localEpisodeId: String?) -> String? {
|
||||
if let itemId = localLibraryItemId, let episodeId = localEpisodeId {
|
||||
return "\(itemId)-\(episodeId)"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue