Magisk/app/src/main/java/com/topjohnwu/magisk/database/RepoDatabaseHelper.java

84 lines
2.6 KiB
Java
Raw Normal View History

2017-02-12 16:26:30 +01:00
package com.topjohnwu.magisk.database;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import com.topjohnwu.magisk.module.Repo;
import com.topjohnwu.magisk.utils.Logger;
2017-02-12 16:26:30 +01:00
import com.topjohnwu.magisk.utils.ValueSortedMap;
import java.util.Collection;
public class RepoDatabaseHelper extends SQLiteOpenHelper {
2017-03-30 00:52:18 +02:00
private static final int DATABASE_VER = 2;
2017-02-12 16:26:30 +01:00
private static final String TABLE_NAME = "repos";
2017-04-25 18:14:01 +02:00
private static final int MIN_TEMPLATE_VER = 3;
2017-02-12 16:26:30 +01:00
2017-07-20 18:46:13 +02:00
private SQLiteDatabase mDb;
2017-02-12 16:26:30 +01:00
public RepoDatabaseHelper(Context context) {
super(context, "repo.db", null, DATABASE_VER);
2017-07-20 18:46:13 +02:00
mDb = getWritableDatabase();
2017-02-12 16:26:30 +01:00
}
@Override
public void onCreate(SQLiteDatabase db) {
onUpgrade(db, 0, DATABASE_VER);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion == 0) {
db.execSQL(
"CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " " +
"(id TEXT, name TEXT, version TEXT, versionCode INT, " +
"author TEXT, description TEXT, repo_name TEXT, last_update INT, " +
"PRIMARY KEY(id))");
2017-03-30 00:52:18 +02:00
oldVersion++;
}
if (oldVersion == 1) {
db.execSQL("ALTER TABLE " + TABLE_NAME + " ADD template INT");
oldVersion++;
2017-02-12 16:26:30 +01:00
}
}
public void addRepoMap(ValueSortedMap<String, Repo> map) {
Collection<Repo> list = map.values();
for (Repo repo : list) {
2017-04-25 18:14:01 +02:00
Logger.dev("Add to DB: " + repo.getId());
2017-07-20 18:46:13 +02:00
mDb.replace(TABLE_NAME, null, repo.getContentValues());
}
2017-02-12 16:26:30 +01:00
}
public void clearRepo() {
2017-07-20 18:46:13 +02:00
mDb.delete(TABLE_NAME, null, null);
2017-02-12 16:26:30 +01:00
}
public void removeRepo(ValueSortedMap<String, Repo> map) {
Collection<Repo> list = map.values();
for (Repo repo : list) {
2017-04-25 18:14:01 +02:00
Logger.dev("Remove from DB: " + repo.getId());
2017-07-20 18:46:13 +02:00
mDb.delete(TABLE_NAME, "id=?", new String[] { repo.getId() });
}
2017-02-12 16:26:30 +01:00
}
public ValueSortedMap<String, Repo> getRepoMap() {
2017-03-30 00:52:18 +02:00
return getRepoMap(true);
}
public ValueSortedMap<String, Repo> getRepoMap(boolean filtered) {
2017-02-12 16:26:30 +01:00
ValueSortedMap<String, Repo> ret = new ValueSortedMap<>();
Repo repo;
2017-07-20 18:46:13 +02:00
try (Cursor c = mDb.query(TABLE_NAME, null, "template>=?", new String[] { filtered ? String.valueOf(MIN_TEMPLATE_VER) : "0" }, null, null, null)) {
2017-02-12 16:26:30 +01:00
while (c.moveToNext()) {
repo = new Repo(c);
2017-07-20 18:46:13 +02:00
ret.put(repo.getId(), repo);
2017-02-12 16:26:30 +01:00
}
}
return ret;
}
}