Migrate priorities safely.
This commit is contained in:
parent
5efa53b466
commit
44a82c4af7
@ -355,9 +355,59 @@ class DBHelper extends SQLiteOpenHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void migrateToPackageTable(SQLiteDatabase db, int oldVersion) {
|
private void migrateToPackageTable(SQLiteDatabase db, int oldVersion) {
|
||||||
if (oldVersion < 63) {
|
if (oldVersion >= 63) {
|
||||||
resetTransient(db);
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resetTransient(db);
|
||||||
|
|
||||||
|
// By pushing _ALL_ repositories to a priority of 10, it makes it slightly easier
|
||||||
|
// to query for the non-default repositories later on in this method.
|
||||||
|
ContentValues highPriority = new ContentValues(1);
|
||||||
|
highPriority.put(RepoTable.Cols.PRIORITY, 10);
|
||||||
|
db.update(RepoTable.NAME, highPriority, null, null);
|
||||||
|
|
||||||
|
String[] defaultRepos = context.getResources().getStringArray(R.array.default_repos);
|
||||||
|
String fdroidPubKey = defaultRepos[7];
|
||||||
|
String fdroidAddress = defaultRepos[1];
|
||||||
|
String fdroidArchiveAddress = defaultRepos[REPO_XML_ARG_COUNT + 1];
|
||||||
|
String gpPubKey = defaultRepos[REPO_XML_ARG_COUNT * 2 + 7];
|
||||||
|
String gpAddress = defaultRepos[REPO_XML_ARG_COUNT * 2 + 1];
|
||||||
|
String gpArchiveAddress = defaultRepos[REPO_XML_ARG_COUNT * 3 + 1];
|
||||||
|
|
||||||
|
updateRepoPriority(db, fdroidPubKey, fdroidAddress, 1);
|
||||||
|
updateRepoPriority(db, fdroidPubKey, fdroidArchiveAddress, 2);
|
||||||
|
updateRepoPriority(db, gpPubKey, gpAddress, 3);
|
||||||
|
updateRepoPriority(db, gpPubKey, gpArchiveAddress, 4);
|
||||||
|
|
||||||
|
int priority = 5;
|
||||||
|
String[] projection = new String[] {RepoTable.Cols.SIGNING_CERT, RepoTable.Cols.ADDRESS};
|
||||||
|
|
||||||
|
// Order by ID, because that is a good analogy for the order in which they were added.
|
||||||
|
// The order in which they were added is likely the order they present in the ManageRepos activity.
|
||||||
|
Cursor cursor = db.query(RepoTable.NAME, projection, RepoTable.Cols.PRIORITY + " > 4", null, null, null, RepoTable.Cols._ID);
|
||||||
|
cursor.moveToFirst();
|
||||||
|
while (!cursor.isAfterLast()) {
|
||||||
|
String signingCert = cursor.getString(cursor.getColumnIndex(RepoTable.Cols.SIGNING_CERT));
|
||||||
|
String address = cursor.getString(cursor.getColumnIndex(RepoTable.Cols.ADDRESS));
|
||||||
|
updateRepoPriority(db, signingCert, address, priority);
|
||||||
|
cursor.moveToNext();
|
||||||
|
priority++;
|
||||||
|
}
|
||||||
|
cursor.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateRepoPriority(SQLiteDatabase db, String signingCert, String address, int priority) {
|
||||||
|
ContentValues values = new ContentValues(1);
|
||||||
|
values.put(RepoTable.Cols.PRIORITY, Integer.toString(priority));
|
||||||
|
|
||||||
|
Utils.debugLog(TAG, "Setting priority of repo " + address + " to " + priority);
|
||||||
|
db.update(
|
||||||
|
RepoTable.NAME,
|
||||||
|
values,
|
||||||
|
RepoTable.Cols.SIGNING_CERT + " = ? AND " + RepoTable.Cols.ADDRESS + " = ?",
|
||||||
|
new String[] {signingCert, address}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void lowerCaseApkHashes(SQLiteDatabase db, int oldVersion) {
|
private void lowerCaseApkHashes(SQLiteDatabase db, int oldVersion) {
|
||||||
@ -750,6 +800,7 @@ class DBHelper extends SQLiteOpenHelper {
|
|||||||
if (tableExists(db, PackageTable.NAME)) {
|
if (tableExists(db, PackageTable.NAME)) {
|
||||||
db.execSQL("DROP TABLE " + PackageTable.NAME);
|
db.execSQL("DROP TABLE " + PackageTable.NAME);
|
||||||
}
|
}
|
||||||
|
|
||||||
db.execSQL("DROP TABLE " + AppMetadataTable.NAME);
|
db.execSQL("DROP TABLE " + AppMetadataTable.NAME);
|
||||||
db.execSQL("DROP TABLE " + ApkTable.NAME);
|
db.execSQL("DROP TABLE " + ApkTable.NAME);
|
||||||
db.execSQL(CREATE_TABLE_PACKAGE);
|
db.execSQL(CREATE_TABLE_PACKAGE);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user