From 8fd840bd8d5045d9ac5245d311effabb00ce172a Mon Sep 17 00:00:00 2001 From: Seb3thehacker Date: Tue, 13 Oct 2026 15:21:17 -0700 Subject: [PATCH] updates: offer the final release to people on its beta or alpha --- .../gearslip/update/UpdateChecker.kt | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/gearslip/src/main/java/app/seb3thehacker/gearslip/update/UpdateChecker.kt b/gearslip/src/main/java/app/seb3thehacker/gearslip/update/UpdateChecker.kt index f6bfaaa..eff740f 100644 --- a/gearslip/src/main/java/app/seb3thehacker/gearslip/update/UpdateChecker.kt +++ b/gearslip/src/main/java/app/seb3thehacker/gearslip/update/UpdateChecker.kt @@ -409,9 +409,22 @@ object UpdateChecker { return release.takeIf { isNewer(it.version, BuildConfig.VERSION_NAME) } } - /** "0.2.00-alpha" beats "0.1.10-alpha": the numbers before the dash compare one by one. */ + /** + * "0.2.00-alpha" beats "0.1.10-alpha": the numbers before the dash compare one by one. With the + * same numbers, a plain release beats a beta, and a beta beats an alpha, so "0.3.0" reaches + * someone on "0.3.0-beta". + */ internal fun isNewer(candidate: String, installed: String): Boolean { fun parts(v: String) = v.removePrefix("v").substringBefore('-').split('.').map { it.toIntOrNull() ?: 0 } + fun stage(v: String): Int { + val tag = v.substringAfter('-', "").lowercase() + return when { + tag.isEmpty() -> 3 + "beta" in tag -> 2 + "alpha" in tag -> 1 + else -> 0 + } + } val a = parts(candidate) val b = parts(installed) for (i in 0 until maxOf(a.size, b.size)) { @@ -419,6 +432,6 @@ object UpdateChecker { val y = b.getOrElse(i) { 0 } if (x != y) return x > y } - return false + return stage(candidate) > stage(installed) } }