From 1293adf624bfad3a301ad78c3d6520a8f99ae362 Mon Sep 17 00:00:00 2001 From: Jays2Kings Date: Mon, 20 Mar 2023 00:40:15 -0400 Subject: [PATCH] Improve beta check logic Check the last 10 releases, as stable versions may come out after the beta Also fix the app thinking a beta on the same version is a new release, also also fix checking if one beta is newer than another --- .../data/updater/AppUpdateChecker.kt | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateChecker.kt b/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateChecker.kt index e7742f41b3..de69aaf877 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateChecker.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateChecker.kt @@ -32,11 +32,12 @@ class AppUpdateChecker { .await() .parseAs>() .let { - val release = it.firstOrNull() ?: return@let AppUpdateResult.NoNewUpdate + val releases = it.take(10) + // Check if any of the latest versions are newer than the current version + val release = releases.find { release -> isNewVersion(release.version) } preferences.lastAppCheck().set(Date().time) - // Check if latest version is different from current version - if (isNewVersion(release.version)) { + if (release != null) { AppUpdateResult.NewUpdate(release) } else { AppUpdateResult.NoNewUpdate @@ -50,7 +51,7 @@ class AppUpdateChecker { .let { preferences.lastAppCheck().set(Date().time) - // Check if latest version is different from current version + // Check if latest version is newer than the current version if (isNewVersion(it.version)) { AppUpdateResult.NewUpdate(it) } else { @@ -89,8 +90,19 @@ class AppUpdateChecker { return if (newSemVer.size > oldSemVer.size) { true } else { - // For production versions from beta (new: 1.2.3 vs old: 1.2.3-b1, return true) - (newPreReleaseVer.getOrNull(1) != null) != (oldPreReleaseVer.getOrNull(1) != null) + // If the version numbers match, check the beta versions + val newPreVersion = + newPreReleaseVer.getOrNull(1)?.replace("[^\\d.-]".toRegex(), "")?.toIntOrNull() + val oldPreVersion = + oldPreReleaseVer.getOrNull(1)?.replace("[^\\d.-]".toRegex(), "")?.toIntOrNull() + when { + // For prod, don't bother with betas (current: 1.2.3 vs new: 1.2.3-b1) + oldPreVersion == null -> false + // For betas, always use prod builds (current: 1.2.3-b1 vs new: 1.2.3) + newPreVersion == null -> true + // For betas, higher beta ver is newer (current: 1.2.3-b1 vs new: 1.2.3-b2) + else -> (oldPreVersion < newPreVersion) + } } } }