mirror of
https://github.com/gotson/komga.git
synced 2026-05-08 12:35:30 +02:00
refactor: add MediaType enum
This commit is contained in:
parent
27d5594571
commit
368d0d5147
9 changed files with 30 additions and 16 deletions
|
|
@ -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"),
|
||||
}
|
||||
|
|
@ -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 }
|
||||
|
|
|
|||
|
|
@ -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 ->
|
||||
|
|
|
|||
|
|
@ -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 ->
|
||||
|
|
|
|||
|
|
@ -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 ->
|
||||
|
|
|
|||
|
|
@ -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 ->
|
||||
|
|
|
|||
|
|
@ -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())
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue