mirror of
https://github.com/Suwayomi/Suwayomi-Server.git
synced 2026-07-04 03:14:40 -05:00
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.DOWNLOADING
|
||||||
import suwayomi.tachidesk.graphql.types.UpdateState.ERROR
|
import suwayomi.tachidesk.graphql.types.UpdateState.ERROR
|
||||||
import suwayomi.tachidesk.graphql.types.UpdateState.IDLE
|
import suwayomi.tachidesk.graphql.types.UpdateState.IDLE
|
||||||
|
import suwayomi.tachidesk.graphql.types.WebUIFlavor
|
||||||
import suwayomi.tachidesk.graphql.types.WebUIUpdateStatus
|
import suwayomi.tachidesk.graphql.types.WebUIUpdateStatus
|
||||||
import suwayomi.tachidesk.server.JavalinSetup.future
|
import suwayomi.tachidesk.server.JavalinSetup.future
|
||||||
import suwayomi.tachidesk.server.util.WebInterfaceManager
|
import suwayomi.tachidesk.server.util.WebInterfaceManager
|
||||||
import suwayomi.tachidesk.server.util.WebUIFlavor
|
|
||||||
import java.util.concurrent.CompletableFuture
|
import java.util.concurrent.CompletableFuture
|
||||||
import kotlin.time.Duration.Companion.seconds
|
import kotlin.time.Duration.Companion.seconds
|
||||||
|
|
||||||
|
|||||||
@@ -3,13 +3,14 @@ package suwayomi.tachidesk.graphql.queries
|
|||||||
import com.expediagroup.graphql.generator.annotations.GraphQLDeprecated
|
import com.expediagroup.graphql.generator.annotations.GraphQLDeprecated
|
||||||
import suwayomi.tachidesk.global.impl.AppUpdate
|
import suwayomi.tachidesk.global.impl.AppUpdate
|
||||||
import suwayomi.tachidesk.graphql.types.AboutWebUI
|
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.WebUIUpdateCheck
|
||||||
import suwayomi.tachidesk.graphql.types.WebUIUpdateStatus
|
import suwayomi.tachidesk.graphql.types.WebUIUpdateStatus
|
||||||
import suwayomi.tachidesk.server.JavalinSetup.future
|
import suwayomi.tachidesk.server.JavalinSetup.future
|
||||||
import suwayomi.tachidesk.server.generated.BuildConfig
|
import suwayomi.tachidesk.server.generated.BuildConfig
|
||||||
import suwayomi.tachidesk.server.serverConfig
|
import suwayomi.tachidesk.server.serverConfig
|
||||||
import suwayomi.tachidesk.server.util.WebInterfaceManager
|
import suwayomi.tachidesk.server.util.WebInterfaceManager
|
||||||
import suwayomi.tachidesk.server.util.WebUIFlavor
|
|
||||||
import java.util.concurrent.CompletableFuture
|
import java.util.concurrent.CompletableFuture
|
||||||
|
|
||||||
class InfoQuery {
|
class InfoQuery {
|
||||||
@@ -62,7 +63,7 @@ class InfoQuery {
|
|||||||
future {
|
future {
|
||||||
val (version, updateAvailable) = WebInterfaceManager.isUpdateAvailable(WebUIFlavor.current, raiseError = true)
|
val (version, updateAvailable) = WebInterfaceManager.isUpdateAvailable(WebUIFlavor.current, raiseError = true)
|
||||||
WebUIUpdateCheck(
|
WebUIUpdateCheck(
|
||||||
channel = serverConfig.webUIChannel.value,
|
channel = WebUIChannel.from(serverConfig.webUIChannel.value),
|
||||||
tag = version,
|
tag = version,
|
||||||
updateAvailable,
|
updateAvailable,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -11,9 +11,6 @@ import com.expediagroup.graphql.generator.annotations.GraphQLDeprecated
|
|||||||
import suwayomi.tachidesk.graphql.server.primitives.Node
|
import suwayomi.tachidesk.graphql.server.primitives.Node
|
||||||
import suwayomi.tachidesk.server.ServerConfig
|
import suwayomi.tachidesk.server.ServerConfig
|
||||||
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 {
|
interface Settings : Node {
|
||||||
val ip: String?
|
val ip: String?
|
||||||
|
|||||||
@@ -1,18 +1,20 @@
|
|||||||
package suwayomi.tachidesk.graphql.types
|
package suwayomi.tachidesk.graphql.types
|
||||||
|
|
||||||
|
import suwayomi.tachidesk.server.serverConfig
|
||||||
|
|
||||||
data class AboutWebUI(
|
data class AboutWebUI(
|
||||||
val channel: String,
|
val channel: WebUIChannel,
|
||||||
val tag: String,
|
val tag: String,
|
||||||
)
|
)
|
||||||
|
|
||||||
data class WebUIUpdateCheck(
|
data class WebUIUpdateCheck(
|
||||||
val channel: String,
|
val channel: WebUIChannel,
|
||||||
val tag: String,
|
val tag: String,
|
||||||
val updateAvailable: Boolean,
|
val updateAvailable: Boolean,
|
||||||
)
|
)
|
||||||
|
|
||||||
data class WebUIUpdateInfo(
|
data class WebUIUpdateInfo(
|
||||||
val channel: String,
|
val channel: WebUIChannel,
|
||||||
val tag: String,
|
val tag: String,
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -28,3 +30,68 @@ data class WebUIUpdateStatus(
|
|||||||
val state: UpdateState,
|
val state: UpdateState,
|
||||||
val progress: Int,
|
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 dorkbox.desktop.Desktop
|
||||||
import io.github.oshai.kotlinlogging.KotlinLogging
|
import io.github.oshai.kotlinlogging.KotlinLogging
|
||||||
|
import suwayomi.tachidesk.graphql.types.WebUIInterface
|
||||||
import suwayomi.tachidesk.server.serverConfig
|
import suwayomi.tachidesk.server.serverConfig
|
||||||
|
|
||||||
object Browser {
|
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.ERROR
|
||||||
import suwayomi.tachidesk.graphql.types.UpdateState.FINISHED
|
import suwayomi.tachidesk.graphql.types.UpdateState.FINISHED
|
||||||
import suwayomi.tachidesk.graphql.types.UpdateState.IDLE
|
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.WebUIUpdateInfo
|
||||||
import suwayomi.tachidesk.graphql.types.WebUIUpdateStatus
|
import suwayomi.tachidesk.graphql.types.WebUIUpdateStatus
|
||||||
import suwayomi.tachidesk.server.ApplicationDirs
|
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")
|
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
|
fun WebUIFlavor.isDefault(): Boolean = this == WebUIFlavor.default
|
||||||
|
|
||||||
object WebInterfaceManager {
|
object WebInterfaceManager {
|
||||||
@@ -188,7 +125,7 @@ object WebInterfaceManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return AboutWebUI(
|
return AboutWebUI(
|
||||||
channel = serverConfig.webUIChannel.value,
|
channel = WebUIChannel.from(serverConfig.webUIChannel.value),
|
||||||
tag = currentVersion,
|
tag = currentVersion,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -201,7 +138,7 @@ object WebInterfaceManager {
|
|||||||
WebUIUpdateStatus(
|
WebUIUpdateStatus(
|
||||||
info =
|
info =
|
||||||
WebUIUpdateInfo(
|
WebUIUpdateInfo(
|
||||||
channel = serverConfig.webUIChannel.value,
|
channel = WebUIChannel.from(serverConfig.webUIChannel.value),
|
||||||
tag = version,
|
tag = version,
|
||||||
),
|
),
|
||||||
state,
|
state,
|
||||||
|
|||||||
Reference in New Issue
Block a user