diff --git a/app/src/main/java/com/sun/mail/imap/IMAPStore.java b/app/src/main/java/com/sun/mail/imap/IMAPStore.java index 866f17737..929e82d33 100644 --- a/app/src/main/java/com/sun/mail/imap/IMAPStore.java +++ b/app/src/main/java/com/sun/mail/imap/IMAPStore.java @@ -1014,6 +1014,8 @@ public class IMAPStore extends Store p.disconnect(); } catch (Exception ex2) { } p = null; + eu.faircode.email.Log.e(new MessagingException("IMAP connection failure", ex1)); + throw new MessagingException("connection failure", ex1); } if (p == null) @@ -1529,6 +1531,30 @@ public class IMAPStore extends Store } } + public synchronized String getCapability(String capability) + throws MessagingException { + IMAPProtocol p = null; + try { + p = getStoreProtocol(); + Map caps = p.getCapabilities(); + if (caps != null) + for (String cap : caps.values()) { + int eq = (cap == null ? -1 : cap.indexOf('=')); + if (eq > 0) { + String key = cap.substring(0, eq); + String value = cap.substring(eq + 1); + if (capability.equals(key)) + return value; + } + } + return null; + } catch (ProtocolException pex) { + throw new MessagingException(pex.getMessage(), pex); + } finally { + releaseStoreProtocol(p); + } + } + /** * Set the user name to be used with the PROXYAUTH command. * The PROXYAUTH user name can also be set using the diff --git a/app/src/main/java/com/sun/mail/imap/IMAPMessage.java b/app/src/main/java/com/sun/mail/imap/IMAPMessage.java index 453479d98..acd5b42f9 100644 --- a/app/src/main/java/com/sun/mail/imap/IMAPMessage.java +++ b/app/src/main/java/com/sun/mail/imap/IMAPMessage.java @@ -1697,4 +1697,26 @@ public class IMAPMessage extends MimeMessage implements ReadableMime { Session _getSession() { return session; } + + @Override + public boolean isExpunged() { + if (super.isExpunged()) + return true; + + // Workaround expunged messages without deleted flag + if (envelope != null && + envelope.date == null && + envelope.subject == null && + envelope.from == null && + envelope.sender == null && + envelope.replyTo == null && + envelope.to == null && + envelope.cc == null && + envelope.inReplyTo == null && + envelope.messageId == null && + headersLoaded && loadedHeaders.size() == 0) + return true; + + return false; + } }