mirror of
https://github.com/M66B/FairEmail.git
synced 2025-01-02 21:24:34 +00:00
Gzip backup
This commit is contained in:
parent
8bf87e6331
commit
e5372b5707
1 changed files with 23 additions and 1 deletions
|
@ -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();
|
||||
|
|
Loading…
Reference in a new issue