diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsReaderScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsReaderScreen.kt
index c0e6793fe..dd63f0224 100644
--- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsReaderScreen.kt
+++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsReaderScreen.kt
@@ -168,6 +168,10 @@ object SettingsReaderScreen : SearchableSettings {
pref = readerPreferences.skipFiltered(),
title = stringResource(R.string.pref_skip_filtered_chapters),
),
+ Preference.PreferenceItem.SwitchPreference(
+ pref = readerPreferences.skipDupe(),
+ title = stringResource(R.string.pref_skip_dupe_chapters),
+ ),
Preference.PreferenceItem.SwitchPreference(
pref = readerPreferences.alwaysShowChapterTransition(),
title = stringResource(R.string.pref_always_show_chapter_transition),
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderViewModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderViewModel.kt
index 818958757..f0fa5b69a 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderViewModel.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderViewModel.kt
@@ -222,6 +222,16 @@ class ReaderViewModel(
}
}
else -> chapters
+ }.run {
+ if (readerPreferences.skipDupe().get()) {
+ groupBy { it.chapterNumber }
+ .mapValues { (_, chapters) ->
+ chapters.find { it.id == chapterId || it.scanlator == selectedChapter.scanlator } ?: chapters.first()
+ }
+ .values
+ } else {
+ this
+ }
}
chaptersForReader
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences.kt
index 993c03a9e..10c42e8c0 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences.kt
@@ -65,6 +65,8 @@ class ReaderPreferences(
fun skipFiltered() = preferenceStore.getBoolean("skip_filtered", true)
+ fun skipDupe() = preferenceStore.getBoolean("skip_dupe", false)
+
// endregion
// region Split two page spread
diff --git a/i18n/src/main/res/values/strings.xml b/i18n/src/main/res/values/strings.xml
index a156732e8..17f5bcbde 100755
--- a/i18n/src/main/res/values/strings.xml
+++ b/i18n/src/main/res/values/strings.xml
@@ -337,6 +337,7 @@
Keep screen on
Skip chapters marked read
Skip filtered chapters
+ Skip duplicate chapters
Navigation
Volume keys
Invert volume keys