@Test public void sync_withNegativeMessageCountInRemoteFolder_shouldFinishWithError() { messageCountInRemoteFolder(-1); imapSync.sync(FOLDER_NAME, syncConfig, listener, remoteFolder); verify(listener).syncFailed(eq(FOLDER_NAME), eq("Exception: Message count -1 for folder Folder"), any(Exception.class)); }
private void refreshLocalMessageFlags( SyncConfig syncConfig, final Folder remoteFolder, final BackendFolder backendFolder, List<Message> syncFlagMessages, final AtomicInteger progress, final int todo, SyncListener listener ) throws MessagingException { final String folder = remoteFolder.getServerId(); Timber.d("SYNC: About to sync flags for %d remote messages for folder %s", syncFlagMessages.size(), folder); FetchProfile fp = new FetchProfile(); fp.add(FetchProfile.Item.FLAGS); List<Message> undeletedMessages = new LinkedList<>(); for (Message message : syncFlagMessages) { if (!message.isSet(Flag.DELETED)) { undeletedMessages.add(message); } } remoteFolder.fetch(undeletedMessages, fp, null); for (Message remoteMessage : syncFlagMessages) { boolean messageChanged = syncFlags(syncConfig, backendFolder, remoteMessage); if (messageChanged) { listener.syncFlagChanged(folder, remoteMessage.getUid()); } progress.incrementAndGet(); listener.syncProgress(folder, progress.get(), todo); } }
@Override public void messageFinished(final T message, int number, int ofTotal) { try { // Store the updated message locally backendFolder.saveCompleteMessage(message); progress.incrementAndGet(); // Increment the number of "new messages" if the newly downloaded message is // not marked as read. if (!message.isSet(Flag.SEEN)) { newMessages.incrementAndGet(); } String messageServerId = message.getUid(); Timber.v("About to notify listeners that we got a new small message %s:%s:%s", accountName, folder, messageServerId); // Update the listener with what we've found listener.syncProgress(folder, progress.get(), todo); boolean isOldMessage = isOldMessage(backendFolder, message); listener.syncNewMessage(folder, messageServerId, isOldMessage); } catch (Exception e) { Timber.e(e, "SYNC: fetch small messages"); } }
String folderName = backendFolder.getName(); listener.syncStarted(folder, folderName); listener.syncAuthenticationSuccess(); listener.syncHeadersStarted(folder, folderName); listener.syncHeadersProgress(folder, headerProgress.get(), messageCount); listener.syncHeadersFinished(folder, headerProgress.get(), remoteUidMap.size()); } else if (remoteMessageCount < 0) { throw new Exception("Message count " + remoteMessageCount + " for folder " + folder); listener.syncRemovedMessage(folder, uid); listener.folderStatusChanged(folder, unreadMessageCount); newMessages); listener.syncFinished(folder, remoteMessageCount, newMessages); listener.syncFailed(folder, "Authentication failure", e); } catch (Exception e) { Timber.e(e, "synchronizeMailbox"); listener.syncFailed(folder, rootMessage, e);
listener.syncProgress(folder, progress.get(), todo);
@Test public void sync_withOneMessageInRemoteFolder_shouldFinishWithoutError() { messageCountInRemoteFolder(1); imapSync.sync(FOLDER_NAME, syncConfig, listener, remoteFolder); verify(listener).syncFinished(FOLDER_NAME, 1, 0); }
listener.syncNewMessage(folder, messageServerId, isOldMessage);
String folderName = backendFolder.getName(); listener.syncStarted(folder, folderName); listener.syncAuthenticationSuccess(); listener.syncHeadersStarted(folder, folderName); listener.syncHeadersProgress(folder, headerProgress.get(), messageCount); listener.syncHeadersFinished(folder, headerProgress.get(), remoteUidMap.size()); } else if (remoteMessageCount < 0) { throw new Exception("Message count " + remoteMessageCount + " for folder " + folder); listener.syncRemovedMessage(folder, uid); listener.folderStatusChanged(folder, unreadMessageCount); newMessages); listener.syncFinished(folder, remoteMessageCount, newMessages); listener.syncFailed(folder, "Authentication failure", e); } catch (Exception e) { Timber.e(e, "synchronizeMailbox"); listener.syncFailed(folder, rootMessage, e);
@Override public void messageFinished(T message, int number, int ofTotal) { try { if (message.isSet(Flag.DELETED) || message.olderThan(earliestDate)) { if (message.isSet(Flag.DELETED)) { Timber.v("Newly downloaded message %s:%s:%s was marked deleted on server, " + "skipping", accountName, folder, message.getUid()); } else { Timber.d("Newly downloaded message %s is older than %s, skipping", message.getUid(), earliestDate); } progress.incrementAndGet(); //TODO: This might be the source of poll count errors in the UI. Is todo always the same as ofTotal listener.syncProgress(folder, progress.get(), todo); return; } if (syncConfig.getMaximumAutoDownloadMessageSize() > 0 && message.getSize() > syncConfig.getMaximumAutoDownloadMessageSize()) { largeMessages.add(message); } else { smallMessages.add(message); } } catch (Exception e) { Timber.e(e, "Error while storing downloaded message."); } }
@Test public void sync_withEmptyRemoteFolder_shouldFinishWithoutError() { messageCountInRemoteFolder(0); imapSync.sync(FOLDER_NAME, syncConfig, listener, remoteFolder); verify(listener).syncFinished(FOLDER_NAME, 0, 0); }
listener.syncNewMessage(folder, messageServerId, false);
String folderName = backendFolder.getName(); listener.syncStarted(folder, folderName); listener.syncAuthenticationSuccess(); listener.syncHeadersStarted(folder, folderName); listener.syncHeadersProgress(folder, headerProgress.get(), messageCount); listener.syncHeadersFinished(folder, headerProgress.get(), remoteUidMap.size()); listener.syncRemovedMessage(folder, uid); listener.folderStatusChanged(folder, unreadMessageCount); newMessages); listener.syncFinished(folder, remoteMessageCount, newMessages); listener.syncFailed(folder, "Authentication failure", e); } catch (Exception e) { Timber.e(e, "synchronizeMailbox"); listener.syncFailed(folder, rootMessage, e);
@Override public void messageFinished(final T message, int number, int ofTotal) { try { // Store the updated message locally backendFolder.saveCompleteMessage(message); progress.incrementAndGet(); // Increment the number of "new messages" if the newly downloaded message is // not marked as read. if (!message.isSet(Flag.SEEN)) { newMessages.incrementAndGet(); } String messageServerId = message.getUid(); Timber.v("About to notify listeners that we got a new small message %s:%s:%s", accountName, folder, messageServerId); // Update the listener with what we've found listener.syncProgress(folder, progress.get(), todo); listener.syncNewMessage(folder, messageServerId, false); } catch (Exception e) { Timber.e(e, "SYNC: fetch small messages"); } }
boolean messageChanged = syncFlags(syncConfig, backendFolder, remoteMessage); if (messageChanged) { listener.syncFlagChanged(folder, remoteMessage.getUid()); listener.syncProgress(folder, progress.get(), todo);
@Override public void messageFinished(T message, int number, int ofTotal) { try { if (message.isSet(Flag.DELETED) || message.olderThan(earliestDate)) { if (message.isSet(Flag.DELETED)) { Timber.v("Newly downloaded message %s:%s:%s was marked deleted on server, " + "skipping", accountName, folder, message.getUid()); } else { Timber.d("Newly downloaded message %s is older than %s, skipping", message.getUid(), earliestDate); } progress.incrementAndGet(); //TODO: This might be the source of poll count errors in the UI. Is todo always the same as ofTotal listener.syncProgress(folder, progress.get(), todo); return; } if (syncConfig.getMaximumAutoDownloadMessageSize() > 0 && message.getSize() > syncConfig.getMaximumAutoDownloadMessageSize()) { largeMessages.add(message); } else { smallMessages.add(message); } } catch (Exception e) { Timber.e(e, "Error while storing downloaded message."); } }
@Override public void messageFinished(final T message, int number, int ofTotal) { try { if (!shouldImportMessage(message, earliestDate)) { progress.incrementAndGet(); return; } // Store the updated message locally backendFolder.saveCompleteMessage(message); progress.incrementAndGet(); // Increment the number of "new messages" if the newly downloaded message is // not marked as read. if (!message.isSet(Flag.SEEN)) { newMessages.incrementAndGet(); } String messageServerId = message.getUid(); Timber.v("About to notify listeners that we got a new small message %s:%s:%s", accountName, folder, messageServerId); // Update the listener with what we've found listener.syncProgress(folder, progress.get(), todo); boolean isOldMessage = isOldMessage(messageServerId, lastUid); listener.syncNewMessage(folder, messageServerId, isOldMessage); } catch (Exception e) { Timber.e(e, "SYNC: fetch small messages"); } }
boolean messageChanged = syncFlags(syncConfig, backendFolder, remoteMessage); if (messageChanged) { listener.syncFlagChanged(folder, remoteMessage.getUid()); listener.syncProgress(folder, progress.get(), todo);
listener.syncProgress(folder, progress.get(), todo);
listener.syncProgress(folder, progress.get(), todo); listener.syncNewMessage(folder, messageServerId, false);
@Override public void messageFinished(T message, int number, int ofTotal) { try { if (message.isSet(Flag.DELETED) || message.olderThan(earliestDate)) { if (message.isSet(Flag.DELETED)) { Timber.v("Newly downloaded message %s:%s:%s was marked deleted on server, " + "skipping", accountName, folder, message.getUid()); } else { Timber.d("Newly downloaded message %s is older than %s, skipping", message.getUid(), earliestDate); } progress.incrementAndGet(); //TODO: This might be the source of poll count errors in the UI. Is todo always the same as ofTotal listener.syncProgress(folder, progress.get(), todo); return; } if (syncConfig.getMaximumAutoDownloadMessageSize() > 0 && message.getSize() > syncConfig.getMaximumAutoDownloadMessageSize()) { largeMessages.add(message); } else { smallMessages.add(message); } } catch (Exception e) { Timber.e(e, "Error while storing downloaded message."); } }