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 {