From acfaab61020c17e738e445ebc486182e6924c121 Mon Sep 17 00:00:00 2001 From: "Cuong M. Tran" Date: Thu, 30 May 2024 16:47:17 +0700 Subject: [PATCH] only sync back read chapters from Trackers if chapter list is incremental also click Tracker button won't sync back if Auto sync is not turned on --- .../SyncChapterProgressWithTrack.kt | 29 ++++++++++++++----- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/eu/kanade/domain/track/interactor/SyncChapterProgressWithTrack.kt b/app/src/main/java/eu/kanade/domain/track/interactor/SyncChapterProgressWithTrack.kt index 6f96ebc59..23afa8886 100644 --- a/app/src/main/java/eu/kanade/domain/track/interactor/SyncChapterProgressWithTrack.kt +++ b/app/src/main/java/eu/kanade/domain/track/interactor/SyncChapterProgressWithTrack.kt @@ -1,6 +1,7 @@ package eu.kanade.domain.track.interactor import eu.kanade.domain.track.model.toDbTrack +import eu.kanade.domain.track.service.TrackPreferences import eu.kanade.tachiyomi.data.track.Tracker import logcat.LogPriority import tachiyomi.core.common.util.system.logcat @@ -9,13 +10,15 @@ import tachiyomi.domain.chapter.interactor.UpdateChapter import tachiyomi.domain.chapter.model.toChapterUpdate import tachiyomi.domain.track.interactor.InsertTrack import tachiyomi.domain.track.model.Track +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.get class SyncChapterProgressWithTrack( private val updateChapter: UpdateChapter, private val insertTrack: InsertTrack, private val getChaptersByMangaId: GetChaptersByMangaId, ) { - + val trackPreferences: TrackPreferences = Injekt.get() suspend fun await( mangaId: Long, remoteTrack: Track, @@ -28,13 +31,24 @@ class SyncChapterProgressWithTrack( // <-- KKM // Current chapters in database - val sortedChapters = getChaptersByMangaId.await(mangaId) - .sortedBy { it.chapterNumber } + val dbChapters = getChaptersByMangaId.await(mangaId) + .reversed() .filter { it.isRecognizedNumber } - // Chapters to update to follow tracker - val chapterUpdates = sortedChapters - .filter { chapter -> chapter.chapterNumber <= remoteTrack.lastChapterRead && !chapter.read } + val sortedChapters = dbChapters + .sortedBy { it.chapterNumber } + + // Chapters to update to follow tracker: only continuous incremental chapters + // any abnormal chapter number will stop it from updating read status further + var lastCheckChapter: Double + var checkingChapter = 0.0 + val chapterUpdates = dbChapters + .takeWhile { chapter -> + lastCheckChapter = checkingChapter + checkingChapter = chapter.chapterNumber + chapter.chapterNumber >= lastCheckChapter && chapter.chapterNumber <= remoteTrack.lastChapterRead + } + .filter { chapter -> !chapter.read } .map { it.copy(read = true).toChapterUpdate() } // only take into account continuous reading @@ -50,8 +64,9 @@ class SyncChapterProgressWithTrack( insertTrack.await(updatedTrack) } // Update local chapters following Tracker - if (!tracker.hasNotStartedReading(remoteTrack.status)) + if (trackPreferences.autoSyncReadChapters().get() && !tracker.hasNotStartedReading(remoteTrack.status)) { updateChapter.awaitAll(chapterUpdates) + } } catch (e: Throwable) { logcat(LogPriority.WARN, e) }