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