// get message stats for counters
MessageAggregator ma = new MessageAggregator(mailbox, messageIds);
for (UUID messageId : ma.getValidMessageIds())
{
Message message = ma.getMessage(messageId);
// add labels
if (!mod.getLabelsToAdd().isEmpty())
{
// add labels to messages
MessagePersistence.persistAttributes(mutator, mailbox.getId(), messageId, labelsToAddAsAttributes);
// add messages to label index
LabelIndexPersistence.add(mutator, mailbox.getId(), messageId, mod.getLabelsToAdd());
// increment label counters
for (int labelId : mod.getLabelsToAdd())
{
// count only if message does not have label
if (!message.getLabels().contains(labelId)) {
LabelCounterPersistence.add(mutator, mailbox.getId(), labelId, message.getLabelCounters());
}
}
}
// remove labels
if (!mod.getLabelsToRemove().isEmpty())
{
// remove labels from messages
MessagePersistence.deleteAttributes(mutator, mailbox.getId(), messageId, labelsToRemoveAsAttributes);
// remove messages from label index
LabelIndexPersistence.remove(mutator, mailbox.getId(), messageId, mod.getLabelsToRemove());
// decrement label counters
for (int labelId : mod.getLabelsToRemove())
{
// count only if message had label
if (message.getLabels().contains(labelId)) {
LabelCounterPersistence.subtract(mutator, mailbox.getId(), labelId, message.getLabelCounters());
}
}
}
// add markers
if (!mod.getMarkersToAdd().isEmpty())
{
// add markers to messages
MessagePersistence.persistAttributes(mutator, mailbox.getId(), messageIds, markersToAddAsAttributes);
// decrement unread message counter only if message does not have SEEN marker
if (mod.getMarkersToAdd().contains(Marker.SEEN) && !message.getMarkers().contains(Marker.SEEN))
{
LabelCounters labelCounters = new LabelCounters();
labelCounters.setUnreadMessages(1L);
LabelCounterPersistence.subtract(mutator, mailbox.getId(), message.getLabels(), labelCounters);
}
}
// remove markers
if (!mod.getMarkersToRemove().isEmpty())
{
// remove markers from messages
MessagePersistence.deleteAttributes(mutator, mailbox.getId(), messageIds, markersToRemoveAsAttributes);
// increment unread message counter only if message has SEEN marker
if (mod.getMarkersToRemove().contains(Marker.SEEN) && message.getMarkers().contains(Marker.SEEN))
{
LabelCounters labelCounters = new LabelCounters();
labelCounters.setUnreadMessages(1L);
LabelCounterPersistence.add(mutator, mailbox.getId(), message.getLabels(), labelCounters);
}
}
mutator.executeIfFull();
}