@Override public void deleteAllMessages() { synchronized (mailMessages) { mailMessages.clear(); } }
@Override public void expunge(IdRange[] idRanges) { mailMessages.expunge(_mailboxListeners, idRanges); }
/** * 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 long[] search(SearchTerm searchTerm) { List<StoredMessage> matchedMessages = new ArrayList<>(); synchronized (mailMessages) { for (int i = 0; i < mailMessages.size(); i++) { StoredMessage mailMessage = mailMessages.get(i); // Update message sequence number for potential sequence set search // https://tools.ietf.org/html/rfc3501#page-10 mailMessage.updateMessageNumber(i + 1); if (searchTerm.match(mailMessage.getMimeMessage())) { matchedMessages.add(mailMessage); } } } long[] matchedUids = new long[matchedMessages.size()]; for (int i = 0; i < matchedUids.length; i++) { StoredMessage storedMessage = matchedMessages.get(i); long uid = storedMessage.getUid(); matchedUids[i] = uid; } return matchedUids; }
@Override public long appendMessage(MimeMessage message, Flags flags, Date receivedDate) { final long uid = nextUid.getAndIncrement(); try { message.setFlags(flags, true); message.setFlag(Flags.Flag.RECENT, true); } catch (MessagingException e) { throw new IllegalStateException("Can not set flags", e); } StoredMessage storedMessage = new StoredMessage(message, receivedDate, uid); int newMsn; synchronized (mailMessages) { mailMessages.add(storedMessage); newMsn = mailMessages.size(); } // Notify all the listeners of the new message synchronized (_mailboxListeners) { for (FolderListener _mailboxListener : _mailboxListeners) { _mailboxListener.added(newMsn); } } return uid; }
@Override public List<StoredMessage> getMessages(MsgRangeFilter range) { return mailMessages.getMessages(range); }
@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 int getMessageCount() { synchronized (mailMessages) { return mailMessages.size(); } }
@Override public int getMsn(long uid) throws FolderException { return mailMessages.getMsn(uid); }
@Override public long[] getMessageUids() { return mailMessages.getMessageUids(); }
@Override public List<StoredMessage> getMessages() { return mailMessages.getMessages(); }
@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); }
@Override public Message[] getMessagesByUID(long[] uids) { synchronized (mailMessages) { List<Message> messages = new ArrayList<>(uids.length); Map<Long, StoredMessage> uid2Msg = new HashMap<>(mailMessages.size()); for (StoredMessage mailMessage : mailMessages) { uid2Msg.put(mailMessage.getUid(), mailMessage); } for (long uid : uids) { final StoredMessage storedMessage = uid2Msg.get(uid); if (storedMessage != null) { messages.add(storedMessage.getMimeMessage()); } } return messages.toArray(new Message[messages.size()]); } }
@Override public void expunge() { mailMessages.expunge(_mailboxListeners); }