From 65fdf75a19f77f0b1d0714a1ee0e3c6d55bfbb21 Mon Sep 17 00:00:00 2001 From: Luqman <16263232+Riztard@users.noreply.github.com> Date: Sun, 18 Feb 2024 03:46:23 +0700 Subject: [PATCH] add toggle to auto mark read dupe chapter (#1078) * add toggle to auto mark read dupe chapter https: //github.com/tachiyomiorg/tachiyomi/pull/9662 Co-Authored-By: Trace <49712094+traceltrc@users.noreply.github.com> * Update LibraryUpdateJob.kt --------- Co-authored-by: Trace <49712094+traceltrc@users.noreply.github.com> --- .../settings/screen/SettingsLibraryScreen.kt | 5 +++++ .../tachiyomi/data/library/LibraryUpdateJob.kt | 18 +++++++++++++++++- .../library/service/LibraryPreferences.kt | 2 ++ .../commonMain/resources/MR/base/strings.xml | 3 +++ 4 files changed, 27 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsLibraryScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsLibraryScreen.kt index 6f97e3eabf..6e9c1c53e8 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsLibraryScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsLibraryScreen.kt @@ -235,6 +235,11 @@ object SettingsLibraryScreen : SearchableSettings { pref = libraryPreferences.newShowUpdatesCount(), title = stringResource(MR.strings.pref_library_update_show_tab_badge), ), + Preference.PreferenceItem.SwitchPreference( + pref = libraryPreferences.libraryReadDuplicateChapters(), + title = stringResource(MR.strings.pref_library_mark_duplicate_chapters), + subtitle = stringResource(MR.strings.pref_library_mark_duplicate_chapters_summary), + ), ), ) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateJob.kt b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateJob.kt index 9ebb962c45..fd890304dd 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateJob.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateJob.kt @@ -16,6 +16,7 @@ import androidx.work.WorkInfo import androidx.work.WorkQuery import androidx.work.WorkerParameters import androidx.work.workDataOf +import eu.kanade.domain.chapter.interactor.SetReadStatus import eu.kanade.domain.chapter.interactor.SyncChaptersWithSource import eu.kanade.domain.manga.interactor.UpdateManga import eu.kanade.domain.manga.model.copyFrom @@ -99,6 +100,7 @@ import java.util.concurrent.CopyOnWriteArrayList import java.util.concurrent.TimeUnit import java.util.concurrent.atomic.AtomicBoolean import java.util.concurrent.atomic.AtomicInteger +import tachiyomi.domain.chapter.interactor.GetChaptersByMangaId class LibraryUpdateJob(private val context: Context, workerParams: WorkerParameters) : CoroutineWorker(context, workerParams) { @@ -124,6 +126,8 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet private val insertTrack: InsertTrack = Injekt.get() private val trackerManager: TrackerManager = Injekt.get() private val mdList = trackerManager.mdList + private val getChaptersByMangaId: GetChaptersByMangaId = Injekt.get() + private val setReadStatus: SetReadStatus = Injekt.get() // SY <-- private val notifier = LibraryUpdateNotifier(context) @@ -391,7 +395,19 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet ) { try { val newChapters = updateManga(manga, fetchWindow) - .sortedByDescending { it.sourceOrder } + // SY --> + .sortedByDescending { it.sourceOrder }.run { + if (libraryPreferences.libraryReadDuplicateChapters().get()) { + val readChapters = getChaptersByMangaId.await(manga.id).filter { it.read } + val newReadChapters = this.filter { chapter -> readChapters.any { it.chapterNumber == chapter.chapterNumber } } + .also { setReadStatus.await(true, *it.toTypedArray()) } + + this.filterNot { newReadChapters.contains(it) } + } else { + this + } + } + //SY <-- if (newChapters.isNotEmpty()) { val categoryIds = getCategories.await(manga.id).map { it.id } diff --git a/domain/src/main/java/tachiyomi/domain/library/service/LibraryPreferences.kt b/domain/src/main/java/tachiyomi/domain/library/service/LibraryPreferences.kt index 0e8bc4ca4c..535bcf9e36 100644 --- a/domain/src/main/java/tachiyomi/domain/library/service/LibraryPreferences.kt +++ b/domain/src/main/java/tachiyomi/domain/library/service/LibraryPreferences.kt @@ -92,6 +92,8 @@ class LibraryPreferences( "pref_filter_library_lewd_v2", TriState.DISABLED, ) + + fun libraryReadDuplicateChapters() = preferenceStore.getBoolean("pref_library_mark_duplicate_chapters", false) // SY <-- fun filterTracking(id: Int) = preferenceStore.getEnum( diff --git a/i18n/src/commonMain/resources/MR/base/strings.xml b/i18n/src/commonMain/resources/MR/base/strings.xml index ce35f07cbb..ffdd86ed8f 100644 --- a/i18n/src/commonMain/resources/MR/base/strings.xml +++ b/i18n/src/commonMain/resources/MR/base/strings.xml @@ -286,6 +286,9 @@ Automatically refresh metadata Check for new cover and details when updating library + Mark new duplicate chapters as read + Automatically mark new chapters as read if it has been read before + Default category Always ask Per-category settings for sort