Search in sources :

Example 6 with ImapMessageInfo

use of com.zimbra.soap.mail.type.ImapMessageInfo in project zm-mailbox by Zimbra.

the class OpenImapFolder method handle.

@Override
public Element handle(Element request, Map<String, Object> context) throws ServiceException {
    ZimbraSoapContext zsc = getZimbraSoapContext(context);
    Mailbox mbox = getRequestedMailbox(zsc);
    OperationContext octxt = getOperationContext(zsc, context);
    OpenIMAPFolderRequest req = zsc.elementToJaxb(request);
    OpenIMAPFolderResponse resp = new OpenIMAPFolderResponse();
    ItemId folderId = new ItemId(req.getFolderId(), zsc);
    if (!folderId.belongsTo(mbox)) {
        ZimbraLog.imap.info("Proxying request: OpenImapFolder folder=%s", folderId);
        return proxyRequest(request, context, folderId.getAccountId());
    }
    int limit = req.getLimit();
    ImapCursorInfo cursor = req.getCursor();
    Integer cursorMsgId = null;
    if (cursor != null) {
        cursorMsgId = new ItemId(cursor.getId(), mbox.getAccountId()).getId();
    }
    Pair<List<ImapMessage>, Boolean> openFolderResults = mbox.openImapFolder(octxt, folderId.getId(), limit, cursorMsgId);
    List<ImapMessage> msgs = openFolderResults.getFirst();
    boolean hasMore = openFolderResults.getSecond();
    Integer msgId = null;
    for (ImapMessage msg : msgs) {
        msgId = msg.getMsgId();
        int imapUid = msg.getImapUid();
        String type = msg.getType().toString();
        int flags = msg.getFlags();
        String tags = msg.getTags() == null ? null : Joiner.on(",").join(msg.getTags());
        ImapMessageInfo info = new ImapMessageInfo(msgId, imapUid, type, flags, tags);
        resp.addImapMessageInfo(info);
    }
    if (hasMore && msgId != null) {
        resp.setCursor(new ImapCursorInfo(msgId.toString()));
    }
    resp.setHasMore(hasMore);
    return zsc.jaxbToElement(resp);
}
Also used : OperationContext(com.zimbra.cs.mailbox.OperationContext) OpenIMAPFolderResponse(com.zimbra.soap.mail.message.OpenIMAPFolderResponse) ImapMessage(com.zimbra.cs.imap.ImapMessage) ItemId(com.zimbra.cs.service.util.ItemId) Mailbox(com.zimbra.cs.mailbox.Mailbox) OpenIMAPFolderRequest(com.zimbra.soap.mail.message.OpenIMAPFolderRequest) ZimbraSoapContext(com.zimbra.soap.ZimbraSoapContext) List(java.util.List) ImapMessageInfo(com.zimbra.soap.mail.type.ImapMessageInfo) ImapCursorInfo(com.zimbra.soap.mail.type.ImapCursorInfo)

Example 7 with ImapMessageInfo

use of com.zimbra.soap.mail.type.ImapMessageInfo in project zm-mailbox by Zimbra.

the class ZMailbox method openImapFolder.

/**
 * Iterate OpenImapFolderRequests until all results have been returned
 * @param params
 * @return
 * @throws ServiceException
 */
public List<ImapMessageInfo> openImapFolder(ItemIdentifier folderId, int chunkSize) throws ServiceException {
    List<ImapMessageInfo> msgs = new ArrayList<ImapMessageInfo>();
    String cursorId = null;
    OpenIMAPFolderResponse folderInfo = null;
    do {
        OpenIMAPFolderParams params = new OpenIMAPFolderParams(folderId);
        params.setLimit(chunkSize);
        if (cursorId != null) {
            params.setCursorId(cursorId);
        }
        folderInfo = fetchImapFolderChunk(params);
        List<ImapMessageInfo> results = folderInfo.getImapMessageInfo();
        if (results.isEmpty()) {
            break;
        } else {
            ImapCursorInfo cursor = folderInfo.getCursor();
            if (cursor == null) {
                // fall back to last message of this results page
                cursorId = String.valueOf(results.get(results.size() - 1).getId());
            } else {
                cursorId = cursor.getId();
            }
            msgs.addAll(results);
        }
    } while (folderInfo.getHasMore());
    return msgs;
}
Also used : OpenIMAPFolderResponse(com.zimbra.soap.mail.message.OpenIMAPFolderResponse) ArrayList(java.util.ArrayList) ImapMessageInfo(com.zimbra.soap.mail.type.ImapMessageInfo) ImapCursorInfo(com.zimbra.soap.mail.type.ImapCursorInfo)

Aggregations

ImapMessageInfo (com.zimbra.soap.mail.type.ImapMessageInfo)7 OpenIMAPFolderResponse (com.zimbra.soap.mail.message.OpenIMAPFolderResponse)3 ImapMessage (com.zimbra.cs.imap.ImapMessage)2 Mailbox (com.zimbra.cs.mailbox.Mailbox)2 ImapCursorInfo (com.zimbra.soap.mail.type.ImapCursorInfo)2 ArrayList (java.util.ArrayList)2 Test (org.junit.Test)2 ZFolder (com.zimbra.client.ZFolder)1 ZMailbox (com.zimbra.client.ZMailbox)1 OpenIMAPFolderParams (com.zimbra.client.ZMailbox.OpenIMAPFolderParams)1 ZOutgoingMessage (com.zimbra.client.ZMailbox.ZOutgoingMessage)1 ZMessage (com.zimbra.client.ZMessage)1 ZMountpoint (com.zimbra.client.ZMountpoint)1 ZSearchFolder (com.zimbra.client.ZSearchFolder)1 BaseItemInfo (com.zimbra.common.mailbox.BaseItemInfo)1 ItemIdentifier (com.zimbra.common.mailbox.ItemIdentifier)1 ZimbraTag (com.zimbra.common.mailbox.ZimbraTag)1 Folder (com.zimbra.cs.mailbox.Folder)1 Message (com.zimbra.cs.mailbox.Message)1 OperationContext (com.zimbra.cs.mailbox.OperationContext)1