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.MagiskManager; import com.topjohnwu.magisk.container.Repo; import com.topjohnwu.magisk.utils.Const; import com.topjohnwu.magisk.utils.Utils; import java.util.LinkedList; import java.util.List; public class RepoDatabaseHelper extends SQLiteOpenHelper { private static final int DATABASE_VER = 3; private static final String TABLE_NAME = "repos"; private SQLiteDatabase mDb; private MagiskManager mm; public RepoDatabaseHelper(Context context) { super(context, "repo.db", null, DATABASE_VER); mm = Utils.getMagiskManager(context); mDb = getWritableDatabase(); // Remove outdated repos mDb.delete(TABLE_NAME, "minMagisk list) { for (String id : list) { if (id == null) continue; mDb.delete(TABLE_NAME, "id=?", new String[] { id }); } } public void addRepo(Repo repo) { mDb.replace(TABLE_NAME, null, repo.getContentValues()); } public Repo getRepo(String id) { try (Cursor c = mDb.query(TABLE_NAME, null, "id=?", new String[] { id }, null, null, null)) { if (c.moveToNext()) { return new Repo(c); } } return null; } public Cursor getRepoCursor() { String orderBy = null; switch (mm.repoOrder) { case Const.Value.ORDER_NAME: orderBy = "name COLLATE NOCASE"; break; case Const.Value.ORDER_DATE: orderBy = "last_update DESC"; } return mDb.query(TABLE_NAME, null, "minMagisk<=? AND minMagisk>=?", new String[] { String.valueOf(mm.magiskVersionCode), String.valueOf(Const.MIN_MODULE_VER()) }, null, null, orderBy); } public List getRepoIDList() { LinkedList ret = new LinkedList<>(); try (Cursor c = mDb.query(TABLE_NAME, null, null, null, null, null, null)) { while (c.moveToNext()) { ret.add(c.getString(c.getColumnIndex("id"))); } } return ret; } }