diff --git a/scripts/resources/Tachidesk Electron Launcher.bat b/scripts/resources/Tachidesk Electron Launcher.bat index 4c73a618..757f40aa 100644 --- a/scripts/resources/Tachidesk Electron Launcher.bat +++ b/scripts/resources/Tachidesk Electron Launcher.bat @@ -1 +1 @@ -jre\bin\javaw "-Dsuwayomi.tachidesk.config.server.webInterface=electron" "-Dsuwayomi.tachidesk.config.server.electronPath=electron/electron.exe" -jar Tachidesk.jar \ No newline at end of file +jre\bin\javaw "-Dsuwayomi.tachidesk.config.server.webUIInterface=electron" "-Dsuwayomi.tachidesk.config.server.electronPath=electron/electron.exe" -jar Tachidesk.jar \ No newline at end of file diff --git a/server/build.gradle.kts b/server/build.gradle.kts index e7a1ac61..e8a21bfa 100644 --- a/server/build.gradle.kts +++ b/server/build.gradle.kts @@ -12,6 +12,15 @@ plugins { id("de.fuerstenau.buildconfig") version "1.1.8" } +buildscript { + repositories { + mavenCentral() + } + dependencies { + classpath("net.lingala.zip4j:zip4j:2.9.0") + } +} + repositories { maven { url = uri("https://repo1.maven.org/maven2/") @@ -53,7 +62,6 @@ dependencies { implementation("com.dorkbox:Utilities:1.9") - // dependencies of Tachiyomi extensions, some are duplicate, keeping it here for reference implementation("com.github.inorichi.injekt:injekt-core:65b0440") implementation("com.squareup.okhttp3:okhttp:4.9.1") @@ -87,8 +95,8 @@ application { // for testing electron // applicationDefaultJvmArgs = listOf( -// "-Dsuwayomi.tachidesk.webInterface=electron", -// "-Dsuwayomi.tachidesk.electronPath=/usr/bin/electron" +// "-Dsuwayomi.tachidesk.config.server.webUIInterface=electron", +// "-Dsuwayomi.tachidesk.config.server.electronPath=/usr/bin/electron" // ) } @@ -143,13 +151,13 @@ tasks { shadowJar { manifest { attributes( - mapOf( - "Main-Class" to MainClass, - "Implementation-Title" to rootProject.name, - "Implementation-Vendor" to "The Suwayomi Project", - "Specification-Version" to tachideskVersion, - "Implementation-Version" to tachideskRevision - ) + mapOf( + "Main-Class" to MainClass, + "Implementation-Title" to rootProject.name, + "Implementation-Vendor" to "The Suwayomi Project", + "Specification-Version" to tachideskVersion, + "Implementation-Version" to tachideskRevision + ) ) } archiveBaseName.set(rootProject.name) @@ -159,9 +167,9 @@ tasks { withType { kotlinOptions { freeCompilerArgs = listOf( - "-Xopt-in=kotlin.RequiresOptIn", - "-Xopt-in=kotlinx.coroutines.ExperimentalCoroutinesApi", - "-Xopt-in=kotlinx.coroutines.InternalCoroutinesApi" + "-Xopt-in=kotlin.RequiresOptIn", + "-Xopt-in=kotlinx.coroutines.ExperimentalCoroutinesApi", + "-Xopt-in=kotlinx.coroutines.InternalCoroutinesApi" ) } } @@ -175,7 +183,7 @@ tasks { } named("run") { - dependsOn("formatKotlin", "lintKotlin") + dependsOn("formatKotlin", "lintKotlin", "downloadWebUI") } named("processResources") { @@ -186,6 +194,26 @@ tasks { register("downloadWebUI") { src("https://github.com/Suwayomi/Tachidesk-WebUI-preview/releases/download/$webUIRevisionTag/Tachidesk-WebUI-$webUIRevisionTag.zip") dest("src/main/resources/WebUI.zip") + + + fun shouldOverwrite(): Boolean { + val zipPath = "src/main/resources/WebUI.zip" + val zipFile = net.lingala.zip4j.ZipFile(zipPath) + + var shouldOverwrite = true + if (zipFile.isValidZipFile) { + val zipRevision = zipFile.getInputStream(zipFile.getFileHeader("revision")).bufferedReader().use { + it.readText().trim() + } + + if (zipRevision == webUIRevisionTag) + shouldOverwrite = false + } + + return shouldOverwrite + } + + overwrite(shouldOverwrite()) } withType { diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/ServerConfig.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/ServerConfig.kt index d7fcf634..2f8fcb36 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/server/ServerConfig.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/server/ServerConfig.kt @@ -29,7 +29,7 @@ class ServerConfig(config: Config, moduleName: String = "") : ConfigModule(confi // webUI val webUIEnabled: Boolean by overridableWithSysProperty val initialOpenInBrowserEnabled: Boolean by overridableWithSysProperty - val webUIBrowser: String by overridableWithSysProperty + val webUIInterface: String by overridableWithSysProperty val electronPath: String by overridableWithSysProperty companion object { diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/util/Browser.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/util/Browser.kt index bd9ffcc7..1e526f44 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/server/util/Browser.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/server/util/Browser.kt @@ -18,7 +18,7 @@ object Browser { fun openInBrowser() { if (serverConfig.webUIEnabled) { - if (serverConfig.webUIBrowser == ("electron")) { + if (serverConfig.webUIInterface == ("electron")) { try { val electronPath = serverConfig.electronPath electronInstances.add(ProcessBuilder(electronPath, appBaseUrl).start()) diff --git a/server/src/main/resources/server-reference.conf b/server/src/main/resources/server-reference.conf index 048f4d44..92768809 100644 --- a/server/src/main/resources/server-reference.conf +++ b/server/src/main/resources/server-reference.conf @@ -14,5 +14,5 @@ server.systemTrayEnabled = true # webUI server.webUIEnabled = true server.initialOpenInBrowserEnabled = true -server.webUIBrowser = "browser" # "browser" or "electron" +server.webUIInterface = "browser" # "browser" or "electron" server.electronPath = ""