Backup: added fail safes

master
M66B 1 month ago
parent 851f9d8d11
commit b68348571f

@ -56,7 +56,8 @@ public class FairEmailBackupAgent extends BackupAgent {
private static final String KEY_JSON = "eu.faircode.email.json"; private static final String KEY_JSON = "eu.faircode.email.json";
@Override @Override
public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data, ParcelFileDescriptor newState) throws IOException { public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data, ParcelFileDescriptor newState) {
try {
DB db = DB.getInstance(this); DB db = DB.getInstance(this);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
@ -70,7 +71,6 @@ public class FairEmailBackupAgent extends BackupAgent {
if (!enabled || !(encrypted || BuildConfig.DEBUG)) if (!enabled || !(encrypted || BuildConfig.DEBUG))
return; return;
try {
JSONObject jroot = new JSONObject(); JSONObject jroot = new JSONObject();
JSONObject jsettings = new JSONObject(); JSONObject jsettings = new JSONObject();
@ -141,10 +141,10 @@ public class FairEmailBackupAgent extends BackupAgent {
out.writeUTF(dataHash); out.writeUTF(dataHash);
} catch (Throwable ex) { } catch (Throwable ex) {
Log.e(ex); Log.e(ex);
} } finally {
EntityLog.log(this, "Backup end"); EntityLog.log(this, "Backup end");
} }
}
@Override @Override
public void onQuotaExceeded(long backupDataBytes, long quotaBytes) { public void onQuotaExceeded(long backupDataBytes, long quotaBytes) {
@ -152,18 +152,17 @@ public class FairEmailBackupAgent extends BackupAgent {
} }
@Override @Override
public void onRestore(BackupDataInput data, int appVersionCode, ParcelFileDescriptor newState) throws public void onRestore(BackupDataInput data, int appVersionCode, ParcelFileDescriptor newState) {
IOException { try {
EntityLog.log(this, "Restore start version=" + appVersionCode); EntityLog.log(this, "Restore start version=" + appVersionCode);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
while (data.readNextHeader()) { while (data.readNextHeader()) {
String dataKey = data.getKey(); String dataKey = data.getKey();
int dataSize = data.getDataSize(); int dataSize = data.getDataSize();
EntityLog.log(this, "Restore key=" + dataKey + " size=" + dataSize); EntityLog.log(this, "Restore key=" + dataKey + " size=" + dataSize);
if (KEY_JSON.equals(dataKey)) { if (KEY_JSON.equals(dataKey))
try {
byte[] dataBuf = new byte[dataSize]; byte[] dataBuf = new byte[dataSize];
data.readEntityData(dataBuf, 0, dataSize); data.readEntityData(dataBuf, 0, dataSize);
@ -174,12 +173,12 @@ public class FairEmailBackupAgent extends BackupAgent {
dataBuf = bos.toByteArray(); dataBuf = bos.toByteArray();
EntityLog.log(this, "Restore decompressed=" + dataBuf.length); EntityLog.log(this, "Restore decompressed=" + dataBuf.length);
try {
JSONObject jroot = new JSONObject(new String(dataBuf, StandardCharsets.UTF_8)); JSONObject jroot = new JSONObject(new String(dataBuf, StandardCharsets.UTF_8));
jroot.put("version", 1); jroot.put("version", 1);
JSONObject jsettings = jroot.getJSONObject("settings"); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = prefs.edit(); SharedPreferences.Editor editor = prefs.edit();
JSONObject jsettings = jroot.getJSONObject("settings");
editor.putBoolean("enabled", jsettings.optBoolean("enabled")); editor.putBoolean("enabled", jsettings.optBoolean("enabled"));
editor.putInt("poll_interval", jsettings.optInt("poll_interval", 0)); editor.putInt("poll_interval", jsettings.optInt("poll_interval", 0));
String theme = jsettings.optString("theme", null); String theme = jsettings.optString("theme", null);
@ -237,13 +236,16 @@ public class FairEmailBackupAgent extends BackupAgent {
} catch (Throwable ex) { } catch (Throwable ex) {
Log.e(ex); Log.e(ex);
} }
} else { else {
data.skipEntityData(); data.skipEntityData();
} }
} }
} catch (Throwable ex) {
Log.e(ex);
} finally {
EntityLog.log(this, "Restore end"); EntityLog.log(this, "Restore end");
} }
}
@Override @Override
public void onRestoreFinished() { public void onRestoreFinished() {

Loading…
Cancel
Save