From 561d680e783cdf03a9c48907a56a4b436cb43908 Mon Sep 17 00:00:00 2001 From: schroda <50052685+schroda@users.noreply.github.com> Date: Fri, 9 Jun 2023 14:33:10 +0200 Subject: [PATCH] Exclude mangas with specific state from global update (#537) --- .../tachidesk/manga/controller/UpdateController.kt | 7 +++++++ .../main/kotlin/suwayomi/tachidesk/server/ServerConfig.kt | 3 +++ server/src/main/resources/server-reference.conf | 3 +++ server/src/test/resources/server-reference.conf | 3 +++ 4 files changed, 16 insertions(+) diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/controller/UpdateController.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/controller/UpdateController.kt index 48328a31..f4f0bd66 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/controller/UpdateController.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/controller/UpdateController.kt @@ -18,7 +18,9 @@ import suwayomi.tachidesk.manga.model.dataclass.IncludeInUpdate import suwayomi.tachidesk.manga.model.dataclass.MangaChapterDataClass import suwayomi.tachidesk.manga.model.dataclass.MangaDataClass import suwayomi.tachidesk.manga.model.dataclass.PaginatedList +import suwayomi.tachidesk.manga.model.table.MangaStatus import suwayomi.tachidesk.server.JavalinSetup.future +import suwayomi.tachidesk.server.serverConfig import suwayomi.tachidesk.server.util.formParam import suwayomi.tachidesk.server.util.handler import suwayomi.tachidesk.server.util.pathParam @@ -108,8 +110,13 @@ object UpdateController { .distinctBy { it.id } val mangasToCategoriesMap = CategoryManga.getMangasCategories(categoriesToUpdateMangas.map { it.id }) val mangasToUpdate = categoriesToUpdateMangas + .asSequence() .filter { it.updateStrategy == UpdateStrategy.ALWAYS_UPDATE } + .filter { if (serverConfig.excludeUnreadChapters) { (it.unreadCount ?: 0L) == 0L } else true } + .filter { if (serverConfig.excludeNotStarted) { it.lastReadAt != null } else true } + .filter { if (serverConfig.excludeCompleted) { it.status != MangaStatus.COMPLETED.name } else true } .filter { !excludedCategories.any { category -> mangasToCategoriesMap[it.id]?.contains(category) == true } } + .toList() // In case no manga gets updated and no update job was running before, the client would never receive an info about its update request if (mangasToUpdate.isEmpty()) { diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/ServerConfig.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/ServerConfig.kt index 0008d2c5..3a51645a 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/server/ServerConfig.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/server/ServerConfig.kt @@ -35,6 +35,9 @@ class ServerConfig(getConfig: () -> Config, moduleName: String = MODULE_NAME) : // updater var maxParallelUpdateRequests: Int by overridableConfig + var excludeUnreadChapters: Boolean by overridableConfig + var excludeNotStarted: Boolean by overridableConfig + var excludeCompleted: Boolean by overridableConfig // Authentication var basicAuthEnabled: Boolean by overridableConfig diff --git a/server/src/main/resources/server-reference.conf b/server/src/main/resources/server-reference.conf index d6a1d889..4847a0ec 100644 --- a/server/src/main/resources/server-reference.conf +++ b/server/src/main/resources/server-reference.conf @@ -20,6 +20,9 @@ server.downloadsPath = "" # updater server.maxParallelUpdateRequests = 10 # sets how many sources can be updated in parallel. updates are grouped by source and all mangas of a source are updated synchronously +server.excludeUnreadChapters = true +server.excludeNotStarted = true +server.excludeCompleted = true # Authentication server.basicAuthEnabled = false diff --git a/server/src/test/resources/server-reference.conf b/server/src/test/resources/server-reference.conf index 8c04e2f6..324cde08 100644 --- a/server/src/test/resources/server-reference.conf +++ b/server/src/test/resources/server-reference.conf @@ -12,6 +12,9 @@ server.downloadAsCbz = false # updater server.maxParallelUpdateRequests = 10 +server.excludeUnreadChapters = true +server.excludeNotStarted = true +server.excludeCompleted = true # misc server.debugLogsEnabled = true