Report Kavita extension client info as OPDS reader
Some checks failed
CI / Prepare job (push) Has been cancelled
CI / Build extensions (${{ matrix.chunk.number }}) (push) Has been cancelled
CI / Publish extension repo (push) Has been cancelled
Create Release on Merge / release (push) Has been cancelled
Lock threads / lock (push) Has been cancelled

This commit is contained in:
2026-05-24 00:34:37 +09:00
parent d8937783c5
commit 0f6e579b0b
2 changed files with 12 additions and 10 deletions

View File

@@ -2,7 +2,7 @@ ext {
kmkVersionCode = 1 kmkVersionCode = 1
extName = 'Kavita' extName = 'Kavita'
extClass = '.KavitaFactory' extClass = '.KavitaFactory'
extVersionCode = 31 extVersionCode = 32
isNsfw = false isNsfw = false
} }

View File

@@ -81,7 +81,6 @@ import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
import uy.kohesive.injekt.injectLazy import uy.kohesive.injekt.injectLazy
import java.io.IOException import java.io.IOException
import java.net.URLEncoder
import java.security.MessageDigest import java.security.MessageDigest
import java.util.Calendar import java.util.Calendar
import java.util.Locale import java.util.Locale
@@ -1815,9 +1814,16 @@ class Kavita(private val suffix: String = "") : ConfigurableSource, UnmeteredSou
.equals("true", ignoreCase = true) .equals("true", ignoreCase = true)
private fun readerImageUrl(chapterId: Any, page: Int, extractPdf: Boolean): String = private fun readerImageUrl(chapterId: Any, page: Int, extractPdf: Boolean): String =
"$apiUrl/Reader/image?chapterId=$chapterId&page=$page&extractPdf=$extractPdf&saveProgress=true&apiKey=$apiKey&kavitaClient=${urlEncode(kavitaClientHeader())}&deviceId=${urlEncode(deviceFingerprint())}" "$apiUrl/Reader/image".toHttpUrlOrNull()!!.newBuilder()
.addQueryParameter("chapterId", chapterId.toString())
private fun urlEncode(value: String): String = URLEncoder.encode(value, "UTF-8") .addQueryParameter("page", page.toString())
.addQueryParameter("extractPdf", extractPdf.toString())
.addQueryParameter("saveProgress", "true")
.addQueryParameter("apiKey", apiKey)
.addQueryParameter("kavitaClient", kavitaClientHeader())
.addQueryParameter("deviceId", deviceFingerprint())
.build()
.toString()
private fun readerPage(index: Int, chapterId: Any, page: Int = index, extractPdf: Boolean = false): Page { private fun readerPage(index: Int, chapterId: Any, page: Int = index, extractPdf: Boolean = false): Page {
val imageUrl = readerImageUrl(chapterId, page, extractPdf) val imageUrl = readerImageUrl(chapterId, page, extractPdf)
@@ -2109,17 +2115,13 @@ class Kavita(private val suffix: String = "") : ConfigurableSource, UnmeteredSou
private fun kavitaClientHeader(): String { private fun kavitaClientHeader(): String {
val resources = application.resources val resources = application.resources
val configuration = resources.configuration val configuration = resources.configuration
val metrics = resources.displayMetrics
val screenWidth = metrics.widthPixels.coerceAtLeast(0)
val screenHeight = metrics.heightPixels.coerceAtLeast(0)
val smallestWidthDp = configuration.smallestScreenWidthDp val smallestWidthDp = configuration.smallestScreenWidthDp
val deviceType = when { val deviceType = when {
smallestWidthDp >= 600 -> "Tablet" smallestWidthDp >= 600 -> "Tablet"
else -> "Mobile" else -> "Mobile"
} }
val orientation = if (screenWidth > screenHeight) "landscape" else "portrait"
return "web-app/${AppInfo.getVersionName()} (Kavita Extension/${AppInfo.getVersionName()}; Android; $deviceType; ${screenWidth}x$screenHeight; $orientation)" return "opds-client/${AppInfo.getVersionName()} (Kavita Extension; Android; $deviceType)"
} }
private fun deviceFingerprint(): String { private fun deviceFingerprint(): String {