OPDS: Offer CBZ in older mimetype (#1731)

* OPDS: Offer CBZ in older mimetype

* OPDS: Include length when offering CBZ download

* Disable compression on CBZ endpoint

Zipping a zip

* CBZ download match content type of OPDS

* Move compression disable

* Introduce setting for configuring CBZ mimetype

* Document new option

[no-ci]

* Update server/src/main/kotlin/suwayomi/tachidesk/opds/impl/OpdsEntryBuilder.kt

Co-authored-by: Mitchell Syer <Syer10@users.noreply.github.com>

---------

Co-authored-by: Mitchell Syer <Syer10@users.noreply.github.com>
This commit is contained in:
Constantin Piber
2025-10-25 00:36:59 +02:00
committed by GitHub
parent 68492bf591
commit bc6e28cabe
8 changed files with 47 additions and 16 deletions

View File

@@ -40,5 +40,4 @@ object OpdsConstants {
const val TYPE_ATOM_XML_ENTRY_PROFILE_OPDS = "application/atom+xml;type=entry;profile=opds-catalog"
const val TYPE_OPENSEARCH_DESCRIPTION = "application/opensearchdescription+xml"
const val TYPE_IMAGE_JPEG = "image/jpeg"
const val TYPE_CBZ = "application/vnd.comicbook+zip"
}

View File

@@ -336,6 +336,14 @@ object OpdsEntryBuilder {
}
val entryTitle = "$titlePrefix ${chapter.name}"
val cbzFileSize =
if (chapter.downloaded) {
withContext(Dispatchers.IO) {
runCatching { ChapterDownloadHelper.getArchiveStreamWithSize(manga.id, chapter.id).second }.getOrNull()
}
} else {
null
}
val links = mutableListOf<OpdsLinkXml>()
chapter.url?.let {
@@ -348,8 +356,9 @@ object OpdsEntryBuilder {
OpdsLinkXml(
OpdsConstants.LINK_REL_ACQUISITION_OPEN_ACCESS,
"/api/v1/chapter/${chapter.id}/download?markAsRead=${serverConfig.opdsMarkAsReadOnDownload.value}",
OpdsConstants.TYPE_CBZ,
serverConfig.opdsCbzMimetype.value.mediaType,
MR.strings.opds_linktitle_download_cbz.localized(locale),
length = cbzFileSize,
),
)
}
@@ -411,15 +420,6 @@ object OpdsEntryBuilder {
)
}
val cbzFileSize =
if (chapter.downloaded) {
withContext(Dispatchers.IO) {
runCatching { ChapterDownloadHelper.getArchiveStreamWithSize(manga.id, chapter.id).second }.getOrNull()
}
} else {
null
}
return OpdsEntryXml(
id = "urn:suwayomi:chapter:${chapter.id}:metadata$idSuffix",
title = entryTitle,

View File

@@ -19,6 +19,8 @@ data class OpdsLinkXml(
// Thread count
@XmlSerialName("count", OpdsConstants.NS_THREAD, "thr")
val thrCount: Int? = null,
// link download size in bytes
val length: Long? = null,
// OPDS-PSE attributes
@XmlSerialName("count", OpdsConstants.NS_PSE, "pse")
val pseCount: Int? = null,