From e5372b57074f415953a23e53c8113e94c5dbdcdc Mon Sep 17 00:00:00 2001 From: M66B Date: Sun, 2 Jun 2024 16:44:21 +0200 Subject: [PATCH] Gzip backup --- .../faircode/email/FairEmailBackupAgent.java | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/eu/faircode/email/FairEmailBackupAgent.java b/app/src/main/java/eu/faircode/email/FairEmailBackupAgent.java index 5e6cd74648..ea3de0c378 100644 --- a/app/src/main/java/eu/faircode/email/FairEmailBackupAgent.java +++ b/app/src/main/java/eu/faircode/email/FairEmailBackupAgent.java @@ -34,6 +34,8 @@ import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileInputStream; @@ -42,11 +44,15 @@ import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.List; import java.util.Objects; +import java.util.zip.GZIPInputStream; +import java.util.zip.GZIPOutputStream; public class FairEmailBackupAgent extends BackupAgent { // https://developer.android.com/identity/data/keyvaluebackup#BackupAgent // https://developer.android.com/identity/data/testingbackup#Preparing + // bmgr backupnow "eu.faircode.email.debug" + private static final String KEY_JSON = "eu.faircode.email.json"; @Override @@ -117,8 +123,15 @@ public class FairEmailBackupAgent extends BackupAgent { } boolean write = !Objects.equals(dataHash, lastHash); - EntityLog.log(this, "Backup write=" + write); + EntityLog.log(this, "Backup write=" + write + "size=" + dataBuf.length); if (write) { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + try (GZIPOutputStream gos = new GZIPOutputStream(bos)) { + gos.write(dataBuf, 0, dataBuf.length); + } + dataBuf = bos.toByteArray(); + EntityLog.log(this, "Backup compressed=" + dataBuf.length); + data.writeEntityHeader(KEY_JSON, dataBuf.length); data.writeEntityData(dataBuf, dataBuf.length); } @@ -153,8 +166,17 @@ public class FairEmailBackupAgent extends BackupAgent { if (KEY_JSON.equals(dataKey)) { byte[] dataBuf = new byte[dataSize]; data.readEntityData(dataBuf, 0, dataSize); + + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + try (GZIPInputStream gis = new GZIPInputStream(new ByteArrayInputStream(dataBuf))) { + Helper.copy(gis, bos); + } + dataBuf = bos.toByteArray(); + EntityLog.log(this, "Restore decompressed=" + dataBuf.length); + try { JSONObject jroot = new JSONObject(new String(dataBuf, StandardCharsets.UTF_8)); + jroot.put("version", 1); JSONObject jsettings = jroot.getJSONObject("settings"); SharedPreferences.Editor editor = prefs.edit();