public MessageRange toRange() { return MessageRange.one(this); }
private Optional<MailboxMessage> retrieveMailboxMessage(MailboxSession session, EventFactory.AddedImpl added, Mailbox mailbox, MessageUid next) { Optional<MailboxMessage> firstChoice = Optional.ofNullable(added.getAvailableMessages().get(next)); if (firstChoice.isPresent()) { return firstChoice; } else { try { return Optional.of(factory.getMessageMapper(session) .findInMailbox(mailbox, MessageRange.one(next), FetchType.Full, UNLIMITED) .next()); } catch (Exception e) { LOGGER.error("Could not retrieve message {} in mailbox {}", next, mailbox.getMailboxId().serialize(), e); return Optional.empty(); } } }
private Optional<MailboxMessage> fullyReadMessage(MailboxSession mailboxSession, Mailbox mailbox, MessageUid mUid) throws MailboxException { return Iterators.toStream(mailboxSessionMapperFactory.getMessageMapper(mailboxSession) .findInMailbox(mailbox, MessageRange.one(mUid), MessageMapper.FetchType.Full, SINGLE_MESSAGE)) .findFirst(); }
@Test void retrieveDeletedMessageShouldReturnOneMessageForMessageRangeOneIfThisMessageIsPresent() { addMessageForRetrieveTest(); List<MessageUid> result = testee .retrieveDeletedMessage(MAILBOX_ID, MessageRange.one(UID_1)) .join() .collect(Guavate.toImmutableList()); assertThat(result).containsExactly(UID_1); }
@Test void retrieveDeletedMessageShouldReturnNoMessageForMessageRangeOneIfThisMessageIsNotPresent() { addMessageForRetrieveTest(); List<MessageUid> result = testee .retrieveDeletedMessage(MAILBOX_ID, MessageRange.one(MessageUid.of(42))) .join() .collect(Guavate.toImmutableList()); assertThat(result).isEmpty(); }
/** * Return a {@link MessageRange} for the given values. If the MessageRange * can not be generated a {@link MailboxException} will get thrown */ protected MessageRange messageRange(SelectedMailbox selected, IdRange range, boolean useUids) throws MessageRangeException { long lowVal = range.getLowVal(); long highVal = range.getHighVal(); if (useUids == false) { return msnRangeToMessageRange(selected, lowVal, highVal); } else { if (selected.existsCount() <= 0) { return null; } // Take care of "*" and "*:*" values by return the last message in // the mailbox. See IMAP-289 MessageUid lastUid = selected.getLastUid().orElse(MessageUid.MIN_VALUE); if (lowVal == Long.MAX_VALUE && highVal == Long.MAX_VALUE) { return MessageRange.one(lastUid); } else if (highVal == Long.MAX_VALUE && lastUid.compareTo(MessageUid.of(lowVal)) < 0) { // Sequence uid ranges which use *:<uid-higher-then-last-uid> // MUST return at least the highest uid in the mailbox // See IMAP-291 return MessageRange.one(lastUid); } return MessageRange.range(MessageUid.of(lowVal), MessageUid.of(highVal)); } }
/** * Constructs an inclusive ranges of messages. The parameters will be * checked and {@link #from(long)} used where appropriate. * * @param from * first message UID * @param to * last message UID */ public static MessageRange range(MessageUid from, MessageUid to) { if (to.equals(MessageUid.MAX_VALUE) || to.compareTo(from) < 0) { return from(from); } else if (from.equals(to)) { // from and to is the same so no need to construct a real range return one(from); } else { return new MessageRange(Type.RANGE, from, to); } }
private void readBatch() throws MailboxException { MessageRange range; switch (type) { default: case ALL: // In case of all, we start on cursor and don't specify a to range = MessageRange.from(cursor); break; case FROM: range = MessageRange.from(cursor); break; case ONE: range = MessageRange.one(cursor); break; case RANGE: range = MessageRange.range(cursor, to); break; } next = mapper.findInMailbox(mailbox, range, ftype, batchSizeFromFetchType(ftype)); }
@Test public void doneShouldNotMoveMailFromOutboxToSentWhenNoMetadataProvided() throws Exception { MailboxSession mailboxSession = mailboxManager.createSystemSession(USERNAME); mailboxManager.createMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); mailboxManager.createMailbox(SENT_MAILBOX_PATH, mailboxSession); MessageManager messageManager = mailboxManager.getMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); messageManager.appendMessage(AppendCommand.from(message), mailboxSession); testee.done(true); MessageManager mailbox = mailboxManager.getMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); MessageResultIterator resultIterator = mailbox.getMessages(MessageRange.one(UID), FetchGroupImpl.FULL_CONTENT, mailboxSession); assertThat(resultIterator).hasSize(1); }
@Test public void doneShouldNotMoveMailFromOutboxToSentWhenMessageIdNotProvided() throws Exception { MailboxSession mailboxSession = mailboxManager.createSystemSession(USERNAME); mailboxManager.createMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); mailboxManager.createMailbox(SENT_MAILBOX_PATH, mailboxSession); MessageManager messageManager = mailboxManager.getMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); messageManager.appendMessage(AppendCommand.from(message), mailboxSession); mail.setAttribute(MailMetadata.MAIL_METADATA_USERNAME_ATTRIBUTE, USERNAME); testee.done(true); MessageManager mailbox = mailboxManager.getMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); MessageResultIterator resultIterator = mailbox.getMessages(MessageRange.one(UID), FetchGroupImpl.FULL_CONTENT, mailboxSession); assertThat(resultIterator).hasSize(1); }
@Test public void doneShouldNotMoveMailFromOutboxToSentWhenInvalidMessageIdProvided() throws Exception { MailboxSession mailboxSession = mailboxManager.createSystemSession(USERNAME); mailboxManager.createMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); mailboxManager.createMailbox(SENT_MAILBOX_PATH, mailboxSession); MessageManager messageManager = mailboxManager.getMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); messageManager.appendMessage(AppendCommand.from(message), mailboxSession); mail.setAttribute(MailMetadata.MAIL_METADATA_USERNAME_ATTRIBUTE, USERNAME); mail.setAttribute(MailMetadata.MAIL_METADATA_MESSAGE_ID_ATTRIBUTE, "invalid"); testee.done(true); MessageManager mailbox = mailboxManager.getMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); MessageResultIterator resultIterator = mailbox.getMessages(MessageRange.one(UID), FetchGroupImpl.FULL_CONTENT, mailboxSession); assertThat(resultIterator).hasSize(1); }
@Test public void doneShouldNotMoveMailFromOutboxToSentWhenUsernameNotProvided() throws Exception { MailboxSession mailboxSession = mailboxManager.createSystemSession(USERNAME); mailboxManager.createMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); mailboxManager.createMailbox(SENT_MAILBOX_PATH, mailboxSession); MessageManager messageManager = mailboxManager.getMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); ComposedMessageId messageId = messageManager.appendMessage(AppendCommand.from(message), mailboxSession); mail.setAttribute(MailMetadata.MAIL_METADATA_MESSAGE_ID_ATTRIBUTE, messageId.getMessageId().serialize()); testee.done(true); MessageManager mailbox = mailboxManager.getMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); MessageResultIterator resultIterator = mailbox.getMessages(MessageRange.one(UID), FetchGroupImpl.FULL_CONTENT, mailboxSession); assertThat(resultIterator).hasSize(1); }
final Flags resultFlags = result.getFlags(); if (fetch.isSetSeen() && !resultFlags.contains(Flags.Flag.SEEN)) { mailbox.setFlags(new Flags(Flags.Flag.SEEN), true, false, MessageRange.one(resultUid), mailboxSession); resultFlags.add(Flags.Flag.SEEN); ensureFlagsResponse = true;
@Test public void doneShouldNotMoveMailFromOutboxToSentWhenSuccessIsFalse() throws Exception { MailboxSession mailboxSession = mailboxManager.createSystemSession(USERNAME); mailboxManager.createMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); mailboxManager.createMailbox(SENT_MAILBOX_PATH, mailboxSession); MessageManager messageManager = mailboxManager.getMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); ComposedMessageId messageId = messageManager.appendMessage(AppendCommand.from(message), mailboxSession); mail.setAttribute(MailMetadata.MAIL_METADATA_MESSAGE_ID_ATTRIBUTE, messageId.getMessageId().serialize()); mail.setAttribute(MailMetadata.MAIL_METADATA_USERNAME_ATTRIBUTE, USERNAME); testee.done(false); MessageManager mailbox = mailboxManager.getMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); MessageResultIterator resultIterator = mailbox.getMessages(MessageRange.one(UID), FetchGroupImpl.FULL_CONTENT, mailboxSession); assertThat(resultIterator).hasSize(1); }
@Test public void doneShouldCopyMailFromOutboxToSentWhenSuccess() throws Exception { MailboxSession mailboxSession = mailboxManager.createSystemSession(USERNAME); mailboxManager.createMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); mailboxManager.createMailbox(SENT_MAILBOX_PATH, mailboxSession); MessageManager messageManager = mailboxManager.getMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); ComposedMessageId messageId = messageManager.appendMessage(AppendCommand.from(message), mailboxSession); mail.setAttribute(MailMetadata.MAIL_METADATA_MESSAGE_ID_ATTRIBUTE, messageId.getMessageId().serialize()); mail.setAttribute(MailMetadata.MAIL_METADATA_USERNAME_ATTRIBUTE, USERNAME); testee.done(true); MessageManager sentMailbox = mailboxManager.getMailbox(SENT_MAILBOX_PATH, mailboxSession); MessageResultIterator resultIterator = sentMailbox.getMessages(MessageRange.one(UID), FetchGroupImpl.FULL_CONTENT, mailboxSession); assertThat(resultIterator).hasSize(1); }
@Test public void doneShouldDeleteMailFromOutboxWhenSuccess() throws Exception { MailboxSession mailboxSession = mailboxManager.createSystemSession(USERNAME); mailboxManager.createMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); mailboxManager.createMailbox(SENT_MAILBOX_PATH, mailboxSession); MessageManager messageManager = mailboxManager.getMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); ComposedMessageId messageId = messageManager.appendMessage(AppendCommand.from(message), mailboxSession); mail.setAttribute(MailMetadata.MAIL_METADATA_MESSAGE_ID_ATTRIBUTE, messageId.getMessageId().serialize()); mail.setAttribute(MailMetadata.MAIL_METADATA_USERNAME_ATTRIBUTE, USERNAME); testee.done(true); MessageManager mailbox = mailboxManager.getMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); MessageResultIterator resultIterator = mailbox.getMessages(MessageRange.one(UID), FetchGroupImpl.FULL_CONTENT, mailboxSession); assertThat(resultIterator).hasSize(0); }
.join(); List<ComposedMessageIdWithMetaData> messages = testee.retrieveMessages(mailboxId, MessageRange.one(messageUid2)).join() .collect(Collectors.toList());
final Flags resultFlags = result.getFlags(); if (fetch.isSetSeen() && !resultFlags.contains(Flags.Flag.SEEN)) { mailbox.setFlags(new Flags(Flags.Flag.SEEN), MessageManager.FlagsUpdateMode.ADD, MessageRange.one(resultUid), mailboxSession); resultFlags.add(Flags.Flag.SEEN); ensureFlagsResponse = true;