From 02696710ae9119183f1983a31194810c5465a714 Mon Sep 17 00:00:00 2001 From: M66B Date: Sun, 10 Feb 2019 19:22:35 +0000 Subject: [PATCH] POP support --- .../eu/faircode/email/FragmentAccount.java | 9 +++- .../eu/faircode/email/ServiceSynchronize.java | 41 ++++++++++++------- 2 files changed, 34 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/FragmentAccount.java b/app/src/main/java/eu/faircode/email/FragmentAccount.java index d86806f1ec..766f85011f 100644 --- a/app/src/main/java/eu/faircode/email/FragmentAccount.java +++ b/app/src/main/java/eu/faircode/email/FragmentAccount.java @@ -860,11 +860,18 @@ public class FragmentAccount extends FragmentBase { if (pop) { drafts = new EntityFolder(); - drafts.name = "Drafts"; + drafts.name = context.getString(R.string.title_folder_drafts); drafts.synchronize = false; drafts.initialize = false; drafts.sync_days = 0; drafts.keep_days = 0; + + sent = new EntityFolder(); + sent.name = context.getString(R.string.title_folder_sent); + sent.synchronize = false; + sent.initialize = false; + sent.sync_days = 0; + sent.keep_days = 0; } if (TextUtils.isEmpty(host)) diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index 6a3f2eec20..af6c5ad755 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -1226,12 +1226,15 @@ public class ServiceSynchronize extends LifecycleService { if (db.operation().getOperationCount(folder.id, null) == 0) return; - db.folder().setFolderState(folder.id, "connecting"); + if (!account.pop || EntityFolder.INBOX.equals(folder.type)) { + db.folder().setFolderState(folder.id, "connecting"); - ifolder = istore.getFolder(folder.name); - ifolder.open(Folder.READ_WRITE); + ifolder = istore.getFolder(folder.name); + ifolder.open(Folder.READ_WRITE); + + db.folder().setFolderState(folder.id, "connected"); + } - db.folder().setFolderState(folder.id, "connected"); db.folder().setFolderError(folder.id, null); } @@ -1618,7 +1621,7 @@ public class ServiceSynchronize extends LifecycleService { if (message.seen.equals(seen)) return; - Log.i("Setting POP message=" + message.id + " seen=" + seen); + Log.i(folder.name + " setting POP message=" + message.id + " seen=" + seen); db.message().setMessageSeen(message.id, seen); } @@ -1905,19 +1908,21 @@ public class ServiceSynchronize extends LifecycleService { } private void doDelete(EntityFolder folder, POP3Folder ifolder, EntityMessage message, JSONArray jargs, DB db) throws MessagingException { - Log.i("Deleting POP message=" + message.id + " msgid=" + message.msgid); + Log.i(folder.name + " deleting POP message=" + message.id + " msgid=" + message.msgid); - // Delete message - if (TextUtils.isEmpty(message.msgid)) - throw new IllegalArgumentException("Message ID missing"); + if (EntityFolder.INBOX.equals(folder.type)) { + // Delete message + if (TextUtils.isEmpty(message.msgid)) + throw new IllegalArgumentException("Message ID missing"); - Message[] imessages = ifolder.search(new MessageIDTerm(message.msgid)); - for (Message imessage : imessages) { - Log.i(folder.name + " deleting uid=" + message.uid + " msgid=" + message.msgid); - imessage.setFlag(Flags.Flag.DELETED, true); + Message[] imessages = ifolder.search(new MessageIDTerm(message.msgid)); + for (Message imessage : imessages) { + Log.i(folder.name + " deleting uid=" + message.uid + " msgid=" + message.msgid); + imessage.setFlag(Flags.Flag.DELETED, true); + } + ifolder.close(); + ifolder.open(Folder.READ_WRITE); } - ifolder.close(); - ifolder.open(Folder.READ_WRITE); db.message().deleteMessage(message.id); } @@ -2349,6 +2354,12 @@ public class ServiceSynchronize extends LifecycleService { private void synchronizeMessages(EntityAccount account, final EntityFolder folder, POP3Folder ifolder, JSONArray jargs, ServiceState state) throws JSONException, MessagingException, IOException { DB db = DB.getInstance(this); + + if (!EntityFolder.INBOX.equals(folder.type)) { + db.folder().setFolderSyncState(folder.id, null); + return; + } + try { db.folder().setFolderSyncState(folder.id, "syncing");