mirror of
https://github.com/gotson/komga.git
synced 2026-05-08 12:35:30 +02:00
fix: regenerate thumbnail if first page is removed as duplicate
Closes: #1078
This commit is contained in:
parent
13444f818b
commit
cf2a5a2026
3 changed files with 26 additions and 8 deletions
|
|
@ -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 ->
|
||||
|
|
|
|||
|
|
@ -0,0 +1,6 @@
|
|||
package org.gotson.komga.domain.model
|
||||
|
||||
enum class BookAction {
|
||||
REFRESH_METADATA,
|
||||
GENERATE_THUMBNAIL,
|
||||
}
|
||||
|
|
@ -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<String>()
|
||||
|
||||
fun removeHashedPages(book: Book, pagesToDelete: Collection<BookPageNumbered>) {
|
||||
fun removeHashedPages(book: Book, pagesToDelete: Collection<BookPageNumbered>): 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
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue