@Override public LabelMap getAllWithMetadata(final Mailbox mailbox) throws IOException { // get labels LabelMap labels = AccountPersistence.getLabels(mailbox.getId()); // set labels' counters Map<Integer, LabelCounters> counters = LabelCounterPersistence.getAll(mailbox.getId()); for (int labelId : counters.keySet()) { if (labels.containsId(labelId) && counters.containsKey(labelId)) { labels.get(labelId).setCounters(counters.get(labelId)); } else if (labels.containsId(labelId) && !counters.containsKey(labelId)) { // assume zeros for all counters if not yet initialised labels.get(labelId).setCounters(new LabelCounters()); } else if (!labels.containsId(labelId) && counters.containsKey(labelId)) { logger.warn("Found counters for label {}/{}, but label does not exist.", mailbox.getId(), labelId); } } return labels; }
LabelCounterPersistence.subtract(mutator, mailbox.getId(), labelId, labels.get(labelId).getCounters());
/** * Get aggregated {@link LabelCounter} stats for each label in the list of * messages. Results aggregated by label ID. * * @return */ public LabelMap aggregateCountersByLabel() { LabelMap labels = new LabelMap(); // get all labels of all messages, including label "all" for (UUID messageId : this.messages.keySet()) { Set<Integer> messageLabels = this.messages.get(messageId).getLabels(); for (int labelId : messageLabels) { if (!labels.containsId(labelId)) { Label label = new Label(labelId). setCounters(this.messages.get(messageId).getLabelCounters()); labels.put(label); } else { labels.get(labelId).getCounters().add( this.messages.get(messageId).getLabelCounters()); } } } return labels; }
labels.put(label); } else { labels.get(labelId).incrementCounters(message.getLabelCounters());