mirror of
https://github.com/Suwayomi/Suwayomi-Server.git
synced 2026-07-03 19:04:39 -05:00
* Add "server" to "checkForUpdate" logic names * Use "webUIRoot" as default path for "getLocalVersion" * Use local version as default version for "isUpdateAvailable" * Return the version with the webUI update check * Update WebinterfaceManager to be async * Add query, mutation and subscription for webUI update * Catch error and return default error value for missing local WebUI version
63 lines
2.3 KiB
Kotlin
63 lines
2.3 KiB
Kotlin
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.FINISHED
|
|
import suwayomi.tachidesk.graphql.types.UpdateState.STOPPED
|
|
import suwayomi.tachidesk.graphql.types.WebUIUpdateInfo
|
|
import suwayomi.tachidesk.graphql.types.WebUIUpdateStatus
|
|
import suwayomi.tachidesk.server.JavalinSetup.future
|
|
import suwayomi.tachidesk.server.serverConfig
|
|
import suwayomi.tachidesk.server.util.WebInterfaceManager
|
|
import java.util.concurrent.CompletableFuture
|
|
import kotlin.time.Duration.Companion.seconds
|
|
|
|
class InfoMutation {
|
|
data class WebUIUpdateInput(
|
|
val clientMutationId: String? = null
|
|
)
|
|
|
|
data class WebUIUpdatePayload(
|
|
val clientMutationId: String?,
|
|
val updateStatus: WebUIUpdateStatus
|
|
)
|
|
|
|
fun updateWebUI(input: WebUIUpdateInput): CompletableFuture<WebUIUpdatePayload> {
|
|
return future {
|
|
withTimeout(30.seconds) {
|
|
if (WebInterfaceManager.status.value.state === DOWNLOADING) {
|
|
return@withTimeout WebUIUpdatePayload(input.clientMutationId, WebInterfaceManager.status.value)
|
|
}
|
|
|
|
val (version, updateAvailable) = WebInterfaceManager.isUpdateAvailable()
|
|
|
|
if (!updateAvailable) {
|
|
return@withTimeout WebUIUpdatePayload(
|
|
input.clientMutationId,
|
|
WebUIUpdateStatus(
|
|
info = WebUIUpdateInfo(
|
|
channel = serverConfig.webUIChannel,
|
|
tag = version,
|
|
updateAvailable
|
|
),
|
|
state = STOPPED,
|
|
progress = 0
|
|
)
|
|
)
|
|
}
|
|
try {
|
|
WebInterfaceManager.startDownloadInScope(version)
|
|
} catch (e: Exception) {
|
|
// ignore since we use the status anyway
|
|
}
|
|
|
|
WebUIUpdatePayload(
|
|
input.clientMutationId,
|
|
updateStatus = WebInterfaceManager.status.first { it.state == DOWNLOADING }
|
|
)
|
|
}
|
|
}
|
|
}
|
|
}
|