diff --git a/app/src/main/java/eu/kanade/domain/track/interactor/AddTracks.kt b/app/src/main/java/eu/kanade/domain/track/interactor/AddTracks.kt index a5b6a0e1c..297d38e4e 100644 --- a/app/src/main/java/eu/kanade/domain/track/interactor/AddTracks.kt +++ b/app/src/main/java/eu/kanade/domain/track/interactor/AddTracks.kt @@ -1,5 +1,6 @@ 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.database.models.Track @@ -8,14 +9,18 @@ import eu.kanade.tachiyomi.data.track.Tracker import eu.kanade.tachiyomi.data.track.TrackerManager import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.util.lang.convertEpochMillisZone +import eu.kanade.tachiyomi.util.system.toast import logcat.LogPriority +import tachiyomi.core.common.i18n.stringResource import tachiyomi.core.common.util.lang.withIOContext import tachiyomi.core.common.util.lang.withNonCancellableContext +import tachiyomi.core.common.util.lang.withUIContext import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.chapter.interactor.GetChaptersByMangaId import tachiyomi.domain.history.interactor.GetHistory import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.track.interactor.InsertTrack +import tachiyomi.i18n.kmk.KMR import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.time.ZoneOffset @@ -74,6 +79,14 @@ class AddTracks( } syncChapterProgressWithTrack.await(mangaId, track, tracker) + // KMK --> + ?.let { + val context = Injekt.get() + withUIContext { + context.toast(context.stringResource(KMR.strings.sync_progress_from_trackers_up_to_chapter, it)) + } + } + // KMK <-- } } @@ -94,6 +107,14 @@ class AddTracks( track.toDomainTrack(idRequired = false)!!, service, ) + // KMK --> + ?.let { + val context = Injekt.get() + withUIContext { + context.toast(context.stringResource(KMR.strings.sync_progress_from_trackers_up_to_chapter, it)) + } + } + // KMK <-- } } catch (e: Exception) { logcat( 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 3d1e337ff..503256ab5 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 @@ -1,14 +1,21 @@ 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.Tracker import eu.kanade.tachiyomi.data.track.TrackerManager +import eu.kanade.tachiyomi.util.system.toast import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll import kotlinx.coroutines.supervisorScope +import tachiyomi.core.common.i18n.stringResource +import tachiyomi.core.common.util.lang.withUIContext import tachiyomi.domain.track.interactor.GetTracks import tachiyomi.domain.track.interactor.InsertTrack +import tachiyomi.i18n.kmk.KMR +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.get class RefreshTracks( private val getTracks: GetTracks, @@ -33,6 +40,14 @@ class RefreshTracks( val updatedTrack = service!!.refresh(track.toDbTrack()).toDomainTrack()!! insertTrack.await(updatedTrack) syncChapterProgressWithTrack.await(mangaId, updatedTrack, service) + // KMK --> + ?.let { + val context = Injekt.get() + withUIContext { + context.toast(context.stringResource(KMR.strings.sync_progress_from_trackers_up_to_chapter, it)) + } + } + // KMK <-- null } catch (e: Throwable) { service to e 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 6a060c06f..c738680be 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 @@ -25,7 +25,7 @@ class SyncChapterProgressWithTrack( mangaId: Long, remoteTrack: Track, tracker: Tracker, - ) { + ): Int? { // KKM --> // if (tracker !is EnhancedTracker) { // return @@ -70,17 +70,26 @@ class SyncChapterProgressWithTrack( try { // Update Tracker to localLastRead if needed - if (updatedTrack.lastChapterRead > remoteTrack.lastChapterRead) { + if (lastRead > remoteTrack.lastChapterRead) { tracker.update(updatedTrack.toDbTrack()) // update Track in database insertTrack.await(updatedTrack) } - // Update local chapters following Tracker - if (trackPreferences.autoSyncReadChapters().get() && !tracker.hasNotStartedReading(remoteTrack.status)) { + // KMK --> + // Always update local chapters following Tracker even past chapters + if (chapterUpdates.isNotEmpty() && + trackPreferences.autoSyncProgressFromTrackers().get() && + !tracker.hasNotStartedReading(remoteTrack.status) + ) { updateChapter.awaitAll(chapterUpdates) + return lastRead.toInt() } + // KMK <-- } catch (e: Throwable) { logcat(LogPriority.WARN, e) } + // KMK --> + return null + // KMK <-- } } diff --git a/app/src/main/java/eu/kanade/domain/track/service/TrackPreferences.kt b/app/src/main/java/eu/kanade/domain/track/service/TrackPreferences.kt index 0241c1089..67bdc60aa 100644 --- a/app/src/main/java/eu/kanade/domain/track/service/TrackPreferences.kt +++ b/app/src/main/java/eu/kanade/domain/track/service/TrackPreferences.kt @@ -44,6 +44,6 @@ class TrackPreferences( ) // KMK --> - fun autoSyncReadChapters() = preferenceStore.getBoolean("pref_auto_sync_read_chapters_key", true) + fun autoSyncProgressFromTrackers() = preferenceStore.getBoolean("pref_auto_sync_progress_from_trackers_key", true) // KMK <-- } diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsTrackingScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsTrackingScreen.kt index 44bfa945e..23892f27c 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsTrackingScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsTrackingScreen.kt @@ -139,8 +139,8 @@ object SettingsTrackingScreen : SearchableSettings { ), // KMK --> Preference.PreferenceItem.SwitchPreference( - pref = trackPreferences.autoSyncReadChapters(), - title = stringResource(KMR.strings.pref_auto_sync_read_chapters), + pref = trackPreferences.autoSyncProgressFromTrackers(), + title = stringResource(KMR.strings.pref_auto_sync_progress_from_trackers), ), // KMK <-- Preference.PreferenceGroup( 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 31d9200da..abf57d27c 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 @@ -559,7 +559,7 @@ class MangaScreenModel( } private suspend fun syncTrackers() { - if (!trackPreferences.autoSyncReadChapters().get()) return + if (!trackPreferences.autoSyncProgressFromTrackers().get()) return val refreshTracks = Injekt.get() refreshTracks.await(mangaId) diff --git a/i18n-kmk/src/commonMain/moko-resources/base/strings.xml b/i18n-kmk/src/commonMain/moko-resources/base/strings.xml index ea9b84d82..27446ecb3 100644 --- a/i18n-kmk/src/commonMain/moko-resources/base/strings.xml +++ b/i18n-kmk/src/commonMain/moko-resources/base/strings.xml @@ -85,7 +85,8 @@ If set to "manual", either refresh each manga or using the "Invalidate downloads index" action in "Advanced" - Auto sync read chapters from Trackers + Auto sync progress from Trackers + Sync progress from Trackers up to chapter %d Show restoring progress banner