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.
This commit is contained in:
Ron Rieve 2014-09-10 16:22:02 +02:00
parent 6b12a006fb
commit 692a25abcb
2 changed files with 31 additions and 3 deletions

View File

@ -327,6 +327,7 @@ public class UpdateService extends IntentService implements ProgressListener {
List<Repo> unchangedRepos = new ArrayList<Repo>();
List<Repo> updatedRepos = new ArrayList<Repo>();
List<Repo> disabledRepos = new ArrayList<Repo>();
List<RepoUpdater.RepoUpdateRememberer> repoUpdateRememberers = new ArrayList<RepoUpdater.RepoUpdateRememberer>();
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());
}

View File

@ -49,6 +49,7 @@ abstract public class RepoUpdater {
protected final Repo repo;
private List<App> apps = new ArrayList<App>();
private List<Apk> apks = new ArrayList<Apk>();
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 {