From 4be4b8ddaa94dacc4348fad6ef45e4835cc7da40 Mon Sep 17 00:00:00 2001 From: Ciaran Gultnieks Date: Wed, 26 Jan 2011 23:02:27 +0000 Subject: [PATCH] Issue #20 - network failure during repo update shouldn't empty the app list --- src/org/fdroid/fdroid/FDroid.java | 14 ++++++++++---- src/org/fdroid/fdroid/RepoXMLHandler.java | 5 +++-- src/org/fdroid/fdroid/UpdateService.java | 5 +++-- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/org/fdroid/fdroid/FDroid.java b/src/org/fdroid/fdroid/FDroid.java index 2d2b5f464..d9cb73734 100644 --- a/src/org/fdroid/fdroid/FDroid.java +++ b/src/org/fdroid/fdroid/FDroid.java @@ -172,7 +172,7 @@ public class FDroid extends TabActivity implements OnItemClickListener { case SEARCH: onSearchRequested(); return true; - + case ABOUT: LayoutInflater li = LayoutInflater.from(this); View view = li.inflate(R.layout.about, null); @@ -363,8 +363,8 @@ public class FDroid extends TabActivity implements OnItemClickListener { || netstate.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED) { new Thread() { public void run() { - RepoXMLHandler.doUpdates(FDroid.this, db); - update_handler.sendEmptyMessage(0); + boolean success = RepoXMLHandler.doUpdates(FDroid.this, db); + update_handler.sendEmptyMessage(success ? 0 : 1); } }.start(); return true; @@ -382,7 +382,13 @@ public class FDroid extends TabActivity implements OnItemClickListener { private Handler update_handler = new Handler() { @Override public void handleMessage(Message msg) { - populateLists(true); + if (msg.what == 1) { + Toast.makeText(FDroid.this, + getString(R.string.connection_error_msg), + Toast.LENGTH_LONG).show(); + } else { + populateLists(true); + } if (pd.isShowing()) pd.dismiss(); } diff --git a/src/org/fdroid/fdroid/RepoXMLHandler.java b/src/org/fdroid/fdroid/RepoXMLHandler.java index 01888a7a9..fcf5d82d4 100644 --- a/src/org/fdroid/fdroid/RepoXMLHandler.java +++ b/src/org/fdroid/fdroid/RepoXMLHandler.java @@ -188,7 +188,7 @@ public class RepoXMLHandler extends DefaultHandler { } } - public static void doUpdates(Context ctx, DB db) { + public static boolean doUpdates(Context ctx, DB db) { db.beginUpdate(); Vector repos = db.getRepos(); for (DB.Repo repo : repos) { @@ -233,6 +233,7 @@ public class RepoXMLHandler extends DefaultHandler { } catch (Exception e) { Log.d("FDroid", "Exception updating from " + repo.address + " - " + e.getMessage()); + return false; } finally { ctx.deleteFile("tempindex.xml"); } @@ -240,7 +241,7 @@ public class RepoXMLHandler extends DefaultHandler { } } db.endUpdate(); - + return true; } } diff --git a/src/org/fdroid/fdroid/UpdateService.java b/src/org/fdroid/fdroid/UpdateService.java index a10c925f6..7a6336bf8 100644 --- a/src/org/fdroid/fdroid/UpdateService.java +++ b/src/org/fdroid/fdroid/UpdateService.java @@ -116,9 +116,10 @@ public class UpdateService extends Service { if (notify) prevUpdates = db.getNumUpdates(); - RepoXMLHandler.doUpdates(getBaseContext(), db); + boolean success = RepoXMLHandler.doUpdates( + getBaseContext(), db); - if (notify) { + if (success && notify) { if (db.getNumUpdates() > prevUpdates) { // And the user wants to know. NotificationManager n = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);