diff --git a/app/src/main/java/eu/kanade/domain/track/interactor/RefreshTracks.kt b/app/src/main/java/eu/kanade/domain/track/interactor/RefreshTracks.kt index 503256ab5..df99afa54 100644 --- a/app/src/main/java/eu/kanade/domain/track/interactor/RefreshTracks.kt +++ b/app/src/main/java/eu/kanade/domain/track/interactor/RefreshTracks.kt @@ -3,6 +3,7 @@ package eu.kanade.domain.track.interactor import android.app.Application import eu.kanade.domain.track.model.toDbTrack import eu.kanade.domain.track.model.toDomainTrack +import eu.kanade.tachiyomi.data.track.EnhancedTracker import eu.kanade.tachiyomi.data.track.Tracker import eu.kanade.tachiyomi.data.track.TrackerManager import eu.kanade.tachiyomi.util.system.toast @@ -26,10 +27,16 @@ class RefreshTracks( /** * Fetches updated tracking data from all logged in trackers. + * Also sync chapter progress with the [EnhancedTracker] or all trackers based on [enhancedTrackersOnly]. * * @return Failed updates. */ - suspend fun await(mangaId: Long): List> { + suspend fun await( + mangaId: Long, + // KMK --> + enhancedTrackersOnly: Boolean = true, + // KMK <-- + ): List> { return supervisorScope { return@supervisorScope getTracks.await(mangaId) .map { it to trackerManager.get(it.trackerId) } @@ -39,7 +46,13 @@ class RefreshTracks( return@async try { val updatedTrack = service!!.refresh(track.toDbTrack()).toDomainTrack()!! insertTrack.await(updatedTrack) - syncChapterProgressWithTrack.await(mangaId, updatedTrack, service) + // KMK --> + if (!enhancedTrackersOnly) { + syncChapterProgressWithTrack.sync(mangaId, updatedTrack, service) + } else { + // KMK <-- + syncChapterProgressWithTrack.await(mangaId, updatedTrack, service) + } // KMK --> ?.let { val context = Injekt.get() 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 c738680be..da2b23f33 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,7 +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.EnhancedTracker import eu.kanade.tachiyomi.data.track.Tracker import logcat.LogPriority import tachiyomi.core.common.util.system.logcat @@ -10,8 +10,6 @@ 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 import kotlin.math.max class SyncChapterProgressWithTrack( @@ -19,19 +17,30 @@ class SyncChapterProgressWithTrack( private val insertTrack: InsertTrack, private val getChaptersByMangaId: GetChaptersByMangaId, ) { - val trackPreferences: TrackPreferences = Injekt.get() - + /** + * Sync chapter progress with the [EnhancedTracker] + */ suspend fun await( mangaId: Long, remoteTrack: Track, tracker: Tracker, ): Int? { - // KKM --> - // if (tracker !is EnhancedTracker) { - // return - // } - // <-- KKM + if (tracker !is EnhancedTracker) { + return null + } + // KMK --> + return sync(mangaId, remoteTrack, tracker) + } + /** + * Sync chapter progress with the all trackers. + */ + suspend fun sync( + mangaId: Long, + remoteTrack: Track, + tracker: Tracker, + ): Int? { + // KMK <-- // Current chapters in database, sort by source's order because database's order is a mess val dbChapters = getChaptersByMangaId.await(mangaId) // KMK --> @@ -78,7 +87,6 @@ class SyncChapterProgressWithTrack( // KMK --> // Always update local chapters following Tracker even past chapters if (chapterUpdates.isNotEmpty() && - trackPreferences.autoSyncProgressFromTrackers().get() && !tracker.hasNotStartedReading(remoteTrack.status) ) { updateChapter.awaitAll(chapterUpdates) diff --git a/app/src/main/java/eu/kanade/domain/track/interactor/TrackChapter.kt b/app/src/main/java/eu/kanade/domain/track/interactor/TrackChapter.kt index c4900367e..a713ebaec 100644 --- a/app/src/main/java/eu/kanade/domain/track/interactor/TrackChapter.kt +++ b/app/src/main/java/eu/kanade/domain/track/interactor/TrackChapter.kt @@ -23,6 +23,11 @@ class TrackChapter( private val delayedTrackingStore: DelayedTrackingStore, ) { + /** + * Fetches updated tracking data from all logged in trackers. + * Then update chapter progress to all trackers. + * This does not update local chapters' read status. + */ suspend fun await(context: Context, mangaId: Long, chapterNumber: Double, setupJobOnFailure: Boolean = true) { withNonCancellableContext { val tracks = getTracks.await(mangaId) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt index aa0e6ee65..c80bca0f5 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt @@ -176,6 +176,7 @@ class MangaScreenModel( private val uiPreferences: UiPreferences = Injekt.get(), // KMK --> private val sourcePreferences: SourcePreferences = Injekt.get(), + private val refreshTracks: RefreshTracks = Injekt.get(), // KMK <-- private val trackerManager: TrackerManager = Injekt.get(), private val trackChapter: TrackChapter = Injekt.get(), @@ -562,8 +563,7 @@ class MangaScreenModel( private suspend fun syncTrackers() { if (!trackPreferences.autoSyncProgressFromTrackers().get()) return - val refreshTracks = Injekt.get() - refreshTracks.await(mangaId) + refreshTracks.await(mangaId, enhancedTrackersOnly = false) .filter { it.first != null } .forEach { (track, e) -> logcat(LogPriority.ERROR, e) {