From 737bec70f072af5815dc4c8eb22d5230b4549971 Mon Sep 17 00:00:00 2001 From: Cuong-Tran Date: Thu, 17 Jul 2025 14:57:34 +0700 Subject: [PATCH] feat(manga-tracking): Allow auto open tracking dialog when adding to library (komikku-app/anikku#59) * feat(manga-tracking): Allow auto open tracking dialog when adding to library * Prevent tracking dialog shows up overwrite change-category dialog * Refactoring (cherry picked from commit e82af25e198931d04fc2f75f663017fabced904c) --- .../kanade/domain/track/service/TrackPreferences.kt | 2 ++ .../more/settings/screen/SettingsTrackingScreen.kt | 5 ++++- .../eu/kanade/tachiyomi/ui/manga/MangaScreen.kt | 8 +++++++- .../kanade/tachiyomi/ui/manga/MangaScreenModel.kt | 13 ++++++++++++- .../src/commonMain/moko-resources/base/strings.xml | 1 + 5 files changed, 26 insertions(+), 3 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 01fda02e1..ea9d3802a 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 @@ -38,6 +38,8 @@ class TrackPreferences( fun autoUpdateTrack() = preferenceStore.getBoolean("pref_auto_update_manga_sync_key", true) + fun trackOnAddingToLibrary() = preferenceStore.getBoolean("track_on_adding_to_library", 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 3808c6116..d2eb5dc79 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 @@ -93,7 +93,6 @@ 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 { @@ -130,6 +129,10 @@ object SettingsTrackingScreen : SearchableSettings { } return listOf( + Preference.PreferenceItem.SwitchPreference( + preference = trackPreferences.trackOnAddingToLibrary(), + title = stringResource(KMR.strings.pref_track_on_add_library), + ), Preference.PreferenceItem.SwitchPreference( preference = trackPreferences.autoUpdateTrack(), title = stringResource(MR.strings.pref_auto_update_manga_sync), diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreen.kt index ac24ce95e..85e57dc42 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreen.kt @@ -467,7 +467,13 @@ class MangaScreen( var showScanlatorsDialog by remember { mutableStateOf(false) } - val onDismissRequest = { screenModel.dismissDialog() } + val onDismissRequest = { + screenModel.dismissDialog() + if (screenModel.autoOpenTrack && screenModel.showTrackDialogAfterCategorySelection) { + screenModel.showTrackDialogAfterCategorySelection = false + screenModel.showTrackDialog() + } + } when (val dialog = successState.dialog) { null -> {} is MangaScreenModel.Dialog.ChangeCategory -> { 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 c4ca561dc..2bfd01510 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 @@ -269,6 +269,11 @@ class MangaScreenModel( private val selectedPositions: Array = arrayOf(-1, -1) // first and last selected index in list private val selectedChapterIds: HashSet = HashSet() + internal var showTrackDialogAfterCategorySelection: Boolean = false + + internal val autoOpenTrack: Boolean + get() = successState?.hasLoggedInTrackers == true && trackPreferences.trackOnAddingToLibrary().get() + // EXH --> private val updateHelper: EHentaiUpdateHelper by injectLazy() @@ -850,11 +855,17 @@ class MangaScreenModel( } // Choose a category - else -> showChangeCategoryDialog() + else -> { + showTrackDialogAfterCategorySelection = true + showChangeCategoryDialog() + } } // Finally match with enhanced tracking when available addTracks.bindEnhancedTrackers(manga, state.source) + if (autoOpenTrack && !showTrackDialogAfterCategorySelection) { + showTrackDialog() + } } } } diff --git a/i18n-kmk/src/commonMain/moko-resources/base/strings.xml b/i18n-kmk/src/commonMain/moko-resources/base/strings.xml index caebdb3c1..1c07a31db 100644 --- a/i18n-kmk/src/commonMain/moko-resources/base/strings.xml +++ b/i18n-kmk/src/commonMain/moko-resources/base/strings.xml @@ -94,6 +94,7 @@ Auto sync progress from Trackers Sync progress from Trackers up to chapter %d + Open track menu on adding to library Show restoring progress banner Show syncing progress banner