diff --git a/komga/build.gradle.kts b/komga/build.gradle.kts index ce683c45..8cec05d0 100644 --- a/komga/build.gradle.kts +++ b/komga/build.gradle.kts @@ -56,6 +56,8 @@ dependencies { implementation("commons-io:commons-io:2.6") + implementation("org.apache.commons:commons-lang3:3.9") + implementation("org.apache.tika:tika-core:1.22") implementation("com.github.junrar:junrar:4.0.0") implementation("net.grey-panther:natural-comparator:1.1") diff --git a/komga/src/main/kotlin/org/gotson/komga/domain/service/BookManager.kt b/komga/src/main/kotlin/org/gotson/komga/domain/service/BookManager.kt index 7fac8738..1e93e11b 100644 --- a/komga/src/main/kotlin/org/gotson/komga/domain/service/BookManager.kt +++ b/komga/src/main/kotlin/org/gotson/komga/domain/service/BookManager.kt @@ -1,11 +1,14 @@ package org.gotson.komga.domain.service import mu.KotlinLogging +import org.apache.commons.lang3.time.DurationFormatUtils import org.gotson.komga.domain.model.Book import org.gotson.komga.domain.model.BookMetadata import org.gotson.komga.domain.model.Status import org.gotson.komga.domain.persistence.BookRepository import org.springframework.stereotype.Service +import org.springframework.transaction.annotation.Transactional +import kotlin.system.measureTimeMillis private val logger = KotlinLogging.logger {} @@ -15,18 +18,21 @@ class BookManager( private val bookParser: BookParser ) { + @Transactional fun parseAndPersist(book: Book) { logger.info { "Parse and persist book: ${book.url}" } - try { - book.metadata = bookParser.parse(book) - } catch (ex: UnsupportedMediaTypeException) { - logger.info(ex) { "Unsupported media type: ${ex.mediaType}" } - book.metadata = BookMetadata(status = Status.UNSUPPORTED, mediaType = ex.mediaType) - } catch (ex: Exception) { - logger.error(ex) { "Error while parsing" } - book.metadata = BookMetadata(status = Status.ERROR) - } - bookRepository.save(book) + measureTimeMillis { + try { + book.metadata = bookParser.parse(book) + } catch (ex: UnsupportedMediaTypeException) { + logger.info(ex) { "Unsupported media type: ${ex.mediaType}" } + book.metadata = BookMetadata(status = Status.UNSUPPORTED, mediaType = ex.mediaType) + } catch (ex: Exception) { + logger.error(ex) { "Error while parsing" } + book.metadata = BookMetadata(status = Status.ERROR) + } + bookRepository.save(book) + }.also { logger.info { "Parsing finished in ${DurationFormatUtils.formatDurationHMS(it)}" } } } } \ No newline at end of file diff --git a/komga/src/main/kotlin/org/gotson/komga/domain/service/BookParser.kt b/komga/src/main/kotlin/org/gotson/komga/domain/service/BookParser.kt index f79a5605..af8a9ce9 100644 --- a/komga/src/main/kotlin/org/gotson/komga/domain/service/BookParser.kt +++ b/komga/src/main/kotlin/org/gotson/komga/domain/service/BookParser.kt @@ -40,6 +40,7 @@ class BookParser( val pages = supportedMediaTypes.getValue(mediaType).getPagesList(book.path()) logger.info { "Book has ${pages.size} pages" } + logger.info { "Trying to generate cover for book: ${book.url}" } val thumbnail = try { ByteArrayOutputStream().use { supportedMediaTypes.getValue(mediaType).getPageStream(book.path(), pages.first().fileName).let { cover -> diff --git a/komga/src/main/kotlin/org/gotson/komga/domain/service/FileSystemScanner.kt b/komga/src/main/kotlin/org/gotson/komga/domain/service/FileSystemScanner.kt index e85233e6..9540fa17 100644 --- a/komga/src/main/kotlin/org/gotson/komga/domain/service/FileSystemScanner.kt +++ b/komga/src/main/kotlin/org/gotson/komga/domain/service/FileSystemScanner.kt @@ -3,6 +3,7 @@ package org.gotson.komga.domain.service import mu.KotlinLogging import net.greypanther.natsort.CaseInsensitiveSimpleNaturalComparator import org.apache.commons.io.FilenameUtils +import org.apache.commons.lang3.time.DurationFormatUtils import org.gotson.komga.domain.model.Book import org.gotson.komga.domain.model.Serie import org.springframework.stereotype.Service @@ -60,7 +61,7 @@ class FileSystemScanner { }.toList() }.also { val countOfBooks = scannedSeries.sumBy { it.books.size } - logger.info { "Scanned ${scannedSeries.size} series and $countOfBooks books in $it ms" } + logger.info { "Scanned ${scannedSeries.size} series and $countOfBooks books in ${DurationFormatUtils.formatDurationHMS(it)}" } } return scannedSeries diff --git a/komga/src/main/kotlin/org/gotson/komga/domain/service/LibraryManager.kt b/komga/src/main/kotlin/org/gotson/komga/domain/service/LibraryManager.kt index 7c5ef6f9..40e40434 100644 --- a/komga/src/main/kotlin/org/gotson/komga/domain/service/LibraryManager.kt +++ b/komga/src/main/kotlin/org/gotson/komga/domain/service/LibraryManager.kt @@ -1,6 +1,7 @@ package org.gotson.komga.domain.service import mu.KotlinLogging +import org.apache.commons.lang3.time.DurationFormatUtils import org.gotson.komga.domain.model.Library import org.gotson.komga.domain.model.Status import org.gotson.komga.domain.persistence.BookRepository @@ -75,15 +76,14 @@ class LibraryManager( } } } - }.also { logger.info { "Library update finished in $it ms" } } + }.also { logger.info { "Library update finished in ${DurationFormatUtils.formatDurationHMS(it)}" } } } - @Transactional fun parseUnparsedBooks() { logger.info { "Parsing all books in status: unkown" } val booksToParse = bookRepository.findAllByMetadataStatus(Status.UNKNOWN) measureTimeMillis { booksToParse.forEach { bookManager.parseAndPersist(it) } - }.also { logger.info { "Parsed ${booksToParse.size} books in $it ms" } } + }.also { logger.info { "Parsed ${booksToParse.size} books in ${DurationFormatUtils.formatDurationHMS(it)}" } } } } \ No newline at end of file