diff --git a/lib-multisrc/machinetranslations/assets/i18n/messages_en.properties b/lib-multisrc/machinetranslations/assets/i18n/messages_en.properties index 8e77367a5..1ec3ab61c 100644 --- a/lib-multisrc/machinetranslations/assets/i18n/messages_en.properties +++ b/lib-multisrc/machinetranslations/assets/i18n/messages_en.properties @@ -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 diff --git a/lib-multisrc/machinetranslations/assets/i18n/messages_pt_br.properties b/lib-multisrc/machinetranslations/assets/i18n/messages_pt_br.properties index d4fa5ceda..84b4e59f7 100644 --- a/lib-multisrc/machinetranslations/assets/i18n/messages_pt_br.properties +++ b/lib-multisrc/machinetranslations/assets/i18n/messages_pt_br.properties @@ -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 diff --git a/lib-multisrc/machinetranslations/build.gradle.kts b/lib-multisrc/machinetranslations/build.gradle.kts index eb0cfd0f6..7ef91ecaf 100644 --- a/lib-multisrc/machinetranslations/build.gradle.kts +++ b/lib-multisrc/machinetranslations/build.gradle.kts @@ -2,7 +2,7 @@ plugins { id("lib-multisrc") } -baseVersionCode = 7 +baseVersionCode = 8 dependencies { api(project(":lib:i18n")) diff --git a/lib-multisrc/machinetranslations/src/eu/kanade/tachiyomi/multisrc/machinetranslations/MachineTranslations.kt b/lib-multisrc/machinetranslations/src/eu/kanade/tachiyomi/multisrc/machinetranslations/MachineTranslations.kt index 8a8318813..d5eda4d72 100644 --- a/lib-multisrc/machinetranslations/src/eu/kanade/tachiyomi/multisrc/machinetranslations/MachineTranslations.kt +++ b/lib-multisrc/machinetranslations/src/eu/kanade/tachiyomi/multisrc/machinetranslations/MachineTranslations.kt @@ -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>( 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 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) diff --git a/lib-multisrc/machinetranslations/src/eu/kanade/tachiyomi/multisrc/machinetranslations/MachineTranslationsDto.kt b/lib-multisrc/machinetranslations/src/eu/kanade/tachiyomi/multisrc/machinetranslations/MachineTranslationsDto.kt index a7454e25e..6104d3a16 100644 --- a/lib-multisrc/machinetranslations/src/eu/kanade/tachiyomi/multisrc/machinetranslations/MachineTranslationsDto.kt +++ b/lib-multisrc/machinetranslations/src/eu/kanade/tachiyomi/multisrc/machinetranslations/MachineTranslationsDto.kt @@ -43,7 +43,10 @@ data class Dialog( private val bgColor: List = 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 diff --git a/lib-multisrc/machinetranslations/src/eu/kanade/tachiyomi/multisrc/machinetranslations/MachineTranslationsFactoryUtils.kt b/lib-multisrc/machinetranslations/src/eu/kanade/tachiyomi/multisrc/machinetranslations/MachineTranslationsFactoryUtils.kt index 918230f98..8cedf8d80 100644 --- a/lib-multisrc/machinetranslations/src/eu/kanade/tachiyomi/multisrc/machinetranslations/MachineTranslationsFactoryUtils.kt +++ b/lib-multisrc/machinetranslations/src/eu/kanade/tachiyomi/multisrc/machinetranslations/MachineTranslationsFactoryUtils.kt @@ -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, ) diff --git a/lib-multisrc/machinetranslations/src/eu/kanade/tachiyomi/multisrc/machinetranslations/interceptors/ComposedImageInterceptor.kt b/lib-multisrc/machinetranslations/src/eu/kanade/tachiyomi/multisrc/machinetranslations/interceptors/ComposedImageInterceptor.kt index 24e27ad21..55e8a79c2 100644 --- a/lib-multisrc/machinetranslations/src/eu/kanade/tachiyomi/multisrc/machinetranslations/interceptors/ComposedImageInterceptor.kt +++ b/lib-multisrc/machinetranslations/src/eu/kanade/tachiyomi/multisrc/machinetranslations/interceptors/ComposedImageInterceptor.kt @@ -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 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) diff --git a/lib-multisrc/machinetranslations/src/eu/kanade/tachiyomi/multisrc/machinetranslations/interceptors/TranslationInterceptor.kt b/lib-multisrc/machinetranslations/src/eu/kanade/tachiyomi/multisrc/machinetranslations/interceptors/TranslationInterceptor.kt index a94f6d692..4603a1a8a 100644 --- a/lib-multisrc/machinetranslations/src/eu/kanade/tachiyomi/multisrc/machinetranslations/interceptors/TranslationInterceptor.kt +++ b/lib-multisrc/machinetranslations/src/eu/kanade/tachiyomi/multisrc/machinetranslations/interceptors/TranslationInterceptor.kt @@ -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 String.parseAs(): T { - return json.decodeFromString(this) - } }