From 6c3da926d0648a58bd0e21f9da9ef5e834ec3ba5 Mon Sep 17 00:00:00 2001 From: M66B Date: Tue, 17 Aug 2021 20:28:58 +0200 Subject: [PATCH] Added cross account copy --- app/src/main/java/eu/faircode/email/Core.java | 6 ++++-- .../eu/faircode/email/EntityOperation.java | 20 +++++++++++++++++++ .../faircode/email/FragmentDialogFolder.java | 2 +- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/Core.java b/app/src/main/java/eu/faircode/email/Core.java index 5473e234f8..f30a1116d3 100644 --- a/app/src/main/java/eu/faircode/email/Core.java +++ b/app/src/main/java/eu/faircode/email/Core.java @@ -998,6 +998,7 @@ class Core { // Get arguments long target = jargs.optLong(0, folder.id); boolean autoread = jargs.optBoolean(1, false); + boolean copy = jargs.optBoolean(2, false); // Cross account if (target != folder.id) throw new IllegalArgumentException("Invalid folder"); @@ -1161,7 +1162,8 @@ class Core { EntityOperation.queue(context, message, EntityOperation.SEEN, true); // Delete source - EntityOperation.queue(context, message, EntityOperation.DELETE); + if (!copy) + EntityOperation.queue(context, message, EntityOperation.DELETE); } db.setTransactionSuccessful(); @@ -1704,7 +1706,7 @@ class Core { } if (jargs.length() > 0) { - // Cross account move + // Cross account move/copy long tid = jargs.getLong(0); EntityFolder target = db.folder().getFolder(tid); if (target == null) diff --git a/app/src/main/java/eu/faircode/email/EntityOperation.java b/app/src/main/java/eu/faircode/email/EntityOperation.java index cf1526a88d..cbecf538b3 100644 --- a/app/src/main/java/eu/faircode/email/EntityOperation.java +++ b/app/src/main/java/eu/faircode/email/EntityOperation.java @@ -355,6 +355,26 @@ public class EntityOperation { } return; + } else if (COPY.equals(name)) { + // Parameters in: + // 0: target folder + // 1: mark seen + + EntityFolder source = db.folder().getFolder(message.folder); + EntityFolder target = db.folder().getFolder(jargs.getLong(0)); + if (source == null || target == null) + return; + + // Cross account copy + if (!source.account.equals(target.account)) { + jargs.put(2, true); // copy + if (message.raw != null && message.raw) + queue(context, target.account, target.id, message.id, ADD, jargs); + else + queue(context, source.account, source.id, message.id, RAW, jargs); + return; + } + } else if (DELETE.equals(name)) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); boolean perform_expunge = prefs.getBoolean("perform_expunge", true); diff --git a/app/src/main/java/eu/faircode/email/FragmentDialogFolder.java b/app/src/main/java/eu/faircode/email/FragmentDialogFolder.java index e7790eda2d..5568be085e 100644 --- a/app/src/main/java/eu/faircode/email/FragmentDialogFolder.java +++ b/app/src/main/java/eu/faircode/email/FragmentDialogFolder.java @@ -67,7 +67,7 @@ public class FragmentDialogFolder extends FragmentDialogBase { final String title = aargs.getString("title"); final long account = aargs.getLong("account"); final long[] disabled = aargs.getLongArray("disabled"); - final boolean cancopy = aargs.getBoolean("cancopy") && false; + final boolean cancopy = aargs.getBoolean("cancopy"); final Context context = getContext(); final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);