From 898f756a071e26accff02773f05103f077a70085 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Tue, 16 Apr 2024 14:50:28 -0400 Subject: [PATCH] v2.4.0: added version compatibility checks to github updates --- .../java/com/watabou/utils/DeviceCompat.java | 5 +++ .../services/updates/GitHubUpdates.java | 32 ++++++++++++++++--- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/SPD-classes/src/main/java/com/watabou/utils/DeviceCompat.java b/SPD-classes/src/main/java/com/watabou/utils/DeviceCompat.java index 48e1e7f16..e7d86d476 100644 --- a/SPD-classes/src/main/java/com/watabou/utils/DeviceCompat.java +++ b/SPD-classes/src/main/java/com/watabou/utils/DeviceCompat.java @@ -43,6 +43,11 @@ public class DeviceCompat { } } + //return APi level on Android, major OS version on iOS, 0 on desktop + public static int getPlatformVersion(){ + return Gdx.app.getVersion(); + } + public static boolean isAndroid(){ return SharedLibraryLoader.isAndroid; } diff --git a/services/updates/githubUpdates/src/main/java/com/shatteredpixel/shatteredpixeldungeon/services/updates/GitHubUpdates.java b/services/updates/githubUpdates/src/main/java/com/shatteredpixel/shatteredpixeldungeon/services/updates/GitHubUpdates.java index d476e3608..582668dd3 100644 --- a/services/updates/githubUpdates/src/main/java/com/shatteredpixel/shatteredpixeldungeon/services/updates/GitHubUpdates.java +++ b/services/updates/githubUpdates/src/main/java/com/shatteredpixel/shatteredpixeldungeon/services/updates/GitHubUpdates.java @@ -26,6 +26,7 @@ import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Net; import com.watabou.noosa.Game; import com.watabou.utils.Bundle; +import com.watabou.utils.DeviceCompat; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -37,6 +38,9 @@ public class GitHubUpdates extends UpdateService { private static Pattern descPattern = Pattern.compile("(.*?)(\r\n|\n|\r)(\r\n|\n|\r)---", Pattern.DOTALL + Pattern.MULTILINE); private static Pattern versionCodePattern = Pattern.compile("internal version number: ([0-9]*)", Pattern.CASE_INSENSITIVE); + private static Pattern minAndroidPattern = Pattern.compile("Android .*\\(API ([0-9]*)\\)\\+ Devices", Pattern.CASE_INSENSITIVE); + private static Pattern minIOSPattern = Pattern.compile("iOS ([0-9]*)\\+ Devices", Pattern.CASE_INSENSITIVE); + @Override public boolean supportsUpdatePrompts() { return true; @@ -71,11 +75,31 @@ public class GitHubUpdates extends UpdateService { if (m.find()){ int releaseVersion = Integer.parseInt(m.group(1)); - if (releaseVersion > latestVersionCode - && (includeBetas || !b.getBoolean("prerelease"))){ - latestRelease = b; - latestVersionCode = releaseVersion; + + + //skip release that aren't the latest update (or an update at all) + if (releaseVersion <= latestVersionCode) { + continue; + + // or that are betas when we haven't opted in + } else if (!includeBetas && !b.getBoolean("prerelease")){ + continue; + + // or that aren't compatible + } else if (DeviceCompat.isDesktop()){ + Matcher minAndroid = minAndroidPattern.matcher(b.getString("body")); + if (minAndroid.find() && DeviceCompat.getPlatformVersion() < Integer.parseInt(minAndroid.group(1))){ + continue; + } + } else if (DeviceCompat.isiOS()){ + Matcher minIOS = minIOSPattern.matcher(b.getString("body")); + if (minIOS.find() && DeviceCompat.getPlatformVersion() < Integer.parseInt(minIOS.group(1))){ + continue; + } } + + latestRelease = b; + latestVersionCode = releaseVersion; } }