public CompletableFuture<Void> updateIndexOnAdd(MailboxMessage message, CassandraId mailboxId) { Flags flags = message.createFlags(); return CompletableFuture.allOf( checkDeletedOnAdd(mailboxId, message.createFlags(), message.getUid()), updateFirstUnseenOnAdd(mailboxId, message.createFlags(), message.getUid()), addRecentOnSave(mailboxId, message), incrementUnseenOnSave(mailboxId, flags), mailboxCounterDAO.incrementCount(mailboxId), applicableFlagDAO.updateApplicableFlags(mailboxId, ImmutableSet.copyOf(flags.getUserFlags()))); }
private CompletableFuture<Void> addRecentOnSave(CassandraId mailboxId, MailboxMessage message) { if (message.createFlags().contains(Flags.Flag.RECENT)) { return mailboxRecentDAO.addToRecent(mailboxId, message.getUid()); } return CompletableFuture.completedFuture(null); }
@Test void updateIndexOnAddShouldUpdateFirstUnseenWhenUnseen() { MailboxMessage message = mock(MailboxMessage.class); when(message.createFlags()).thenReturn(new Flags()); when(message.getUid()).thenReturn(MESSAGE_UID); testee.updateIndexOnAdd(message, MAILBOX_ID).join(); Optional<MessageUid> actual = firstUnseenDAO.retrieveFirstUnread(MAILBOX_ID).join(); assertThat(actual.isPresent()).isTrue(); assertThat(actual.get()).isEqualTo(MESSAGE_UID); }
@Test void updateIndexOnAddShouldIncrementUnseenMessageCountWhenUnseen() throws Exception { MailboxMessage message = mock(MailboxMessage.class); when(message.createFlags()).thenReturn(new Flags()); when(message.getUid()).thenReturn(MESSAGE_UID); testee.updateIndexOnAdd(message, MAILBOX_ID).join(); Optional<Long> actual = mailboxCounterDAO.countUnseenMessagesInMailbox(mailbox).join(); assertThat(actual.isPresent()).isTrue(); assertThat(actual.get()).isEqualTo(1); }
@Test void updateIndexOnAddShouldNotIncrementUnseenMessageCountWhenSeen() throws Exception { MailboxMessage message = mock(MailboxMessage.class); when(message.createFlags()).thenReturn(new Flags(Flags.Flag.SEEN)); when(message.getUid()).thenReturn(MESSAGE_UID); testee.updateIndexOnAdd(message, MAILBOX_ID).join(); Optional<Long> actual = mailboxCounterDAO.countUnseenMessagesInMailbox(mailbox).join(); assertThat(actual.isPresent()).isTrue(); assertThat(actual.get()).isEqualTo(0); }
private boolean matches(SearchQuery.CustomFlagCriterion criterion, MailboxMessage message) { SearchQuery.BooleanOperator operator = criterion.getOperator(); boolean isSet = operator.isSet(); String flag = criterion.getFlag(); return isSet == message.createFlags().contains(flag); }
@Test void updateIndexOnAddShouldNotUpdateFirstUnseenWhenSeen() { MailboxMessage message = mock(MailboxMessage.class); when(message.createFlags()).thenReturn(new Flags(Flags.Flag.SEEN)); when(message.getUid()).thenReturn(MESSAGE_UID); testee.updateIndexOnAdd(message, MAILBOX_ID).join(); Optional<MessageUid> actual = firstUnseenDAO.retrieveFirstUnread(MAILBOX_ID).join(); assertThat(actual.isPresent()).isFalse(); }
@Test void updateIndexOnAddShouldIncrementMessageCount() throws Exception { MailboxMessage message = mock(MailboxMessage.class); when(message.createFlags()).thenReturn(new Flags()); when(message.getUid()).thenReturn(MESSAGE_UID); testee.updateIndexOnAdd(message, MAILBOX_ID).join(); Optional<Long> actual = mailboxCounterDAO.countMessagesInMailbox(mailbox).join(); assertThat(actual.isPresent()).isTrue(); assertThat(actual.get()).isEqualTo(1); }
@Test void updateIndexOnAddShouldUpdateApplicableFlag() { Flags customFlags = new Flags("custom"); MailboxMessage message = mock(MailboxMessage.class); when(message.createFlags()).thenReturn(customFlags); when(message.getUid()).thenReturn(MESSAGE_UID); testee.updateIndexOnAdd(message, MAILBOX_ID).join(); Flags applicableFlag = applicableFlagDAO.retrieveApplicableFlag(MAILBOX_ID).join().get(); assertThat(applicableFlag).isEqualTo(customFlags); }
@Test void updateIndexOnAddShouldNotAddRecentWhenNoRecent() { MailboxMessage message = mock(MailboxMessage.class); when(message.createFlags()).thenReturn(new Flags()); when(message.getUid()).thenReturn(MESSAGE_UID); testee.updateIndexOnAdd(message, MAILBOX_ID).join(); assertThat(mailboxRecentsDAO.getRecentMessageUidsInMailbox(MAILBOX_ID).join() .collect(Guavate.toImmutableList())) .isEmpty(); }
public SimpleMessageMetaData(MailboxMessage message) { this(message.getUid(), message.getModSeq(), message.createFlags(), message.getFullContentOctets(), message.getInternalDate(), message.getMessageId()); }
@Test void updateIndexOnAddShouldAddRecentWhenRecent() { MailboxMessage message = mock(MailboxMessage.class); when(message.createFlags()).thenReturn(new Flags(Flags.Flag.RECENT)); when(message.getUid()).thenReturn(MESSAGE_UID); testee.updateIndexOnAdd(message, MAILBOX_ID).join(); assertThat(mailboxRecentsDAO.getRecentMessageUidsInMailbox(MAILBOX_ID).join() .collect(Guavate.toImmutableList())) .containsOnly(MESSAGE_UID); }
@Test void updateIndexOnAddShouldSaveMessageInDeletedWhenDeleted() { MailboxMessage message = mock(MailboxMessage.class); when(message.createFlags()).thenReturn(new Flags(Flags.Flag.DELETED)); when(message.getUid()).thenReturn(MESSAGE_UID); testee.updateIndexOnAdd(message, MAILBOX_ID).join(); assertThat( deletedMessageDAO .retrieveDeletedMessage(MAILBOX_ID, MessageRange.all()) .join() .collect(Guavate.toImmutableList())) .containsExactly(MESSAGE_UID); }
@Override public MessageMetaData copy(Mailbox mailbox, MailboxMessage original) throws MailboxException { original.setFlags(new FlagsBuilder().add(original.createFlags()).add(Flag.RECENT).build()); return setInMailbox(mailbox, original); }
@Test void updateIndexOnDeleteShouldUpdateFirstUnseenWhenUnseen() { MailboxMessage message = mock(MailboxMessage.class); when(message.createFlags()).thenReturn(new Flags()); when(message.getUid()).thenReturn(MESSAGE_UID); testee.updateIndexOnAdd(message, MAILBOX_ID).join(); testee.updateIndexOnDelete(new ComposedMessageIdWithMetaData( new ComposedMessageId(MAILBOX_ID, CASSANDRA_MESSAGE_ID, MESSAGE_UID), new Flags(), MODSEQ), MAILBOX_ID).join(); Optional<MessageUid> actual = firstUnseenDAO.retrieveFirstUnread(MAILBOX_ID).join(); assertThat(actual.isPresent()).isFalse(); }
public UnloadedMessageResult(MailboxMessage message, MailboxException exception) { super(); internalDate = message.getInternalDate(); size = message.getFullContentOctets(); uid = message.getUid(); flags = message.createFlags(); modSeq = message.getModSeq(); mailboxId = message.getMailboxId(); messageId = message.getMessageId(); this.exception = exception; }
private CompletableFuture<Void> insertIds(MailboxMessage message, CassandraId mailboxId) { ComposedMessageIdWithMetaData composedMessageIdWithMetaData = ComposedMessageIdWithMetaData.builder() .composedMessageId(new ComposedMessageId(mailboxId, message.getMessageId(), message.getUid())) .flags(message.createFlags()) .modSeq(message.getModSeq()) .build(); return CompletableFuture.allOf(messageIdDAO.insert(composedMessageIdWithMetaData), imapUidDAO.insert(composedMessageIdWithMetaData)); }
@Override protected MessageMetaData copy(Mailbox mailbox, MessageUid uid, long modSeq, MailboxMessage original) throws MailboxException { SimpleMailboxMessage message = SimpleMailboxMessage.copy(mailbox.getMailboxId(), original); message.setUid(uid); message.setModSeq(modSeq); Flags flags = original.createFlags(); // Mark message as recent as it is a copy flags.add(Flag.RECENT); message.setFlags(flags); return save(mailbox, message); }
private ComposedMessageIdWithMetaData createMetadataFor(MailboxMessage mailboxMessage) { ComposedMessageId composedMessageId = new ComposedMessageId( mailboxMessage.getMailboxId(), mailboxMessage.getMessageId(), mailboxMessage.getUid()); return ComposedMessageIdWithMetaData.builder() .composedMessageId(composedMessageId) .flags(mailboxMessage.createFlags()) .modSeq(mailboxMessage.getModSeq()) .build(); }
public static Builder fromWithoutAttachments(MailboxMessage original) throws MailboxException { PropertyBuilder propertyBuilder = new PropertyBuilder(original.getProperties()); propertyBuilder.setTextualLineCount(original.getTextualLineCount()); return builder() .bodyStartOctet(Ints.checkedCast(original.getFullContentOctets() - original.getBodyOctets())) .content(copyFullContent(original)) .messageId(original.getMessageId()) .internalDate(original.getInternalDate()) .size(original.getFullContentOctets()) .flags(original.createFlags()) .propertyBuilder(propertyBuilder); }