From bbd66a22bb9e62905a08f4d1efd697a062b8e45b Mon Sep 17 00:00:00 2001 From: M66B Date: Sat, 19 Dec 2020 09:28:37 +0100 Subject: [PATCH] Rule import/export restore folder type --- .../java/eu/faircode/email/FragmentRules.java | 38 +++++++++++++++++-- app/src/main/res/menu/menu_rules.xml | 2 - 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/FragmentRules.java b/app/src/main/java/eu/faircode/email/FragmentRules.java index 9893180385..c4cf728d89 100644 --- a/app/src/main/java/eu/faircode/email/FragmentRules.java +++ b/app/src/main/java/eu/faircode/email/FragmentRules.java @@ -63,7 +63,6 @@ import java.util.Date; import java.util.List; import static android.app.Activity.RESULT_OK; -import static eu.faircode.email.EntityRule.TYPE_MOVE; public class FragmentRules extends FragmentBase { private long account; @@ -337,8 +336,21 @@ public class FragmentRules extends FragmentBase { DB db = DB.getInstance(context); JSONArray jrules = new JSONArray(); - for (EntityRule rule : db.rule().getRules(fid)) + for (EntityRule rule : db.rule().getRules(fid)) { + JSONObject jaction = new JSONObject(rule.action); + + int type = jaction.getInt("type"); + if (type == EntityRule.TYPE_MOVE || type == EntityRule.TYPE_COPY) { + long target = jaction.optLong("target", -1); + EntityFolder f = db.folder().getFolder(target); + if (f != null) + jaction.put("folderType", f.type); + } + + rule.action = jaction.toString(); + jrules.put(rule.toJSON()); + } ContentResolver resolver = context.getContentResolver(); try (OutputStream os = resolver.openOutputStream(uri)) { @@ -403,9 +415,29 @@ public class FragmentRules extends FragmentBase { try { db.beginTransaction(); + EntityFolder folder = db.folder().getFolder(fid); + if (folder == null) + return null; + for (int i = 0; i < jrules.length(); i++) { JSONObject jrule = jrules.getJSONObject(i); EntityRule rule = EntityRule.fromJSON(jrule); + + JSONObject jaction = new JSONObject(rule.action); + + int type = jaction.getInt("type"); + if (type == EntityRule.TYPE_MOVE || type == EntityRule.TYPE_COPY) { + String folderType = jaction.optString("folderType"); + if (!EntityFolder.SYSTEM.equals(folderType) && + !EntityFolder.USER.equals(folderType)) { + EntityFolder f = db.folder().getFolderByType(folder.account, folderType); + if (f != null) + jaction.put("target", f.id); + } + } + + rule.action = jaction.toString(); + rule.folder = fid; rule.applied = 0; rule.id = db.rule().insertRule(rule); @@ -485,7 +517,7 @@ public class FragmentRules extends FragmentBase { JSONObject jaction = new JSONObject(rule.action); int type = jaction.optInt("type", -1); long target = jaction.optLong("target", -1); - if (type == TYPE_MOVE && target == junk.id) + if (type == EntityRule.TYPE_MOVE && target == junk.id) db.rule().deleteRule(rule.id); } } diff --git a/app/src/main/res/menu/menu_rules.xml b/app/src/main/res/menu/menu_rules.xml index 1bade8c691..9a0bd4e0c2 100644 --- a/app/src/main/res/menu/menu_rules.xml +++ b/app/src/main/res/menu/menu_rules.xml @@ -11,13 +11,11 @@