Rework Auto Track on Mark as Read (mihonapp/mihon#1365)

(cherry picked from commit c153ac01f545ce9259c58aa5d5f7223d2f8f628b)
This commit is contained in:
Roshan Varughese 2024-10-25 01:23:28 +13:00 committed by Cuong-Tran
parent 256fe760cc
commit 0085e22a1c
No known key found for this signature in database
GPG key ID: 733AA7624B9315C2
5 changed files with 33 additions and 16 deletions

View file

@ -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 <--
}

View file

@ -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),

View file

@ -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)
}
}
}

View file

@ -85,7 +85,6 @@
<string name="download_cache_renew_interval_info">If set to "manual", either refresh each manga or using the "Invalidate downloads index" action in "Advanced"</string>
<!-- Tracking section -->
<string name="pref_update_tracking_marked_read">Update progress when marked as read</string>
<string name="pref_auto_sync_read_chapters">Auto sync read chapters from Trackers</string>
<!-- Sync section -->

View file

@ -511,6 +511,7 @@
<!-- Tracking section -->
<string name="tracking_guide">Tracking guide</string>
<string name="pref_auto_update_manga_sync">Update progress after reading</string>
<string name="pref_auto_update_manga_on_mark_read">Update progress when marked as read</string>
<string name="services">Trackers</string>
<string name="tracking_info">One-way sync to update the chapter progress in external tracker services. Set up tracking for individual entries from their tracking button.</string>
<string name="enhanced_services">Enhanced trackers</string>
@ -741,6 +742,7 @@
<string name="exclude_scanlators">Exclude scanlators</string>
<string name="no_scanlators_found">No scanlators found</string>
<string name="confirm_tracker_update">Update trackers to chapter %d?</string>
<string name="trackers_updated_summary">Trackers updated to chapter %d</string>
<!-- Tracking Screen -->
<string name="manga_tracking_tab">Tracking</string>