Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6cecf176 authored by cketti's avatar cketti
Browse files

Remove IMAP-specific code from legacy sync code

parent 5f44e21a
Loading
Loading
Loading
Loading
+31 −85
Original line number Diff line number Diff line
@@ -741,12 +741,11 @@ public class MessagingController {
        if (remoteMessageStore != null) {
            remoteMessageStore.sync(account, folder, listener, providedRemoteFolder);
        } else {
            synchronizeMailboxSynchronousLegacy(account, folder, listener, providedRemoteFolder);
            synchronizeMailboxSynchronousLegacy(account, folder, listener);
        }
    }

    void synchronizeMailboxSynchronousLegacy(final Account account, final String folder, final MessagingListener listener,
        Folder providedRemoteFolder) {
    void synchronizeMailboxSynchronousLegacy(Account account, String folder, MessagingListener listener) {

        Folder remoteFolder = null;
        LocalFolder tLocalFolder = null;
@@ -788,13 +787,8 @@ public class MessagingController {
            tLocalFolder = localStore.getFolder(folder);
            final LocalFolder localFolder = tLocalFolder;
            localFolder.open(Folder.OPEN_MODE_RW);
            localFolder.updateLastUid();
            Map<String, Long> localUidMap = localFolder.getAllMessagesAndEffectiveDates();

            if (providedRemoteFolder != null) {
                Timber.v("SYNC: using providedRemoteFolder %s", folder);
                remoteFolder = providedRemoteFolder;
            } else {
            Store remoteStore = account.getRemoteStore();

            Timber.v("SYNC: About to get remote folder %s", folder);
@@ -828,14 +822,8 @@ public class MessagingController {
             */
            Timber.v("SYNC: About to open remote folder %s", folder);

                if (Expunge.EXPUNGE_ON_POLL == account.getExpungePolicy()) {
                    Timber.d("SYNC: Expunging folder %s:%s", account.getDescription(), folder);
                    remoteFolder.expunge();
                }
            remoteFolder.open(Folder.OPEN_MODE_RO);

            }

            notificationController.clearAuthenticationErrorNotification(account, true);

            /*
@@ -1002,10 +990,7 @@ public class MessagingController {
                    System.currentTimeMillis());

        } finally {
            if (providedRemoteFolder == null) {
            closeFolder(remoteFolder);
            }

            closeFolder(tLocalFolder);
        }

@@ -1125,12 +1110,6 @@ public class MessagingController {
        final List<Message> largeMessages = new ArrayList<>();
        final List<Message> smallMessages = new ArrayList<>();
        if (!unsyncedMessages.isEmpty()) {

            /*
             * Reverse the order of the messages. Depending on the server this may get us
             * fetch results for newest to oldest. If not, no harm done.
             */
            Collections.sort(unsyncedMessages, new UidReverseComparator());
            int visibleLimit = localFolder.getVisibleLimit();
            int listSize = unsyncedMessages.size();

@@ -1149,15 +1128,6 @@ public class MessagingController {
            fetchUnsyncedMessages(account, remoteFolder, unsyncedMessages, smallMessages, largeMessages, progress, todo,
                    fp);

            String updatedPushState = localFolder.getPushState();
            for (Message message : unsyncedMessages) {
                String newPushState = remoteFolder.getNewPushState(updatedPushState, message);
                if (newPushState != null) {
                    updatedPushState = newPushState;
                }
            }
            localFolder.setPushState(updatedPushState);

            Timber.d("SYNC: Synced unsynced messages for folder %s", folder);
        }

@@ -1343,16 +1313,6 @@ public class MessagingController {
                });
    }

    private boolean shouldImportMessage(final Account account, final Message message,
            final Date earliestDate) {

        if (account.isSearchByDateCapable() && message.olderThan(earliestDate)) {
            Timber.d("Message %s is older than %s, hence not saving", message.getUid(), earliestDate);
            return false;
        }
        return true;
    }

    private <T extends Message> void downloadSmallMessages(final Account account, final Folder<T> remoteFolder,
            final LocalFolder localFolder,
            List<T> smallMessages,
@@ -1363,8 +1323,6 @@ public class MessagingController {
            FetchProfile fp) throws MessagingException {
        final String folder = remoteFolder.getName();

        final Date earliestDate = account.getEarliestPollDate();

        Timber.d("SYNC: Fetching %d small messages for folder %s", smallMessages.size(), folder);

        remoteFolder.fetch(smallMessages,
@@ -1373,12 +1331,6 @@ public class MessagingController {
                    public void messageFinished(final T message, int number, int ofTotal) {
                        try {

                            if (!shouldImportMessage(account, message, earliestDate)) {
                                progress.incrementAndGet();

                                return;
                            }

                            // Store the updated message locally
                            final LocalMessage localMessage = localFolder.storeSmallMessage(message, new Runnable() {
                                @Override
@@ -1436,18 +1388,12 @@ public class MessagingController {
            final int todo,
            FetchProfile fp) throws MessagingException {
        final String folder = remoteFolder.getName();
        final Date earliestDate = account.getEarliestPollDate();

        Timber.d("SYNC: Fetching large messages for folder %s", folder);

        remoteFolder.fetch(largeMessages, fp, null);
        for (T message : largeMessages) {

            if (!shouldImportMessage(account, message, earliestDate)) {
                progress.incrementAndGet();
                continue;
            }

            if (message.getBody() == null) {
                downloadSaneBody(account, remoteFolder, localFolder, message);
            } else {
+24 −38
Original line number Diff line number Diff line
@@ -616,9 +616,10 @@ public class MessagingControllerTest {
    @Test
    public void synchronizeMailboxSynchronousLegacy_withOneMessageInRemoteFolder_shouldFinishWithoutError()
            throws Exception {
        configureRemoteStoreWithFolder();
        messageCountInRemoteFolder(1);

        controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, remoteFolder);
        controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener);

        verify(listener).synchronizeMailboxFinished(account, FOLDER_NAME, 1, 0);
    }
@@ -626,9 +627,10 @@ public class MessagingControllerTest {
    @Test
    public void synchronizeMailboxSynchronousLegacy_withEmptyRemoteFolder_shouldFinishWithoutError()
            throws Exception {
        configureRemoteStoreWithFolder();
        messageCountInRemoteFolder(0);

        controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, remoteFolder);
        controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener);

        verify(listener).synchronizeMailboxFinished(account, FOLDER_NAME, 0, 0);
    }
@@ -636,9 +638,10 @@ public class MessagingControllerTest {
    @Test
    public void synchronizeMailboxSynchronousLegacy_withNegativeMessageCountInRemoteFolder_shouldFinishWithError()
            throws Exception {
        configureRemoteStoreWithFolder();
        messageCountInRemoteFolder(-1);

        controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, remoteFolder);
        controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener);

        verify(listener).synchronizeMailboxFailed(account, FOLDER_NAME,
                "Exception: Message count -1 for folder Folder");
@@ -649,7 +652,7 @@ public class MessagingControllerTest {
            throws Exception {
        messageCountInRemoteFolder(1);

        controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, remoteFolder);
        controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener);

        verify(remoteFolder, never()).open(Folder.OPEN_MODE_RW);
    }
@@ -660,7 +663,7 @@ public class MessagingControllerTest {
        messageCountInRemoteFolder(1);
        configureRemoteStoreWithFolder();

        controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, null);
        controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener);

        verify(remoteFolder).open(Folder.OPEN_MODE_RO);
    }
@@ -669,7 +672,7 @@ public class MessagingControllerTest {
    public void synchronizeMailboxSynchronousLegacy_withRemoteFolderProvided_shouldNotCloseRemoteFolder() throws Exception {
        messageCountInRemoteFolder(1);

        controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, remoteFolder);
        controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener);

        verify(remoteFolder, never()).close();
    }
@@ -680,37 +683,15 @@ public class MessagingControllerTest {
        messageCountInRemoteFolder(1);
        configureRemoteStoreWithFolder();

        controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, null);
        controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener);

        verify(remoteFolder).close();
    }

    @Test
    public void synchronizeMailboxSynchronousLegacy_withAccountPolicySetToExpungeOnPoll_shouldExpungeRemoteFolder()
            throws Exception {
        messageCountInRemoteFolder(1);
        when(account.getExpungePolicy()).thenReturn(Account.Expunge.EXPUNGE_ON_POLL);
        configureRemoteStoreWithFolder();

        controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, null);

        verify(remoteFolder).expunge();
    }

    @Test
    public void synchronizeMailboxSynchronousLegacy_withAccountPolicySetToExpungeManually_shouldNotExpungeRemoteFolder()
            throws Exception {
        messageCountInRemoteFolder(1);
        when(account.getExpungePolicy()).thenReturn(Account.Expunge.EXPUNGE_MANUALLY);

        controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, null);

        verify(remoteFolder, never()).expunge();
    }

    @Test
    public void synchronizeMailboxSynchronousLegacy_withAccountSetToSyncRemoteDeletions_shouldDeleteLocalCopiesOfDeletedMessages()
            throws Exception {
        configureRemoteStoreWithFolder();
        messageCountInRemoteFolder(0);
        LocalMessage localCopyOfRemoteDeletedMessage = mock(LocalMessage.class);
        when(account.syncRemoteDeletions()).thenReturn(true);
@@ -718,7 +699,7 @@ public class MessagingControllerTest {
        when(localFolder.getMessagesByUids(any(List.class)))
                .thenReturn(Collections.singletonList(localCopyOfRemoteDeletedMessage));

        controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, remoteFolder);
        controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener);

        verify(localFolder).destroyMessages(messageListCaptor.capture());
        assertEquals(localCopyOfRemoteDeletedMessage, messageListCaptor.getValue().get(0));
@@ -735,7 +716,7 @@ public class MessagingControllerTest {
        when(localMessage.olderThan(dateOfEarliestPoll)).thenReturn(false);
        when(localFolder.getMessages(null)).thenReturn(Collections.singletonList(localMessage));

        controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, remoteFolder);
        controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener);

        verify(localFolder, never()).destroyMessages(messageListCaptor.capture());
    }
@@ -743,6 +724,7 @@ public class MessagingControllerTest {
    @Test
    public void synchronizeMailboxSynchronousLegacy_withAccountSetToSyncRemoteDeletions_shouldDeleteLocalCopiesOfExistingMessagesBeforeEarliestPollDate()
            throws Exception {
        configureRemoteStoreWithFolder();
        messageCountInRemoteFolder(1);
        LocalMessage localMessage = localMessageWithCopyOnServer();
        Date dateOfEarliestPoll = new Date();
@@ -752,7 +734,7 @@ public class MessagingControllerTest {
        when(localFolder.getAllMessagesAndEffectiveDates()).thenReturn(Collections.singletonMap(MESSAGE_UID1, 0L));
        when(localFolder.getMessagesByUids(any(List.class))).thenReturn(Collections.singletonList(localMessage));

        controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, remoteFolder);
        controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener);

        verify(localFolder).destroyMessages(messageListCaptor.capture());
        assertEquals(localMessage, messageListCaptor.getValue().get(0));
@@ -766,7 +748,7 @@ public class MessagingControllerTest {
        when(account.syncRemoteDeletions()).thenReturn(false);
        when(localFolder.getMessages(null)).thenReturn(Collections.singletonList(remoteDeletedMessage));

        controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, remoteFolder);
        controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener);

        verify(localFolder, never()).destroyMessages(messageListCaptor.capture());
    }
