From d4408e567882970b0067c90c9252f4dea0b62870 Mon Sep 17 00:00:00 2001 From: lisonge Date: Fri, 27 Oct 2023 20:19:32 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96APP=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/li/songe/gkd/App.kt | 2 - .../main/java/li/songe/gkd/ui/HomePageVm.kt | 13 ++++++ .../main/java/li/songe/gkd/util/Constants.kt | 2 + .../main/java/li/songe/gkd/util/Upgrade.kt | 43 +++++++++---------- 4 files changed, 36 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/li/songe/gkd/App.kt b/app/src/main/java/li/songe/gkd/App.kt index 0eb3016ad0..39763c8bd3 100644 --- a/app/src/main/java/li/songe/gkd/App.kt +++ b/app/src/main/java/li/songe/gkd/App.kt @@ -14,7 +14,6 @@ import li.songe.gkd.notif.initChannel import li.songe.gkd.util.initAppState import li.songe.gkd.util.initStore import li.songe.gkd.util.initSubsState -import li.songe.gkd.util.initUpgrade import li.songe.gkd.util.isMainProcess import li.songe.gkd.util.launchTry import org.lsposed.hiddenapibypass.HiddenApiBypass @@ -55,7 +54,6 @@ class App : Application() { initSubsState() if (isMainProcess) { initChannel() - initUpgrade() clearHttpSubs() } } diff --git a/app/src/main/java/li/songe/gkd/ui/HomePageVm.kt b/app/src/main/java/li/songe/gkd/ui/HomePageVm.kt index 22bed22265..cf11df56a9 100644 --- a/app/src/main/java/li/songe/gkd/ui/HomePageVm.kt +++ b/app/src/main/java/li/songe/gkd/ui/HomePageVm.kt @@ -15,6 +15,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.first +import kotlinx.coroutines.launch import kotlinx.serialization.encodeToString import li.songe.gkd.appScope import li.songe.gkd.data.GithubPoliciesAsset @@ -27,7 +28,9 @@ import li.songe.gkd.util.FILE_UPLOAD_URL import li.songe.gkd.util.FolderExt import li.songe.gkd.util.LoadStatus import li.songe.gkd.util.Singleton +import li.songe.gkd.util.checkUpdate import li.songe.gkd.util.launchTry +import li.songe.gkd.util.storeFlow import java.io.File import javax.inject.Inject @@ -72,6 +75,16 @@ class HomePageVm @Inject constructor() : ViewModel() { LogUtils.d("执行快照迁移") } } + + if (storeFlow.value.autoCheckAppUpdate) { + appScope.launch { + try { + checkUpdate() + } catch (e: Exception) { + e.printStackTrace() + } + } + } } val uploadStatusFlow = MutableStateFlow?>(null) diff --git a/app/src/main/java/li/songe/gkd/util/Constants.kt b/app/src/main/java/li/songe/gkd/util/Constants.kt index 56d65d9b8d..7c333091c1 100644 --- a/app/src/main/java/li/songe/gkd/util/Constants.kt +++ b/app/src/main/java/li/songe/gkd/util/Constants.kt @@ -9,6 +9,8 @@ const val DEFAULT_SUBS_UPDATE_URL = const val IMPORT_BASE_URL = "https://i.gkd.li/import/" +const val UPDATE_URL = "https://registry.npmmirror.com/@gkd-kit/app/latest/files/index.json" + val safeRemoteBaseUrls = arrayOf( "https://registry.npmmirror.com/@gkd-kit/", "https://cdn.jsdelivr.net/npm/@gkd-kit/", diff --git a/app/src/main/java/li/songe/gkd/util/Upgrade.kt b/app/src/main/java/li/songe/gkd/util/Upgrade.kt index 651eb99da5..aeba963967 100644 --- a/app/src/main/java/li/songe/gkd/util/Upgrade.kt +++ b/app/src/main/java/li/songe/gkd/util/Upgrade.kt @@ -1,6 +1,5 @@ package li.songe.gkd.util -import android.os.Parcelable import android.util.Log import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.heightIn @@ -26,7 +25,6 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.launch -import kotlinx.parcelize.Parcelize import kotlinx.serialization.Serializable import li.songe.gkd.BuildConfig import li.songe.gkd.appScope @@ -34,16 +32,21 @@ import java.io.File import java.net.URI @Serializable -@Parcelize data class NewVersion( val versionCode: Int, val versionName: String, val changelog: String, val downloadUrl: String, + val versionLogs: List = emptyList(), val fileSize: Long? = null, -) : Parcelable +) -private const val UPDATE_URL = "https://registry.npmmirror.com/@gkd-kit/app/latest/files/index.json" +@Serializable +data class VersionLog( + val name: String, + val code: Int, + val desc: String, +) val checkUpdatingFlow by lazy { MutableStateFlow(false) } val newVersionFlow by lazy { MutableStateFlow(null) } @@ -54,7 +57,8 @@ suspend fun checkUpdate(): NewVersion? { try { val newVersion = Singleton.client.get(UPDATE_URL).body() if (newVersion.versionCode > BuildConfig.VERSION_CODE) { - newVersionFlow.value = newVersion + newVersionFlow.value = + newVersion.copy(versionLogs = newVersion.versionLogs.takeWhile { v -> v.code > BuildConfig.VERSION_CODE }) return newVersion } else { Log.d("Upgrade", "no new version") @@ -106,16 +110,23 @@ fun startDownload(newVersion: NewVersion) { fun UpgradeDialog() { val newVersion by newVersionFlow.collectAsState() newVersion?.let { newVersionVal -> + AlertDialog(title = { Text(text = "检测到新版本") }, text = { - Text( - text = "v${BuildConfig.VERSION_NAME} -> v${newVersionVal.versionName}\n\n${newVersionVal.changelog}\n${newVersionVal.changelog}".trimEnd(), + Text(text = "v${BuildConfig.VERSION_NAME} -> v${newVersionVal.versionName}\n\n${ + if (newVersionVal.versionLogs.size > 1) { + newVersionVal.versionLogs.joinToString("\n\n") { v -> "v${v.name}\n${v.desc}" } + } else if (newVersionVal.versionLogs.isNotEmpty()) { + newVersionVal.versionLogs.first().desc + } else { + "" + } + }".trimEnd(), modifier = Modifier .fillMaxWidth() .heightIn(max = 400.dp) - .verticalScroll(rememberScrollState()) - ) + .verticalScroll(rememberScrollState())) }, onDismissRequest = { }, confirmButton = { TextButton(onClick = { @@ -194,18 +205,6 @@ fun UpgradeDialog() { } } -fun initUpgrade() { - if (storeFlow.value.autoCheckAppUpdate && isMainProcess) { - appScope.launch { - try { - checkUpdate() - } catch (e: Exception) { - e.printStackTrace() - } - } - } -} -