public ImapSessionFolder(MailFolder folder, ImapSession session, boolean readonly) { this.folder = folder; this.session = session; this.readonly = readonly; // TODO make this a weak reference (or make sure deselect() is *always* called). this.folder.addListener(this); }
@Override public long appendMessage(MimeMessage message, Flags flags, Date receivedDate) { return folder.appendMessage(message, flags, receivedDate); }
@Override public long copyMessage(long uid, MailFolder toFolder) throws FolderException { return folder.copyMessage(uid, toFolder); }
@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()); }
buffer.append(MESSAGES); buffer.append(SP); buffer.append(folder.getMessageCount()); buffer.append(SP); buffer.append(RECENT); buffer.append(SP); buffer.append(folder.getRecentCount(false)); buffer.append(SP); buffer.append(UIDNEXT); buffer.append(SP); buffer.append(folder.getUidNext()); buffer.append(SP); buffer.append(UIDVALIDITY); buffer.append(SP); buffer.append(folder.getUidValidity()); buffer.append(SP); buffer.append(UNSEEN); buffer.append(SP); buffer.append(folder.getUnseenCount()); buffer.append(SP);
/** * @see ImapHostManager#renameMailbox */ @Override public void renameMailbox(GreenMailUser user, String oldMailboxName, String newMailboxName) throws FolderException, AuthorizationException { MailFolder existingFolder = getFolder(user, oldMailboxName, true); // TODO: check permissions. // Handle case where existing is INBOX // - just create new folder, move all messages, // and leave INBOX (with children) intact. String userInboxName = getQualifiedMailboxName(user, INBOX_NAME); if (userInboxName.equals(existingFolder.getFullName())) { MailFolder newBox = createMailbox(user, newMailboxName); long[] uids = existingFolder.getMessageUids(); for (long uid : uids) { existingFolder.copyMessage(uid, newBox); } existingFolder.deleteAllMessages(); return; } store.renameMailbox(existingFolder, newMailboxName); }
/** * @see ImapHostManager#deleteMailbox */ @Override public void deleteMailbox(GreenMailUser user, String mailboxName) throws FolderException, AuthorizationException { MailFolder toDelete = getFolder(user, mailboxName, true); if (store.getChildren(toDelete).isEmpty()) { toDelete.deleteAllMessages(); toDelete.signalDeletion(); store.deleteMailbox(toDelete); } else { if (toDelete.isSelectable()) { toDelete.deleteAllMessages(); store.setSelectable(toDelete, false); } else { throw new FolderException("Can't delete a non-selectable store with children."); } } }
long[] uids = folder.search(sortTerm.getSearchTerm()); List<StoredMessage> messages = new ArrayList<>(); for (long uid : uids) { messages.add(folder.getMessage(uid)); idList.append(message.getUid()); } else { int msn = folder.getMsn(message.getUid()); idList.append(msn);
private void updateQuota(final Quota quota, final String pQualifiedRootPrefix) { MailFolder folder = getMailbox( ImapConstants.USER_NAMESPACE + ImapConstants.HIERARCHY_DELIMITER + pQualifiedRootPrefix + ImapConstants.HIERARCHY_DELIMITER + quota.quotaRoot); try { for (Quota.Resource r : quota.resources) { if (STORAGE.equals(r.name)) { long size = 0; for (StoredMessage m : folder.getMessages()) { size += m.getMimeMessage().getSize(); } r.usage = size; } else if (MESSAGES.equals(r.name)) { r.usage = folder.getMessageCount(); } else { throw new IllegalStateException("Quota " + r.name + " not supported"); } } } catch (MessagingException ex) { throw new IllegalStateException("Can not update/verify quota " + quota, ex); } }
@Override public String getFullName() { return folder.getFullName(); }
log.debug("Expunging messages matching uids {} from {}", IdRange.idRangesToString(idSet) ,folder.getFullName()); folder.expunge(idSet); } else { folder.expunge();
MailFolder folder = (MailFolder) mailboxe; StringBuilder message = new StringBuilder("("); if (!folder.isSelectable()) { message.append("\\Noselect"); message.append("\" "); String mailboxName = folder.getFullName(); if (removeUserPrefix) { if (mailboxName.length() <= prefixLength) {
/** * @see CommandTemplate#doProcess */ @Override protected void doProcess(ImapRequestLineReader request, ImapResponse response, ImapSession session) throws ProtocolException, FolderException { String mailboxName = appendCommandParser.mailbox(request); Flags flags = appendCommandParser.optionalAppendFlags(request); if (flags == null) { flags = new Flags(); } Date receivedDate = appendCommandParser.optionalDateTime(request); if (receivedDate == null) { receivedDate = new Date(); } MimeMessage message = appendCommandParser.mimeMessage(request); appendCommandParser.endLine(request); MailFolder folder; try { folder = getMailbox(mailboxName, session, true); } catch (FolderException e) { e.setResponseCode("TRYCREATE"); throw e; } long uid = folder.appendMessage(message, flags, receivedDate); session.unsolicitedResponses(response); response.commandComplete(this, "APPENDUID" + SP + folder.getUidValidity() + SP + uid); }
@Override public void expunge() throws FolderException { folder.expunge(); }
@Override public void deleteAllMessages() { folder.deleteAllMessages(); }
@Override public int getMessageCount() { return folder.getMessageCount(); }
@Override public StoredMessage getMessage(long uid) { return folder.getMessage(uid); }
@Override public long[] getMessageUids() { return folder.getMessageUids(); }
@Override public int getFirstUnseen() { return correctForExpungedMessages(folder.getFirstUnseen()); }
/** * Unsubscribes the user from this store. * TODO should this fail if not already subscribed? * * @param user The user making the request. * @param folder The store to unsubscribe * @throws FolderException ?? doesn't yet */ void unsubscribe(GreenMailUser user, MailFolder folder) throws FolderException { getUserSubs(user).remove(folder.getFullName()); }