Added POP3 raw save

pull/205/head
M66B 4 years ago
parent f67147e703
commit 197e366144

@ -4624,12 +4624,12 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
popupMenu.getMenu().findItem(R.id.menu_share_as_html).setVisible(message.content && BuildConfig.DEBUG); popupMenu.getMenu().findItem(R.id.menu_share_as_html).setVisible(message.content && BuildConfig.DEBUG);
popupMenu.getMenu().findItem(R.id.menu_raw_save).setEnabled(message.uid != null); boolean canRaw = (message.uid != null ||
popupMenu.getMenu().findItem(R.id.menu_raw_send_message).setEnabled(message.uid != null); (EntityFolder.INBOX.equals(message.folderType) &&
popupMenu.getMenu().findItem(R.id.menu_raw_send_thread).setEnabled(message.uid != null); message.accountProtocol == EntityAccount.TYPE_POP));
popupMenu.getMenu().findItem(R.id.menu_raw_save).setEnabled(canRaw);
popupMenu.getMenu().findItem(R.id.menu_raw_save).setVisible(message.accountProtocol == EntityAccount.TYPE_IMAP); popupMenu.getMenu().findItem(R.id.menu_raw_send_message).setEnabled(canRaw);
popupMenu.getMenu().findItem(R.id.menu_raw_send).setVisible(message.accountProtocol == EntityAccount.TYPE_IMAP); popupMenu.getMenu().findItem(R.id.menu_raw_send_thread).setEnabled(canRaw);
popupMenu.getMenu().findItem(R.id.menu_resync) popupMenu.getMenu().findItem(R.id.menu_resync)
.setEnabled(message.uid != null) .setEnabled(message.uid != null)

@ -350,6 +350,10 @@ class Core {
onDelete(context, jargs, account, folder, message, (POP3Folder) ifolder, (POP3Store) istore, state); onDelete(context, jargs, account, folder, message, (POP3Folder) ifolder, (POP3Store) istore, state);
break; break;
case EntityOperation.RAW:
onRaw(context, jargs, folder, message, (POP3Store) istore, (POP3Folder) ifolder);
break;
case EntityOperation.SYNC: case EntityOperation.SYNC:
Helper.gc(); Helper.gc();
onSynchronizeMessages(context, jargs, account, folder, (POP3Folder) ifolder, (POP3Store) istore, state); onSynchronizeMessages(context, jargs, account, folder, (POP3Folder) ifolder, (POP3Store) istore, state);
@ -1759,6 +1763,26 @@ class Core {
} }
} }
private static void onRaw(Context context, JSONArray jargs, EntityFolder folder, EntityMessage message, POP3Store istore, POP3Folder ifolder) throws MessagingException, IOException, JSONException {
// Download raw message
if (!EntityFolder.INBOX.equals(folder.type))
throw new IllegalArgumentException("Unexpected folder=" + folder.type);
if (message.raw == null || !message.raw) {
Message imessage = findMessage(context, folder, message, istore, ifolder);
if (imessage == null)
throw new IllegalArgumentException("Message not found msgid=" + message.msgid);
File file = message.getRawFile(context);
try (OutputStream os = new BufferedOutputStream(new FileOutputStream(file))) {
imessage.writeTo(os);
}
DB db = DB.getInstance(context);
db.message().setMessageRaw(message.id, true);
}
}
private static void onBody(Context context, JSONArray jargs, EntityFolder folder, EntityMessage message, IMAPFolder ifolder) throws MessagingException, IOException { private static void onBody(Context context, JSONArray jargs, EntityFolder folder, EntityMessage message, IMAPFolder ifolder) throws MessagingException, IOException {
// Download message body // Download message body
DB db = DB.getInstance(context); DB db = DB.getInstance(context);

@ -86,6 +86,22 @@ public class FragmentDialogForwardRaw extends FragmentDialogBase {
if (message == null) if (message == null)
continue; continue;
EntityFolder folder = db.folder().getFolder(message.folder);
if (folder == null)
continue;
EntityAccount account = db.account().getAccount(message.account);
if (account == null)
continue;
if (account.protocol == EntityAccount.TYPE_IMAP) {
if (message.uid == null)
continue;
} else if (account.protocol == EntityAccount.TYPE_POP) {
if (!EntityFolder.INBOX.equals(folder.type))
continue;
}
List<EntityMessage> messages = db.message().getMessagesByThread( List<EntityMessage> messages = db.message().getMessagesByThread(
message.account, message.thread, threads ? null : id, null); message.account, message.thread, threads ? null : id, null);
if (messages == null) if (messages == null)

@ -3068,7 +3068,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
.setIcon(R.drawable.baseline_arrow_downward_24) .setIcon(R.drawable.baseline_arrow_downward_24)
.setEnabled(!EntityMessage.PRIORITIY_LOW.equals(result.importance)); .setEnabled(!EntityMessage.PRIORITIY_LOW.equals(result.importance));
if (result.accounts.size() > 0 /* IMAP */ && ids.length < MAX_SEND_RAW) if (ids.length < MAX_SEND_RAW)
popupMenu.getMenu().add(Menu.NONE, R.string.title_raw_send, order++, R.string.title_raw_send) popupMenu.getMenu().add(Menu.NONE, R.string.title_raw_send, order++, R.string.title_raw_send)
.setIcon(R.drawable.twotone_attachment_24); .setIcon(R.drawable.twotone_attachment_24);

Loading…
Cancel
Save