From 303d2c4cdcc8020f73ac4be8c81e28a959df69f8 Mon Sep 17 00:00:00 2001 From: tuxgyver Date: Sun, 25 Oct 2026 16:28:59 +0100 Subject: [PATCH] =?UTF-8?q?feat:=20d=C3=A9ploiement=20forc=C3=A9=20de=20Da?= =?UTF-8?q?taControl=20(r=C3=A9installation=20m=C3=AAme=20version)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AppDeployer honore le drapeau `force` de l'ordre de déploiement envoyé par le serveur : la (ré)installation est effectuée même si la version proposée n'est pas plus récente que celle installée, et les garde-fous anti-rejeu sont ignorés. Utile pour réparer ou réinstaller DataControl à distance via le tunnel. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01R9CBCVP5oDu2sfoYPisNCQ --- .../java/com/jttools/datacontrol/remote/AppDeployer.kt | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/jttools/datacontrol/remote/AppDeployer.kt b/app/src/main/java/com/jttools/datacontrol/remote/AppDeployer.kt index c9b35d0..1a8d886 100644 --- a/app/src/main/java/com/jttools/datacontrol/remote/AppDeployer.kt +++ b/app/src/main/java/com/jttools/datacontrol/remote/AppDeployer.kt @@ -50,12 +50,15 @@ class AppDeployer @Inject constructor( suspend fun handle(order: JSONObject, apiBase: String, report: suspend (String, String) -> Unit) = withContext(Dispatchers.IO) { val version = order.optString("version") - if (version.isBlank() || !UpdateManager.isNewer(version, BuildConfig.VERSION_NAME)) return@withContext + if (version.isBlank()) return@withContext + // Déploiement forcé (option du parent) : réinstalle même version comprise, en ignorant les garde-fous. + val force = order.optBoolean("force", false) + if (!force && !UpdateManager.isNewer(version, BuildConfig.VERSION_NAME)) return@withContext val now = SystemClock.elapsedRealtime() - if (version == lastVersion && now - lastAttemptAt < RETRY_MS) return@withContext + if (!force && version == lastVersion && now - lastAttemptAt < RETRY_MS) return@withContext lastVersion = version lastAttemptAt = now - AppLog.i("Mise à jour", "Déploiement de DataControl $version demandé par le serveur") + AppLog.i("Mise à jour", "Déploiement de DataControl $version demandé par le serveur" + if (force) " (forcé)" else "") try { val file = download(apiBase + order.getString("url"), order.getString("sha256").lowercase(), version) install(file, version)