Browse Source

Use queued last chapter read number when performing delayed tracker update

Fixes #8876

(cherry picked from commit f7f2072621bbcaf4ddbe07f746a5cf78490c95c9)
arkon 2 years ago
parent
commit
d2dd34c2e5

+ 22 - 19
app/src/main/java/eu/kanade/domain/track/service/DelayedTrackingUpdateJob.kt

@@ -31,30 +31,33 @@ class DelayedTrackingUpdateJob(context: Context, workerParams: WorkerParameters)
         val trackManager = Injekt.get<TrackManager>()
         val delayedTrackingStore = Injekt.get<DelayedTrackingStore>()
 
-        withIOContext {
-            val tracks = delayedTrackingStore.getItems().mapNotNull {
-                val track = getTracks.awaitOne(it.trackId)
-                if (track == null) {
-                    delayedTrackingStore.remove(it.trackId)
+        val results = withIOContext {
+            delayedTrackingStore.getItems()
+                .mapNotNull {
+                    val track = getTracks.awaitOne(it.trackId)
+                    if (track == null) {
+                        delayedTrackingStore.remove(it.trackId)
+                    }
+                    track?.copy(lastChapterRead = it.lastChapterRead.toDouble())
                 }
-                track
-            }
-
-            tracks.forEach { track ->
-                try {
-                    val service = trackManager.getService(track.syncId)
-                    if (service != null && service.isLogged) {
-                        service.update(track.toDbTrack(), true)
-                        insertTrack.await(track)
+                .mapNotNull { track ->
+                    try {
+                        val service = trackManager.getService(track.syncId)
+                        if (service != null && service.isLogged) {
+                            logcat(LogPriority.DEBUG) { "Updating delayed track item: ${track.id}, last chapter read: ${track.lastChapterRead}" }
+                            service.update(track.toDbTrack(), true)
+                            insertTrack.await(track)
+                        }
+                        delayedTrackingStore.remove(track.id)
+                        null
+                    } catch (e: Exception) {
+                        logcat(LogPriority.ERROR, e)
+                        false
                     }
-                    delayedTrackingStore.remove(track.id)
-                } catch (e: Exception) {
-                    logcat(LogPriority.ERROR, e)
                 }
-            }
         }
 
-        return Result.success()
+        return if (results.isNotEmpty()) Result.failure() else Result.success()
     }
 
     companion object {