diff --git a/app/src/main/java/eu/faircode/email/ActivitySetup.java b/app/src/main/java/eu/faircode/email/ActivitySetup.java index 38266edc28..8ce4a9eded 100644 --- a/app/src/main/java/eu/faircode/email/ActivitySetup.java +++ b/app/src/main/java/eu/faircode/email/ActivitySetup.java @@ -60,6 +60,7 @@ import com.google.android.material.snackbar.Snackbar; import com.google.android.material.textfield.TextInputLayout; import org.json.JSONArray; +import org.json.JSONException; import org.json.JSONObject; import java.io.BufferedInputStream; @@ -74,7 +75,9 @@ import java.security.spec.KeySpec; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Objects; import javax.crypto.BadPaddingException; @@ -761,6 +764,21 @@ public class ActivitySetup extends ActivityBilling implements FragmentManager.On try { db.beginTransaction(); + // Answers + Map xAnswer = new HashMap<>(); + JSONArray janswers = jimport.getJSONArray("answers"); + for (int a = 0; a < janswers.length(); a++) { + JSONObject janswer = (JSONObject) janswers.get(a); + EntityAnswer answer = EntityAnswer.fromJSON(janswer); + long id = answer.id; + answer.id = null; + + answer.id = db.answer().insertAnswer(answer); + xAnswer.put(id, answer.id); + + Log.i("Imported answer=" + answer.name); + } + // Accounts JSONArray jaccounts = jimport.getJSONArray("accounts"); for (int a = 0; a < jaccounts.length(); a++) { @@ -781,15 +799,24 @@ public class ActivitySetup extends ActivityBilling implements FragmentManager.On if (account.notify) account.createNotificationChannel(context); + Map xIdentity = new HashMap<>(); JSONArray jidentities = (JSONArray) jaccount.get("identities"); for (int i = 0; i < jidentities.length(); i++) { JSONObject jidentity = (JSONObject) jidentities.get(i); EntityIdentity identity = EntityIdentity.fromJSON(jidentity); + long id = identity.id; + identity.id = null; + identity.account = account.id; identity.id = db.identity().insertIdentity(identity); + xIdentity.put(id, identity.id); + Log.i("Imported identity=" + identity.email); } + Map xFolder = new HashMap<>(); + List rules = new ArrayList<>(); + JSONArray jfolders = (JSONArray) jaccount.get("folders"); for (int f = 0; f < jfolders.length(); f++) { JSONObject jfolder = (JSONObject) jfolders.get(f); @@ -799,6 +826,7 @@ public class ActivitySetup extends ActivityBilling implements FragmentManager.On folder.account = account.id; folder.id = db.folder().insertFolder(folder); + xFolder.put(id, folder.id); if (Objects.equals(swipe_left, id)) account.swipe_left = folder.id; @@ -811,12 +839,40 @@ public class ActivitySetup extends ActivityBilling implements FragmentManager.On JSONObject jrule = (JSONObject) jrules.get(r); EntityRule rule = EntityRule.fromJSON(jrule); rule.folder = folder.id; - db.rule().insertRule(rule); + rules.add(rule); } } Log.i("Imported folder=" + folder.name); } + for (EntityRule rule : rules) { + try { + JSONObject jaction = new JSONObject(rule.action); + int type = jaction.getInt("type"); + + switch (type) { + case EntityRule.TYPE_MOVE: + case EntityRule.TYPE_COPY: + long target = jaction.getLong("target"); + Log.i("XLAT target " + target + " > " + xFolder.get(target)); + jaction.put("target", xFolder.get(target)); + break; + case EntityRule.TYPE_ANSWER: + long iid = jaction.getLong("identity"); + long aid = jaction.getLong("answer"); + Log.i("XLAT identity " + iid + " > " + xIdentity.get(iid)); + Log.i("XLAT target " + aid + " > " + xAnswer.get(aid)); + jaction.put("identity", xIdentity.get(iid)); + jaction.put("answer", xAnswer.get(aid)); + break; + } + } catch (JSONException ex) { + Log.e(ex); + } + + db.rule().insertRule(rule); + } + // Contacts if (jaccount.has("contacts")) { JSONArray jcontacts = jaccount.getJSONArray("contacts"); @@ -835,15 +891,6 @@ public class ActivitySetup extends ActivityBilling implements FragmentManager.On db.account().updateAccount(account); } - // Answers - JSONArray janswers = jimport.getJSONArray("answers"); - for (int a = 0; a < janswers.length(); a++) { - JSONObject janswer = (JSONObject) janswers.get(a); - EntityAnswer answer = EntityAnswer.fromJSON(janswer); - answer.id = db.answer().insertAnswer(answer); - Log.i("Imported answer=" + answer.name); - } - // Settings SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); SharedPreferences.Editor editor = prefs.edit(); diff --git a/app/src/main/java/eu/faircode/email/EntityAnswer.java b/app/src/main/java/eu/faircode/email/EntityAnswer.java index d5109f9467..e75b40b2cd 100644 --- a/app/src/main/java/eu/faircode/email/EntityAnswer.java +++ b/app/src/main/java/eu/faircode/email/EntityAnswer.java @@ -101,7 +101,7 @@ public class EntityAnswer implements Serializable { public static EntityAnswer fromJSON(JSONObject json) throws JSONException { EntityAnswer answer = new EntityAnswer(); - // id + answer.id = json.getLong("id"); answer.name = json.getString("name"); answer.hide = (json.has("hide") && json.getBoolean("hide")); answer.text = json.getString("text"); diff --git a/app/src/main/java/eu/faircode/email/EntityIdentity.java b/app/src/main/java/eu/faircode/email/EntityIdentity.java index 1652ac4d46..7cb8baec12 100644 --- a/app/src/main/java/eu/faircode/email/EntityIdentity.java +++ b/app/src/main/java/eu/faircode/email/EntityIdentity.java @@ -140,7 +140,7 @@ public class EntityIdentity { public static EntityIdentity fromJSON(JSONObject json) throws JSONException { EntityIdentity identity = new EntityIdentity(); - // id + identity.id = json.getLong("id"); identity.name = json.getString("name"); identity.email = json.getString("email"); if (json.has("display") && !json.isNull("display"))