diff --git a/app/src/full/java/com/topjohnwu/magisk/asyncs/UpdateRepos.java b/app/src/full/java/com/topjohnwu/magisk/asyncs/UpdateRepos.java index ae381ae9d..5aadb82f0 100644 --- a/app/src/full/java/com/topjohnwu/magisk/asyncs/UpdateRepos.java +++ b/app/src/full/java/com/topjohnwu/magisk/asyncs/UpdateRepos.java @@ -66,17 +66,15 @@ public class UpdateRepos { for (int i = 0; i < jsonArray.length(); i++) { JSONObject rawRepo = jsonArray.getJSONObject(i); - String id = rawRepo.getString("description"); - String name = rawRepo.getString("name"); + String id = rawRepo.getString("name"); Date date = dateFormat.parse(rawRepo.getString("pushed_at")); - Set set = Collections.synchronizedSet(cached); threadPool.execute(() -> { Repo repo = mm.repoDB.getRepo(id); try { if (repo == null) - repo = new Repo(name); + repo = new Repo(id); else - set.remove(id); + cached.remove(id); repo.update(date); mm.repoDB.addRepo(repo); } catch (Repo.IllegalRepoException e) { @@ -141,7 +139,7 @@ public class UpdateRepos { public void exec(boolean force) { Topic.reset(Topic.REPO_LOAD_DONE); AsyncTask.THREAD_POOL_EXECUTOR.execute(() -> { - cached = mm.repoDB.getRepoIDSet(); + cached = Collections.synchronizedSet(mm.repoDB.getRepoIDSet()); threadPool = Executors.newFixedThreadPool(CORE_POOL_SIZE); if (loadPage(0)) { diff --git a/app/src/full/java/com/topjohnwu/magisk/container/Repo.java b/app/src/full/java/com/topjohnwu/magisk/container/Repo.java index 853cb811e..5729d227a 100644 --- a/app/src/full/java/com/topjohnwu/magisk/container/Repo.java +++ b/app/src/full/java/com/topjohnwu/magisk/container/Repo.java @@ -2,7 +2,6 @@ package com.topjohnwu.magisk.container; import android.content.ContentValues; import android.database.Cursor; -import android.text.TextUtils; import com.topjohnwu.magisk.Const; import com.topjohnwu.magisk.utils.Download; @@ -15,16 +14,14 @@ import java.util.Date; public class Repo extends BaseModule { - private String repoName; private Date mLastUpdate; - public Repo(String name) { - repoName = name; + public Repo(String id) { + setId(id); } public Repo(Cursor c) { super(c); - repoName = c.getString(c.getColumnIndex("repo_name")); mLastUpdate = new Date(c.getLong(c.getColumnIndex("last_update"))); } @@ -33,17 +30,14 @@ public class Repo extends BaseModule { try { parseProps(props); } catch (NumberFormatException e) { - throw new IllegalRepoException("Repo [" + repoName + "] parse error: " + e.getMessage()); + throw new IllegalRepoException("Repo [" + getId() + "] parse error: " + e.getMessage()); } - if (TextUtils.isEmpty(getId())) { - throw new IllegalRepoException("Repo [" + repoName + "] does not contain id"); - } if (getVersionCode() < 0) { - throw new IllegalRepoException("Repo [" + repoName + "] does not contain versionCode"); + throw new IllegalRepoException("Repo [" + getId() + "] does not contain versionCode"); } if (getMinMagiskVersion() < Const.MIN_MODULE_VER()) { - Logger.debug("Repo [" + repoName + "] is outdated"); + Logger.debug("Repo [" + getId() + "] is outdated"); } } @@ -55,25 +49,20 @@ public class Repo extends BaseModule { @Override public ContentValues getContentValues() { ContentValues values = super.getContentValues(); - values.put("repo_name", repoName); values.put("last_update", mLastUpdate.getTime()); return values; } - public String getRepoName() { - return repoName; - } - public String getZipUrl() { - return String.format(Const.Url.ZIP_URL, repoName); + return String.format(Const.Url.ZIP_URL, getId()); } public String getManifestUrl() { - return String.format(Const.Url.FILE_URL, repoName, "module.prop"); + return String.format(Const.Url.FILE_URL, getId(), "module.prop"); } public String getDetailUrl() { - return String.format(Const.Url.FILE_URL, repoName, "README.md"); + return String.format(Const.Url.FILE_URL, getId(), "README.md"); } public String getLastUpdateString() { diff --git a/app/src/full/java/com/topjohnwu/magisk/database/RepoDatabaseHelper.java b/app/src/full/java/com/topjohnwu/magisk/database/RepoDatabaseHelper.java index 35356f4ea..fa6f85b2e 100644 --- a/app/src/full/java/com/topjohnwu/magisk/database/RepoDatabaseHelper.java +++ b/app/src/full/java/com/topjohnwu/magisk/database/RepoDatabaseHelper.java @@ -16,7 +16,7 @@ import java.util.Set; public class RepoDatabaseHelper extends SQLiteOpenHelper { - private static final int DATABASE_VER = 3; + private static final int DATABASE_VER = 4; private static final String TABLE_NAME = "repos"; private SQLiteDatabase mDb; @@ -40,21 +40,14 @@ public class RepoDatabaseHelper extends SQLiteOpenHelper { @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { - try { - if (oldVersion < 3) { - db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); - db.execSQL( - "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " " + - "(id TEXT, name TEXT, version TEXT, versionCode INT, minMagisk INT, " + - "author TEXT, description TEXT, repo_name TEXT, last_update INT, " + - "PRIMARY KEY(id))"); - mm.prefs.edit().remove(Const.Key.ETAG_KEY).apply(); - oldVersion = 3; - } - } catch (Exception e) { - e.printStackTrace(); - // Reset database - onDowngrade(db, DATABASE_VER, 0); + if (oldVersion != newVersion) { + // Nuke old DB and create new table + db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); + db.execSQL( + "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " " + + "(id TEXT, name TEXT, version TEXT, versionCode INT, minMagisk INT, " + + "author TEXT, description TEXT, last_update INT, PRIMARY KEY(id))"); + mm.prefs.edit().remove(Const.Key.ETAG_KEY).apply(); } } @@ -75,8 +68,7 @@ public class RepoDatabaseHelper extends SQLiteOpenHelper { } public void removeRepo(Repo repo) { - mDb.delete(TABLE_NAME, "repo_name=?", new String[] { repo.getRepoName() }); - notifyAdapter(); + removeRepo(repo.getId()); } public void removeRepo(Iterable list) {