diff --git a/src/org/fdroid/fdroid/DB.java b/src/org/fdroid/fdroid/DB.java index cf561cc0d..e96e64928 100644 --- a/src/org/fdroid/fdroid/DB.java +++ b/src/org/fdroid/fdroid/DB.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-12 Ciaran Gultnieks, ciaran@ciarang.com + * Copyright (C) 2010-13 Ciaran Gultnieks, ciaran@ciarang.com * Copyright (C) 2009 Roberto Jacinto, roberto.jacinto@caixamagica.pt * * This program is free software; you can redistribute it and/or @@ -599,7 +599,8 @@ public class DB { if (getinstalledinfo) { Log.d("FDroid", "Reading installed packages"); systemApks = new HashMap(); - List installedPackages = mContext.getPackageManager().getInstalledPackages(0); + List installedPackages = mContext.getPackageManager() + .getInstalledPackages(0); for (PackageInfo appInfo : installedPackages) { systemApks.put(appInfo.packageName, appInfo); } @@ -1079,10 +1080,27 @@ public class DB { db.insert(TABLE_REPO, null, values); } - public void removeServers(Vector addresses) { + public void removeRepos(Vector addresses) { db.beginTransaction(); try { for (String address : addresses) { + + // Before removing the repo, remove any apks that are + // connected to it... + Cursor c = null; + try { + c = db.rawQuery("select id from " + TABLE_REPO + + " where address = '" + address + "'", null); + c.moveToFirst(); + if (!c.isAfterLast()) { + db.delete(TABLE_APK, "repo = ?", + new String[] { Integer.toString(c.getInt(0)) }); + } + } finally { + if (c != null) { + c.close(); + } + } db.delete(TABLE_REPO, "address = ?", new String[] { address }); } db.setTransactionSuccessful(); diff --git a/src/org/fdroid/fdroid/ManageRepo.java b/src/org/fdroid/fdroid/ManageRepo.java index 5953f3f61..838a340ed 100644 --- a/src/org/fdroid/fdroid/ManageRepo.java +++ b/src/org/fdroid/fdroid/ManageRepo.java @@ -227,7 +227,7 @@ public class ManageRepo extends ListActivity { int whichButton) { try { DB db = DB.getDB(); - db.removeServers(rem_lst); + db.removeRepos(rem_lst); } finally { DB.releaseDB(); }