diff --git a/app/src/main/java/eu/faircode/email/BoundaryCallbackMessages.java b/app/src/main/java/eu/faircode/email/BoundaryCallbackMessages.java index 46f373bab3..d8c48ed7b5 100644 --- a/app/src/main/java/eu/faircode/email/BoundaryCallbackMessages.java +++ b/app/src/main/java/eu/faircode/email/BoundaryCallbackMessages.java @@ -374,7 +374,7 @@ public class BoundaryCallbackMessages extends PagedList.BoundaryCallback 0 && uids[0] != null && uids[0].uid > 0) { @@ -956,12 +956,7 @@ class Core { } // Some servers return different capabilities for different sessions - boolean canMove = (Boolean) ifolder.doCommand(new IMAPFolder.ProtocolCommand() { - @Override - public Object doCommand(IMAPProtocol protocol) throws ProtocolException { - return protocol.hasCapability("MOVE"); - } - }); + boolean canMove = MessageHelper.hasCapability(ifolder, "MOVE"); // Some providers do not support the COPY operation for drafts boolean draft = (EntityFolder.DRAFTS.equals(folder.type) || EntityFolder.DRAFTS.equals(target.type)); diff --git a/app/src/main/java/eu/faircode/email/MessageHelper.java b/app/src/main/java/eu/faircode/email/MessageHelper.java index 0d7065dbee..2e6863a19e 100644 --- a/app/src/main/java/eu/faircode/email/MessageHelper.java +++ b/app/src/main/java/eu/faircode/email/MessageHelper.java @@ -29,8 +29,10 @@ import androidx.documentfile.provider.DocumentFile; import androidx.preference.PreferenceManager; import com.sun.mail.gimap.GmailMessage; +import com.sun.mail.iap.ProtocolException; import com.sun.mail.imap.IMAPFolder; import com.sun.mail.imap.IMAPMessage; +import com.sun.mail.imap.protocol.IMAPProtocol; import com.sun.mail.util.ASCIIUtility; import com.sun.mail.util.BASE64DecoderStream; import com.sun.mail.util.FolderClosedIOException; @@ -2313,6 +2315,16 @@ public class MessageHelper { } } + static boolean hasCapability(IMAPFolder ifolder, final String capability) throws MessagingException { + // Folder can have different capabilities than the store + return (boolean) ifolder.doCommand(new IMAPFolder.ProtocolCommand() { + @Override + public Object doCommand(IMAPProtocol protocol) throws ProtocolException { + return protocol.hasCapability(capability); + } + }); + } + static String sanitizeKeyword(String keyword) { // https://tools.ietf.org/html/rfc3501 StringBuilder sb = new StringBuilder(); diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index bafd43d537..6b24fa2281 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -1097,6 +1097,9 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences db.folder().setFolderState(folder.id, "connected"); db.folder().setFolderError(folder.id, null); + if (capIdle != MessageHelper.hasCapability(ifolder, "IDLE")) + Log.e("Conflicting IDLE=" + capIdle + " host=" + account.host); + int count = MessageHelper.getMessageCount(ifolder); db.folder().setFolderTotal(folder.id, count < 0 ? null : count);