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(); } } }
if (event instanceof EventFactory.AddedImpl) { EventFactory.AddedImpl added = (EventFactory.AddedImpl) event; final Mailbox mailbox = added.getMailbox(); for (final MessageUid next : (Iterable<MessageUid>) added.getUids()) { Optional<MailboxMessage> mailboxMessage = retrieveMailboxMessage(session, added, mailbox, next); if (mailboxMessage.isPresent()) {
public MailboxListener.Added added(MailboxSession session, SortedMap<MessageUid, MessageMetaData> uids, Mailbox mailbox, Map<MessageUid, MailboxMessage> cachedMessages) { return new AddedImpl(session, mailbox, uids, cachedMessages); }
@Test public void eventShouldNotCallSpamAssassinHamLearningWhenTheMessageIsAddedInAMailboxOtherThanInbox() { SimpleMailboxMessage message = createMessage(mailboxId1); EventFactory eventFactory = new EventFactory(); AddedImpl addedEvent = eventFactory.new AddedImpl( MAILBOX_SESSION, mailbox1, ImmutableSortedMap.of(MessageUid.of(45), new SimpleMessageMetaData(message)), ImmutableMap.of(MessageUid.of(45), message)); listener.event(addedEvent); verifyNoMoreInteractions(spamAssassin); }
@Test public void eventShouldCallSpamAssassinHamLearningWhenTheMessageIsAddedInInbox() { SimpleMailboxMessage message = createMessage(inboxId); EventFactory eventFactory = new EventFactory(); AddedImpl addedEvent = eventFactory.new AddedImpl( MAILBOX_SESSION, inbox, ImmutableSortedMap.of(MessageUid.of(45), new SimpleMessageMetaData(message)), ImmutableMap.of(MessageUid.of(45), message)); listener.event(addedEvent); verify(spamAssassin).learnHam(any(), any()); }
private boolean isAddedToOutboxEvent(String messageId, Event event) { if (!(event instanceof EventFactory.AddedImpl)) { return false; } EventFactory.AddedImpl added = (EventFactory.AddedImpl) event; return added.getMailboxPath().equals(MailboxPath.forUser(USERNAME, DefaultMailboxes.OUTBOX)) && added.getUids().size() == 1 && added.getMetaData(added.getUids().get(0)).getMessageId().serialize().equals(messageId); }