feat: check-update diff report and list refresh

This commit is contained in:
2026-08-17 20:09:15 +08:00
parent 2e0e1d5d47
commit fb177cc30f
3 changed files with 45 additions and 8 deletions
@@ -419,16 +419,38 @@ class JsBridge(
@android.webkit.JavascriptInterface
fun getWallpaper(): String = wallpaper?.getWallpaperBase64() ?: ""
// 重新拉取 webAPP 清单 + 卡片目录,返回 { count }
// Re-fetch the webAPP manifest + card catalog, return { count }
// 重新拉取 webAPP 清单 + 卡片目录,返回 { added, removed, changed }
// Re-fetch the webAPP manifest + card catalog, return { added, removed, changed }
@android.webkit.JavascriptInterface
fun refreshManifest(): String {
val oldApps = manifestCache ?: emptyList<WebApp>()
manifestCache = null
val apps = webAppRepository?.fetchManifest() ?: emptyList<WebApp>()
if (apps.isNotEmpty()) manifestCache = apps
val cards = cardRepository?.fetchCatalog() ?: emptyList<Card>()
Log.d("HearthBridge", "refreshManifest: ${apps.size} apps, ${cards.size} cards")
return gson.toJson(mapOf("count" to apps.size))
cardRepository?.fetchCatalog()
// 增量计算:新增 / 移除 / 更新(离线包版本或 URL/图标变化)
// Diff: added / removed / changed (offline version or URL/icon changed)
val oldIds = oldApps.map { it.id }.toSet()
val newIds = apps.map { it.id }.toSet()
val added = (newIds - oldIds).size
val removed = (oldIds - newIds).size
val changed = apps.count { new ->
val old = oldApps.find { it.id == new.id }
old != null && (old.offlineVersion != new.offlineVersion ||
old.url != new.url || old.icon != new.icon)
}
Log.d("HearthBridge", "refreshManifest: added=$added removed=$removed changed=$changed (${apps.size} apps)")
// 推送 H5 刷新列表(清 preload 缓存并重渲染)
// Push H5 to refresh the list (clear preload cache and re-render)
desktopWebViewRef?.post {
desktopWebViewRef?.evaluateJavascript(
"window.HearthEvents && window.HearthEvents.webappUpdated();",
null
)
}
return gson.toJson(mapOf("added" to added, "removed" to removed, "changed" to changed))
}
// 注册媒体会话监听,回调推送给 H5(info 为 null 时推 "null"