You've already forked Magisk
mirror of
https://github.com/topjohnwu/Magisk.git
synced 2025-09-06 06:36:58 +00:00
Refactor repo class and SharedPref
This commit is contained in:
@@ -7,16 +7,13 @@ import java.util.List;
|
||||
|
||||
public abstract class BaseModule {
|
||||
|
||||
protected String mId, mName, mVersion, mDescription, mSupportUrl, mDonateUrl, mAuthor;
|
||||
protected String mId, mName, mVersion, mAuthor, mDescription, mSupportUrl, mDonateUrl;
|
||||
protected boolean mIsCacheModule = false;
|
||||
|
||||
protected int mVersionCode = 0;
|
||||
|
||||
public BaseModule(List<String> props) {
|
||||
this(props.toArray(new String[props.size()]));
|
||||
}
|
||||
protected void parseProps(List<String> props) { parseProps(props.toArray(new String[props.size()])); }
|
||||
|
||||
public BaseModule(String[] props) {
|
||||
protected void parseProps(String[] props) {
|
||||
for (String line : props) {
|
||||
String[] prop = line.split("=", 2);
|
||||
if (prop.length != 2) {
|
||||
@@ -93,11 +90,11 @@ public abstract class BaseModule {
|
||||
return mVersionCode;
|
||||
}
|
||||
|
||||
public String getmDonateUrl() {
|
||||
public String getDonateUrl() {
|
||||
return mDonateUrl;
|
||||
}
|
||||
|
||||
public String getmSupportUrl() {
|
||||
public String getSupportUrl() {
|
||||
return mSupportUrl;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,9 +16,10 @@ public class Module extends BaseModule {
|
||||
private String mZipUrl, mLogUrl;
|
||||
private boolean mEnable, mRemove, mUpdateAvailable = false, mIsInstalled;
|
||||
|
||||
public Module(String path, Context context) {
|
||||
public Module(Context context, String path) {
|
||||
|
||||
super(Utils.readFile(path + "/module.prop"));
|
||||
super();
|
||||
parseProps(Utils.readFile(path + "/module.prop"));
|
||||
|
||||
mRemoveFile = path + "/remove";
|
||||
mDisableFile = path + "/disable";
|
||||
|
||||
@@ -15,254 +15,47 @@ import org.json.JSONObject;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
public class Repo {
|
||||
private String mBaseUrl;
|
||||
private String mZipUrl;
|
||||
private String mLogUrl;
|
||||
private String mManifestUrl;
|
||||
private String mVersion;
|
||||
private String mName;
|
||||
private String mDescription;
|
||||
private String mAuthor;
|
||||
public String mAuthorUrl;
|
||||
private String mId;
|
||||
private String mVersionCode;
|
||||
private String mSupportUrl;
|
||||
private String mDonateUrl;
|
||||
private String lastUpdate;
|
||||
private Context appContext;
|
||||
private boolean mIsInstalled,mCanUpdate,mIsCacheModule;
|
||||
|
||||
|
||||
public Repo(String manifestString, Context context) {
|
||||
appContext = context;
|
||||
ParseProps(manifestString);
|
||||
public class Repo extends BaseModule {
|
||||
protected String repoName, mLogUrl, mManifestUrl, mZipUrl;
|
||||
protected Date mLastUpdate;
|
||||
protected boolean mIsInstalled = false, mCanUpdate = false;
|
||||
|
||||
public Repo(Context context, String name, Date lastUpdate) {
|
||||
repoName = name;
|
||||
mLastUpdate = lastUpdate;
|
||||
mLogUrl = context.getString(R.string.file_url, repoName, "changelog.txt");
|
||||
mManifestUrl = context.getString(R.string.file_url, repoName, "module.prop");
|
||||
mZipUrl = context.getString(R.string.zip_url, repoName);
|
||||
update();
|
||||
}
|
||||
|
||||
|
||||
|
||||
public Repo(String name, String url, Date updated, Context context) {
|
||||
appContext = context;
|
||||
this.mName = name;
|
||||
this.mBaseUrl = url;
|
||||
this.lastUpdate = updated.toString();
|
||||
|
||||
this.fetch();
|
||||
|
||||
public void update() {
|
||||
String props = WebRequest.makeWebServiceCall(mManifestUrl, WebRequest.GET, true);
|
||||
String lines[] = props.split("\\n");
|
||||
parseProps(lines);
|
||||
}
|
||||
|
||||
public Repo(String moduleName, String moduleDescription, String zipUrl, Date lastUpdated, Context context) {
|
||||
appContext = context;
|
||||
this.mZipUrl = zipUrl;
|
||||
this.mDescription = moduleDescription;
|
||||
this.mName = moduleName;
|
||||
this.lastUpdate = lastUpdated.toString();
|
||||
this.fetch();
|
||||
|
||||
}
|
||||
|
||||
public void fetch() {
|
||||
|
||||
// Construct initial url for contents
|
||||
String repoString = WebRequest.makeWebServiceCall(mBaseUrl + "/contents?access_token=" + Utils.procFile(appContext.getString(R.string.some_string), appContext), WebRequest.GET);
|
||||
try {
|
||||
JSONArray repoArray = new JSONArray(repoString);
|
||||
for (int f = 0; f < repoArray.length(); f++) {
|
||||
JSONObject jsonobject = repoArray.getJSONObject(f);
|
||||
String name = jsonobject.getString("name");
|
||||
String url = jsonobject.getString("download_url").trim();
|
||||
Log.d("Magisk","Repo - checking object named " + name + " with value of " + url);
|
||||
if (name.contains(".zip")) {
|
||||
this.mZipUrl = url;
|
||||
}
|
||||
if (name.equals("module.prop")) {
|
||||
this.mManifestUrl = url;
|
||||
}
|
||||
if (name.contains("log.txt")) {
|
||||
Log.d("Magisk","Repo: Setting log URL for " + name + " of " + url);
|
||||
this.mLogUrl = url;
|
||||
}
|
||||
}
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
String manifestString = WebRequest.makeWebServiceCall(mManifestUrl, WebRequest.GET, true);
|
||||
|
||||
if (ParseProps(manifestString)) {
|
||||
PutProps(manifestString);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void PutProps(String manifestString) {
|
||||
manifestString = manifestString + "zipUrl=" + mZipUrl + "\nbaseUrl=" + mBaseUrl + "\nlogUrl=" + mLogUrl + "\nmanifestUrl=" + mManifestUrl;
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(appContext);
|
||||
SharedPreferences.Editor editor = prefs.edit();
|
||||
editor.putString("repo_" + mId, manifestString);
|
||||
editor.putBoolean("hasCachedRepos", true);
|
||||
editor.putString("updated_" + mId, this.lastUpdate);
|
||||
editor.apply();
|
||||
}
|
||||
private boolean ParseProps(String string) {
|
||||
|
||||
if ((string.length() <= 1) | (!string.contains("id"))) {
|
||||
return false;
|
||||
} else {
|
||||
String lines[] = string.split("\\n");
|
||||
for (String line : lines) {
|
||||
if (line != "") {
|
||||
String props[] = line.split("=");
|
||||
switch (props[0]) {
|
||||
case "versionCode":
|
||||
this.mVersionCode = props[1];
|
||||
break;
|
||||
case "name":
|
||||
this.mName = props[1];
|
||||
break;
|
||||
case "author":
|
||||
this.mAuthor = props[1];
|
||||
break;
|
||||
case "id":
|
||||
this.mId = props[1];
|
||||
break;
|
||||
case "version":
|
||||
this.mVersion = props[1];
|
||||
break;
|
||||
case "description":
|
||||
this.mDescription = props[1];
|
||||
break;
|
||||
case "donate":
|
||||
this.mDonateUrl = props[1];
|
||||
break;
|
||||
case "cacheModule":
|
||||
this.mIsCacheModule = Boolean.valueOf(props[1]);
|
||||
break;
|
||||
case "support":
|
||||
this.mSupportUrl = props[1];
|
||||
break;
|
||||
case "logUrl":
|
||||
this.mLogUrl = props[1];
|
||||
break;
|
||||
case "donateUrl":
|
||||
this.mDonateUrl = props[1];
|
||||
break;
|
||||
case "zipUrl":
|
||||
this.mZipUrl = props[1];
|
||||
break;
|
||||
case "baseUrl":
|
||||
this.mBaseUrl = props[1];
|
||||
break;
|
||||
case "manifestUrl":
|
||||
this.mManifestUrl = props[1];
|
||||
break;
|
||||
default:
|
||||
Log.d("Magisk", "Manifest string not recognized: " + props[0]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(appContext);
|
||||
if (prefs.contains("repo-isInstalled_" + this.mId)) {
|
||||
mIsInstalled = prefs.getBoolean("repo-isInstalled_" + this.mId,false);
|
||||
}
|
||||
if (prefs.contains("repo-canUpdate_" + this.mId)) {
|
||||
mCanUpdate = prefs.getBoolean("repo-canUpdate_" + this.mId,false);
|
||||
}
|
||||
if (prefs.contains("updated_" + this.mId)) {
|
||||
lastUpdate = prefs.getString("updated_" + this.mId,"");
|
||||
}
|
||||
|
||||
|
||||
|
||||
return this.mId != null;
|
||||
|
||||
public void update(Date lastUpdate) {
|
||||
if (lastUpdate.after(mLastUpdate)) {
|
||||
mLastUpdate = lastUpdate;
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public String getStringProperty(String mValue) {
|
||||
switch (mValue) {
|
||||
case "author":
|
||||
return mAuthor;
|
||||
case "id":
|
||||
return mId;
|
||||
case "version":
|
||||
return mVersion;
|
||||
case "description":
|
||||
return mDescription;
|
||||
case "supportUrl":
|
||||
return mSupportUrl;
|
||||
case "donateUrl":
|
||||
return mDonateUrl;
|
||||
case "baseeUrl":
|
||||
return mBaseUrl;
|
||||
case "zipUrl":
|
||||
return mZipUrl;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return mName;
|
||||
}
|
||||
|
||||
public String getmVersion() {
|
||||
return mVersion;
|
||||
}
|
||||
|
||||
public int getmVersionCode() {
|
||||
return Integer.valueOf(mVersionCode);
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return mDescription;
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
return mId;
|
||||
}
|
||||
|
||||
public String getmZipUrl() {
|
||||
public String getZipUrl() {
|
||||
return mZipUrl;
|
||||
}
|
||||
|
||||
public String getmBaseUrl() {
|
||||
return mBaseUrl;
|
||||
}
|
||||
|
||||
public String getmLogUrl() {
|
||||
public String getLogUrl() {
|
||||
return mLogUrl;
|
||||
}
|
||||
|
||||
|
||||
public String getmAuthor() {
|
||||
return mAuthor;
|
||||
}
|
||||
|
||||
public String getmDonateUrl() {
|
||||
return mDonateUrl;
|
||||
}
|
||||
|
||||
public String getmManifestUrl() {
|
||||
public String getManifestUrl() {
|
||||
return mManifestUrl;
|
||||
}
|
||||
|
||||
public String getmSupportUrl() {
|
||||
return mSupportUrl;
|
||||
}
|
||||
|
||||
public String getLastUpdate() {
|
||||
return lastUpdate;
|
||||
public Date getLastUpdate() {
|
||||
return mLastUpdate;
|
||||
}
|
||||
|
||||
public boolean isInstalled() { return mIsInstalled; }
|
||||
@@ -270,3 +63,258 @@ public class Repo {
|
||||
public boolean isCacheModule() { return mIsCacheModule; }
|
||||
}
|
||||
|
||||
//public class Repo {
|
||||
// private String mBaseUrl;
|
||||
// private String mZipUrl;
|
||||
// private String mLogUrl;
|
||||
// private String mManifestUrl;
|
||||
// private String mVersion;
|
||||
// private String mName;
|
||||
// private String mDescription;
|
||||
// private String mAuthor;
|
||||
// public String mAuthorUrl;
|
||||
// private String mId;
|
||||
// private String mVersionCode;
|
||||
// private String mSupportUrl;
|
||||
// private String mDonateUrl;
|
||||
// private String lastUpdate;
|
||||
// private Context appContext;
|
||||
// private boolean mIsInstalled,mCanUpdate,mIsCacheModule;
|
||||
//
|
||||
//
|
||||
// public Repo(String manifestString, Context context) {
|
||||
// appContext = context;
|
||||
// ParseProps(manifestString);
|
||||
//
|
||||
// }
|
||||
//
|
||||
//
|
||||
//
|
||||
// public Repo(String name, String url, Date updated, Context context) {
|
||||
// appContext = context;
|
||||
// this.mName = name;
|
||||
// this.mBaseUrl = url;
|
||||
// this.lastUpdate = updated.toString();
|
||||
//
|
||||
// this.fetch();
|
||||
//
|
||||
// }
|
||||
//
|
||||
// public Repo(String moduleName, String moduleDescription, String zipUrl, Date lastUpdated, Context context) {
|
||||
// appContext = context;
|
||||
// this.mZipUrl = zipUrl;
|
||||
// this.mDescription = moduleDescription;
|
||||
// this.mName = moduleName;
|
||||
// this.lastUpdate = lastUpdated.toString();
|
||||
// this.fetch();
|
||||
//
|
||||
// }
|
||||
//
|
||||
// public void fetch() {
|
||||
//
|
||||
// // Construct initial url for contents
|
||||
// String repoString = WebRequest.makeWebServiceCall(mBaseUrl + "/contents?access_token=" + Utils.procFile(appContext.getString(R.string.some_string), appContext), WebRequest.GET);
|
||||
// try {
|
||||
// JSONArray repoArray = new JSONArray(repoString);
|
||||
// for (int f = 0; f < repoArray.length(); f++) {
|
||||
// JSONObject jsonobject = repoArray.getJSONObject(f);
|
||||
// String name = jsonobject.getString("name");
|
||||
// String url = jsonobject.getString("download_url").trim();
|
||||
// Log.d("Magisk","Repo - checking object named " + name + " with value of " + url);
|
||||
// if (name.contains(".zip")) {
|
||||
// this.mZipUrl = url;
|
||||
// }
|
||||
// if (name.equals("module.prop")) {
|
||||
// this.mManifestUrl = url;
|
||||
// }
|
||||
// if (name.contains("log.txt")) {
|
||||
// Log.d("Magisk","Repo: Setting log URL for " + name + " of " + url);
|
||||
// this.mLogUrl = url;
|
||||
// }
|
||||
// }
|
||||
// } catch (JSONException e) {
|
||||
// e.printStackTrace();
|
||||
// }
|
||||
//
|
||||
// String manifestString = WebRequest.makeWebServiceCall(mManifestUrl, WebRequest.GET, true);
|
||||
//
|
||||
// if (ParseProps(manifestString)) {
|
||||
// PutProps(manifestString);
|
||||
// }
|
||||
//
|
||||
// }
|
||||
//
|
||||
// private void PutProps(String manifestString) {
|
||||
// manifestString = manifestString + "zipUrl=" + mZipUrl + "\nbaseUrl=" + mBaseUrl + "\nlogUrl=" + mLogUrl + "\nmanifestUrl=" + mManifestUrl;
|
||||
// SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(appContext);
|
||||
// SharedPreferences.Editor editor = prefs.edit();
|
||||
// editor.putString("repo_" + mId, manifestString);
|
||||
// editor.putBoolean("hasCachedRepos", true);
|
||||
// editor.putString("updated_" + mId, this.lastUpdate);
|
||||
// editor.apply();
|
||||
// }
|
||||
// private boolean ParseProps(String string) {
|
||||
//
|
||||
// if ((string.length() <= 1) | (!string.contains("id"))) {
|
||||
// return false;
|
||||
// } else {
|
||||
// String lines[] = string.split("\\n");
|
||||
// for (String line : lines) {
|
||||
// if (line != "") {
|
||||
// String props[] = line.split("=");
|
||||
// switch (props[0]) {
|
||||
// case "versionCode":
|
||||
// this.mVersionCode = props[1];
|
||||
// break;
|
||||
// case "name":
|
||||
// this.mName = props[1];
|
||||
// break;
|
||||
// case "author":
|
||||
// this.mAuthor = props[1];
|
||||
// break;
|
||||
// case "id":
|
||||
// this.mId = props[1];
|
||||
// break;
|
||||
// case "version":
|
||||
// this.mVersion = props[1];
|
||||
// break;
|
||||
// case "description":
|
||||
// this.mDescription = props[1];
|
||||
// break;
|
||||
// case "donate":
|
||||
// this.mDonateUrl = props[1];
|
||||
// break;
|
||||
// case "cacheModule":
|
||||
// this.mIsCacheModule = Boolean.valueOf(props[1]);
|
||||
// break;
|
||||
// case "support":
|
||||
// this.mSupportUrl = props[1];
|
||||
// break;
|
||||
// case "logUrl":
|
||||
// this.mLogUrl = props[1];
|
||||
// break;
|
||||
// case "donateUrl":
|
||||
// this.mDonateUrl = props[1];
|
||||
// break;
|
||||
// case "zipUrl":
|
||||
// this.mZipUrl = props[1];
|
||||
// break;
|
||||
// case "baseUrl":
|
||||
// this.mBaseUrl = props[1];
|
||||
// break;
|
||||
// case "manifestUrl":
|
||||
// this.mManifestUrl = props[1];
|
||||
// break;
|
||||
// default:
|
||||
// Log.d("Magisk", "Manifest string not recognized: " + props[0]);
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// }
|
||||
// SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(appContext);
|
||||
// if (prefs.contains("repo-isInstalled_" + this.mId)) {
|
||||
// mIsInstalled = prefs.getBoolean("repo-isInstalled_" + this.mId,false);
|
||||
// }
|
||||
// if (prefs.contains("repo-canUpdate_" + this.mId)) {
|
||||
// mCanUpdate = prefs.getBoolean("repo-canUpdate_" + this.mId,false);
|
||||
// }
|
||||
// if (prefs.contains("updated_" + this.mId)) {
|
||||
// lastUpdate = prefs.getString("updated_" + this.mId,"");
|
||||
// }
|
||||
//
|
||||
//
|
||||
//
|
||||
// return this.mId != null;
|
||||
//
|
||||
// }
|
||||
// }
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
// public String getStringProperty(String mValue) {
|
||||
// switch (mValue) {
|
||||
// case "author":
|
||||
// return mAuthor;
|
||||
// case "id":
|
||||
// return mId;
|
||||
// case "version":
|
||||
// return mVersion;
|
||||
// case "description":
|
||||
// return mDescription;
|
||||
// case "supportUrl":
|
||||
// return mSupportUrl;
|
||||
// case "donateUrl":
|
||||
// return mDonateUrl;
|
||||
// case "baseeUrl":
|
||||
// return mBaseUrl;
|
||||
// case "zipUrl":
|
||||
// return mZipUrl;
|
||||
// default:
|
||||
// return null;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// public String getName() {
|
||||
// return mName;
|
||||
// }
|
||||
//
|
||||
// public String getmVersion() {
|
||||
// return mVersion;
|
||||
// }
|
||||
//
|
||||
// public int getmVersionCode() {
|
||||
// return Integer.valueOf(mVersionCode);
|
||||
// }
|
||||
//
|
||||
// public String getDescription() {
|
||||
// return mDescription;
|
||||
// }
|
||||
//
|
||||
// public String getId() {
|
||||
// return mId;
|
||||
// }
|
||||
//
|
||||
// public String getZipUrl() {
|
||||
// return mZipUrl;
|
||||
// }
|
||||
//
|
||||
// public String getmBaseUrl() {
|
||||
// return mBaseUrl;
|
||||
// }
|
||||
//
|
||||
// public String getLogUrl() {
|
||||
// return mLogUrl;
|
||||
// }
|
||||
//
|
||||
//
|
||||
// public String getAuthor() {
|
||||
// return mAuthor;
|
||||
// }
|
||||
//
|
||||
// public String getDonateUrl() {
|
||||
// return mDonateUrl;
|
||||
// }
|
||||
//
|
||||
// public String getmManifestUrl() {
|
||||
// return mManifestUrl;
|
||||
// }
|
||||
//
|
||||
// public String getSupportUrl() {
|
||||
// return mSupportUrl;
|
||||
// }
|
||||
//
|
||||
// public String getLastUpdate() {
|
||||
// return lastUpdate;
|
||||
// }
|
||||
//
|
||||
// public boolean isInstalled() { return mIsInstalled; }
|
||||
// public boolean canUpdate() { return mCanUpdate; }
|
||||
// public boolean isCacheModule() { return mIsCacheModule; }
|
||||
//}
|
||||
|
||||
|
||||
@@ -2,11 +2,9 @@ package com.topjohnwu.magisk.module;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.AsyncTask;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.util.Log;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
import com.topjohnwu.magisk.R;
|
||||
import com.topjohnwu.magisk.utils.Utils;
|
||||
import com.topjohnwu.magisk.utils.WebRequest;
|
||||
@@ -18,181 +16,76 @@ import org.json.JSONObject;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
|
||||
public class RepoHelper {
|
||||
private static List<Repo> repos = new ArrayList<>();
|
||||
private static String TAG = "Magisk";
|
||||
|
||||
public RepoHelper() {
|
||||
}
|
||||
private static final String file_key = "RepoMap";
|
||||
private static final String key = "repomap";
|
||||
public static HashMap<String, Repo> repoMap;
|
||||
|
||||
public static List<Repo> listRepos(Context context, boolean refresh, TaskDelegate delegate) {
|
||||
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
|
||||
if (!prefs.contains("hasCachedRepos") | refresh) {
|
||||
Log.d(TAG, "RepoHelper: Building from web");
|
||||
new BuildFromWeb(delegate, context).execute();
|
||||
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US);
|
||||
String date = format.format(Calendar.getInstance().getTime());
|
||||
prefs.edit().putString("last_update", date).apply();
|
||||
} else {
|
||||
Log.d(TAG, "RepoHelper: Building from cache");
|
||||
BuildFromCache(context);
|
||||
public static void createRepoMap(Context context) {
|
||||
Gson gson = new Gson();
|
||||
SharedPreferences prefs = context.getSharedPreferences(file_key, Context.MODE_PRIVATE);
|
||||
String jsonString = prefs.getString(key, null);
|
||||
if (jsonString != null) {
|
||||
repoMap = gson.fromJson(jsonString, new TypeToken< HashMap<String, Repo> >(){}.getType());
|
||||
}
|
||||
|
||||
Collections.sort(repos, new CustomComparator());
|
||||
return repos;
|
||||
}
|
||||
|
||||
private static void BuildFromCache(Context activityContext) {
|
||||
repos.clear();
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(activityContext);
|
||||
Map<String, ?> map = prefs.getAll();
|
||||
for (Map.Entry<String, ?> entry : map.entrySet()) {
|
||||
if (entry.getKey().contains("repo_")) {
|
||||
String repoString = entry.getValue().toString().replace(""", "\"");
|
||||
repos.add(new Repo(repoString, activityContext));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static class BuildFromWeb extends AsyncTask<String, String, Boolean> {
|
||||
|
||||
private TaskDelegate delegate;
|
||||
private SharedPreferences prefs;
|
||||
private Context activityContext;
|
||||
|
||||
public BuildFromWeb(TaskDelegate delegate, Context activityContext) {
|
||||
this.delegate = delegate;
|
||||
this.activityContext = activityContext;
|
||||
prefs = PreferenceManager.getDefaultSharedPreferences(activityContext);
|
||||
if (repoMap == null) {
|
||||
repoMap = new HashMap<>();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPreExecute() {
|
||||
super.onPreExecute();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onProgressUpdate(String... values) {
|
||||
super.onProgressUpdate(values);
|
||||
prefs.edit().putBoolean("ignoreUpdateAlerts", false).apply();
|
||||
Toast.makeText(activityContext, "Refreshing online modules", Toast.LENGTH_SHORT).show();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Boolean doInBackground(String... params) {
|
||||
publishProgress();
|
||||
|
||||
// Making a request to url and getting response
|
||||
String token = activityContext.getString(R.string.some_string);
|
||||
String url1 = activityContext.getString(R.string.url_main);
|
||||
String jsonStr = WebRequest.makeWebServiceCall(url1 + Utils.procFile(token, activityContext), WebRequest.GET);
|
||||
if (jsonStr != null && !jsonStr.isEmpty()) {
|
||||
|
||||
try {
|
||||
repos.clear();
|
||||
JSONArray jsonArray = new JSONArray(jsonStr);
|
||||
for (int i = 0; i < jsonArray.length(); i++) {
|
||||
JSONObject jsonobject = jsonArray.getJSONObject(i);
|
||||
String name = jsonobject.getString("name");
|
||||
String url = jsonobject.getString("url");
|
||||
String lastUpdate = jsonobject.getString("updated_at");
|
||||
String mId = "";
|
||||
String cacheUpdate = "";
|
||||
String manifestString = "";
|
||||
boolean doUpdate = true;
|
||||
boolean hasCachedDate = false;
|
||||
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US);
|
||||
Date updatedDate;
|
||||
Map<String, ?> map = prefs.getAll();
|
||||
for (Map.Entry<String, ?> entry : map.entrySet()) {
|
||||
if (entry.getValue().toString().contains(url)) {
|
||||
Log.d("Magisk", "RepoHelper: found matching URL");
|
||||
manifestString = entry.getValue().toString();
|
||||
String[] entryStrings = entry.getValue().toString().split("\n");
|
||||
for (String valueString : entryStrings) {
|
||||
String[] valueSub = valueString.split("=");
|
||||
if (valueSub[0].equals("id")) {
|
||||
mId = valueSub[1];
|
||||
if (prefs.contains("updated_" + mId)) {
|
||||
cacheUpdate = prefs.getString("updated_" + mId, "");
|
||||
hasCachedDate = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
try {
|
||||
updatedDate = format.parse(lastUpdate);
|
||||
Log.d("Magisk", "RepoHelper: Dates found, online is " + updatedDate + " and cached is " + cacheUpdate);
|
||||
|
||||
if (hasCachedDate) {
|
||||
|
||||
doUpdate = !cacheUpdate.equals(updatedDate.toString());
|
||||
Log.d("Magisk", "RepoHelper: DoUpdate is " + doUpdate);
|
||||
}
|
||||
|
||||
} catch (ParseException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
return true;
|
||||
}
|
||||
if (!name.contains("Repo.github.io")) {
|
||||
if (doUpdate) {
|
||||
repos.add(new Repo(name, url, updatedDate, activityContext));
|
||||
Log.d(TAG, "RepoHelper: Trying to add new repo for online refresh - " + name);
|
||||
} else {
|
||||
repos.add(new Repo(manifestString, activityContext));
|
||||
Log.d(TAG, "RepoHelper: Trying to add new repo using manifestString of " + mId);
|
||||
}
|
||||
}
|
||||
for (int f = 0; f < repos.size(); f++) {
|
||||
repos.get(f).fetch();
|
||||
}
|
||||
// Making a request to url and getting response
|
||||
String token = context.getString(R.string.some_string);
|
||||
String url1 = context.getString(R.string.url_main);
|
||||
String jsonStr = WebRequest.makeWebServiceCall(url1 + Utils.procFile(token, context), WebRequest.GET);
|
||||
if (jsonStr != null && !jsonStr.isEmpty()) {
|
||||
try {
|
||||
JSONArray jsonArray = new JSONArray(jsonStr);
|
||||
for (int i = 0; i < jsonArray.length(); i++) {
|
||||
JSONObject jsonobject = jsonArray.getJSONObject(i);
|
||||
String id = jsonobject.getString("description");
|
||||
String name = jsonobject.getString("name");
|
||||
String lastUpdate = jsonobject.getString("updated_at");
|
||||
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US);
|
||||
Date updatedDate;
|
||||
try {
|
||||
updatedDate = format.parse(lastUpdate);
|
||||
} catch (ParseException e) {
|
||||
continue;
|
||||
}
|
||||
Repo repo = repoMap.get(id);
|
||||
if (repo == null) {
|
||||
repoMap.put(id, new Repo(context, name, updatedDate));
|
||||
} else {
|
||||
repo.update(updatedDate);
|
||||
}
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
jsonString = gson.toJson(repoMap);
|
||||
SharedPreferences.Editor editor = prefs.edit();
|
||||
editor.putString(key, jsonString);
|
||||
editor.apply();
|
||||
}
|
||||
}
|
||||
|
||||
protected void onPostExecute(Boolean apiFail) {
|
||||
if (apiFail) {
|
||||
Toast.makeText(activityContext, "GitHub API Limit reached, please try refreshing again in an hour.", Toast.LENGTH_LONG).show();
|
||||
} else {
|
||||
Log.d("Magisk", "RepoHelper: postExecute fired");
|
||||
delegate.taskCompletionResult("Complete");
|
||||
BuildFromCache(activityContext);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
public static List<Repo> getSortedList() {
|
||||
ArrayList<Repo> list = new ArrayList<>(repoMap.values());
|
||||
Collections.sort(list, new Utils.ModuleComparator());
|
||||
return list;
|
||||
}
|
||||
|
||||
public interface TaskDelegate {
|
||||
void taskCompletionResult(String result);
|
||||
}
|
||||
|
||||
public static class CustomComparator implements Comparator<Repo> {
|
||||
@Override
|
||||
public int compare(Repo o1, Repo o2) {
|
||||
return o1.getName().compareTo(o2.getName());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user