Manhuarm: Fix dialogs (#10866)

Fix dialogs
This commit is contained in:
Chopper 2025-10-04 17:46:59 -03:00 committed by Draff
parent 50ae4f3f06
commit a7cfba60a2
Signed by: Draff
GPG Key ID: E8A89F3211677653
3 changed files with 29 additions and 6 deletions

View File

@ -3,7 +3,7 @@ ext {
extClass = '.ManhuarmFactory' extClass = '.ManhuarmFactory'
themePkg = 'madara' themePkg = 'madara'
baseUrl = 'https://manhuarm.com' baseUrl = 'https://manhuarm.com'
overrideVersionCode = 2 overrideVersionCode = 3
isNsfw = true isNsfw = true
} }

View File

@ -16,6 +16,7 @@ import eu.kanade.tachiyomi.lib.i18n.Intl
import eu.kanade.tachiyomi.lib.i18n.Intl.Companion.createDefaultMessageFileName import eu.kanade.tachiyomi.lib.i18n.Intl.Companion.createDefaultMessageFileName
import eu.kanade.tachiyomi.multisrc.machinetranslations.translator.TranslatorEngine import eu.kanade.tachiyomi.multisrc.machinetranslations.translator.TranslatorEngine
import eu.kanade.tachiyomi.multisrc.madara.Madara import eu.kanade.tachiyomi.multisrc.madara.Madara
import eu.kanade.tachiyomi.network.POST
import eu.kanade.tachiyomi.network.interceptor.rateLimit import eu.kanade.tachiyomi.network.interceptor.rateLimit
import eu.kanade.tachiyomi.source.ConfigurableSource import eu.kanade.tachiyomi.source.ConfigurableSource
import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.source.model.Page
@ -23,6 +24,7 @@ import eu.kanade.tachiyomi.source.model.SChapter
import keiyoushi.utils.getPreferencesLazy import keiyoushi.utils.getPreferencesLazy
import keiyoushi.utils.parseAs import keiyoushi.utils.parseAs
import kotlinx.serialization.encodeToString import kotlinx.serialization.encodeToString
import okhttp3.FormBody
import okhttp3.Interceptor import okhttp3.Interceptor
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import okhttp3.Response import okhttp3.Response
@ -156,12 +158,22 @@ class Manhuarm(
override fun pageListParse(document: Document): List<Page> { override fun pageListParse(document: Document): List<Page> {
val pages = super.pageListParse(document) val pages = super.pageListParse(document)
val content = document.selectFirst("meta[name=description]") val chapterId = document.selectFirst("#wp-manga-current-chap")!!.attr("data-id")
?.attr("content") val nonce = document.selectFirst("#manga-ocr-display-script-js-extra")!!.data().let {
?.fixJsonFormat() NONCE_REGEX.find(it)!!.groupValues.last()
?: return pages.takeIf { language.target == language.origin } ?: throw Exception(i18n["chapter_unavailable_message"]) }
val dialog = content.parseAs<List<PageDto>>() val form = FormBody.Builder()
.add("action", "get_ocr_data")
.add("chapter_id", chapterId)
.add("nonce", nonce)
.build()
val dialogDto = client.newCall(POST("$baseUrl/wp-admin/admin-ajax.php", headers, form))
.execute()
.parseAs<DialogDto>()
val dialog = dialogDto.content.parseAs<List<PageDto>>()
return dialog.mapIndexed { index, dto -> return dialog.mapIndexed { index, dto ->
val page = pages.first { it.imageUrl?.contains(dto.imageUrl, true)!! } val page = pages.first { it.imageUrl?.contains(dto.imageUrl, true)!! }
@ -380,6 +392,7 @@ class Manhuarm(
companion object { companion object {
val PAGE_REGEX = Regex(".*?\\.(webp|png|jpg|jpeg)#\\[.*?]", RegexOption.IGNORE_CASE) val PAGE_REGEX = Regex(".*?\\.(webp|png|jpg|jpeg)#\\[.*?]", RegexOption.IGNORE_CASE)
val JSON_FORMAT_REGEX = """(?:"text":\s+?".*?)([\s\S]*?)(?:",\s+?"box")""".toRegex() val JSON_FORMAT_REGEX = """(?:"text":\s+?".*?)([\s\S]*?)(?:",\s+?"box")""".toRegex()
val NONCE_REGEX = """(?:nonce":")([^"]+)""".toRegex()
const val DEVICE_FONT = "device:" const val DEVICE_FONT = "device:"
private const val FONT_SIZE_PREF = "fontSizePref" private const val FONT_SIZE_PREF = "fontSizePref"

View File

@ -1,6 +1,7 @@
package eu.kanade.tachiyomi.extension.all.manhuarm package eu.kanade.tachiyomi.extension.all.manhuarm
import android.os.Build import android.os.Build
import android.util.Base64
import androidx.annotation.RequiresApi import androidx.annotation.RequiresApi
import kotlinx.serialization.SerialName import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@ -26,6 +27,15 @@ class PageDto(
val dialogues: List<Dialog> = emptyList(), val dialogues: List<Dialog> = emptyList(),
) )
@Serializable
class DialogDto(
private val data: String,
) {
val content: String by lazy {
Base64.decode(data, Base64.DEFAULT).toString(Charsets.UTF_8)
}
}
@Serializable @Serializable
@RequiresApi(Build.VERSION_CODES.O) @RequiresApi(Build.VERSION_CODES.O)
data class Dialog( data class Dialog(