MCPcopy Create free account
hub / github.com/M66B/FairEmail / onRaw

Method onRaw

app/src/main/java/eu/faircode/email/Core.java:2077–2136  ·  view source on GitHub ↗
(Context context, JSONArray jargs, EntityAccount account, EntityFolder folder, EntityMessage message, IMAPFolder ifolder)

Source from the content-addressed store, hash-verified

2075 }
2076
2077 private static void onRaw(Context context, JSONArray jargs, EntityAccount account, EntityFolder folder, EntityMessage message, IMAPFolder ifolder) throws MessagingException, IOException, JSONException {
2078 // Download raw message
2079 DB db = DB.getInstance(context);
2080 SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
2081 boolean save_user_flags = prefs.getBoolean("save_user_flags", false);
2082
2083 if (message.raw == null || !message.raw) {
2084 IMAPMessage imessage = (IMAPMessage) ifolder.getMessageByUID(message.uid);
2085 if (imessage == null)
2086 throw new MessageRemovedException();
2087
2088 EntityLog.log(context, "Downloading raw id=" + message.id + " subject=" + message.subject);
2089 File file = message.getRawFile(context);
2090 try (OutputStream os = new BufferedOutputStream(new FileOutputStream(file))) {
2091 imessage.writeTo(os);
2092 }
2093
2094 Properties props = MessageHelper.getSessionProperties(account.unicode);
2095 Session isession = Session.getInstance(props, null);
2096
2097 MimeMessage saved;
2098 try (InputStream is = new FileInputStream(file)) {
2099 saved = new MimeMessage(isession, is);
2100 }
2101
2102 if (save_user_flags) {
2103 String userFlags = TextUtils.join(",", imessage.getFlags().getUserFlags());
2104 saved.addHeader("X-User-Flags", userFlags);
2105 try (OutputStream os = new BufferedOutputStream(new FileOutputStream(file))) {
2106 saved.writeTo(os);
2107 }
2108 }
2109
2110 // Yahoo is returning incorrect messages
2111 MessageHelper helper = new MessageHelper(saved, context);
2112 if (!Objects.equals(message.msgid, helper.getMessageID()))
2113 throw new MessagingException("Incorrect msgid=" + message.msgid + "/" + helper.getMessageID());
2114
2115 db.message().setMessageRaw(message.id, true);
2116 }
2117
2118 if (jargs.length() > 0) {
2119 // Cross account move/copy
2120 long tid = jargs.getLong(0);
2121 EntityFolder target = db.folder().getFolder(tid);
2122 if (target == null)
2123 throw new FolderNotFoundException();
2124
2125 Log.i(folder.name + " queuing ADD id=" + message.id + ":" + target.id);
2126
2127 EntityOperation operation = new EntityOperation();
2128 operation.account = target.account;
2129 operation.folder = target.id;
2130 operation.message = message.id;
2131 operation.name = EntityOperation.ADD;
2132 operation.args = jargs.toString();
2133 operation.created = new Date().getTime();
2134 operation.id = db.operation().insertOperation(operation);

Callers 1

processOperationsMethod · 0.95

Calls 15

getInstanceMethod · 0.95
logMethod · 0.95
writeToMethod · 0.95
getSessionPropertiesMethod · 0.95
getInstanceMethod · 0.95
getFlagsMethod · 0.95
addHeaderMethod · 0.95
writeToMethod · 0.95
getMessageIDMethod · 0.95
messageMethod · 0.95
folderMethod · 0.95
iMethod · 0.95

Tested by

no test coverage detected