mirror of
https://github.com/gotson/komga.git
synced 2026-05-08 04:22:28 +02:00
feat(opds): support lastRead attribute on OPSD PSE links
part of OPDS PSE 1.1
This commit is contained in:
parent
e55f493632
commit
ce51373344
2 changed files with 13 additions and 12 deletions
|
|
@ -582,6 +582,14 @@ class OpdsController(
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun BookDto.toOpdsEntry(media: Media, prependNumber: Boolean, prepend: Int? = null): OpdsEntryAcquisition {
|
private fun BookDto.toOpdsEntry(media: Media, prependNumber: Boolean, prepend: Int? = null): OpdsEntryAcquisition {
|
||||||
|
val mediaTypes = media.pages.map { it.mediaType }.distinct()
|
||||||
|
|
||||||
|
val opdsLinkPageStreaming = if (mediaTypes.size == 1 && mediaTypes.first() in opdsPseSupportedFormats) {
|
||||||
|
OpdsLinkPageStreaming(mediaTypes.first(), "${routeBase}books/$id/pages/{pageNumber}?zero_based=true", media.pages.size, readProgress?.page)
|
||||||
|
} else {
|
||||||
|
OpdsLinkPageStreaming("image/jpeg", "${routeBase}books/$id/pages/{pageNumber}?convert=jpeg&zero_based=true", media.pages.size, readProgress?.page)
|
||||||
|
}
|
||||||
|
|
||||||
val pre = prepend?.let { decimalFormat.format(it) + " - " } ?: ""
|
val pre = prepend?.let { decimalFormat.format(it) + " - " } ?: ""
|
||||||
return OpdsEntryAcquisition(
|
return OpdsEntryAcquisition(
|
||||||
title = "$pre${if (prependNumber) "${decimalFormat.format(metadata.numberSort)} - " else ""}${metadata.title}",
|
title = "$pre${if (prependNumber) "${decimalFormat.format(metadata.numberSort)} - " else ""}${metadata.title}",
|
||||||
|
|
@ -598,21 +606,11 @@ class OpdsController(
|
||||||
OpdsLinkImageThumbnail("image/jpeg", uriBuilder("books/$id/thumbnail").toUriString()),
|
OpdsLinkImageThumbnail("image/jpeg", uriBuilder("books/$id/thumbnail").toUriString()),
|
||||||
OpdsLinkImage(media.pages[0].mediaType, uriBuilder("books/$id/pages/1").toUriString()),
|
OpdsLinkImage(media.pages[0].mediaType, uriBuilder("books/$id/pages/1").toUriString()),
|
||||||
OpdsLinkFileAcquisition(media.mediaType, uriBuilder("books/$id/file/${sanitize(FilenameUtils.getName(url))}").toUriString()),
|
OpdsLinkFileAcquisition(media.mediaType, uriBuilder("books/$id/file/${sanitize(FilenameUtils.getName(url))}").toUriString()),
|
||||||
media.toOpdsLinkPageStreaming(id),
|
opdsLinkPageStreaming,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun Media.toOpdsLinkPageStreaming(bookId: String): OpdsLinkPageStreaming {
|
|
||||||
val mediaTypes = pages.map { it.mediaType }.distinct()
|
|
||||||
|
|
||||||
return if (mediaTypes.size == 1 && mediaTypes.first() in opdsPseSupportedFormats) {
|
|
||||||
OpdsLinkPageStreaming(mediaTypes.first(), "${routeBase}books/$bookId/pages/{pageNumber}?zero_based=true", pages.size)
|
|
||||||
} else {
|
|
||||||
OpdsLinkPageStreaming("image/jpeg", "${routeBase}books/$bookId/pages/{pageNumber}?convert=jpeg&zero_based=true", pages.size)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun Library.toOpdsEntry(): OpdsEntryNavigation =
|
private fun Library.toOpdsEntry(): OpdsEntryNavigation =
|
||||||
OpdsEntryNavigation(
|
OpdsEntryNavigation(
|
||||||
title = name,
|
title = name,
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,10 @@ class OpdsLinkPageStreaming(
|
||||||
href: String,
|
href: String,
|
||||||
|
|
||||||
@get:JacksonXmlProperty(isAttribute = true, namespace = OPDS_PSE)
|
@get:JacksonXmlProperty(isAttribute = true, namespace = OPDS_PSE)
|
||||||
val count: Int
|
val count: Int,
|
||||||
|
|
||||||
|
@get:JacksonXmlProperty(isAttribute = true, namespace = OPDS_PSE)
|
||||||
|
val lastRead: Int?,
|
||||||
) : OpdsLink(
|
) : OpdsLink(
|
||||||
type = mediaType,
|
type = mediaType,
|
||||||
rel = "http://vaemendis.net/opds-pse/stream",
|
rel = "http://vaemendis.net/opds-pse/stream",
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue