From 98b84f8927550b9f9571efc06a7627e763f2157f Mon Sep 17 00:00:00 2001 From: M66B Date: Thu, 14 Mar 2019 07:45:13 +0000 Subject: [PATCH] Refactoring --- .../java/eu/faircode/email/ActivityView.java | 12 ++++-- .../eu/faircode/email/AdapterMessage.java | 17 ++++++--- app/src/main/java/eu/faircode/email/Core.java | 11 +++--- .../java/eu/faircode/email/EntityMessage.java | 6 +-- .../eu/faircode/email/EntityOperation.java | 11 ++++-- .../java/eu/faircode/email/EntityRule.java | 2 +- .../eu/faircode/email/FragmentCompose.java | 38 ++++++++++++------- .../main/java/eu/faircode/email/Helper.java | 2 +- .../java/eu/faircode/email/MessageHelper.java | 4 +- .../java/eu/faircode/email/ServiceSend.java | 6 +-- .../eu/faircode/email/ViewModelBrowse.java | 2 +- 11 files changed, 67 insertions(+), 44 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/ActivityView.java b/app/src/main/java/eu/faircode/email/ActivityView.java index 764b999908..0ae5871ebc 100644 --- a/app/src/main/java/eu/faircode/email/ActivityView.java +++ b/app/src/main/java/eu/faircode/email/ActivityView.java @@ -1259,7 +1259,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB if (encrypted == null) { EntityMessage message = db.message().getMessage(id); - String body = Helper.readText(EntityMessage.getFile(context, message.id)); + String body = Helper.readText(message.getFile(context)); // https://tools.ietf.org/html/rfc4880#section-6.2 int begin = body.indexOf(PGP_BEGIN_MESSAGE); @@ -1296,7 +1296,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB // Write decrypted body EntityMessage m = db.message().getMessage(id); - Helper.writeText(EntityMessage.getFile(context, m.id), decrypted.toString()); + Helper.writeText(m.getFile(context), decrypted.toString()); db.message().setMessageStored(id, new Date().getTime()); @@ -1319,7 +1319,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB // Write decrypted body EntityMessage m = db.message().getMessage(id); - Helper.writeText(EntityMessage.getFile(context, m.id), parts.getHtml(context)); + Helper.writeText(m.getFile(context), parts.getHtml(context)); // Remove previously decrypted attachments for (EntityAttachment a : attachments) @@ -1421,7 +1421,11 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB throw new IllegalArgumentException(context.getString(R.string.title_no_stream)); } - File file = EntityMessage.getRawFile(context, id); + DB db = DB.getInstance(context); + EntityMessage message = db.message().getMessage(id); + if (message == null) + return null; + File file = message.getRawFile(context); Log.i("Raw file=" + file); ParcelFileDescriptor pfd = null; diff --git a/app/src/main/java/eu/faircode/email/AdapterMessage.java b/app/src/main/java/eu/faircode/email/AdapterMessage.java index 5fe483e79b..6c02329de5 100644 --- a/app/src/main/java/eu/faircode/email/AdapterMessage.java +++ b/app/src/main/java/eu/faircode/email/AdapterMessage.java @@ -92,6 +92,7 @@ import org.jsoup.nodes.Element; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; @@ -1600,7 +1601,7 @@ public class AdapterMessage extends RecyclerView.Adapter attachments = db.attachment().getAttachments(id); @@ -2880,10 +2882,13 @@ public class AdapterMessage extends RecyclerView.Adapter"); diff --git a/app/src/main/java/eu/faircode/email/EntityMessage.java b/app/src/main/java/eu/faircode/email/EntityMessage.java index 4d41c1078c..d2257f20e0 100644 --- a/app/src/main/java/eu/faircode/email/EntityMessage.java +++ b/app/src/main/java/eu/faircode/email/EntityMessage.java @@ -150,21 +150,21 @@ public class EntityMessage implements Serializable { return sb.toString(); } - static File getFile(Context context, Long id) { + File getFile(Context context) { File dir = new File(context.getFilesDir(), "messages"); if (!dir.exists()) dir.mkdir(); return new File(dir, id.toString()); } - static File getRefFile(Context context, Long id) { + File getRefFile(Context context) { File dir = new File(context.getFilesDir(), "references"); if (!dir.exists()) dir.mkdir(); return new File(dir, id.toString()); } - static File getRawFile(Context context, Long id) { + File getRawFile(Context context) { File dir = new File(context.getFilesDir(), "raw"); if (!dir.exists()) dir.mkdir(); diff --git a/app/src/main/java/eu/faircode/email/EntityOperation.java b/app/src/main/java/eu/faircode/email/EntityOperation.java index 6bb37f82b6..5e5f5503d0 100644 --- a/app/src/main/java/eu/faircode/email/EntityOperation.java +++ b/app/src/main/java/eu/faircode/email/EntityOperation.java @@ -26,6 +26,7 @@ import android.preference.PreferenceManager; import org.json.JSONArray; import org.json.JSONException; +import java.io.File; import java.io.IOException; import java.util.Calendar; import java.util.Date; @@ -140,6 +141,8 @@ public class EntityOperation { target.synchronize && message.received > cal_keep.getTimeInMillis() && db.message().countMessageByMsgId(target.id, message.msgid) == 0) { + File msource = message.getFile(context); + // Copy message to target folder long id = message.id; long uid = message.uid; @@ -153,7 +156,9 @@ public class EntityOperation { message.seen = true; message.ui_seen = true; } - tmpid = db.message().insertMessage(message); + message.id = db.message().insertMessage(message); + File mtarget = message.getFile(context); + tmpid = message.id; message.id = id; message.account = source.account; @@ -164,9 +169,7 @@ public class EntityOperation { if (message.content) try { - Helper.copy( - EntityMessage.getFile(context, id), - EntityMessage.getFile(context, tmpid)); + Helper.copy(msource, mtarget); } catch (IOException ex) { Log.e(ex); db.message().setMessageContent(tmpid, false, null, null); diff --git a/app/src/main/java/eu/faircode/email/EntityRule.java b/app/src/main/java/eu/faircode/email/EntityRule.java index 102f96e8b2..58ee015f7a 100644 --- a/app/src/main/java/eu/faircode/email/EntityRule.java +++ b/app/src/main/java/eu/faircode/email/EntityRule.java @@ -220,7 +220,7 @@ public class EntityRule { reply.sender = MessageHelper.getSortKey(reply.from); reply.received = new Date().getTime(); reply.id = db.message().insertMessage(reply); - Helper.writeText(EntityMessage.getFile(context, reply.id), body); + Helper.writeText(reply.getFile(context), body); db.message().setMessageContent(reply.id, true, HtmlHelper.getPreview(body), null); EntityOperation.queue(context, db, reply, EntityOperation.SEND); diff --git a/app/src/main/java/eu/faircode/email/FragmentCompose.java b/app/src/main/java/eu/faircode/email/FragmentCompose.java index 4085d88f1d..08ec2f04bc 100644 --- a/app/src/main/java/eu/faircode/email/FragmentCompose.java +++ b/app/src/main/java/eu/faircode/email/FragmentCompose.java @@ -97,6 +97,7 @@ import java.io.BufferedWriter; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; +import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; @@ -557,8 +558,13 @@ public class FragmentCompose extends FragmentBase { long id = args.getLong("id"); String body = args.getString("body"); - File file = EntityMessage.getFile(context, id); - File refFile = EntityMessage.getRefFile(context, id); + DB db = DB.getInstance(context); + EntityMessage draft = db.message().getMessage(id); + if (draft == null) + return null; + + File file = draft.getFile(context); + File refFile = draft.getRefFile(context); String ref = Helper.readText(refFile); String plain = HtmlHelper.getText(ref); @@ -1745,7 +1751,7 @@ public class FragmentCompose extends FragmentBase { draft.received = new Date().getTime(); draft.id = db.message().insertMessage(draft); - Helper.writeText(EntityMessage.getFile(context, draft.id), body); + Helper.writeText(draft.getFile(context), body); db.message().setMessageContent(draft.id, true, HtmlHelper.getPreview(body), null); @@ -1754,8 +1760,8 @@ public class FragmentCompose extends FragmentBase { String refBody = String.format("

%s %s:

\n
%s
", Html.escapeHtml(new Date(ref.received).toString()), Html.escapeHtml(MessageHelper.formatAddresses(ref.from)), - Helper.readText(EntityMessage.getFile(context, ref.id))); - Helper.writeText(EntityMessage.getRefFile(context, draft.id), refBody); + Helper.readText(ref.getFile(context))); + Helper.writeText(draft.getRefFile(context), refBody); } if ("new".equals(action)) { @@ -2079,7 +2085,7 @@ public class FragmentCompose extends FragmentBase { !MessageHelper.equal(draft.bcc, abcc) || !Objects.equals(draft.subject, subject) || last_available != available || - !body.equals(Helper.readText(EntityMessage.getFile(context, draft.id)))); + !body.equals(Helper.readText(draft.getFile(context)))); last_available = available; @@ -2095,14 +2101,14 @@ public class FragmentCompose extends FragmentBase { draft.subject = subject; draft.received = new Date().getTime(); db.message().updateMessage(draft); - Helper.writeText(EntityMessage.getFile(context, draft.id), body); + Helper.writeText(draft.getFile(context), body); db.message().setMessageContent(draft.id, true, HtmlHelper.getPreview(body), null); } // Remove unused inline images StringBuilder sb = new StringBuilder(); sb.append(body); - File rfile = EntityMessage.getRefFile(context, draft.id); + File rfile = draft.getRefFile(context); if (rfile.exists()) sb.append(Helper.readText(rfile)); List cids = new ArrayList<>(); @@ -2165,7 +2171,7 @@ public class FragmentCompose extends FragmentBase { // Delete draft (cannot move to outbox) EntityOperation.queue(context, db, draft, EntityOperation.DELETE); - File refDraftFile = EntityMessage.getRefFile(context, draft.id); + File refDraftFile = draft.getRefFile(context); // Copy message to outbox draft.id = null; @@ -2173,9 +2179,9 @@ public class FragmentCompose extends FragmentBase { draft.uid = null; draft.ui_hide = false; draft.id = db.message().insertMessage(draft); - Helper.writeText(EntityMessage.getFile(context, draft.id), body); + Helper.writeText(draft.getFile(context), body); if (refDraftFile.exists()) { - File refFile = EntityMessage.getRefFile(context, draft.id); + File refFile = draft.getRefFile(context); refDraftFile.renameTo(refFile); } @@ -2328,11 +2334,17 @@ public class FragmentCompose extends FragmentBase { final long id = args.getLong("id"); final boolean show_images = args.getBoolean("show_images", false); - String body = Helper.readText(EntityMessage.getFile(context, id)); + + DB db = DB.getInstance(context); + EntityMessage draft = db.message().getMessage(id); + if (draft == null) + throw new FileNotFoundException(); + + String body = Helper.readText(draft.getFile(context)); Spanned spannedBody = HtmlHelper.fromHtml(body, cidGetter, null); Spanned spannedReference = null; - File refFile = EntityMessage.getRefFile(context, id); + File refFile = draft.getRefFile(context); if (refFile.exists()) { String quote = HtmlHelper.sanitize(context, Helper.readText(refFile), true); Spanned spannedQuote = HtmlHelper.fromHtml(quote, diff --git a/app/src/main/java/eu/faircode/email/Helper.java b/app/src/main/java/eu/faircode/email/Helper.java index 7cc8d07734..169d2fb422 100644 --- a/app/src/main/java/eu/faircode/email/Helper.java +++ b/app/src/main/java/eu/faircode/email/Helper.java @@ -415,7 +415,7 @@ public class Helper { draft.subject = context.getString(R.string.app_name) + " " + BuildConfig.VERSION_NAME + " debug info"; draft.received = new Date().getTime(); draft.id = db.message().insertMessage(draft); - writeText(EntityMessage.getFile(context, draft.id), body); + writeText(draft.getFile(context), body); db.message().setMessageContent(draft.id, true, HtmlHelper.getPreview(body), null); attachSettings(context, draft.id, 1); diff --git a/app/src/main/java/eu/faircode/email/MessageHelper.java b/app/src/main/java/eu/faircode/email/MessageHelper.java index 98e862c275..cce351766e 100644 --- a/app/src/main/java/eu/faircode/email/MessageHelper.java +++ b/app/src/main/java/eu/faircode/email/MessageHelper.java @@ -289,7 +289,7 @@ public class MessageHelper { DB db = DB.getInstance(context); StringBuilder body = new StringBuilder(); - body.append(Helper.readText(EntityMessage.getFile(context, message.id))); + body.append(Helper.readText(message.getFile(context))); if (message.identity != null) { EntityIdentity identity = db.identity().getIdentity(message.identity); @@ -297,7 +297,7 @@ public class MessageHelper { body.append(identity.signature); } - File refFile = EntityMessage.getRefFile(context, message.id); + File refFile = message.getRefFile(context); if (refFile.exists()) body.append(Helper.readText(refFile)); diff --git a/app/src/main/java/eu/faircode/email/ServiceSend.java b/app/src/main/java/eu/faircode/email/ServiceSend.java index 3a3ca5c64e..40f9f91a4a 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSend.java +++ b/app/src/main/java/eu/faircode/email/ServiceSend.java @@ -319,11 +319,11 @@ public class ServiceSend extends LifecycleService { // Append replied/forwarded text StringBuilder sb = new StringBuilder(); - sb.append(Helper.readText(EntityMessage.getFile(this, message.id))); - File refFile = EntityMessage.getRefFile(this, message.id); + sb.append(Helper.readText(message.getFile(this))); + File refFile = message.getRefFile(this); if (refFile.exists()) sb.append(Helper.readText(refFile)); - Helper.writeText(EntityMessage.getFile(this, message.id), sb.toString()); + Helper.writeText(message.getFile(this), sb.toString()); try { db.beginTransaction(); diff --git a/app/src/main/java/eu/faircode/email/ViewModelBrowse.java b/app/src/main/java/eu/faircode/email/ViewModelBrowse.java index 5ce2fd9114..ba4f16dd06 100644 --- a/app/src/main/java/eu/faircode/email/ViewModelBrowse.java +++ b/app/src/main/java/eu/faircode/email/ViewModelBrowse.java @@ -112,7 +112,7 @@ public class ViewModelBrowse extends ViewModel { String body = null; if (message.content) try { - body = Helper.readText(EntityMessage.getFile(state.context, message.id)); + body = Helper.readText(message.getFile(state.context)); } catch (IOException ex) { Log.e(ex); }