mirror of
https://github.com/gotson/komga.git
synced 2025-12-25 01:42:44 +01:00
add full filename in OPDS entry acquisition link, which should help incorrectly implemented OPDS clients to see and download files properly
This commit is contained in:
parent
3a40429416
commit
0e5424de6a
7 changed files with 14 additions and 12 deletions
|
|
@ -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())
|
||||
|
|
|
|||
|
|
@ -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())
|
||||
fun path(): Path = Paths.get(this.root.toURI())
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
)
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue