diff --git a/app/src/full/java/com/topjohnwu/magisk/Data.java b/app/src/full/java/com/topjohnwu/magisk/Data.java index a0d62f05b..cbb8812cc 100644 --- a/app/src/full/java/com/topjohnwu/magisk/Data.java +++ b/app/src/full/java/com/topjohnwu/magisk/Data.java @@ -33,6 +33,7 @@ public class Data { public static int remoteMagiskVersionCode = -1; public static String magiskLink; public static String magiskNoteLink; + public static String magiskMD5; public static String remoteManagerVersionString; public static int remoteManagerVersionCode = -1; public static String managerLink; diff --git a/app/src/full/java/com/topjohnwu/magisk/asyncs/CheckUpdates.java b/app/src/full/java/com/topjohnwu/magisk/asyncs/CheckUpdates.java index 98afc6c59..9dbda9539 100644 --- a/app/src/full/java/com/topjohnwu/magisk/asyncs/CheckUpdates.java +++ b/app/src/full/java/com/topjohnwu/magisk/asyncs/CheckUpdates.java @@ -68,6 +68,7 @@ public class CheckUpdates { Data.remoteMagiskVersionCode = getInt(magisk, "versionCode", -1); Data.magiskLink = getString(magisk, "link", null); Data.magiskNoteLink = getString(magisk, "note", null); + Data.magiskMD5 = getString(magisk, "md5", null); JSONObject manager = getJson(json, "app"); Data.remoteManagerVersionString = getString(manager, "version", null); diff --git a/app/src/full/java/com/topjohnwu/magisk/asyncs/InstallMagisk.java b/app/src/full/java/com/topjohnwu/magisk/asyncs/InstallMagisk.java index e295229c4..586229628 100644 --- a/app/src/full/java/com/topjohnwu/magisk/asyncs/InstallMagisk.java +++ b/app/src/full/java/com/topjohnwu/magisk/asyncs/InstallMagisk.java @@ -35,6 +35,7 @@ import org.kamranzafar.jtar.TarOutputStream; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; +import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FilterInputStream; @@ -136,19 +137,28 @@ public class InstallMagisk extends ParallelTask { } private void extractFiles(String arch) throws IOException { - console.add("- Downloading zip"); String filename = Utils.fmt("Magisk-v%s(%d).zip", Data.remoteMagiskVersionString, Data.remoteMagiskVersionCode); - HttpURLConnection conn = WebService.mustRequest(Data.magiskLink, null); - BufferedInputStream buf = new BufferedInputStream(new ProgressStream(conn)); - buf.mark(Integer.MAX_VALUE); File zip = new File(Download.EXTERNAL_PATH, filename); zip.getParentFile().mkdirs(); - try (OutputStream out = new FileOutputStream(zip)) { - ShellUtils.pump(buf, out); + BufferedInputStream buf; + + if (!ShellUtils.checkSum("MD5", zip, Data.magiskMD5)) { + console.add("- Downloading zip"); + HttpURLConnection conn = WebService.mustRequest(Data.magiskLink, null); + buf = new BufferedInputStream(new ProgressStream(conn), conn.getContentLength()); + buf.mark(Integer.MAX_VALUE); + try (OutputStream out = new FileOutputStream(zip)) { + ShellUtils.pump(buf, out); + } buf.reset(); + conn.disconnect(); + } else { + console.add("- Existing zip found"); + buf = new BufferedInputStream(new FileInputStream(zip), (int) zip.length()); + buf.mark(Integer.MAX_VALUE); } - conn.disconnect(); + console.add("- Extracting files"); try (InputStream in = buf) { ZipUtils.unzip(in, installDir, arch + "/", true);