refactor: add MediaType enum

This commit is contained in:
Gauthier Roebroeck 2022-02-04 15:25:48 +08:00
parent 27d5594571
commit 368d0d5147
9 changed files with 30 additions and 16 deletions

View file

@ -0,0 +1,9 @@
package org.gotson.komga.domain.model
enum class MediaType(val value: String, val fileExtension: String) {
ZIP("application/zip", "cbz"),
RAR_GENERIC("application/x-rar-compressed", "cbr"),
RAR_4("application/x-rar-compressed; version=4", "cbr"),
EPUB("application/epub+zip", "epub"),
PDF("application/pdf", "pdf"),
}

View file

@ -10,6 +10,7 @@ import org.gotson.komga.domain.model.BookWithMedia
import org.gotson.komga.domain.model.Library
import org.gotson.komga.domain.model.Media
import org.gotson.komga.domain.model.MediaNotReadyException
import org.gotson.komga.domain.model.MediaType
import org.gotson.komga.domain.model.MediaUnsupportedException
import org.gotson.komga.domain.persistence.BookRepository
import org.gotson.komga.domain.persistence.LibraryRepository
@ -41,14 +42,11 @@ class BookConverter(
private val transactionTemplate: TransactionTemplate,
) {
private val convertibleTypes = listOf("application/x-rar-compressed; version=4")
private val convertibleTypes = listOf(MediaType.RAR_4.value)
private val mediaTypeToExtension = mapOf(
"application/x-rar-compressed; version=4" to "cbr",
"application/zip" to "cbz",
"application/epub+zip" to "epub",
"application/pdf" to "pdf",
)
private val mediaTypeToExtension =
listOf(MediaType.RAR_4, MediaType.ZIP, MediaType.PDF, MediaType.EPUB)
.associate { it.value to it.fileExtension }
private val failedConversions = mutableListOf<String>()
private val skippedRepairs = mutableListOf<String>()
@ -107,7 +105,7 @@ class BookConverter(
convertedMedia.status != Media.Status.READY
-> throw BookConversionException("Converted file could not be analyzed, aborting conversion")
convertedMedia.mediaType != "application/zip"
convertedMedia.mediaType != MediaType.ZIP.value
-> throw BookConversionException("Converted file is not a zip file, aborting conversion")
!convertedMedia.pages.map { FilenameUtils.getName(it.fileName) to it.mediaType }

View file

@ -4,6 +4,7 @@ import mu.KotlinLogging
import org.apache.commons.compress.archivers.ArchiveEntry
import org.apache.commons.compress.archivers.zip.ZipFile
import org.gotson.komga.domain.model.MediaContainerEntry
import org.gotson.komga.domain.model.MediaType
import org.gotson.komga.domain.model.MediaUnsupportedException
import org.gotson.komga.infrastructure.image.ImageAnalyzer
import org.jsoup.Jsoup
@ -21,7 +22,7 @@ class EpubExtractor(
private val imageAnalyzer: ImageAnalyzer,
) : MediaContainerExtractor {
override fun mediaTypes(): List<String> = listOf("application/epub+zip")
override fun mediaTypes(): List<String> = listOf(MediaType.EPUB.value)
override fun getEntries(path: Path, analyzeDimensions: Boolean): List<MediaContainerEntry> {
ZipFile(path.toFile()).use { zip ->

View file

@ -9,6 +9,7 @@ import org.apache.pdfbox.rendering.ImageType
import org.apache.pdfbox.rendering.PDFRenderer
import org.gotson.komga.domain.model.Dimension
import org.gotson.komga.domain.model.MediaContainerEntry
import org.gotson.komga.domain.model.MediaType
import org.springframework.stereotype.Service
import java.io.ByteArrayOutputStream
import java.nio.file.Path
@ -31,7 +32,7 @@ class PdfExtractor : MediaContainerExtractor {
.evictionListener { _: Path?, pdf: PDDocument?, _ -> pdf?.close() }
.build<Path, PDDocument>()
override fun mediaTypes(): List<String> = listOf("application/pdf")
override fun mediaTypes(): List<String> = listOf(MediaType.PDF.value)
override fun getEntries(path: Path, analyzeDimensions: Boolean): List<MediaContainerEntry> =
PDDocument.load(path.toFile(), MemoryUsageSetting.setupTempFileOnly()).use { pdf ->

View file

@ -4,6 +4,7 @@ import com.github.junrar.Archive
import mu.KotlinLogging
import net.greypanther.natsort.CaseInsensitiveSimpleNaturalComparator
import org.gotson.komga.domain.model.MediaContainerEntry
import org.gotson.komga.domain.model.MediaType
import org.gotson.komga.domain.model.MediaUnsupportedException
import org.gotson.komga.infrastructure.image.ImageAnalyzer
import org.springframework.stereotype.Service
@ -19,7 +20,7 @@ class RarExtractor(
private val natSortComparator: Comparator<String> = CaseInsensitiveSimpleNaturalComparator.getInstance()
override fun mediaTypes(): List<String> = listOf("application/x-rar-compressed", "application/x-rar-compressed; version=4")
override fun mediaTypes(): List<String> = listOf(MediaType.RAR_GENERIC.value, MediaType.RAR_4.value)
override fun getEntries(path: Path, analyzeDimensions: Boolean): List<MediaContainerEntry> =
Archive(path.toFile()).use { rar ->

View file

@ -6,6 +6,7 @@ import net.greypanther.natsort.CaseInsensitiveSimpleNaturalComparator
import org.apache.commons.compress.archivers.ArchiveEntry
import org.apache.commons.compress.archivers.zip.ZipFile
import org.gotson.komga.domain.model.MediaContainerEntry
import org.gotson.komga.domain.model.MediaType
import org.gotson.komga.infrastructure.image.ImageAnalyzer
import org.springframework.stereotype.Service
import java.nio.file.Path
@ -27,7 +28,7 @@ class ZipExtractor(
private val natSortComparator: Comparator<String> = CaseInsensitiveSimpleNaturalComparator.getInstance()
override fun mediaTypes(): List<String> = listOf("application/zip")
override fun mediaTypes(): List<String> = listOf(MediaType.ZIP.value)
override fun getEntries(path: Path, analyzeDimensions: Boolean): List<MediaContainerEntry> =
ZipFile(path.toFile()).use { zip ->

View file

@ -5,6 +5,7 @@ import org.gotson.komga.domain.model.Author
import org.gotson.komga.domain.model.BookMetadataPatch
import org.gotson.komga.domain.model.BookMetadataPatchCapability
import org.gotson.komga.domain.model.BookWithMedia
import org.gotson.komga.domain.model.MediaType
import org.gotson.komga.domain.model.SeriesMetadata
import org.gotson.komga.domain.model.SeriesMetadataPatch
import org.gotson.komga.infrastructure.mediacontainer.EpubExtractor
@ -44,7 +45,7 @@ class EpubMetadataProvider(
)
override fun getBookMetadataFromBook(book: BookWithMedia): BookMetadataPatch? {
if (book.media.mediaType != "application/epub+zip") return null
if (book.media.mediaType != MediaType.EPUB.value) return null
epubExtractor.getPackageFile(book.book.path)?.let { packageFile ->
val opf = Jsoup.parse(packageFile, "", Parser.xmlParser())
@ -82,7 +83,7 @@ class EpubMetadataProvider(
}
override fun getSeriesMetadataFromBook(book: BookWithMedia): SeriesMetadataPatch? {
if (book.media.mediaType != "application/epub+zip") return null
if (book.media.mediaType != MediaType.EPUB.value) return null
epubExtractor.getPackageFile(book.book.path)?.let { packageFile ->
val opf = Jsoup.parse(packageFile, "", Parser.xmlParser())

View file

@ -14,6 +14,7 @@ import org.gotson.komga.domain.model.BookSearchWithReadProgress
import org.gotson.komga.domain.model.DomainEvent
import org.gotson.komga.domain.model.DuplicateNameException
import org.gotson.komga.domain.model.Media
import org.gotson.komga.domain.model.MediaType.ZIP
import org.gotson.komga.domain.model.ROLE_ADMIN
import org.gotson.komga.domain.model.ROLE_FILE_DOWNLOAD
import org.gotson.komga.domain.model.ReadList
@ -445,7 +446,7 @@ class ReadListController(
.build()
},
)
.contentType(MediaType.parseMediaType("application/zip"))
.contentType(MediaType.parseMediaType(ZIP.value))
.body(streamingResponse)
} ?: throw ResponseStatusException(HttpStatus.NOT_FOUND)
}

View file

@ -20,6 +20,7 @@ import org.gotson.komga.domain.model.BookSearchWithReadProgress
import org.gotson.komga.domain.model.DomainEvent
import org.gotson.komga.domain.model.MarkSelectedPreference
import org.gotson.komga.domain.model.Media
import org.gotson.komga.domain.model.MediaType.ZIP
import org.gotson.komga.domain.model.ROLE_ADMIN
import org.gotson.komga.domain.model.ROLE_FILE_DOWNLOAD
import org.gotson.komga.domain.model.ReadStatus
@ -684,7 +685,7 @@ class SeriesController(
.build()
},
)
.contentType(MediaType.parseMediaType("application/zip"))
.contentType(MediaType.parseMediaType(ZIP.value))
.body(streamingResponse)
}