feat(opds): support lastRead attribute on OPSD PSE links

part of OPDS PSE 1.1
This commit is contained in:
Gauthier Roebroeck 2021-12-07 14:54:24 +08:00
parent e55f493632
commit ce51373344
2 changed files with 13 additions and 12 deletions

View file

@ -582,6 +582,14 @@ class OpdsController(
}
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) + " - " } ?: ""
return OpdsEntryAcquisition(
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()),
OpdsLinkImage(media.pages[0].mediaType, uriBuilder("books/$id/pages/1").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 =
OpdsEntryNavigation(
title = name,

View file

@ -61,7 +61,10 @@ class OpdsLinkPageStreaming(
href: String,
@get:JacksonXmlProperty(isAttribute = true, namespace = OPDS_PSE)
val count: Int
val count: Int,
@get:JacksonXmlProperty(isAttribute = true, namespace = OPDS_PSE)
val lastRead: Int?,
) : OpdsLink(
type = mediaType,
rel = "http://vaemendis.net/opds-pse/stream",