From a7979b83235d3513180b3632bfe50e6ebb0cc80c Mon Sep 17 00:00:00 2001
From: nicki <72807749+curche@users.noreply.github.com>
Date: Wed, 11 May 2022 02:34:40 +0530
Subject: [PATCH] Check for app updates by comparing semver (#7100)

Instead of just checking whether the current app version *matches* with
latest app version in GitHub Releases, compare the semver from the tag
names to check whether the latter is greater and the app needs an update

Reference: semver spec #11 https://semver.org/#spec-item-11

Co-authored-by: Andreas <6576096+ghostbear@users.noreply.github.com>

Co-authored-by: Andreas <6576096+ghostbear@users.noreply.github.com>
(cherry picked from commit e7ed130f2a4fcd7452737476189687fbd130c80d)
(cherry picked from commit 81bdc190755a5a49a6e49a89ef3962f9ecf5c0d0)
---
 .../tachiyomi/data/updater/AppUpdateChecker.kt      | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 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 462f73406..0450d8e16 100755
--- a/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateChecker.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateChecker.kt
@@ -55,12 +55,13 @@ class AppUpdateChecker {
     }
 
     // SY -->
-    private fun isNewVersionSY(versionTag: String) = (versionTag != BuildConfig.VERSION_NAME && (syDebugVersion == "0")) || ((syDebugVersion != "0") && versionTag != syDebugVersion)
+    private fun isNewVersionSY(versionTag: String) = (versionTag != BuildConfig.VERSION_NAME && syDebugVersion == "0") || (syDebugVersion != "0" && versionTag != syDebugVersion)
     // SY <--
 
     private fun isNewVersion(versionTag: String): Boolean {
         // Removes prefixes like "r" or "v"
         val newVersion = versionTag.replace("[^\\d.]".toRegex(), "")
+        val oldVersion = BuildConfig.VERSION_NAME.replace("[^\\d.]".toRegex(), "")
 
         return if (BuildConfig.DEBUG) {
             // Preview builds: based on releases in "tachiyomiorg/tachiyomi-preview" repo
@@ -69,7 +70,15 @@ class AppUpdateChecker {
         } else {
             // Release builds: based on releases in "tachiyomiorg/tachiyomi" repo
             // tagged as something like "v0.1.2"
-            newVersion != BuildConfig.VERSION_NAME
+            val newSemVer = newVersion.split(".").map { it.toInt() }
+            val oldSemVer = oldVersion.split(".").map { it.toInt() }
+
+            oldSemVer.mapIndexed { index, i ->
+                if (newSemVer[index] > i) {
+                    return true
+                }
+            }
+            false
         }
     }
 }