From 0085e22a1cc6bf7341bee305fe130e70cd342741 Mon Sep 17 00:00:00 2001
From: Roshan Varughese <40583749+Animeboynz@users.noreply.github.com>
Date: Fri, 25 Oct 2024 01:23:28 +1300
Subject: [PATCH] Rework Auto Track on Mark as Read (mihonapp/mihon#1365)
(cherry picked from commit c153ac01f545ce9259c58aa5d5f7223d2f8f628b)
---
.../domain/track/service/TrackPreferences.kt | 4 +--
.../settings/screen/SettingsTrackingScreen.kt | 6 ++--
.../tachiyomi/ui/manga/MangaScreenModel.kt | 36 +++++++++++++------
.../moko-resources/base/strings.xml | 1 -
.../moko-resources/base/strings.xml | 2 ++
5 files changed, 33 insertions(+), 16 deletions(-)
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 722f3d68f..d7762f4eb 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
@@ -36,9 +36,9 @@ class TrackPreferences(
fun autoUpdateTrack() = preferenceStore.getBoolean("pref_auto_update_manga_sync_key", true)
- // KMK -->
- fun updateTrackMarkedRead() = preferenceStore.getBoolean("pref_update_tracking_marked_read_key", true)
+ fun autoUpdateTrackOnMarkRead() = preferenceStore.getBoolean("pref_auto_update_manga_on_mark_read", true)
+ // KMK -->
fun autoSyncReadChapters() = preferenceStore.getBoolean("pref_auto_sync_read_chapters_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 a88266f4a..340e9896f 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
@@ -127,11 +127,11 @@ object SettingsTrackingScreen : SearchableSettings {
pref = trackPreferences.autoUpdateTrack(),
title = stringResource(MR.strings.pref_auto_update_manga_sync),
),
- // KMK -->
Preference.PreferenceItem.SwitchPreference(
- pref = trackPreferences.updateTrackMarkedRead(),
- title = stringResource(KMR.strings.pref_update_tracking_marked_read),
+ pref = trackPreferences.autoUpdateTrackOnMarkRead(),
+ title = stringResource(MR.strings.pref_auto_update_manga_on_mark_read),
),
+ // KMK -->
Preference.PreferenceItem.SwitchPreference(
pref = trackPreferences.autoSyncReadChapters(),
title = stringResource(KMR.strings.pref_auto_sync_read_chapters),
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 44fa0ac30..258dd3361 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
@@ -1,6 +1,7 @@
package eu.kanade.tachiyomi.ui.manga
import android.content.Context
+import androidx.compose.material3.SnackbarDuration
import androidx.compose.material3.SnackbarHostState
import androidx.compose.material3.SnackbarResult
import androidx.compose.runtime.Composable
@@ -10,7 +11,6 @@ import androidx.compose.runtime.produceState
import androidx.compose.runtime.toMutableStateList
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.util.fastAny
-import androidx.compose.ui.util.fastMaxOfOrNull
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.flowWithLifecycle
import androidx.palette.graphics.Palette
@@ -169,11 +169,11 @@ class MangaScreenModel(
private val smartSearched: Boolean,
// SY <--
private val libraryPreferences: LibraryPreferences = Injekt.get(),
+ private val trackPreferences: TrackPreferences = Injekt.get(),
readerPreferences: ReaderPreferences = Injekt.get(),
private val uiPreferences: UiPreferences = Injekt.get(),
// KMK -->
private val sourcePreferences: SourcePreferences = Injekt.get(),
- private val trackPreferences: TrackPreferences = Injekt.get(),
// KMK <--
private val trackerManager: TrackerManager = Injekt.get(),
private val trackChapter: TrackChapter = Injekt.get(),
@@ -1339,15 +1339,31 @@ class MangaScreenModel(
)
if (!read) return@launchIO
- // KMK -->
- if (!trackPreferences.updateTrackMarkedRead().get()) return@launchIO
- chapters.fastMaxOfOrNull { it.chapterNumber }
- ?.also { chapterNumber ->
- screenModelScope.launchNonCancellable {
- trackChapter.await(context, mangaId, chapterNumber)
- }
+
+ val tracks = getTracks.await(mangaId)
+ val maxChapterNumber = chapters.maxOf { it.chapterNumber }
+ val shouldPromptTrackingUpdate = tracks.any { track -> maxChapterNumber > track.lastChapterRead }
+
+ if (!shouldPromptTrackingUpdate) return@launchIO
+
+ if (trackPreferences.autoUpdateTrackOnMarkRead().get()) {
+ trackChapter.await(context, mangaId, maxChapterNumber)
+ withUIContext {
+ context.toast(context.stringResource(MR.strings.trackers_updated_summary, maxChapterNumber.toInt()))
}
- // KMK <--
+ return@launchIO
+ }
+
+ val result = snackbarHostState.showSnackbar(
+ message = context.stringResource(MR.strings.confirm_tracker_update, maxChapterNumber.toInt()),
+ actionLabel = context.stringResource(MR.strings.action_ok),
+ duration = SnackbarDuration.Short,
+ withDismissAction = true,
+ )
+
+ if (result == SnackbarResult.ActionPerformed) {
+ trackChapter.await(context, mangaId, maxChapterNumber)
+ }
}
}
diff --git a/i18n-kmk/src/commonMain/moko-resources/base/strings.xml b/i18n-kmk/src/commonMain/moko-resources/base/strings.xml
index 6d30c03dc..2c5bbbd66 100644
--- a/i18n-kmk/src/commonMain/moko-resources/base/strings.xml
+++ b/i18n-kmk/src/commonMain/moko-resources/base/strings.xml
@@ -85,7 +85,6 @@
If set to "manual", either refresh each manga or using the "Invalidate downloads index" action in "Advanced"
- Update progress when marked as read
Auto sync read chapters from Trackers
diff --git a/i18n/src/commonMain/moko-resources/base/strings.xml b/i18n/src/commonMain/moko-resources/base/strings.xml
index 16bc10fa3..a4db617e2 100644
--- a/i18n/src/commonMain/moko-resources/base/strings.xml
+++ b/i18n/src/commonMain/moko-resources/base/strings.xml
@@ -511,6 +511,7 @@
Tracking guide
Update progress after reading
+ Update progress when marked as read
Trackers
One-way sync to update the chapter progress in external tracker services. Set up tracking for individual entries from their tracking button.
Enhanced trackers
@@ -741,6 +742,7 @@
Exclude scanlators
No scanlators found
Update trackers to chapter %d?
+ Trackers updated to chapter %d
Tracking