@@ -774,11 +756,12 @@ public class MessagingControllerTest {
    @Test
    public void synchronizeMailboxSynchronousLegacy_withAccountSupportingFetchingFlags_shouldFetchUnsychronizedMessagesListAndFlags()
            throws Exception {
        configureRemoteStoreWithFolder();
        messageCountInRemoteFolder(1);
        hasUnsyncedRemoteMessage();
        when(remoteFolder.supportsFetchingFlags()).thenReturn(true);

        controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, remoteFolder);
        controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener);

        verify(remoteFolder, atLeastOnce()).fetch(any(List.class), fetchProfileCaptor.capture(),
                any(MessageRetrievalListener.class));
@@ -790,11 +773,12 @@ public class MessagingControllerTest {
    @Test
    public void synchronizeMailboxSynchronousLegacy_withAccountNotSupportingFetchingFlags_shouldFetchUnsychronizedMessages()
            throws Exception {
        configureRemoteStoreWithFolder();
        messageCountInRemoteFolder(1);
        hasUnsyncedRemoteMessage();
        when(remoteFolder.supportsFetchingFlags()).thenReturn(false);

        controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, remoteFolder);
        controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener);

        verify(remoteFolder, atLeastOnce()).fetch(any(List.class), fetchProfileCaptor.capture(),
                any(MessageRetrievalListener.class));
