diff --git a/server/src/main/kotlin/suwayomi/tachidesk/graphql/mutations/MangaMutation.kt b/server/src/main/kotlin/suwayomi/tachidesk/graphql/mutations/MangaMutation.kt index 40d19b5c..6dc041bb 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/graphql/mutations/MangaMutation.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/graphql/mutations/MangaMutation.kt @@ -7,13 +7,18 @@ import org.jetbrains.exposed.sql.deleteWhere import org.jetbrains.exposed.sql.select import org.jetbrains.exposed.sql.transactions.transaction import org.jetbrains.exposed.sql.update +import org.kodein.di.DI +import org.kodein.di.conf.global +import org.kodein.di.instance import suwayomi.tachidesk.graphql.asDataFetcherResult import suwayomi.tachidesk.graphql.types.MangaMetaType import suwayomi.tachidesk.graphql.types.MangaType import suwayomi.tachidesk.manga.impl.Library import suwayomi.tachidesk.manga.impl.Manga +import suwayomi.tachidesk.manga.impl.update.IUpdater import suwayomi.tachidesk.manga.model.table.MangaMetaTable import suwayomi.tachidesk.manga.model.table.MangaTable +import suwayomi.tachidesk.manga.model.table.toDataClass import suwayomi.tachidesk.server.JavalinSetup.future import java.time.Instant import java.util.concurrent.CompletableFuture @@ -24,6 +29,8 @@ import java.util.concurrent.CompletableFuture * - Delete read/all downloaded chapters */ class MangaMutation { + private val updater by DI.global.instance() + data class UpdateMangaPatch( val inLibrary: Boolean? = null, ) @@ -65,6 +72,17 @@ class MangaMutation { } }.apply { if (patch.inLibrary != null) { + transaction { + // try to initialize uninitialized in library manga to ensure that the expected data is available (chapter list, metadata, ...) + val mangas = + transaction { + MangaTable.select { (MangaTable.id inList ids) and (MangaTable.initialized eq false) } + .map { MangaTable.toDataClass(it) } + } + + updater.addMangasToQueue(mangas) + } + ids.forEach { Library.handleMangaThumbnail(it, patch.inLibrary) } diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/update/IUpdater.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/update/IUpdater.kt index 09ac70bb..1dc00519 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/update/IUpdater.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/update/IUpdater.kt @@ -3,6 +3,7 @@ package suwayomi.tachidesk.manga.impl.update import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.StateFlow import suwayomi.tachidesk.manga.model.dataclass.CategoryDataClass +import suwayomi.tachidesk.manga.model.dataclass.MangaDataClass interface IUpdater { fun getLastUpdateTimestamp(): Long @@ -13,6 +14,8 @@ interface IUpdater { forceAll: Boolean, ) + fun addMangasToQueue(mangas: List) + val status: Flow val statusDeprecated: StateFlow diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/update/Updater.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/update/Updater.kt index 5b4a1ef0..3fe270ae 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/update/Updater.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/update/Updater.kt @@ -329,11 +329,11 @@ class Updater : IUpdater { ) } - private fun addMangasToQueue(mangasToUpdate: List) { + override fun addMangasToQueue(mangas: List) { // create all manga update jobs before adding them to the queue so that the client is able to calculate the // progress properly right form the start - mangasToUpdate.forEach { tracker[it.id] = UpdateJob(it) } - mangasToUpdate.forEach { addMangaToQueue(it) } + mangas.forEach { tracker[it.id] = UpdateJob(it) } + mangas.forEach { addMangaToQueue(it) } } private fun addMangaToQueue(manga: MangaDataClass) {