From d050bfdc68b36f54959accba3bdf55f676cab0eb Mon Sep 17 00:00:00 2001 From: Constantin Piber <59023762+cpiber@users.noreply.github.com> Date: Tue, 15 Jul 2025 21:38:20 +0200 Subject: [PATCH] Localize WebView and Login pages (#1522) * Localize WebView and Login pages * Switch to JTE for page rendering * Lint * Add gradle task dependency * JTE -> KTE * ShouldRunAfter * I guess we must --------- Co-authored-by: Syer10 --- build.gradle.kts | 1 + gradle/libs.versions.toml | 9 +++++ server/build.gradle.kts | 15 ++++++++ .../moko-resources/values/base/strings.xml | 21 +++++++++- .../static/login.html => jte/Login.kte} | 22 +++++++---- .../webview.html => jte/Webview.kte} | 37 ++++++++++-------- .../global/controller/WebViewController.kt | 14 ++++++- .../suwayomi/tachidesk/server/JavalinSetup.kt | 38 +++++++++++-------- 8 files changed, 115 insertions(+), 42 deletions(-) rename server/src/main/{resources/static/login.html => jte/Login.kte} (81%) rename server/src/main/{resources/webview.html => jte/Webview.kte} (91%) diff --git a/build.gradle.kts b/build.gradle.kts index 932a3914..b922219d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -11,6 +11,7 @@ plugins { alias(libs.plugins.download) alias(libs.plugins.kotlin.multiplatform) apply false alias(libs.plugins.moko) apply false + alias(libs.plugins.jte) apply false } allprojects { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index fbd28249..cda0cbcf 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -4,6 +4,7 @@ coroutines = "1.10.2" serialization = "1.9.0" okhttp = "5.1.0" # Major version is locked by Tachiyomi extensions javalin = "6.7.0" +jte = "3.2.1" jackson = "2.18.3" # jackson version locked by javalin, ref: `io.javalin.core.util.OptionalDependency` exposed = "0.61.0" dex2jar = "v64" # Stuck until https://github.com/ThexXTURBOXx/dex2jar/issues/27 is fixed @@ -49,9 +50,12 @@ okio = "com.squareup.okio:okio:3.15.0" # Javalin api javalin-core = { module = "io.javalin:javalin", version.ref = "javalin" } javalin-openapi = { module = "io.javalin:javalin-openapi", version.ref = "javalin" } +javalin-rendering = { module = "io.javalin:javalin-rendering", version.ref = "javalin" } jackson-databind = { module = "com.fasterxml.jackson.core:jackson-databind", version.ref = "jackson" } jackson-kotlin = { module = "com.fasterxml.jackson.module:jackson-module-kotlin", version.ref = "jackson" } jackson-annotations = { module = "com.fasterxml.jackson.core:jackson-annotations", version.ref = "jackson" } +jte = { module = "gg.jte:jte", version.ref = "jte" } +kte = { module = "gg.jte:jte-kotlin", version.ref = "jte" } # GraphQL graphql-kotlin-server = { module = "com.expediagroup:graphql-kotlin-server", version.ref = "graphqlkotlin" } @@ -177,6 +181,9 @@ shadowjar = { id = "com.github.johnrengelman.shadow", version = "8.1.1"} # Moko moko = { id = "dev.icerock.mobile.multiplatform-resources", version.ref = "moko" } +# JTE +jte = { id = "gg.jte.gradle", version.ref = "jte" } + [bundles] shared = [ "kotlin-stdlib-jdk8", @@ -216,6 +223,8 @@ okhttp = [ javalin = [ "javalin-core", #"javalin-openapi", + "javalin-rendering", + "jte", ] jackson = [ "jackson-databind", diff --git a/server/build.gradle.kts b/server/build.gradle.kts index d463091a..fc2f47c5 100644 --- a/server/build.gradle.kts +++ b/server/build.gradle.kts @@ -25,6 +25,11 @@ plugins { .get() .pluginId, ) + id( + libs.plugins.jte + .get() + .pluginId, + ) } dependencies { @@ -96,6 +101,12 @@ dependencies { implementation(libs.cron4j) implementation(libs.cronUtils) + + compileOnly(libs.kte) +} + +jte { + generate() } application { @@ -212,4 +223,8 @@ tasks { ) } } + + runKtlintCheckOverMainSourceSet { + mustRunAfter(generateJte) + } } diff --git a/server/i18n/src/commonMain/moko-resources/values/base/strings.xml b/server/i18n/src/commonMain/moko-resources/values/base/strings.xml index e5db31fb..3162ce19 100644 --- a/server/i18n/src/commonMain/moko-resources/values/base/strings.xml +++ b/server/i18n/src/commonMain/moko-resources/values/base/strings.xml @@ -80,4 +80,23 @@ Publishing Finished Cancelled On Hiatus - \ No newline at end of file + + Error + Version %1$s + + Suwayomi WebView + Disconnected, please refresh + Reverse Scrolling + Note: While focus is on the WebView part, no keybinds, including refresh, will be handled by the browser. + Initializing... Please wait + Enter a URL to get started + Loading page... + Enter URL... + + Suwayomi Login + Username + Password + Log In + Type username... + Secret... + diff --git a/server/src/main/resources/static/login.html b/server/src/main/jte/Login.kte similarity index 81% rename from server/src/main/resources/static/login.html rename to server/src/main/jte/Login.kte index 12ff5011..5c4200ec 100644 --- a/server/src/main/resources/static/login.html +++ b/server/src/main/jte/Login.kte @@ -1,8 +1,14 @@ +@import suwayomi.tachidesk.i18n.MR +@import suwayomi.tachidesk.server.generated.BuildConfig + +@param locale: java.util.Locale +@param error: String + - Suwayomi Login + ${MR.strings.login_label_title.localized(locale)}