Răsfoiți Sursa

Update chapter progress upon registering tracker (closes #7209)

Co-authored-by: Saud-97 <[email protected]>
arkon 2 ani în urmă
părinte
comite
488d8ab8cf

+ 18 - 7
app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaPresenter.kt

@@ -936,20 +936,31 @@ class MangaPresenter(
             item.manga_id = successState.manga.id
             launchIO {
                 try {
-                    val allChapters = successState.chapters
-                        .map { it.chapter.toDbChapter() }
+                    val allChapters = successState.chapters.map { it.chapter }
                     val hasReadChapters = allChapters.any { it.read }
                     service.bind(item, hasReadChapters)
 
                     item.toDomainTrack(idRequired = false)?.let { track ->
                         insertTrack.await(track)
 
-                        (service as? EnhancedTrackService)?.let { _ ->
-                            val chapters = successState.chapters
-                                .map { it.chapter }
+                        // Update chapter progress if newer chapters marked read locally
+                        if (hasReadChapters) {
+                            val latestLocalReadChapterNumber = allChapters
+                                .sortedBy { it.chapterNumber }
+                                .takeWhile { it.read }
+                                .lastOrNull()
+                                ?.chapterNumber?.toDouble() ?: -1.0
+
+                            if (latestLocalReadChapterNumber >= track.lastChapterRead) {
+                                val updatedTrack = track.copy(
+                                    lastChapterRead = latestLocalReadChapterNumber,
+                                )
+                                setTrackerLastChapterRead(TrackItem(updatedTrack.toDbTrack(), service), latestLocalReadChapterNumber.toInt())
+                            }
+                        }
 
-                            syncChaptersWithTrackServiceTwoWay
-                                .await(chapters, track, service)
+                        if (service is EnhancedTrackService) {
+                            syncChaptersWithTrackServiceTwoWay.await(allChapters, track, service)
                         }
                     }
                 } catch (e: Throwable) {