Ensure webui "channel" is always of corresponding enum (#1334)
The "channel" was just the string from the config file, which will never equal the enum unless via case-insensitive comparison
This commit is contained in:
@@ -7,10 +7,10 @@ import suwayomi.tachidesk.graphql.asDataFetcherResult
|
||||
import suwayomi.tachidesk.graphql.types.UpdateState.DOWNLOADING
|
||||
import suwayomi.tachidesk.graphql.types.UpdateState.ERROR
|
||||
import suwayomi.tachidesk.graphql.types.UpdateState.IDLE
|
||||
import suwayomi.tachidesk.graphql.types.WebUIFlavor
|
||||
import suwayomi.tachidesk.graphql.types.WebUIUpdateStatus
|
||||
import suwayomi.tachidesk.server.JavalinSetup.future
|
||||
import suwayomi.tachidesk.server.util.WebInterfaceManager
|
||||
import suwayomi.tachidesk.server.util.WebUIFlavor
|
||||
import java.util.concurrent.CompletableFuture
|
||||
import kotlin.time.Duration.Companion.seconds
|
||||
|
||||
|
||||
@@ -3,13 +3,14 @@ package suwayomi.tachidesk.graphql.queries
|
||||
import com.expediagroup.graphql.generator.annotations.GraphQLDeprecated
|
||||
import suwayomi.tachidesk.global.impl.AppUpdate
|
||||
import suwayomi.tachidesk.graphql.types.AboutWebUI
|
||||
import suwayomi.tachidesk.graphql.types.WebUIChannel
|
||||
import suwayomi.tachidesk.graphql.types.WebUIFlavor
|
||||
import suwayomi.tachidesk.graphql.types.WebUIUpdateCheck
|
||||
import suwayomi.tachidesk.graphql.types.WebUIUpdateStatus
|
||||
import suwayomi.tachidesk.server.JavalinSetup.future
|
||||
import suwayomi.tachidesk.server.generated.BuildConfig
|
||||
import suwayomi.tachidesk.server.serverConfig
|
||||
import suwayomi.tachidesk.server.util.WebInterfaceManager
|
||||
import suwayomi.tachidesk.server.util.WebUIFlavor
|
||||
import java.util.concurrent.CompletableFuture
|
||||
|
||||
class InfoQuery {
|
||||
@@ -62,7 +63,7 @@ class InfoQuery {
|
||||
future {
|
||||
val (version, updateAvailable) = WebInterfaceManager.isUpdateAvailable(WebUIFlavor.current, raiseError = true)
|
||||
WebUIUpdateCheck(
|
||||
channel = serverConfig.webUIChannel.value,
|
||||
channel = WebUIChannel.from(serverConfig.webUIChannel.value),
|
||||
tag = version,
|
||||
updateAvailable,
|
||||
)
|
||||
|
||||
@@ -11,9 +11,6 @@ import com.expediagroup.graphql.generator.annotations.GraphQLDeprecated
|
||||
import suwayomi.tachidesk.graphql.server.primitives.Node
|
||||
import suwayomi.tachidesk.server.ServerConfig
|
||||
import suwayomi.tachidesk.server.serverConfig
|
||||
import suwayomi.tachidesk.server.util.WebUIChannel
|
||||
import suwayomi.tachidesk.server.util.WebUIFlavor
|
||||
import suwayomi.tachidesk.server.util.WebUIInterface
|
||||
|
||||
interface Settings : Node {
|
||||
val ip: String?
|
||||
|
||||
@@ -1,18 +1,20 @@
|
||||
package suwayomi.tachidesk.graphql.types
|
||||
|
||||
import suwayomi.tachidesk.server.serverConfig
|
||||
|
||||
data class AboutWebUI(
|
||||
val channel: String,
|
||||
val channel: WebUIChannel,
|
||||
val tag: String,
|
||||
)
|
||||
|
||||
data class WebUIUpdateCheck(
|
||||
val channel: String,
|
||||
val channel: WebUIChannel,
|
||||
val tag: String,
|
||||
val updateAvailable: Boolean,
|
||||
)
|
||||
|
||||
data class WebUIUpdateInfo(
|
||||
val channel: String,
|
||||
val channel: WebUIChannel,
|
||||
val tag: String,
|
||||
)
|
||||
|
||||
@@ -28,3 +30,68 @@ data class WebUIUpdateStatus(
|
||||
val state: UpdateState,
|
||||
val progress: Int,
|
||||
)
|
||||
|
||||
enum class WebUIInterface {
|
||||
BROWSER,
|
||||
ELECTRON,
|
||||
;
|
||||
|
||||
companion object {
|
||||
fun from(value: String): WebUIInterface = entries.find { it.name.lowercase() == value.lowercase() } ?: BROWSER
|
||||
}
|
||||
}
|
||||
|
||||
enum class WebUIChannel {
|
||||
BUNDLED, // the default webUI version bundled with the server release
|
||||
STABLE,
|
||||
PREVIEW,
|
||||
;
|
||||
|
||||
companion object {
|
||||
fun from(channel: String): WebUIChannel = entries.find { it.name.lowercase() == channel.lowercase() } ?: STABLE
|
||||
|
||||
fun doesConfigChannelEqual(channel: WebUIChannel): Boolean = serverConfig.webUIChannel.value.equals(channel.name, true)
|
||||
}
|
||||
}
|
||||
|
||||
enum class WebUIFlavor(
|
||||
val uiName: String,
|
||||
val repoUrl: String,
|
||||
val versionMappingUrl: String,
|
||||
val latestReleaseInfoUrl: String,
|
||||
val baseFileName: String,
|
||||
) {
|
||||
WEBUI(
|
||||
"WebUI",
|
||||
"https://github.com/Suwayomi/Suwayomi-WebUI-preview",
|
||||
"https://raw.githubusercontent.com/Suwayomi/Suwayomi-WebUI/master/versionToServerVersionMapping.json",
|
||||
"https://api.github.com/repos/Suwayomi/Suwayomi-WebUI-preview/releases/latest",
|
||||
"Suwayomi-WebUI",
|
||||
),
|
||||
|
||||
VUI(
|
||||
"VUI",
|
||||
"https://github.com/Suwayomi/Suwayomi-VUI",
|
||||
"https://raw.githubusercontent.com/Suwayomi/Suwayomi-VUI/main/versionToServerVersionMapping.json",
|
||||
"https://api.github.com/repos/Suwayomi/Suwayomi-VUI/releases/latest",
|
||||
"Suwayomi-VUI-Web",
|
||||
),
|
||||
|
||||
CUSTOM(
|
||||
"Custom",
|
||||
"repoURL",
|
||||
"versionMappingUrl",
|
||||
"latestReleaseInfoURL",
|
||||
"baseFileName",
|
||||
),
|
||||
;
|
||||
|
||||
companion object {
|
||||
val default: WebUIFlavor = WEBUI
|
||||
|
||||
fun from(value: String): WebUIFlavor = entries.find { it.uiName == value } ?: default
|
||||
|
||||
val current: WebUIFlavor
|
||||
get() = from(serverConfig.webUIFlavor.value)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ package suwayomi.tachidesk.server.util
|
||||
|
||||
import dorkbox.desktop.Desktop
|
||||
import io.github.oshai.kotlinlogging.KotlinLogging
|
||||
import suwayomi.tachidesk.graphql.types.WebUIInterface
|
||||
import suwayomi.tachidesk.server.serverConfig
|
||||
|
||||
object Browser {
|
||||
|
||||
@@ -41,6 +41,8 @@ import suwayomi.tachidesk.graphql.types.UpdateState.DOWNLOADING
|
||||
import suwayomi.tachidesk.graphql.types.UpdateState.ERROR
|
||||
import suwayomi.tachidesk.graphql.types.UpdateState.FINISHED
|
||||
import suwayomi.tachidesk.graphql.types.UpdateState.IDLE
|
||||
import suwayomi.tachidesk.graphql.types.WebUIChannel
|
||||
import suwayomi.tachidesk.graphql.types.WebUIFlavor
|
||||
import suwayomi.tachidesk.graphql.types.WebUIUpdateInfo
|
||||
import suwayomi.tachidesk.graphql.types.WebUIUpdateStatus
|
||||
import suwayomi.tachidesk.server.ApplicationDirs
|
||||
@@ -68,71 +70,6 @@ private fun ByteArray.toHex(): String = joinToString(separator = "") { eachByte
|
||||
|
||||
class BundledWebUIMissing : Exception("No bundled webUI version found")
|
||||
|
||||
enum class WebUIInterface {
|
||||
BROWSER,
|
||||
ELECTRON,
|
||||
;
|
||||
|
||||
companion object {
|
||||
fun from(value: String): WebUIInterface = entries.find { it.name.lowercase() == value.lowercase() } ?: BROWSER
|
||||
}
|
||||
}
|
||||
|
||||
enum class WebUIChannel {
|
||||
BUNDLED, // the default webUI version bundled with the server release
|
||||
STABLE,
|
||||
PREVIEW,
|
||||
;
|
||||
|
||||
companion object {
|
||||
fun from(channel: String): WebUIChannel = entries.find { it.name.lowercase() == channel.lowercase() } ?: STABLE
|
||||
|
||||
fun doesConfigChannelEqual(channel: WebUIChannel): Boolean = serverConfig.webUIChannel.value.equals(channel.name, true)
|
||||
}
|
||||
}
|
||||
|
||||
enum class WebUIFlavor(
|
||||
val uiName: String,
|
||||
val repoUrl: String,
|
||||
val versionMappingUrl: String,
|
||||
val latestReleaseInfoUrl: String,
|
||||
val baseFileName: String,
|
||||
) {
|
||||
WEBUI(
|
||||
"WebUI",
|
||||
"https://github.com/Suwayomi/Suwayomi-WebUI-preview",
|
||||
"https://raw.githubusercontent.com/Suwayomi/Suwayomi-WebUI/master/versionToServerVersionMapping.json",
|
||||
"https://api.github.com/repos/Suwayomi/Suwayomi-WebUI-preview/releases/latest",
|
||||
"Suwayomi-WebUI",
|
||||
),
|
||||
|
||||
VUI(
|
||||
"VUI",
|
||||
"https://github.com/Suwayomi/Suwayomi-VUI",
|
||||
"https://raw.githubusercontent.com/Suwayomi/Suwayomi-VUI/main/versionToServerVersionMapping.json",
|
||||
"https://api.github.com/repos/Suwayomi/Suwayomi-VUI/releases/latest",
|
||||
"Suwayomi-VUI-Web",
|
||||
),
|
||||
|
||||
CUSTOM(
|
||||
"Custom",
|
||||
"repoURL",
|
||||
"versionMappingUrl",
|
||||
"latestReleaseInfoURL",
|
||||
"baseFileName",
|
||||
),
|
||||
;
|
||||
|
||||
companion object {
|
||||
val default: WebUIFlavor = WEBUI
|
||||
|
||||
fun from(value: String): WebUIFlavor = entries.find { it.uiName == value } ?: default
|
||||
|
||||
val current: WebUIFlavor
|
||||
get() = from(serverConfig.webUIFlavor.value)
|
||||
}
|
||||
}
|
||||
|
||||
fun WebUIFlavor.isDefault(): Boolean = this == WebUIFlavor.default
|
||||
|
||||
object WebInterfaceManager {
|
||||
@@ -188,7 +125,7 @@ object WebInterfaceManager {
|
||||
}
|
||||
|
||||
return AboutWebUI(
|
||||
channel = serverConfig.webUIChannel.value,
|
||||
channel = WebUIChannel.from(serverConfig.webUIChannel.value),
|
||||
tag = currentVersion,
|
||||
)
|
||||
}
|
||||
@@ -201,7 +138,7 @@ object WebInterfaceManager {
|
||||
WebUIUpdateStatus(
|
||||
info =
|
||||
WebUIUpdateInfo(
|
||||
channel = serverConfig.webUIChannel.value,
|
||||
channel = WebUIChannel.from(serverConfig.webUIChannel.value),
|
||||
tag = version,
|
||||
),
|
||||
state,
|
||||
|
||||
Reference in New Issue
Block a user