From 692a25abcbc83881fc20a9dcbffec1859d8ca4aa Mon Sep 17 00:00:00 2001 From: Ron Rieve Date: Wed, 10 Sep 2014 16:22:02 +0200 Subject: [PATCH] Save new repo data at end of update Saves the new data for the repo at the end of the update process to enable the user to re-trigger the update in case the update exited prematurely. Fixes #84. --- src/org/fdroid/fdroid/UpdateService.java | 7 +++++ .../fdroid/fdroid/updater/RepoUpdater.java | 27 ++++++++++++++++--- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/org/fdroid/fdroid/UpdateService.java b/src/org/fdroid/fdroid/UpdateService.java index a34f30ba6..bd311d0f3 100644 --- a/src/org/fdroid/fdroid/UpdateService.java +++ b/src/org/fdroid/fdroid/UpdateService.java @@ -327,6 +327,7 @@ public class UpdateService extends IntentService implements ProgressListener { List unchangedRepos = new ArrayList(); List updatedRepos = new ArrayList(); List disabledRepos = new ArrayList(); + List repoUpdateRememberers = new ArrayList(); boolean changes = false; for (Repo repo : repos) { @@ -350,6 +351,7 @@ public class UpdateService extends IntentService implements ProgressListener { apksToUpdate.addAll(updater.getApks()); updatedRepos.add(repo); changes = true; + repoUpdateRememberers.add(updater.getRememberer()); } else { unchangedRepos.add(repo); } @@ -389,6 +391,11 @@ public class UpdateService extends IntentService implements ProgressListener { notifyContentProviders(); + //we only remember the update if everything has gone well + for (RepoUpdater.RepoUpdateRememberer rememberer : repoUpdateRememberers) { + rememberer.rememberUpdate(); + } + if (prefs.getBoolean(Preferences.PREF_UPD_NOTIFY, true)) { performUpdateNotification(appsToUpdate.values()); } diff --git a/src/org/fdroid/fdroid/updater/RepoUpdater.java b/src/org/fdroid/fdroid/updater/RepoUpdater.java index 7cb788ed3..a25a368a3 100644 --- a/src/org/fdroid/fdroid/updater/RepoUpdater.java +++ b/src/org/fdroid/fdroid/updater/RepoUpdater.java @@ -49,6 +49,7 @@ abstract public class RepoUpdater { protected final Repo repo; private List apps = new ArrayList(); private List apks = new ArrayList(); + private RepoUpdateRememberer rememberer = null; protected boolean usePubkeyInJar = false; protected boolean hasChanged = false; protected ProgressListener progressListener; @@ -170,7 +171,11 @@ abstract public class RepoUpdater { reader.parse(is); apps = handler.getApps(); apks = handler.getApks(); - updateRepo(handler, downloader.getCacheTag()); + + rememberer = new RepoUpdateRememberer(); + rememberer.context = context; + rememberer.repo = repo; + rememberer.values = prepareRepoDetailsForSaving(handler, downloader.getCacheTag()); } } catch (SAXException e) { throw new UpdateException( @@ -196,7 +201,7 @@ abstract public class RepoUpdater { } } - private void updateRepo(RepoXMLHandler handler, String etag) { + private ContentValues prepareRepoDetailsForSaving (RepoXMLHandler handler, String etag) { ContentValues values = new ContentValues(); @@ -244,7 +249,23 @@ abstract public class RepoUpdater { values.put(RepoProvider.DataColumns.NAME, handler.getName()); } - RepoProvider.Helper.update(context, repo, values); + return values; + } + + public RepoUpdateRememberer getRememberer() { + return rememberer; + } + + public static class RepoUpdateRememberer { + + private Context context; + private Repo repo; + private ContentValues values; + + public void rememberUpdate() { + RepoProvider.Helper.update(context, repo, values); + } + } public static class UpdateException extends Exception {