MachineTranslations: Fix bad fragments and settings (#10239)

* Fix bad fragments and settings

* Bump version

* Use keiyoushi.utils.parseAs

* Avoid replacing default settings
This commit is contained in:
Chopper 2025-08-23 12:03:13 -03:00 committed by Draff
parent 8059156500
commit 41a275917d
Signed by: Draff
GPG Key ID: E8A89F3211677653
8 changed files with 25 additions and 30 deletions

View File

@ -7,7 +7,7 @@ disable_website_setting_summary=Site fonts will be disabled and your device's fo
disable_word_break_title=Disable word break
disable_word_break_summary=This feature prevents words from being automatically broken in the middle of a line.
disable_translator_title=Disable translator
disable_translator_summary=Disable auto translation and enable source translation. This does not mean that a translation is available.
disable_translator_summary=Disable auto translation and enable source translation. This does not mean that a translation is available. Make sure a translation is available before enabling this option.
translate_dialog_box_title=Translator
translate_dialog_box_summary=Engine used to translate dialog boxes
translate_dialog_box_toast=The translator has been changed to

View File

@ -7,7 +7,7 @@ disable_website_setting_summary=As fontes do site serão desativadas e as fontes
disable_word_break_title=Desativar quebra de palavras
disable_word_break_summary=Esse recurso impede que palavras sejam quebradas automaticamente no meio da linha.
disable_translator_title=Desativar tradutor
disable_translator_summary=Desativar tradução automática e ativar tradução da fonte. Isso não significa que há uma tradução disponivel.
disable_translator_summary=Desativar tradução automática e ativar tradução da fonte. Isso não significa que há uma tradução disponivel. Certifique-se de que exista uma tradução antes de ativar esta opção no site.
translate_dialog_box_title=Tradutor
translate_dialog_box_summary=Motor utilizado para traduzir caixas de diálogo
translate_dialog_box_toast=O tradutor foi alterado para

View File

@ -2,7 +2,7 @@ plugins {
id("lib-multisrc")
}
baseVersionCode = 7
baseVersionCode = 8
dependencies {
api(project(":lib:i18n"))

View File

@ -25,7 +25,7 @@ import eu.kanade.tachiyomi.source.model.SChapter
import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
import keiyoushi.utils.getPreferencesLazy
import kotlinx.serialization.decodeFromString
import keiyoushi.utils.parseAs
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
import okhttp3.HttpUrl.Companion.toHttpUrl
@ -96,11 +96,12 @@ abstract class MachineTranslations(
classLoader = this::class.java.classLoader!!,
)
private val settings get() = language.apply {
fontSize = this@MachineTranslations.fontSize
disableWordBreak = this@MachineTranslations.disableWordBreak
disableSourceSettings = this@MachineTranslations.disableSourceSettings
}
private val settings get() = language.copy(
fontSize = this@MachineTranslations.fontSize,
disableWordBreak = this@MachineTranslations.disableWordBreak,
disableTranslator = this@MachineTranslations.disableTranslator,
disableSourceSettings = this@MachineTranslations.disableSourceSettings,
)
override val client: OkHttpClient get() = clientInstance!!
@ -267,7 +268,7 @@ abstract class MachineTranslations(
val fragment = json.encodeToString<List<Dialog>>(
dto.dialogues.filter { it.getTextBy(language).isNotBlank() },
)
Page(index, imageUrl = "$imageUrl#$fragment")
Page(index, imageUrl = "$imageUrl${fragment.toFragment()}")
}
}
@ -294,9 +295,8 @@ abstract class MachineTranslations(
}
}
private inline fun <reified T> String.parseAs(): T {
return json.decodeFromString(this)
}
// Prevent bad fragments
fun String.toFragment(): String = "#${this.replace("#", "*")}"
private fun String.i18n(): String = when {
enableMangaDetailsTranslation -> translator.translate(language.origin, language.target, this)

View File

@ -43,7 +43,10 @@ data class Dialog(
private val bgColor: List<Int> = emptyList(),
) {
val text: String get() = textByLanguage["text"] ?: throw Exception("Dialog not found")
fun getTextBy(language: Language) = textByLanguage[language.target] ?: text
fun getTextBy(language: Language) = when {
!language.disableTranslator -> textByLanguage[language.origin]
else -> textByLanguage[language.target]
} ?: text
val width get() = x2 - x1
val height get() = y2 - y1

View File

@ -2,13 +2,13 @@ package eu.kanade.tachiyomi.multisrc.machinetranslations
class MachineTranslationsFactoryUtils
class Language(
data class Language(
val lang: String,
val target: String = lang,
val origin: String = "en",
var fontSize: Int = 24,
var disableSourceSettings: Boolean = false,
var disableWordBreak: Boolean = false,
var disableTranslator: Boolean = false,
var supportNativeTranslation: Boolean = false,
val fontSize: Int = 24,
val disableSourceSettings: Boolean = false,
val disableWordBreak: Boolean = false,
val disableTranslator: Boolean = false,
val supportNativeTranslation: Boolean = false,
)

View File

@ -16,7 +16,7 @@ import eu.kanade.tachiyomi.multisrc.machinetranslations.Dialog
import eu.kanade.tachiyomi.multisrc.machinetranslations.Language
import eu.kanade.tachiyomi.multisrc.machinetranslations.MachineTranslations.Companion.PAGE_REGEX
import eu.kanade.tachiyomi.network.GET
import kotlinx.serialization.decodeFromString
import keiyoushi.utils.parseAs
import kotlinx.serialization.json.Json
import okhttp3.Interceptor
import okhttp3.MediaType.Companion.toMediaType
@ -244,10 +244,6 @@ class ComposedImageInterceptor(
}.build()
}
private inline fun <reified T> String.parseAs(): T {
return json.decodeFromString(this)
}
private fun Canvas.draw(textPaint: TextPaint, layout: StaticLayout, dialog: Dialog, x: Float, y: Float) {
save()
translate(x, y)

View File

@ -6,11 +6,11 @@ import eu.kanade.tachiyomi.multisrc.machinetranslations.Dialog
import eu.kanade.tachiyomi.multisrc.machinetranslations.Language
import eu.kanade.tachiyomi.multisrc.machinetranslations.MachineTranslations.Companion.PAGE_REGEX
import eu.kanade.tachiyomi.multisrc.machinetranslations.translator.TranslatorEngine
import keiyoushi.utils.parseAs
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.awaitAll
import kotlinx.coroutines.runBlocking
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
import okhttp3.Interceptor
@ -58,8 +58,4 @@ class TranslationInterceptor(
"text" to value,
),
)
private inline fun <reified T> String.parseAs(): T {
return json.decodeFromString(this)
}
}