diff --git a/app/src/main/java/eu/kanade/presentation/library/LibrarySettingsDialog.kt b/app/src/main/java/eu/kanade/presentation/library/LibrarySettingsDialog.kt
index 5c9b092a3..1ab73504a 100644
--- a/app/src/main/java/eu/kanade/presentation/library/LibrarySettingsDialog.kt
+++ b/app/src/main/java/eu/kanade/presentation/library/LibrarySettingsDialog.kt
@@ -74,6 +74,8 @@ private fun ColumnScope.FilterPage(
) {
val filterDownloaded by screenModel.libraryPreferences.filterDownloaded().collectAsState()
val downloadedOnly by screenModel.preferences.downloadedOnly().collectAsState()
+ val autoUpdateMangaRestrictions by screenModel.libraryPreferences.autoUpdateMangaRestrictions().collectAsState()
+
TriStateItem(
label = stringResource(MR.strings.label_downloaded),
state = if (downloadedOnly) {
@@ -108,6 +110,14 @@ private fun ColumnScope.FilterPage(
state = filterCompleted,
onClick = { screenModel.toggleFilter(LibraryPreferences::filterCompleted) },
)
+ if (LibraryPreferences.MANGA_OUTSIDE_RELEASE_PERIOD in autoUpdateMangaRestrictions) {
+ val filterIntervalCustom by screenModel.libraryPreferences.filterIntervalCustom().collectAsState()
+ TriStateItem(
+ label = stringResource(MR.strings.action_filter_interval_custom),
+ state = filterIntervalCustom,
+ onClick = { screenModel.toggleFilter(LibraryPreferences::filterIntervalCustom) },
+ )
+ }
val trackers = remember { screenModel.trackers }
when (trackers.size) {
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryScreenModel.kt
index 105f1e2b3..a1b6c3b1b 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryScreenModel.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryScreenModel.kt
@@ -157,6 +157,7 @@ class LibraryScreenModel(
prefs.filterStarted,
prefs.filterBookmarked,
prefs.filterCompleted,
+ prefs.filterIntervalCustom,
) + trackFilter.values
).any { it != TriState.DISABLED }
}
@@ -178,12 +179,13 @@ class LibraryScreenModel(
): LibraryMap {
val prefs = getLibraryItemPreferencesFlow().first()
val downloadedOnly = prefs.globalFilterDownloaded
- val filterDownloaded =
- if (downloadedOnly) TriState.ENABLED_IS else prefs.filterDownloaded
+ val skipOutsideReleasePeriod = prefs.skipOutsideReleasePeriod
+ val filterDownloaded = if (downloadedOnly) TriState.ENABLED_IS else prefs.filterDownloaded
val filterUnread = prefs.filterUnread
val filterStarted = prefs.filterStarted
val filterBookmarked = prefs.filterBookmarked
val filterCompleted = prefs.filterCompleted
+ val filterIntervalCustom = prefs.filterIntervalCustom
val isNotLoggedInAnyTrack = loggedInTrackers.isEmpty()
@@ -215,6 +217,14 @@ class LibraryScreenModel(
applyFilter(filterCompleted) { it.libraryManga.manga.status.toInt() == SManga.COMPLETED }
}
+ val filterFnIntervalCustom: (LibraryItem) -> Boolean = {
+ if (skipOutsideReleasePeriod) {
+ applyFilter(filterIntervalCustom) { it.libraryManga.manga.fetchInterval < 0 }
+ } else {
+ true
+ }
+ }
+
val filterFnTracking: (LibraryItem) -> Boolean = tracking@{ item ->
if (isNotLoggedInAnyTrack || trackFiltersIsIgnored) return@tracking true
@@ -225,7 +235,7 @@ class LibraryScreenModel(
val isExcluded = excludedTracks.isNotEmpty() && mangaTracks.fastAny { it in excludedTracks }
val isIncluded = includedTracks.isEmpty() || mangaTracks.fastAny { it in includedTracks }
- return@tracking !isExcluded && isIncluded
+ !isExcluded && isIncluded
}
val filterFn: (LibraryItem) -> Boolean = {
@@ -234,6 +244,7 @@ class LibraryScreenModel(
filterFnStarted(it) &&
filterFnBookmarked(it) &&
filterFnCompleted(it) &&
+ filterFnIntervalCustom(it) &&
filterFnTracking(it)
}
@@ -320,6 +331,7 @@ class LibraryScreenModel(
libraryPreferences.downloadBadge().changes(),
libraryPreferences.localBadge().changes(),
libraryPreferences.languageBadge().changes(),
+ libraryPreferences.autoUpdateMangaRestrictions().changes(),
preferences.downloadedOnly().changes(),
libraryPreferences.filterDownloaded().changes(),
@@ -327,20 +339,22 @@ class LibraryScreenModel(
libraryPreferences.filterStarted().changes(),
libraryPreferences.filterBookmarked().changes(),
libraryPreferences.filterCompleted().changes(),
- transform = {
- ItemPreferences(
- downloadBadge = it[0] as Boolean,
- localBadge = it[1] as Boolean,
- languageBadge = it[2] as Boolean,
- globalFilterDownloaded = it[3] as Boolean,
- filterDownloaded = it[4] as TriState,
- filterUnread = it[5] as TriState,
- filterStarted = it[6] as TriState,
- filterBookmarked = it[7] as TriState,
- filterCompleted = it[8] as TriState,
- )
- },
- )
+ libraryPreferences.filterIntervalCustom().changes(),
+ ) {
+ ItemPreferences(
+ downloadBadge = it[0] as Boolean,
+ localBadge = it[1] as Boolean,
+ languageBadge = it[2] as Boolean,
+ skipOutsideReleasePeriod = LibraryPreferences.MANGA_OUTSIDE_RELEASE_PERIOD in (it[3] as Set<*>),
+ globalFilterDownloaded = it[4] as Boolean,
+ filterDownloaded = it[5] as TriState,
+ filterUnread = it[6] as TriState,
+ filterStarted = it[7] as TriState,
+ filterBookmarked = it[8] as TriState,
+ filterCompleted = it[9] as TriState,
+ filterIntervalCustom = it[10] as TriState,
+ )
+ }
}
/**
@@ -699,6 +713,7 @@ class LibraryScreenModel(
val downloadBadge: Boolean,
val localBadge: Boolean,
val languageBadge: Boolean,
+ val skipOutsideReleasePeriod: Boolean,
val globalFilterDownloaded: Boolean,
val filterDownloaded: TriState,
@@ -706,6 +721,7 @@ class LibraryScreenModel(
val filterStarted: TriState,
val filterBookmarked: TriState,
val filterCompleted: TriState,
+ val filterIntervalCustom: TriState,
)
@Immutable
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 1a51fa659..22174c0e2 100644
--- a/domain/src/main/java/tachiyomi/domain/library/service/LibraryPreferences.kt
+++ b/domain/src/main/java/tachiyomi/domain/library/service/LibraryPreferences.kt
@@ -85,26 +85,6 @@ class LibraryPreferences(
TriState.DISABLED,
)
- fun filterIntervalLong() = preferenceStore.getEnum(
- "pref_filter_library_interval_long",
- TriState.DISABLED,
- )
-
- fun filterIntervalLate() = preferenceStore.getEnum(
- "pref_filter_library_interval_late",
- TriState.DISABLED,
- )
-
- fun filterIntervalDropped() = preferenceStore.getEnum(
- "pref_filter_library_interval_dropped",
- TriState.DISABLED,
- )
-
- fun filterIntervalPassed() = preferenceStore.getEnum(
- "pref_filter_library_interval_passed",
- TriState.DISABLED,
- )
-
fun filterTracking(id: Int) = preferenceStore.getEnum(
"pref_filter_library_tracked_${id}_v2",
TriState.DISABLED,
diff --git a/i18n/src/commonMain/resources/MR/base/strings.xml b/i18n/src/commonMain/resources/MR/base/strings.xml
index ff02bcf34..e4b3b04d1 100644
--- a/i18n/src/commonMain/resources/MR/base/strings.xml
+++ b/i18n/src/commonMain/resources/MR/base/strings.xml
@@ -54,11 +54,7 @@
Bookmarked
Tracked
Unread
- Customized fetch interval
- Fetch monthly (28 days)
- Late 10+ check
- Dropped? Late 20+ and 2 months
- Passed check period
+ Customized update frequency
Remove filter
Alphabetically