From ad27b8864a9ed21dd9f4dd3d0e79b4e43554074b Mon Sep 17 00:00:00 2001 From: HapeLee <1321903405@qq.com> Date: Thu, 4 Sep 2025 20:38:33 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9C=9F=E7=9A=84=E4=BF=AE=E4=BA=86=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E7=89=88=E8=8E=B7=E5=8F=96=E5=90=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legato/kazusa/constant/AppConst.kt | 1 - .../kazusa/help/update/AppReleaseInfo.kt | 4 +- .../kazusa/help/update/AppUpdateGitHub.kt | 46 +++++++++++-------- .../io/legato/kazusa/ui/about/UpdateDialog.kt | 1 - 4 files changed, 28 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/io/legato/kazusa/constant/AppConst.kt b/app/src/main/java/io/legato/kazusa/constant/AppConst.kt index eb49f0919..cb7157d92 100644 --- a/app/src/main/java/io/legato/kazusa/constant/AppConst.kt +++ b/app/src/main/java/io/legato/kazusa/constant/AppConst.kt @@ -61,7 +61,6 @@ object AppConst { ?.let { appInfo.versionName = it.versionName!! appInfo.appVariant = when { - it.packageName.contains("releaseA") -> AppVariant.BETA_RELEASEA isBeta -> AppVariant.BETA_RELEASE isOfficial -> AppVariant.OFFICIAL else -> AppVariant.UNKNOWN diff --git a/app/src/main/java/io/legato/kazusa/help/update/AppReleaseInfo.kt b/app/src/main/java/io/legato/kazusa/help/update/AppReleaseInfo.kt index 57aa940d3..f21252873 100644 --- a/app/src/main/java/io/legato/kazusa/help/update/AppReleaseInfo.kt +++ b/app/src/main/java/io/legato/kazusa/help/update/AppReleaseInfo.kt @@ -21,12 +21,11 @@ data class AppReleaseInfo( enum class AppVariant { OFFICIAL, - BETA_RELEASEA, BETA_RELEASE, UNKNOWN; fun isBeta(): Boolean { - return this == BETA_RELEASE || this == BETA_RELEASEA + return this == BETA_RELEASE } } @@ -69,7 +68,6 @@ data class Asset( val timestamp: Long = instant.toEpochMilli() val appVariant = when { - preRelease && name.contains("releaseA") -> AppVariant.BETA_RELEASEA preRelease && name.contains("release") -> AppVariant.BETA_RELEASE else -> AppVariant.OFFICIAL } diff --git a/app/src/main/java/io/legato/kazusa/help/update/AppUpdateGitHub.kt b/app/src/main/java/io/legato/kazusa/help/update/AppUpdateGitHub.kt index a8f55a791..e5c999cea 100644 --- a/app/src/main/java/io/legato/kazusa/help/update/AppUpdateGitHub.kt +++ b/app/src/main/java/io/legato/kazusa/help/update/AppUpdateGitHub.kt @@ -9,6 +9,7 @@ import io.legato.kazusa.help.http.newCallResponse import io.legato.kazusa.help.http.okHttpClient import io.legato.kazusa.help.http.text import io.legato.kazusa.utils.GSON +import io.legato.kazusa.utils.fromJsonArray import io.legato.kazusa.utils.fromJsonObject import kotlinx.coroutines.CoroutineScope @@ -20,41 +21,48 @@ object AppUpdateGitHub : AppUpdate.AppUpdateInterface { get() = when (AppConfig.updateToVariant) { "official_version" -> AppVariant.OFFICIAL "beta_release_version" -> AppVariant.BETA_RELEASE - "beta_releaseA_version" -> AppVariant.BETA_RELEASEA else -> AppConst.appInfo.appVariant } - private suspend fun getLatestRelease(): List { - val url = "https://api.github.com/repos/HapeLee/legado-with-MD3/releases" - val res = okHttpClient.newCallResponse { url(url) } + private suspend fun getLatestRelease(): List { + val lastReleaseUrl = if (checkVariant.isBeta()) { + "https://api.github.com/repos/HapeLee/legado-with-MD3/releases" + } else { + "https://api.github.com/repos/HapeLee/legado-with-MD3/releases/latest" + } + + val res = okHttpClient.newCallResponse { + url(lastReleaseUrl) + } if (!res.isSuccessful) { throw NoStackTraceException("获取新版本出错(${res.code})") } - val body = res.body.text() if (body.isBlank()) { - throw NoStackTraceException("获取新版本出错:返回为空") + throw NoStackTraceException("获取新版本出错") + } + return if (checkVariant.isBeta()) { + GSON.fromJsonArray(body) + .getOrElse { throw NoStackTraceException("获取新版本出错 ${it.localizedMessage}") } + .filter { it.isPreRelease } + .flatMap { it.gitReleaseToAppReleaseInfo() } + .sortedByDescending { it.createdAt } + } else { + listOf( + GSON.fromJsonObject(body) + .getOrElse { throw NoStackTraceException("获取新版本出错 ${it.localizedMessage}") } + .gitReleaseToAppReleaseInfo() + ).flatten() + .sortedByDescending { it.createdAt } } - val allReleases = GSON.fromJsonObject>(body) - .getOrElse { throw NoStackTraceException("解析版本信息出错:${it.localizedMessage}") } - - val releases = allReleases - .flatMap { it.gitReleaseToAppReleaseInfo() } - .filter { it.appVariant == checkVariant } - .sortedByDescending { it.createdAt } - - return releases } - /** - * 检查更新 - */ override fun check(scope: CoroutineScope): Coroutine { return Coroutine.async(scope) { val currentVersion = AppConst.appInfo.versionName val releases = getLatestRelease() + .filter { it.appVariant == checkVariant } - // 找出比当前版本高的最新 release val latest = releases .firstOrNull { it.versionName > currentVersion } diff --git a/app/src/main/java/io/legato/kazusa/ui/about/UpdateDialog.kt b/app/src/main/java/io/legato/kazusa/ui/about/UpdateDialog.kt index a61e026fc..550b77355 100644 --- a/app/src/main/java/io/legato/kazusa/ui/about/UpdateDialog.kt +++ b/app/src/main/java/io/legato/kazusa/ui/about/UpdateDialog.kt @@ -34,7 +34,6 @@ class UpdateDialog() : BaseBottomSheetDialogFragment(R.layout.dialog_update) { get() = when (AppConfig.updateToVariant) { "official_version" -> AppVariant.OFFICIAL "beta_release_version" -> AppVariant.BETA_RELEASE - "beta_releaseA_version" -> AppVariant.BETA_RELEASEA else -> AppConst.appInfo.appVariant }