From a68dd71fdaf621c30296d1e54bf11ec8e012c9fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=97=E5=AE=AB=E9=9B=AA=E7=8F=8A?= Date: Mon, 8 Nov 2021 20:55:22 +0800 Subject: [PATCH] [app] Multi assets support (#1378) --- .../org/lsposed/manager/util/UpdateUtil.java | 58 +++++++++++-------- 1 file changed, 34 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/org/lsposed/manager/util/UpdateUtil.java b/app/src/main/java/org/lsposed/manager/util/UpdateUtil.java index ce2fff29..4b20c584 100644 --- a/app/src/main/java/org/lsposed/manager/util/UpdateUtil.java +++ b/app/src/main/java/org/lsposed/manager/util/UpdateUtil.java @@ -5,6 +5,7 @@ import android.util.Log; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import com.google.gson.JsonObject; import com.google.gson.JsonParser; import org.lsposed.manager.App; @@ -15,6 +16,7 @@ import java.io.File; import java.io.IOException; import java.time.Instant; import java.time.ZoneOffset; +import java.util.Locale; import okhttp3.Call; import okhttp3.Callback; @@ -24,7 +26,6 @@ import okio.Okio; public class UpdateUtil { public static void loadRemoteVersion() { - var pref = App.getPreferences(); var request = new Request.Builder() .url("https://api.github.com/repos/LSPosed/LSPosed/releases/latest") .addHeader("Accept", "application/vnd.github.v3+json") @@ -35,31 +36,13 @@ public class UpdateUtil { if (!response.isSuccessful()) return; var body = response.body(); if (body == null) return; + String api = ConfigManager.isBinderAlive() ? ConfigManager.getApi() : "riru"; try { var info = JsonParser.parseReader(body.charStream()).getAsJsonObject(); - var assets = info.getAsJsonArray("assets").get(0).getAsJsonObject(); - var name = assets.get("name").getAsString(); - var code = Integer.parseInt(name.split("-", 4)[2]); - var now = Instant.now().getEpochSecond(); - var releaseNotes = info.get("body").getAsString(); - pref.edit() - .putInt("latest_version", code) - .putLong("latest_check", now) - .putString("release_notes", releaseNotes) - .putBoolean("checked", true) - .apply(); - var updatedAt = Instant.parse(assets.get("updated_at").getAsString()); - var downloadUrl = assets.get("browser_download_url").getAsString(); - var nowZipTime = pref.getLong("zip_time", BuildConfig.BUILD_TIME); - if (updatedAt.isAfter(Instant.ofEpochSecond(nowZipTime))) { - var zip = downloadNewZipSync(downloadUrl, name); - var size = assets.get("size").getAsLong(); - if (zip != null && zip.length() == size) { - pref.edit() - .putLong("zip_time", updatedAt.getEpochSecond()) - .putString("zip_file", zip.getAbsolutePath()) - .apply(); - } + var notes = info.get("body").getAsString(); + var assetsArray = info.getAsJsonArray("assets"); + for (var assets : assetsArray) { + checkAssets(assets.getAsJsonObject(), notes, api.toLowerCase(Locale.ROOT)); } } catch (Throwable t) { Log.e(App.TAG, t.getMessage(), t); @@ -69,6 +52,7 @@ public class UpdateUtil { @Override public void onFailure(@NonNull Call call, @NonNull IOException e) { Log.e(App.TAG, "loadRemoteVersion: " + e.getMessage()); + var pref = App.getPreferences(); if (pref.getBoolean("checked", false)) return; pref.edit().putBoolean("checked", true).apply(); } @@ -76,6 +60,32 @@ public class UpdateUtil { App.getOkHttpClient().newCall(request).enqueue(callback); } + private static void checkAssets(JsonObject assets, String releaseNotes, String api) { + var pref = App.getPreferences(); + var name = assets.get("name").getAsString(); + var splitName = name.split("-"); + if (!splitName[3].equals(api)) return; + pref.edit() + .putInt("latest_version", Integer.parseInt(splitName[2])) + .putLong("latest_check", Instant.now().getEpochSecond()) + .putString("release_notes", releaseNotes) + .putBoolean("checked", true) + .apply(); + var updatedAt = Instant.parse(assets.get("updated_at").getAsString()); + var downloadUrl = assets.get("browser_download_url").getAsString(); + var nowZipTime = pref.getLong("zip_time", BuildConfig.BUILD_TIME); + if (updatedAt.isAfter(Instant.ofEpochSecond(nowZipTime))) { + var zip = downloadNewZipSync(downloadUrl, name); + var size = assets.get("size").getAsLong(); + if (zip != null && zip.length() == size) { + pref.edit() + .putLong("zip_time", updatedAt.getEpochSecond()) + .putString("zip_file", zip.getAbsolutePath()) + .apply(); + } + } + } + public static boolean needUpdate() { var pref = App.getPreferences(); if (!pref.getBoolean("checked", false)) return false;