private HierarchicalFolder getInboxOrUserRootFolder(HierarchicalFolder folder) { final HierarchicalFolder inboxFolder = findParentByName(folder, ImapConstants.INBOX_NAME); if(null==inboxFolder) { return folder.getParent(); } return inboxFolder.getParent(); }
@Override public void setFlags(Flags flags, boolean value, long uid, FolderListener silentListener, boolean addUid) throws FolderException { int msn = getMsn(uid); StoredMessage message = mailMessages.get(msn - 1); message.setFlags(flags, value); Long uidNotification = null; if (addUid) { uidNotification = uid; } notifyFlagUpdate(msn, message.getFlags(), uidNotification, silentListener); }
@Override public void deleteMailbox(MailFolder folder) throws FolderException { HierarchicalFolder toDelete = (HierarchicalFolder) folder; if (toDelete.hasChildren()) { throw new FolderException("Cannot delete mailbox with children."); } if (toDelete.getMessageCount() != 0) { throw new FolderException("Cannot delete non-empty mailbox"); } HierarchicalFolder parent = toDelete.getParent(); parent.removeChild(toDelete); }
@Override public long copyMessage(long uid, MailFolder toFolder) throws FolderException { StoredMessage originalMessage = getMessage(uid); MimeMessage newMime; try { newMime = new MimeMessage(originalMessage.getMimeMessage()); } catch (MessagingException e) { throw new FolderException("Can not copy message " + uid + " to folder " + toFolder, e); } return toFolder.appendMessage(newMime, originalMessage.getFlags(), originalMessage.getReceivedDate()); }
@Override public int getMsn(long uid) throws FolderException { long[] uids = folder.getMessageUids(); for (int i = 0; i < uids.length; i++) { long messageUid = uids[i]; if (uid == messageUid) { return i + 1; } } throw new FolderException("No such message with uid " + uid + " in folder " + folder.getName()); }
@Override public int getMsn(long uid) throws FolderException { synchronized (mailMessages) { for (int i = 0; i < mailMessages.size(); i++) { StoredMessage message = mailMessages.get(i); if (message.getUid() == uid) { return i + 1; } } } throw new FolderException("No such message."); }
private void expungeMessage(int msn, Collection<FolderListener> mailboxListeners) { // Notify all the listeners of the pending delete synchronized (mailboxListeners) { deleteMessage(msn); for (FolderListener expungeListener : mailboxListeners) { expungeListener.expunged(msn); } } }
@Override public Message getMessageByUID(long uid) { return getMessage(uid).getMimeMessage(); }
private void addAllChildren(HierarchicalFolder mailbox, Collection<MailFolder> mailboxes) { Collection<HierarchicalFolder> children = mailbox.getChildren(); for (HierarchicalFolder child : children) { mailboxes.add(child); addAllChildren(child, mailboxes); } }
/** * Updates the MSN. * * @param messageNumber the MSN. */ public void updateMessageNumber(int messageNumber) { setMessageNumber(messageNumber); } }
@Override public int getUnseenCount() { int count = 0; synchronized (mailMessages) { for (StoredMessage message : mailMessages) { if (!message.isSet(Flags.Flag.SEEN)) { count++; } } } return count; }
@Override public MailFolder setSelectable(MailFolder folder, boolean selectable) { ((HierarchicalFolder) folder).setSelectable(selectable); return folder; }
/** * Updates the MSN. * * @param messageNumber the MSN. */ public void updateMessageNumber(int messageNumber) { mimeMessage.updateMessageNumber(messageNumber); } }
/** * Returns the 1-based index of the first unseen message. Unless there are outstanding * expunge responses in the ImapSessionMailbox, this will correspond to the MSN for * the first unseen. */ @Override public int getFirstUnseen() { return mailMessages.getFirstUnseen(); }
@Override public StoredMessage getMessage(long uid) { synchronized (mailMessages) { for (StoredMessage mailMessage : mailMessages) { if (mailMessage.getUid() == uid) { return mailMessage; } } } return null; }
@Override public int getMessageCount() { return folder.getMessageCount(); }
@Override public int getUnseenCount() { return folder.getUnseenCount(); }
@Override public void store(MimeMessage mail) throws Exception { folder.store(mail); }
@Override public void addListener(FolderListener listener) { folder.addListener(listener); }
@Override public void replaceFlags(Flags flags, long uid, FolderListener silentListener, boolean addUid) throws FolderException { int msn = getMsn(uid); StoredMessage message = mailMessages.get(msn - 1); message.setFlags(MessageFlags.ALL_FLAGS, false); message.setFlags(flags, true); Long uidNotification = null; if (addUid) { uidNotification = uid; } notifyFlagUpdate(msn, message.getFlags(), uidNotification, silentListener); }