(Context context, JSONArray jargs, EntityAccount account, EntityFolder folder, EntityMessage message, IMAPFolder ifolder)
| 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); |
no test coverage detected