@@ -806,12 +790,13 @@ public class MessagingControllerTest {
    public void synchronizeMailboxSynchronousLegacy_withUnsyncedNewSmallMessage_shouldFetchBodyOfSmallMessage()
            throws Exception {
        Message smallMessage = buildSmallNewMessage();
        configureRemoteStoreWithFolder();
        messageCountInRemoteFolder(1);
        hasUnsyncedRemoteMessage();
        when(remoteFolder.supportsFetchingFlags()).thenReturn(false);
        respondToFetchEnvelopesWithMessage(smallMessage);

        controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, remoteFolder);
        controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener);

        verify(remoteFolder, atLeast(2)).fetch(any(List.class), fetchProfileCaptor.capture(),
                any(MessageRetrievalListener.class));
@@ -823,12 +808,13 @@ public class MessagingControllerTest {
    public void synchronizeMailboxSynchronousLegacy_withUnsyncedNewSmallMessage_shouldFetchStructureAndLimitedBodyOfLargeMessage()
            throws Exception {
        Message largeMessage = buildLargeNewMessage();
        configureRemoteStoreWithFolder();
        messageCountInRemoteFolder(1);
        hasUnsyncedRemoteMessage();
        when(remoteFolder.supportsFetchingFlags()).thenReturn(false);
        respondToFetchEnvelopesWithMessage(largeMessage);

        controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener, remoteFolder);
        controller.synchronizeMailboxSynchronousLegacy(account, FOLDER_NAME, listener);

        //TODO: Don't bother fetching messages of a size we don't have
        verify(remoteFolder, atLeast(4)).fetch(any(List.class), fetchProfileCaptor.capture(),