@Override public void syncFlagChanged(@NotNull String folderServerId, @NotNull String messageServerId) { boolean shouldBeNotifiedOf = false; LocalMessage message = loadMessage(folderServerId, messageServerId); if (message.isSet(Flag.DELETED) || isMessageSuppressed(message)) { syncRemovedMessage(folderServerId, message.getUid()); } else { LocalFolder localFolder = message.getFolder(); if (notificationStrategy.shouldNotifyForMessage(account, localFolder, message, false)) { shouldBeNotifiedOf = true; } } // we're only interested in messages that need removing if (!shouldBeNotifiedOf) { MessageReference messageReference = message.makeMessageReference(); notificationController.removeNewMailNotification(account, messageReference); } }
private void syncFolder(Account account, String folder, MessagingListener listener, Folder providedRemoteFolder, Backend remoteMessageStore) { Exception commandException = null; try { processPendingCommandsSynchronous(account); } catch (Exception e) { Timber.e(e, "Failure processing command, but allow message sync attempt"); commandException = e; } // We don't ever sync the Outbox if (folder.equals(account.getOutboxFolder())) { return; } SyncConfig syncConfig = createSyncConfig(account); ControllerSyncListener syncListener = new ControllerSyncListener(account, listener); remoteMessageStore.sync(folder, syncConfig, syncListener, providedRemoteFolder); if (commandException != null && !syncListener.syncFailed) { String rootMessage = getRootCauseMessage(commandException); Timber.e("Root cause failure in %s:%s was '%s'", account.getDescription(), folder, rootMessage); updateFolderStatus(account, folder, rootMessage); listener.synchronizeMailboxFailed(account, folder, rootMessage); } }
@Override public void syncNewMessage(@NotNull String folderServerId, @NotNull String messageServerId, boolean isOldMessage) { // Send a notification of this message LocalMessage message = loadMessage(folderServerId, messageServerId); LocalFolder localFolder = message.getFolder(); if (notificationStrategy.shouldNotifyForMessage(account, localFolder, message, isOldMessage)) { // Notify with the localMessage so that we don't have to recalculate the content preview. notificationController.addNewMailNotification(account, message, previousUnreadMessageCount); } if (!message.isSet(Flag.SEEN)) { for (MessagingListener messagingListener : getListeners(listener)) { messagingListener.synchronizeMailboxNewMessage(account, folderServerId, message); } } }
ControllerSyncListener(Account account, MessagingListener listener) { this.account = account; this.listener = listener; this.localStore = getLocalStoreOrThrow(account); previousUnreadMessageCount = getUnreadMessageCount(); }