diff --git a/app/src/main/java/eu/kanade/domain/track/model/AutoTrackState.kt b/app/src/main/java/eu/kanade/domain/track/model/AutoTrackState.kt new file mode 100644 index 000000000..a45851251 --- /dev/null +++ b/app/src/main/java/eu/kanade/domain/track/model/AutoTrackState.kt @@ -0,0 +1,10 @@ +package eu.kanade.domain.track.model + +import dev.icerock.moko.resources.StringResource +import tachiyomi.i18n.MR + +enum class AutoTrackState(val titleRes: StringResource) { + ASK(MR.strings.default_category_summary), + ALWAYS(MR.strings.lock_always), + NEVER(MR.strings.lock_never), +} 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 e82d3da11..e5ddad649 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 @@ -1,9 +1,11 @@ package eu.kanade.domain.track.service +import eu.kanade.domain.track.model.AutoTrackState import eu.kanade.tachiyomi.data.track.Tracker import eu.kanade.tachiyomi.data.track.anilist.Anilist import tachiyomi.core.common.preference.Preference import tachiyomi.core.common.preference.PreferenceStore +import tachiyomi.core.common.preference.getEnum class TrackPreferences( private val preferenceStore: PreferenceStore, @@ -36,5 +38,5 @@ class TrackPreferences( fun autoUpdateTrack() = preferenceStore.getBoolean("pref_auto_update_manga_sync_key", true) - fun autoUpdateTrackOnMarkRead() = preferenceStore.getBoolean("pref_auto_update_manga_on_mark_read", true) + fun autoUpdateTrackOnMarkRead() = preferenceStore.getEnum("pref_auto_update_manga_on_mark_read", AutoTrackState.ALWAYS) } 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 cec87196a..a3bcc5f3a 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 @@ -40,6 +40,7 @@ import androidx.compose.ui.text.input.VisualTransformation import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import dev.icerock.moko.resources.StringResource +import eu.kanade.domain.track.model.AutoTrackState import eu.kanade.domain.track.service.TrackPreferences import eu.kanade.presentation.more.settings.Preference import eu.kanade.tachiyomi.data.track.EnhancedTracker @@ -52,6 +53,7 @@ import eu.kanade.tachiyomi.data.track.shikimori.ShikimoriApi import eu.kanade.tachiyomi.util.system.openInBrowser import eu.kanade.tachiyomi.util.system.toast import kotlinx.collections.immutable.persistentListOf +import kotlinx.collections.immutable.persistentMapOf import kotlinx.collections.immutable.toImmutableList import tachiyomi.core.common.util.lang.launchIO import tachiyomi.core.common.util.lang.withUIContext @@ -85,6 +87,7 @@ object SettingsTrackingScreen : SearchableSettings { val trackPreferences = remember { Injekt.get() } val trackerManager = remember { Injekt.get() } val sourceManager = remember { Injekt.get() } + val autoTrackStatePref = trackPreferences.autoUpdateTrackOnMarkRead() var dialog by remember { mutableStateOf(null) } dialog?.run { @@ -125,9 +128,18 @@ object SettingsTrackingScreen : SearchableSettings { pref = trackPreferences.autoUpdateTrack(), title = stringResource(MR.strings.pref_auto_update_manga_sync), ), - Preference.PreferenceItem.SwitchPreference( + Preference.PreferenceItem.ListPreference( pref = trackPreferences.autoUpdateTrackOnMarkRead(), title = stringResource(MR.strings.pref_auto_update_manga_on_mark_read), + entries = persistentMapOf( + AutoTrackState.ALWAYS to stringResource(MR.strings.lock_always), + AutoTrackState.NEVER to stringResource(MR.strings.lock_never), + AutoTrackState.ASK to stringResource(MR.strings.default_category_summary), + ), + onValueChanged = { + autoTrackStatePref.set(it) + true + }, ), Preference.PreferenceGroup( title = stringResource(MR.strings.services), 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 777bf87e9..8a7264a9d 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 @@ -25,6 +25,7 @@ import eu.kanade.domain.manga.model.downloadedFilter import eu.kanade.domain.manga.model.toSManga import eu.kanade.domain.track.interactor.AddTracks import eu.kanade.domain.track.interactor.TrackChapter +import eu.kanade.domain.track.model.AutoTrackState import eu.kanade.domain.track.service.TrackPreferences import eu.kanade.presentation.manga.DownloadAction import eu.kanade.presentation.manga.components.ChapterDownloadAction @@ -140,6 +141,7 @@ class MangaScreenModel( val chapterSwipeStartAction = libraryPreferences.swipeToEndAction().get() val chapterSwipeEndAction = libraryPreferences.swipeToStartAction().get() + var autoTrackState = trackPreferences.autoUpdateTrackOnMarkRead().get() private val skipFiltered by readerPreferences.skipFiltered().asState(screenModelScope) @@ -734,15 +736,14 @@ class MangaScreenModel( chapters = chapters.toTypedArray(), ) - if (!read) return@launchIO + if (!read || successState?.hasLoggedInTrackers == false || autoTrackState == AutoTrackState.NEVER) return@launchIO 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()) { + if (autoTrackState == AutoTrackState.ALWAYS) { trackChapter.await(context, mangaId, maxChapterNumber) withUIContext { context.toast(context.stringResource(MR.strings.trackers_updated_summary, maxChapterNumber.toInt()))