diff --git a/server/src/main/kotlin/suwayomi/tachidesk/graphql/mutations/InfoMutation.kt b/server/src/main/kotlin/suwayomi/tachidesk/graphql/mutations/InfoMutation.kt index 17214936..f28a8068 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/graphql/mutations/InfoMutation.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/graphql/mutations/InfoMutation.kt @@ -3,6 +3,7 @@ package suwayomi.tachidesk.graphql.mutations import kotlinx.coroutines.flow.first import kotlinx.coroutines.withTimeout import suwayomi.tachidesk.graphql.types.UpdateState.DOWNLOADING +import suwayomi.tachidesk.graphql.types.UpdateState.ERROR import suwayomi.tachidesk.graphql.types.UpdateState.STOPPED import suwayomi.tachidesk.graphql.types.WebUIUpdateInfo import suwayomi.tachidesk.graphql.types.WebUIUpdateStatus @@ -32,6 +33,8 @@ class InfoMutation { val (version, updateAvailable) = WebInterfaceManager.isUpdateAvailable() if (!updateAvailable) { + val didUpdateCheckFail = version.isEmpty() + return@withTimeout WebUIUpdatePayload( input.clientMutationId, WebUIUpdateStatus( @@ -41,7 +44,7 @@ class InfoMutation { tag = version, updateAvailable, ), - state = STOPPED, + state = if (didUpdateCheckFail) ERROR else STOPPED, progress = 0, ), ) diff --git a/server/src/main/kotlin/suwayomi/tachidesk/graphql/queries/InfoQuery.kt b/server/src/main/kotlin/suwayomi/tachidesk/graphql/queries/InfoQuery.kt index bf3e8c0e..160614ab 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/graphql/queries/InfoQuery.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/graphql/queries/InfoQuery.kt @@ -1,7 +1,8 @@ package suwayomi.tachidesk.graphql.queries import suwayomi.tachidesk.global.impl.AppUpdate -import suwayomi.tachidesk.graphql.types.WebUIUpdateInfo +import suwayomi.tachidesk.graphql.types.AboutWebUI +import suwayomi.tachidesk.graphql.types.WebUIUpdateCheck import suwayomi.tachidesk.graphql.types.WebUIUpdateStatus import suwayomi.tachidesk.server.JavalinSetup.future import suwayomi.tachidesk.server.generated.BuildConfig @@ -51,16 +52,16 @@ class InfoQuery { } } - fun aboutWebUI(): CompletableFuture { + fun aboutWebUI(): CompletableFuture { return future { WebInterfaceManager.getAboutInfo() } } - fun checkForWebUIUpdate(): CompletableFuture { + fun checkForWebUIUpdate(): CompletableFuture { return future { - val (version, updateAvailable) = WebInterfaceManager.isUpdateAvailable() - WebUIUpdateInfo( + val (version, updateAvailable) = WebInterfaceManager.isUpdateAvailable(raiseError = true) + WebUIUpdateCheck( channel = serverConfig.webUIChannel.value, tag = version, updateAvailable, diff --git a/server/src/main/kotlin/suwayomi/tachidesk/graphql/types/WebUIUpdateType.kt b/server/src/main/kotlin/suwayomi/tachidesk/graphql/types/WebUIUpdateType.kt index ba5e112d..56d01820 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/graphql/types/WebUIUpdateType.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/graphql/types/WebUIUpdateType.kt @@ -1,5 +1,16 @@ package suwayomi.tachidesk.graphql.types +data class AboutWebUI( + val channel: String, + val tag: String, +) + +data class WebUIUpdateCheck( + val channel: String, + val tag: String, + val updateAvailable: Boolean, +) + data class WebUIUpdateInfo( val channel: String, val tag: String, diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/util/WebInterfaceManager.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/util/WebInterfaceManager.kt index 1026c229..8abd9710 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/server/util/WebInterfaceManager.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/server/util/WebInterfaceManager.kt @@ -36,6 +36,7 @@ import net.lingala.zip4j.ZipFile import org.kodein.di.DI import org.kodein.di.conf.global import org.kodein.di.instance +import suwayomi.tachidesk.graphql.types.AboutWebUI import suwayomi.tachidesk.graphql.types.UpdateState import suwayomi.tachidesk.graphql.types.UpdateState.DOWNLOADING import suwayomi.tachidesk.graphql.types.UpdateState.ERROR @@ -167,7 +168,7 @@ object WebInterfaceManager { ) } - suspend fun getAboutInfo(): WebUIUpdateInfo { + suspend fun getAboutInfo(): AboutWebUI { val currentVersion = getLocalVersion() val failedToGetVersion = currentVersion === "r-1" @@ -175,10 +176,9 @@ object WebInterfaceManager { throw Exception("Failed to get current version") } - return WebUIUpdateInfo( + return AboutWebUI( channel = serverConfig.webUIChannel.value, tag = currentVersion, - updateAvailable = isUpdateAvailable(currentVersion).second, ) } @@ -661,7 +661,10 @@ object WebInterfaceManager { ZipFile(zipFilePath).use { it.extractAll(targetPath) } } - suspend fun isUpdateAvailable(currentVersion: String = getLocalVersion()): Pair { + suspend fun isUpdateAvailable( + currentVersion: String = getLocalVersion(), + raiseError: Boolean = false, + ): Pair { return try { val latestCompatibleVersion = getLatestCompatibleVersion() val isUpdateAvailable = latestCompatibleVersion != currentVersion @@ -669,6 +672,11 @@ object WebInterfaceManager { Pair(latestCompatibleVersion, isUpdateAvailable) } catch (e: Exception) { logger.warn(e) { "isUpdateAvailable: check failed due to" } + + if (raiseError) { + throw e + } + Pair("", false) } }