diff --git a/src/all/bilibili/AndroidManifest.xml b/src/all/bilibili/AndroidManifest.xml
index b7d48321f..3ae58c91b 100644
--- a/src/all/bilibili/AndroidManifest.xml
+++ b/src/all/bilibili/AndroidManifest.xml
@@ -4,7 +4,7 @@
@@ -33,6 +33,16 @@
android:host="m.bilibilicomics.com"
android:pathPattern="/detail/mc..*"
android:scheme="https" />
+
+
+
+
diff --git a/src/all/bilibili/build.gradle b/src/all/bilibili/build.gradle
index e79d9d19c..8a15a3993 100644
--- a/src/all/bilibili/build.gradle
+++ b/src/all/bilibili/build.gradle
@@ -6,8 +6,7 @@ ext {
extName = 'BILIBILI'
pkgNameSuffix = 'all.bilibili'
extClass = '.BilibiliFactory'
- extVersionCode = 1
- isNsfw = true
+ extVersionCode = 2
}
dependencies {
diff --git a/src/all/bilibili/src/eu/kanade/tachiyomi/extension/all/bilibili/Bilibili.kt b/src/all/bilibili/src/eu/kanade/tachiyomi/extension/all/bilibili/Bilibili.kt
index 0d12c498a..130ec7378 100644
--- a/src/all/bilibili/src/eu/kanade/tachiyomi/extension/all/bilibili/Bilibili.kt
+++ b/src/all/bilibili/src/eu/kanade/tachiyomi/extension/all/bilibili/Bilibili.kt
@@ -79,9 +79,7 @@ abstract class Bilibili(
protected open val resolutionPrefTitle: String = "Chapter image resolution"
- protected open val resolutionPrefEntries: Array = arrayOf("Raw", "HD", "SD")
-
- protected open val resolutionPrefEntryValues: Array = arrayOf("@1200w.jpg", "@800w.jpg", "@600w_50q.jpg")
+ protected open val imagePrefTitle: String = "Chapter image format"
private val preferences: SharedPreferences by lazy {
Injekt.get().getSharedPreferences("source_$id", 0x0000)
@@ -92,6 +90,9 @@ abstract class Bilibili(
private val chapterImageResolution: String
get() = preferences.getString("${RESOLUTION_PREF_KEY}_$lang", RESOLUTION_PREF_DEFAULT_VALUE)!!
+ private val chapterImageFormat: String
+ get() = preferences.getString("${IMAGE_FORMAT_PREF_KEY}_$lang", IMAGE_FORMAT_PREF_DEFAULT_VALUE)!!
+
override fun popularMangaRequest(page: Int): Request {
val requestPayload = buildJsonObject {
put("area_id", -1)
@@ -376,8 +377,10 @@ abstract class Bilibili(
}
val imageQuality = chapterImageResolution
+ val imageFormat = chapterImageFormat
- val imageTokenRequest = imageTokenRequest(result.data!!.images.map { it.path + imageQuality })
+ val imageUrls = result.data!!.images.map { "${it.path}@$imageQuality.$imageFormat" }
+ val imageTokenRequest = imageTokenRequest(imageUrls)
val imageTokenResponse = client.newCall(imageTokenRequest).execute()
val imageTokenResult = imageTokenResponse.parseAs>()
@@ -409,8 +412,8 @@ abstract class Bilibili(
val resolutionPref = ListPreference(screen.context).apply {
key = "${RESOLUTION_PREF_KEY}_$lang"
title = resolutionPrefTitle
- entries = resolutionPrefEntries
- entryValues = resolutionPrefEntryValues
+ entries = RESOLUTION_PREF_ENTRIES
+ entryValues = RESOLUTION_PREF_ENTRY_VALUES
setDefaultValue(RESOLUTION_PREF_DEFAULT_VALUE)
summary = "%s"
@@ -425,7 +428,27 @@ abstract class Bilibili(
}
}
+ val imageFormatPref = ListPreference(screen.context).apply {
+ key = "${IMAGE_FORMAT_PREF_KEY}_$lang"
+ title = imagePrefTitle
+ entries = IMAGE_FORMAT_PREF_ENTRIES
+ entryValues = IMAGE_FORMAT_PREF_ENTRY_VALUES
+ setDefaultValue(IMAGE_FORMAT_PREF_DEFAULT_VALUE)
+ summary = "%s"
+
+ setOnPreferenceChangeListener { _, newValue ->
+ val selected = newValue as String
+ val index = findIndexOfValue(selected)
+ val entry = entryValues[index] as String
+
+ preferences.edit()
+ .putString("${IMAGE_FORMAT_PREF_KEY}_$lang", entry)
+ .commit()
+ }
+ }
+
screen.addPreference(resolutionPref)
+ screen.addPreference(imageFormatPref)
}
abstract fun getAllGenres(): Array
@@ -504,8 +527,15 @@ abstract class Bilibili(
const val PREFIX_ID_SEARCH = "id:"
private val ID_SEARCH_PATTERN = "^id:(mc)?(\\d+)$".toRegex()
- private const val RESOLUTION_PREF_KEY = "imageResolution"
- private const val RESOLUTION_PREF_DEFAULT_VALUE = ""
+ private const val RESOLUTION_PREF_KEY = "chapterImageResolution"
+ private val RESOLUTION_PREF_ENTRIES = arrayOf("Raw", "HD", "SD")
+ private val RESOLUTION_PREF_ENTRY_VALUES = arrayOf("1200w", "800w", "600w_50q")
+ private val RESOLUTION_PREF_DEFAULT_VALUE = RESOLUTION_PREF_ENTRY_VALUES[0]
+
+ private const val IMAGE_FORMAT_PREF_KEY = "chapterImageFormat"
+ private val IMAGE_FORMAT_PREF_ENTRIES = arrayOf("JPG", "WEBP", "PNG")
+ private val IMAGE_FORMAT_PREF_ENTRY_VALUES = arrayOf("jpg", "webp", "png")
+ private val IMAGE_FORMAT_PREF_DEFAULT_VALUE = IMAGE_FORMAT_PREF_ENTRY_VALUES[0]
private const val THUMBNAIL_RESOLUTION = "@512w.jpg"
diff --git a/src/all/bilibili/src/eu/kanade/tachiyomi/extension/all/bilibili/BilibiliFactory.kt b/src/all/bilibili/src/eu/kanade/tachiyomi/extension/all/bilibili/BilibiliFactory.kt
index 51d8ec5f1..28f682772 100644
--- a/src/all/bilibili/src/eu/kanade/tachiyomi/extension/all/bilibili/BilibiliFactory.kt
+++ b/src/all/bilibili/src/eu/kanade/tachiyomi/extension/all/bilibili/BilibiliFactory.kt
@@ -57,6 +57,9 @@ class BilibiliManhua : Bilibili("哔哩哔哩漫画", "https://manga.bilibili.co
// Machine translated, needs to be revisited.
override val resolutionPrefTitle: String = "章节图像分辨率"
+ // Machine translated, needs to be revisited.
+ override val imagePrefTitle: String = "章节图像格式"
+
override fun getAllStatus(): Array = arrayOf("全部", "连载", "完结")
override fun getAllSortOptions(): Array = arrayOf("人气推荐", "更新时间", "追漫人数", "上架时间")
diff --git a/src/all/bilibili/src/eu/kanade/tachiyomi/extension/all/bilibili/BilibiliUrlActivity.kt b/src/all/bilibili/src/eu/kanade/tachiyomi/extension/all/bilibili/BilibiliUrlActivity.kt
index b92c985a1..d428c148d 100644
--- a/src/all/bilibili/src/eu/kanade/tachiyomi/extension/all/bilibili/BilibiliUrlActivity.kt
+++ b/src/all/bilibili/src/eu/kanade/tachiyomi/extension/all/bilibili/BilibiliUrlActivity.kt
@@ -23,7 +23,7 @@ class BilibiliUrlActivity : Activity() {
val pathSegments = intent?.data?.pathSegments
if (pathSegments != null && pathSegments.size > 1) {
- val titleId = pathSegments[1]
+ val titleId = if (pathSegments.size == 3) pathSegments[2] else pathSegments[1]
val mainIntent = Intent().apply {
action = "eu.kanade.tachiyomi.SEARCH"