diff --git a/AndroidCompat/Config/src/main/java/xyz/nulldev/ts/config/ConfigModule.kt b/AndroidCompat/Config/src/main/java/xyz/nulldev/ts/config/ConfigModule.kt index cc4c51074..035e1177a 100644 --- a/AndroidCompat/Config/src/main/java/xyz/nulldev/ts/config/ConfigModule.kt +++ b/AndroidCompat/Config/src/main/java/xyz/nulldev/ts/config/ConfigModule.kt @@ -1,8 +1,40 @@ package xyz.nulldev.ts.config +/* + * Copyright (C) Contributors to the Suwayomi project + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + import com.typesafe.config.Config +import io.github.config4k.getValue +import kotlin.reflect.KProperty /** * Abstract config module. */ -abstract class ConfigModule(config: Config) +abstract class ConfigModule(config: Config, moduleName: String = "") { + val overridableWithSysProperty = SystemPropertyOverrideDelegate(config, moduleName) +} + +class SystemPropertyOverrideDelegate(val config: Config, val moduleName: String) { + inline operator fun getValue(thisRef: R, property: KProperty<*>): T { + val configValue: T = config.getValue(thisRef, property) + + println("getting " + "suwayomi.tachidesk.config.$moduleName.${property.name}") + val combined = System.getProperty( + "suwayomi.tachidesk.config.$moduleName.${property.name}", + configValue.toString() + ) + + val asT = when(T::class.simpleName) { + "Int" -> combined.toInt() + "Boolean" -> combined.toBoolean() + // add more types as needed + else -> combined + } + + return asT as T + } +} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/ServerConfig.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/ServerConfig.kt index 5c626036b..d7fcf634c 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/server/ServerConfig.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/server/ServerConfig.kt @@ -8,30 +8,31 @@ package suwayomi.tachidesk.server * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ import com.typesafe.config.Config -import io.github.config4k.getValue import xyz.nulldev.ts.config.ConfigModule import xyz.nulldev.ts.config.GlobalConfigManager import xyz.nulldev.ts.config.debugLogsEnabled -class ServerConfig(config: Config) : ConfigModule(config) { - val ip: String by config - val port: Int by config - - val webUIEnabled: Boolean = System.getProperty( - "suwayomi.tachidesk.server.webUIEnabled", config.getString("webUIEnabled") - ).toBoolean() +class ServerConfig(config: Config, moduleName: String = "") : ConfigModule(config, moduleName) { + val ip: String by overridableWithSysProperty + val port: Int by overridableWithSysProperty // proxy - val socksProxyEnabled: Boolean by config - val socksProxyHost: String by config - val socksProxyPort: String by config + val socksProxyEnabled: Boolean by overridableWithSysProperty + + val socksProxyHost: String by overridableWithSysProperty + val socksProxyPort: String by overridableWithSysProperty // misc val debugLogsEnabled: Boolean = debugLogsEnabled(GlobalConfigManager.config) - val systemTrayEnabled: Boolean by config - val initialOpenInBrowserEnabled: Boolean by config + val systemTrayEnabled: Boolean by overridableWithSysProperty + + // webUI + val webUIEnabled: Boolean by overridableWithSysProperty + val initialOpenInBrowserEnabled: Boolean by overridableWithSysProperty + val webUIBrowser: String by overridableWithSysProperty + val electronPath: String by overridableWithSysProperty companion object { - fun register(config: Config) = ServerConfig(config.getConfig("server")) + fun register(config: Config) = ServerConfig(config.getConfig("server"), "server") } } 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 9fbf97af8..6c8dccc39 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/server/util/Browser.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/server/util/Browser.kt @@ -17,12 +17,9 @@ object Browser { private val electronInstances = mutableListOf() fun openInBrowser() { - - val openInElectron = System.getProperty("suwayomi.tachidesk.server.webInterface")?.equals("electron") - - if (openInElectron == true) { + if (serverConfig.webUIBrowser == ("electron")) { try { - val electronPath = System.getProperty("suwayomi.tachidesk.server.electronPath")!! + val electronPath = serverConfig.electronPath electronInstances.add(ProcessBuilder(electronPath, appBaseUrl).start()) } catch (e: Throwable) { // cover both java.lang.Exception and java.lang.Error e.printStackTrace() diff --git a/server/src/main/resources/server-reference.conf b/server/src/main/resources/server-reference.conf index 2076b5387..048f4d447 100644 --- a/server/src/main/resources/server-reference.conf +++ b/server/src/main/resources/server-reference.conf @@ -14,3 +14,5 @@ server.systemTrayEnabled = true # webUI server.webUIEnabled = true server.initialOpenInBrowserEnabled = true +server.webUIBrowser = "browser" # "browser" or "electron" +server.electronPath = ""