From 68edafc48d22d1b747086ad124d9e7100c3b49af Mon Sep 17 00:00:00 2001
From: Ciaran Gultnieks <ciaran@ciarang.com>
Date: Mon, 15 Apr 2013 11:13:27 +0100
Subject: [PATCH] Behave a bit better when a repo is deleted

---
 src/org/fdroid/fdroid/DB.java         | 24 +++++++++++++++++++++---
 src/org/fdroid/fdroid/ManageRepo.java |  2 +-
 2 files changed, 22 insertions(+), 4 deletions(-)

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<String, PackageInfo>();
-            List<PackageInfo> installedPackages = mContext.getPackageManager().getInstalledPackages(0);
+            List<PackageInfo> 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<String> addresses) {
+    public void removeRepos(Vector<String> 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();
                             }