From 9e2b72249101780270e93a1177fcc07f8c09fbf4 Mon Sep 17 00:00:00 2001 From: ShirkNeko <109797057+ShirkNeko@users.noreply.github.com> Date: Thu, 29 May 2025 14:44:24 +0800 Subject: [PATCH] manager: Adding Vacancies to WeiUI Configuration and Implementing Asynchronous Loading - Upgrade agp version to 8.10.1 --- .../ultra/ui/viewmodel/ModuleViewModel.kt | 26 ++++++++++++------- manager/gradle/libs.versions.toml | 2 +- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/viewmodel/ModuleViewModel.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/viewmodel/ModuleViewModel.kt index d8df6d50..b295bdeb 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/viewmodel/ModuleViewModel.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/viewmodel/ModuleViewModel.kt @@ -10,6 +10,7 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import com.sukisu.ultra.ui.util.HanziToPinyin import com.sukisu.ultra.ui.util.listModules import org.json.JSONArray @@ -42,7 +43,7 @@ class ModuleViewModel : ViewModel() { val hasWebUi: Boolean, val hasActionScript: Boolean, val dirId: String, // real module id (dir name) - val config: ModuleConfig, + var config: ModuleConfig? = null, ) var isRefreshing by mutableStateOf(false) @@ -91,32 +92,40 @@ class ModuleViewModel : ViewModel() { .map { array.getJSONObject(it) } .map { obj -> val id = obj.getString("id") - val config = id.asModuleConfig ModuleInfo( id, - config.name ?: obj.optString("name"), + obj.optString("name", "Unknown"), obj.optString("author", "Unknown"), obj.optString("version", "Unknown"), obj.optInt("versionCode", 0), - config.description ?: obj.optString("description"), + obj.optString("description", ""), obj.getBoolean("enabled"), obj.getBoolean("update"), obj.getBoolean("remove"), obj.optString("updateJson"), obj.optBoolean("web"), obj.optBoolean("action"), - obj.getString("dir_id"), - config + obj.getString("dir_id") ) }.toList() + launch { + modules.forEach { module -> + withContext(Dispatchers.IO) { + try { + module.config = module.id.asModuleConfig + } catch (e: Exception) { + Log.e(TAG, "Failed to load config for module ${module.id}", e) + } + } + } + } + isNeedRefresh = false }.onFailure { e -> Log.e(TAG, "fetchModuleList: ", e) isRefreshing = false } - // when both old and new is kotlin.collections.EmptyList - // moduleList update will don't trigger if (oldModuleList === modules) { isRefreshing = false } @@ -134,7 +143,6 @@ class ModuleViewModel : ViewModel() { if (m.updateJson.isEmpty() || m.remove || m.update || !m.enabled) { return empty } - // download updateJson val result = kotlin.runCatching { val url = m.updateJson Log.i(TAG, "checkUpdate url: $url") diff --git a/manager/gradle/libs.versions.toml b/manager/gradle/libs.versions.toml index e817a11a..75a2bfc9 100644 --- a/manager/gradle/libs.versions.toml +++ b/manager/gradle/libs.versions.toml @@ -1,5 +1,5 @@ [versions] -agp = "8.10.0" +agp = "8.10.1" kotlin = "2.1.20" ksp = "2.1.20-2.0.0" compose-bom = "2025.05.01"