diff --git a/komga/src/main/kotlin/org/gotson/komga/application/tasks/TaskHandler.kt b/komga/src/main/kotlin/org/gotson/komga/application/tasks/TaskHandler.kt index fb2c472b..cbc3c71f 100644 --- a/komga/src/main/kotlin/org/gotson/komga/application/tasks/TaskHandler.kt +++ b/komga/src/main/kotlin/org/gotson/komga/application/tasks/TaskHandler.kt @@ -2,6 +2,7 @@ package org.gotson.komga.application.tasks import io.micrometer.core.instrument.MeterRegistry import mu.KotlinLogging +import org.gotson.komga.domain.model.BookAction import org.gotson.komga.domain.persistence.BookRepository import org.gotson.komga.domain.persistence.LibraryRepository import org.gotson.komga.domain.persistence.SeriesRepository @@ -149,7 +150,9 @@ class TaskHandler( is Task.RemoveHashedPages -> bookRepository.findByIdOrNull(task.bookId)?.let { book -> - bookPageEditor.removeHashedPages(book, task.pages) + if (bookPageEditor.removeHashedPages(book, task.pages) == BookAction.GENERATE_THUMBNAIL) { + taskEmitter.generateBookThumbnail(book, priority = task.priority + 1) + } } ?: logger.warn { "Cannot execute task $task: Book does not exist" } is Task.HashBook -> diff --git a/komga/src/main/kotlin/org/gotson/komga/domain/model/BookAction.kt b/komga/src/main/kotlin/org/gotson/komga/domain/model/BookAction.kt new file mode 100644 index 00000000..7cbc40ed --- /dev/null +++ b/komga/src/main/kotlin/org/gotson/komga/domain/model/BookAction.kt @@ -0,0 +1,6 @@ +package org.gotson.komga.domain.model + +enum class BookAction { + REFRESH_METADATA, + GENERATE_THUMBNAIL, +} diff --git a/komga/src/main/kotlin/org/gotson/komga/domain/service/BookPageEditor.kt b/komga/src/main/kotlin/org/gotson/komga/domain/service/BookPageEditor.kt index fb68c31d..254c0f8e 100644 --- a/komga/src/main/kotlin/org/gotson/komga/domain/service/BookPageEditor.kt +++ b/komga/src/main/kotlin/org/gotson/komga/domain/service/BookPageEditor.kt @@ -6,6 +6,7 @@ import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream import org.apache.commons.io.FilenameUtils import org.gotson.komga.application.events.EventPublisher import org.gotson.komga.domain.model.Book +import org.gotson.komga.domain.model.BookAction import org.gotson.komga.domain.model.BookConversionException import org.gotson.komga.domain.model.BookPageNumbered import org.gotson.komga.domain.model.BookWithMedia @@ -52,14 +53,18 @@ class BookPageEditor( private val failedPageRemoval = mutableListOf() - fun removeHashedPages(book: Book, pagesToDelete: Collection) { + fun removeHashedPages(book: Book, pagesToDelete: Collection): BookAction? { // perform various checks - if (failedPageRemoval.contains(book.id)) - return logger.info { "Book page removal already failed before, skipping" } + if (failedPageRemoval.contains(book.id)) { + logger.info { "Book page removal already failed before, skipping" } + return null + } fileSystemScanner.scanFile(book.path)?.let { scannedBook -> - if (scannedBook.fileLastModified.notEquals(book.fileLastModified)) - return logger.info { "Book has changed on disk, skipping. Db: ${book.fileLastModified}. Scanned: ${scannedBook.fileLastModified}" } + if (scannedBook.fileLastModified.notEquals(book.fileLastModified)) { + logger.info { "Book has changed on disk, skipping. Db: ${book.fileLastModified}. Scanned: ${scannedBook.fileLastModified}" } + return null + } } ?: throw FileNotFoundException("File not found: ${book.path}") val media = mediaRepository.findById(book.id) @@ -79,8 +84,10 @@ class BookPageEditor( candidate.pageNumber == index + 1 } == null } - if (media.pages.size != (pagesToKeep.size + pagesToDelete.size)) - return logger.info { "Should be removing ${pagesToDelete.size} pages from book, but count doesn't add up, skipping" } + if (media.pages.size != (pagesToKeep.size + pagesToDelete.size)) { + logger.info { "Should be removing ${pagesToDelete.size} pages from book, but count doesn't add up, skipping" } + return null + } logger.info { "Start removal of ${pagesToDelete.size} pages for book: $book" } logger.debug { "Pages: ${media.pages}" } @@ -156,5 +163,7 @@ class BookPageEditor( pagesToDelete.forEach { historicalEventRepository.insert(HistoricalEvent.DuplicatePageDeleted(book, it)) } eventPublisher.publishEvent(DomainEvent.BookUpdated(newBook)) + + return if (pagesToDelete.any { it.pageNumber == 1 }) BookAction.GENERATE_THUMBNAIL else null } }