diff --git a/komga/src/main/kotlin/org/gotson/komga/domain/model/Book.kt b/komga/src/main/kotlin/org/gotson/komga/domain/model/Book.kt index 83fd91832..bae427df5 100644 --- a/komga/src/main/kotlin/org/gotson/komga/domain/model/Book.kt +++ b/komga/src/main/kotlin/org/gotson/komga/domain/model/Book.kt @@ -1,5 +1,6 @@ package org.gotson.komga.domain.model +import org.apache.commons.io.FilenameUtils import java.net.URL import java.nio.file.Path import java.nio.file.Paths @@ -48,7 +49,9 @@ class Book( field = value } + fun filename(): String = FilenameUtils.getName(url.toString()) + + fun path(): Path = Paths.get(this.url.toURI()) + override fun toString(): String = url.toURI().path } - -fun Book.path(): Path = Paths.get(this.url.toURI()) diff --git a/komga/src/main/kotlin/org/gotson/komga/domain/model/Library.kt b/komga/src/main/kotlin/org/gotson/komga/domain/model/Library.kt index d606afdef..d31929460 100644 --- a/komga/src/main/kotlin/org/gotson/komga/domain/model/Library.kt +++ b/komga/src/main/kotlin/org/gotson/komga/domain/model/Library.kt @@ -27,6 +27,6 @@ class Library( var id: Long = 0 constructor(name: String, root: String) : this(name, Paths.get(root).toUri().toURL()) -} -fun Library.path(): Path = Paths.get(this.root.toURI()) \ No newline at end of file + fun path(): Path = Paths.get(this.root.toURI()) +} 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 d4ebe0393..69823c03c 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 @@ -8,7 +8,6 @@ import org.gotson.komga.domain.model.BookMetadata import org.gotson.komga.domain.model.MetadataNotReadyException import org.gotson.komga.domain.model.Status import org.gotson.komga.domain.model.UnsupportedMediaTypeException -import org.gotson.komga.domain.model.path import org.gotson.komga.infrastructure.archive.ContentDetector import org.gotson.komga.infrastructure.archive.PdfExtractor import org.gotson.komga.infrastructure.archive.RarExtractor diff --git a/komga/src/main/kotlin/org/gotson/komga/domain/service/LibraryLifecycle.kt b/komga/src/main/kotlin/org/gotson/komga/domain/service/LibraryLifecycle.kt index f9463ab0e..be747df41 100644 --- a/komga/src/main/kotlin/org/gotson/komga/domain/service/LibraryLifecycle.kt +++ b/komga/src/main/kotlin/org/gotson/komga/domain/service/LibraryLifecycle.kt @@ -5,7 +5,6 @@ import org.gotson.komga.domain.model.DirectoryNotFoundException import org.gotson.komga.domain.model.DuplicateNameException import org.gotson.komga.domain.model.Library import org.gotson.komga.domain.model.PathContainedInPath -import org.gotson.komga.domain.model.path import org.gotson.komga.domain.persistence.LibraryRepository import org.gotson.komga.domain.persistence.SeriesRepository import org.springframework.stereotype.Service diff --git a/komga/src/main/kotlin/org/gotson/komga/interfaces/web/opds/OpdsController.kt b/komga/src/main/kotlin/org/gotson/komga/interfaces/web/opds/OpdsController.kt index c2d243c9e..f6f8c3dc0 100644 --- a/komga/src/main/kotlin/org/gotson/komga/interfaces/web/opds/OpdsController.kt +++ b/komga/src/main/kotlin/org/gotson/komga/interfaces/web/opds/OpdsController.kt @@ -217,7 +217,7 @@ class OpdsController( links = listOf( OpdsLinkImageThumbnail("image/jpeg", "/api/v1/series/${series.id}/books/$id/thumbnail"), OpdsLinkImage(metadata.pages[0].mediaType, "/api/v1/series/${series.id}/books/$id/pages/1"), - OpdsLinkFileAcquisition(metadata.mediaType, "/api/v1/series/${series.id}/books/$id/file"), + OpdsLinkFileAcquisition(metadata.mediaType, "/api/v1/series/${series.id}/books/$id/file/${filename()}"), OpdsLinkPageStreaming("image/jpeg", "/api/v1/series/${series.id}/books/$id/pages/{pageNumber}?convert=jpeg&zero_based=true", metadata.pages.size) ) ) diff --git a/komga/src/main/kotlin/org/gotson/komga/interfaces/web/rest/SeriesController.kt b/komga/src/main/kotlin/org/gotson/komga/interfaces/web/rest/SeriesController.kt index f9ed9610e..55cb854f0 100644 --- a/komga/src/main/kotlin/org/gotson/komga/interfaces/web/rest/SeriesController.kt +++ b/komga/src/main/kotlin/org/gotson/komga/interfaces/web/rest/SeriesController.kt @@ -4,7 +4,6 @@ import com.fasterxml.jackson.annotation.JsonFormat import com.github.klinq.jpaspec.`in` import com.github.klinq.jpaspec.likeLower import mu.KotlinLogging -import org.apache.commons.io.FilenameUtils import org.gotson.komga.domain.model.Book import org.gotson.komga.domain.model.MetadataNotReadyException import org.gotson.komga.domain.model.Series @@ -147,7 +146,10 @@ class SeriesController( } ?: throw ResponseStatusException(HttpStatus.NOT_FOUND) } - @GetMapping("{seriesId}/books/{bookId}/file") + @GetMapping(value = [ + "{seriesId}/books/{bookId}/file", + "{seriesId}/books/{bookId}/file/*" + ]) fun getBookFile( @PathVariable seriesId: Long, @PathVariable bookId: Long @@ -158,7 +160,7 @@ class SeriesController( ResponseEntity.ok() .headers(HttpHeaders().apply { contentDisposition = ContentDisposition.builder("attachment") - .filename(FilenameUtils.getName(book.url.toString())) + .filename(book.filename()) .build() }) .contentType(getMediaTypeOrDefault(book.metadata.mediaType)) diff --git a/komga/src/test/kotlin/org/gotson/komga/domain/service/BookParserTest.kt b/komga/src/test/kotlin/org/gotson/komga/domain/service/BookParserTest.kt index 1f8f145da..369102b69 100644 --- a/komga/src/test/kotlin/org/gotson/komga/domain/service/BookParserTest.kt +++ b/komga/src/test/kotlin/org/gotson/komga/domain/service/BookParserTest.kt @@ -6,7 +6,6 @@ import io.mockk.slot import org.assertj.core.api.Assertions.assertThat import org.gotson.komga.domain.model.makeBook import org.gotson.komga.domain.model.makeBookPage -import org.gotson.komga.domain.model.path import org.gotson.komga.infrastructure.archive.ContentDetector import org.gotson.komga.infrastructure.archive.PdfExtractor import org.gotson.komga.infrastructure.archive.RarExtractor @@ -38,4 +37,4 @@ class BookParserTest { // then assertThat(thumbnailFile.captured).isEqualTo("01") } -} \ No newline at end of file +}