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

Commit 0ac1d3f4 authored by Philip Whitehouse's avatar Philip Whitehouse
Browse files

Re-format MessagingController

parent c45251f6
Loading
Loading
Loading
Loading
+314 −265
Original line number Diff line number Diff line
@@ -373,7 +373,8 @@ public class MessagingController {
     * foreground.
     * TODO this needs to cache the remote folder list
     */
    public void listFoldersSynchronous(final Account account, final boolean refreshRemote, final MessagingListener listener) {
    public void listFoldersSynchronous(final Account account, final boolean refreshRemote,
            final MessagingListener listener) {
        for (MessagingListener l : getListeners(listener)) {
            l.listFoldersStarted(account);
        }
@@ -521,9 +522,13 @@ public class MessagingController {
            // Collecting statistics of the search result
            MessageRetrievalListener<LocalMessage> retrievalListener = new MessageRetrievalListener<LocalMessage>() {
                @Override
                public void messageStarted(String message, int number, int ofTotal) { }
                public void messageStarted(String message, int number, int ofTotal) {
                }

                @Override
                public void messagesFinished(int number) { }
                public void messagesFinished(int number) {
                }

                @Override
                public void messageFinished(LocalMessage message, int number, int ofTotal) {
                    if (!isMessageSuppressed(message)) {
@@ -620,7 +625,8 @@ public class MessagingController {
            messages.clear();

            if (listener != null) {
                listener.remoteSearchServerQueryComplete(folderName, remoteMessages.size(), acct.getRemoteSearchNumResults());
                listener.remoteSearchServerQueryComplete(folderName, remoteMessages.size(),
                        acct.getRemoteSearchNumResults());
            }

            Collections.sort(remoteMessages, new UidReverseComparator());
@@ -746,7 +752,7 @@ public class MessagingController {
    /**
     * Start foreground synchronization of the specified folder. This is generally only called
     * by synchronizeMailbox.
     *
     * <p>
     * TODO Break this method up into smaller chunks.
     */
    @VisibleForTesting
@@ -899,7 +905,8 @@ public class MessagingController {
                }


                List<? extends Message> remoteMessageArray = remoteFolder.getMessages(remoteStart, remoteMessageCount, earliestDate, null);
                List<? extends Message> remoteMessageArray =
                        remoteFolder.getMessages(remoteStart, remoteMessageCount, earliestDate, null);

                int messageCount = remoteMessageArray.size();

@@ -1023,7 +1030,8 @@ public class MessagingController {
            }
            notifyUserIfCertificateProblem(account, e, true);
            addErrorMessage(account, null, e);
            Log.e(K9.LOG_TAG, "Failed synchronizing folder " + account.getDescription() + ":" + folder + " @ " + new Date());
            Log.e(K9.LOG_TAG,
                    "Failed synchronizing folder " + account.getDescription() + ":" + folder + " @ " + new Date());

        } finally {
            if (providedRemoteFolder == null) {
@@ -1175,10 +1183,12 @@ public class MessagingController {
            fp.add(FetchProfile.Item.ENVELOPE);

            if (K9.DEBUG) {
                Log.d(K9.LOG_TAG, "SYNC: About to fetch " + unsyncedMessages.size() + " unsynced messages for folder " + folder);
                Log.d(K9.LOG_TAG,
                        "SYNC: About to fetch " + unsyncedMessages.size() + " unsynced messages for folder " + folder);
            }

            fetchUnsyncedMessages(account, remoteFolder, unsyncedMessages, smallMessages, largeMessages, progress, todo, fp);
            fetchUnsyncedMessages(account, remoteFolder, unsyncedMessages, smallMessages, largeMessages, progress, todo,
                    fp);

            String updatedPushState = localFolder.getPushState();
            for (Message message : unsyncedMessages) {
@@ -1211,14 +1221,16 @@ public class MessagingController {
        fp.add(FetchProfile.Item.BODY);
        //        fp.add(FetchProfile.Item.FLAGS);
        //        fp.add(FetchProfile.Item.ENVELOPE);
        downloadSmallMessages(account, remoteFolder, localFolder, smallMessages, progress, unreadBeforeStart, newMessages, todo, fp);
        downloadSmallMessages(account, remoteFolder, localFolder, smallMessages, progress, unreadBeforeStart,
                newMessages, todo, fp);
        smallMessages.clear();
        /*
         * Now do the large messages that require more round trips.
         */
        fp = new FetchProfile();
        fp.add(FetchProfile.Item.STRUCTURE);
        downloadLargeMessages(account, remoteFolder, localFolder, largeMessages, progress, unreadBeforeStart, newMessages, todo, fp);
        downloadLargeMessages(account, remoteFolder, localFolder, largeMessages, progress, unreadBeforeStart,
                newMessages, todo, fp);
        largeMessages.clear();

        /*
@@ -1229,7 +1241,8 @@ public class MessagingController {
        refreshLocalMessageFlags(account, remoteFolder, localFolder, syncFlagMessages, progress, todo);

        if (K9.DEBUG) {
            Log.d(K9.LOG_TAG, "SYNC: Synced remote messages for folder " + folder + ", " + newMessages.get() + " new messages");
            Log.d(K9.LOG_TAG,
                    "SYNC: Synced remote messages for folder " + folder + ", " + newMessages.get() + " new messages");
        }

        if (purgeToVisibleLimit) {
@@ -1354,10 +1367,12 @@ public class MessagingController {
                            if (message.isSet(Flag.DELETED) || message.olderThan(earliestDate)) {
                                if (K9.DEBUG) {
                                    if (message.isSet(Flag.DELETED)) {
                                Log.v(K9.LOG_TAG, "Newly downloaded message " + account + ":" + folder + ":" + message.getUid()
                                        Log.v(K9.LOG_TAG, "Newly downloaded message " + account + ":" + folder + ":" +
                                                message.getUid()
                                                + " was marked deleted on server, skipping");
                                    } else {
                                Log.d(K9.LOG_TAG, "Newly downloaded message " + message.getUid() + " is older than "
                                        Log.d(K9.LOG_TAG,
                                                "Newly downloaded message " + message.getUid() + " is older than "
                                                        + earliestDate + ", skipping");
                                    }
                                }
@@ -1382,7 +1397,8 @@ public class MessagingController {
                    }

                    @Override
            public void messageStarted(String uid, int number, int ofTotal) { }
                    public void messageStarted(String uid, int number, int ofTotal) {
                    }

                    @Override
                    public void messagesFinished(int total) {
@@ -1474,10 +1490,12 @@ public class MessagingController {
                    }

                    @Override
            public void messageStarted(String uid, int number, int ofTotal) { }
                    public void messageStarted(String uid, int number, int ofTotal) {
                    }

                    @Override
            public void messagesFinished(int total) { }
                    public void messagesFinished(int total) {
                    }
                });

        if (K9.DEBUG) {
@@ -1543,7 +1561,8 @@ public class MessagingController {

    }

    private void downloadPartial(Folder remoteFolder, LocalFolder localFolder, Message message) throws MessagingException {
    private void downloadPartial(Folder remoteFolder, LocalFolder localFolder, Message message)
            throws MessagingException {
        /*
         * We have a structure to deal with, from which
         * we can pull down the parts we want to actually store.
@@ -1693,6 +1712,7 @@ public class MessagingController {
        }
        return messageChanged;
    }

    private String getRootCauseMessage(Throwable t) {
        Throwable rootCause = t;
        Throwable nextCause;
@@ -1731,7 +1751,8 @@ public class MessagingController {
                try {
                    processPendingCommandsSynchronous(account);
                } catch (UnavailableStorageException e) {
                    Log.i(K9.LOG_TAG, "Failed to process pending command because storage is not available - trying again later.");
                    Log.i(K9.LOG_TAG,
                            "Failed to process pending command because storage is not available - trying again later.");
                    throw new UnavailableAccountException(e);
                } catch (MessagingException me) {
                    Log.e(K9.LOG_TAG, "processPendingCommands", me);
@@ -1787,7 +1808,8 @@ public class MessagingController {
                } catch (MessagingException me) {
                    if (me.isPermanentFailure()) {
                        addErrorMessage(account, null, me);
                        Log.e(K9.LOG_TAG, "Failure of command '" + command + "' was permanent, removing command from queue");
                        Log.e(K9.LOG_TAG,
                                "Failure of command '" + command + "' was permanent, removing command from queue");
                        localStore.removePendingCommand(processingCommand);
                    } else {
                        throw me;
@@ -1860,7 +1882,8 @@ public class MessagingController {
            if (remoteMessage == null) {
                if (localMessage.isSet(Flag.X_REMOTE_COPY_STARTED)) {
                    Log.w(K9.LOG_TAG, "Local message with uid " + localMessage.getUid() +
                          " has flag " + Flag.X_REMOTE_COPY_STARTED + " already set, checking for remote message with " +
                            " has flag " + Flag.X_REMOTE_COPY_STARTED +
                            " already set, checking for remote message with " +
                            " same message id");
                    String rUid = remoteFolder.getUidFromMessageId(localMessage);
                    if (rUid != null) {
@@ -1943,7 +1966,9 @@ public class MessagingController {
            closeFolder(localFolder);
        }
    }
    private void queueMoveOrCopy(Account account, String srcFolder, String destFolder, boolean isCopy, List<String> uids) {

    private void queueMoveOrCopy(Account account, String srcFolder, String destFolder, boolean isCopy,
            List<String> uids) {
        if (account.getErrorFolderName().equals(srcFolder)) {
            return;
        }
@@ -1991,7 +2016,8 @@ public class MessagingController {
            }

            if (!remoteSrcFolder.exists()) {
                throw new MessagingException("processingPendingMoveOrCopy: remoteFolder " + srcFolder + " does not exist", true);
                throw new MessagingException(
                        "processingPendingMoveOrCopy: remoteFolder " + srcFolder + " does not exist", true);
            }
            remoteSrcFolder.open(Folder.OPEN_MODE_RW);
            if (remoteSrcFolder.getMode() != Folder.OPEN_MODE_RW) {
@@ -2001,7 +2027,8 @@ public class MessagingController {

            if (K9.DEBUG) {
                Log.d(K9.LOG_TAG, "processingPendingMoveOrCopy: source folder = " + srcFolder
                        + ", " + messages.size() + " messages, destination folder = " + destFolder + ", isCopy = " + isCopy);
                        + ", " + messages.size() + " messages, destination folder = " + destFolder + ", isCopy = " +
                        isCopy);
            }

            Map<String, String> remoteUidMap = null;
@@ -2027,7 +2054,8 @@ public class MessagingController {
            }
            if (!isCopy && Expunge.EXPUNGE_IMMEDIATELY == account.getExpungePolicy()) {
                if (K9.DEBUG) {
                    Log.i(K9.LOG_TAG, "processingPendingMoveOrCopy expunging folder " + account.getDescription() + ":" + srcFolder);
                    Log.i(K9.LOG_TAG, "processingPendingMoveOrCopy expunging folder " + account.getDescription() + ":" +
                            srcFolder);
                }

                remoteSrcFolder.expunge();
@@ -2073,6 +2101,7 @@ public class MessagingController {
            }
        });
    }

    /**
     * Processes a pending mark read or unread command.
     */
@@ -2123,6 +2152,7 @@ public class MessagingController {
            }
        });
    }

    void processPendingExpunge(PendingExpunge command, Account account) throws MessagingException {
        String folder = command.folder;

@@ -2232,6 +2262,7 @@ public class MessagingController {
    }

    private static AtomicBoolean loopCatch = new AtomicBoolean();

    private void addErrorMessage(Account account, String subject, String body) {
        if (!K9.DEBUG) {
            return;
@@ -2270,7 +2301,6 @@ public class MessagingController {
    }



    public void markAllMessagesRead(final Account account, final String folder) {

        if (K9.DEBUG) {
@@ -2370,7 +2400,7 @@ public class MessagingController {

    /**
     * Set or remove a flag for a set of messages in a specific folder.
     *
     * <p>
     * <p>
     * The {@link Message} objects passed in are updated to reflect the new flag state.
     * </p>
@@ -2536,7 +2566,8 @@ public class MessagingController {
                message.setFlag(Flag.X_DOWNLOADED_PARTIAL, false);
            }*/

            /*if (!message.isSet(Flag.X_DOWNLOADED_FULL)) */ {
            /*if (!message.isSet(Flag.X_DOWNLOADED_FULL)) */
            {
                /*
                 * At this point the message is not available, so we need to download it
                 * fully if possible.
@@ -2923,13 +2954,15 @@ public class MessagingController {
        } else {
            LocalFolder localSentFolder = localStore.getFolder(account.getSentFolderName());
            if (K9.DEBUG) {
                Log.i(K9.LOG_TAG, "Moving sent message to folder '" + account.getSentFolderName() + "' (" + localSentFolder.getId() + ") ");
                Log.i(K9.LOG_TAG, "Moving sent message to folder '" + account.getSentFolderName() + "' (" +
                        localSentFolder.getId() + ") ");
            }

            localFolder.moveMessages(Collections.singletonList(message), localSentFolder);

            if (K9.DEBUG) {
                Log.i(K9.LOG_TAG, "Moved sent message to folder '" + account.getSentFolderName() + "' (" + localSentFolder.getId() + ") ");
                Log.i(K9.LOG_TAG, "Moved sent message to folder '" + account.getSentFolderName() + "' (" +
                        localSentFolder.getId() + ") ");
            }

            PendingCommand command = PendingAppend.create(localSentFolder.getName(), message.getUid());
@@ -3086,10 +3119,10 @@ public class MessagingController {
    }



    public boolean isMoveCapable(MessageReference messageReference) {
        return !messageReference.getUid().startsWith(K9.LOCAL_UID_PREFIX);
    }

    public boolean isCopyCapable(MessageReference message) {
        return isMoveCapable(message);
    }
@@ -3105,6 +3138,7 @@ public class MessagingController {
            return false;
        }
    }

    public boolean isCopyCapable(final Account account) {
        try {
            Store localStore = account.getLocalStore();
@@ -3115,6 +3149,7 @@ public class MessagingController {
            return false;
        }
    }

    public void moveMessages(final Account srcAccount, final String srcFolder,
            List<MessageReference> messageReferences, final String destFolder) {
        actOnMessageGroup(srcAccount, srcFolder, messageReferences, new MessageActor() {
@@ -3240,7 +3275,8 @@ public class MessagingController {

                if (K9.DEBUG) {
                    Log.i(K9.LOG_TAG, "moveOrCopyMessageSynchronous: source folder = " + srcFolder
                            + ", " + messages.size() + " messages, " + ", destination folder = " + destFolder + ", isCopy = " + isCopy);
                            + ", " + messages.size() + " messages, " + ", destination folder = " + destFolder +
                            ", isCopy = " + isCopy);
                }

                Map<String, String> uidMap;
@@ -3329,7 +3365,8 @@ public class MessagingController {
    public void deleteThreads(final List<MessageReference> messages) {
        actOnMessagesGroupedByAccountAndFolder(messages, new MessageActor() {
            @Override
            public void act(final Account account, final LocalFolder messageFolder, final List<LocalMessage> accountMessages) {
            public void act(final Account account, final LocalFolder messageFolder,
                    final List<LocalMessage> accountMessages) {
                suppressMessages(account, accountMessages);

                putBackground("deleteThreads", null, new Runnable() {
@@ -3380,7 +3417,8 @@ public class MessagingController {
        actOnMessagesGroupedByAccountAndFolder(messages, new MessageActor() {

            @Override
            public void act(final Account account, final LocalFolder messageFolder, final List<LocalMessage> accountMessages) {
            public void act(final Account account, final LocalFolder messageFolder,
                    final List<LocalMessage> accountMessages) {
                suppressMessages(account, accountMessages);

                putBackground("deleteMessages", null, new Runnable() {
@@ -3423,7 +3461,8 @@ public class MessagingController {

    }

    private void deleteMessagesSynchronous(final Account account, final String folder, final List<? extends Message> messages,
    private void deleteMessagesSynchronous(final Account account, final String folder,
            final List<? extends Message> messages,
            MessagingListener listener) {
        Folder localFolder = null;
        Folder localTrashFolder = null;
@@ -3463,12 +3502,14 @@ public class MessagingController {
            for (MessagingListener l : getListeners()) {
                l.folderStatusChanged(account, folder, localFolder.getUnreadMessageCount());
                if (localTrashFolder != null) {
                    l.folderStatusChanged(account, account.getTrashFolderName(), localTrashFolder.getUnreadMessageCount());
                    l.folderStatusChanged(account, account.getTrashFolderName(),
                            localTrashFolder.getUnreadMessageCount());
                }
            }

            if (K9.DEBUG) {
                Log.d(K9.LOG_TAG, "Delete policy for account " + account.getDescription() + " is " + account.getDeletePolicy());
                Log.d(K9.LOG_TAG,
                        "Delete policy for account " + account.getDescription() + " is " + account.getDeletePolicy());
            }

            if (folder.equals(account.getOutboxFolderName())) {
@@ -3612,7 +3653,7 @@ public class MessagingController {

    /**
     * Find out whether the account type only supports a local Trash folder.
     *
     * <p>
     * <p>Note: Currently this is only the case for POP3 accounts.</p>
     *
     * @param account
@@ -3745,7 +3786,6 @@ public class MessagingController {
    }



    private void checkMailForAccount(final Context context, final Account account,
            final boolean ignoreLastCheckedTime,
            final MessagingListener listener) {
@@ -3925,7 +3965,8 @@ public class MessagingController {
                        l.accountSizeChanged(account, oldSize, newSize);
                    }
                } catch (UnavailableStorageException e) {
                    Log.i(K9.LOG_TAG, "Failed to compact account because storage is not available - trying again later.");
                    Log.i(K9.LOG_TAG,
                            "Failed to compact account because storage is not available - trying again later.");
                    throw new UnavailableAccountException(e);
                } catch (Exception e) {
                    Log.e(K9.LOG_TAG, "Failed to compact account " + account.getDescription(), e);
@@ -3981,7 +4022,8 @@ public class MessagingController {
                        l.accountStatusChanged(account, stats);
                    }
                } catch (UnavailableStorageException e) {
                    Log.i(K9.LOG_TAG, "Failed to recreate an account because storage is not available - trying again later.");
                    Log.i(K9.LOG_TAG,
                            "Failed to recreate an account because storage is not available - trying again later.");
                    throw new UnavailableAccountException(e);
                } catch (Exception e) {
                    Log.e(K9.LOG_TAG, "Failed to recreate account " + account.getDescription(), e);
@@ -4075,8 +4117,12 @@ public class MessagingController {

    /**
     * Save a draft message.
     * @param account Account we are saving for.
     * @param message Message to save.
     *
     * @param account
     *         Account we are saving for.
     * @param message
     *         Message to save.
     *
     * @return Message representing the entry in the local store.
     */
    public Message saveDraft(final Account account, final Message message, long existingDraftId, boolean saveRemotely) {
@@ -4138,6 +4184,7 @@ public class MessagingController {
    }

    private static AtomicInteger sequencing = new AtomicInteger(0);

    private static class Command implements Comparable<Command> {
        public Runnable runnable;
        public MessagingListener listener;
@@ -4242,7 +4289,8 @@ public class MessagingController {

                if (names.size() > maxPushFolders) {
                    if (K9.DEBUG) {
                        Log.i(K9.LOG_TAG, "Count of folders to push for account " + account.getDescription() + " is " + names.size()
                        Log.i(K9.LOG_TAG, "Count of folders to push for account " + account.getDescription() + " is " +
                                names.size()
                                + ", greater than limit of " + maxPushFolders + ", truncating");
                    }

@@ -4324,7 +4372,8 @@ public class MessagingController {
                    localFolder.setStatus(null);

                    if (K9.DEBUG) {
                        Log.i(K9.LOG_TAG, "messagesArrived newCount = " + newCount + ", unread count = " + unreadMessageCount);
                        Log.i(K9.LOG_TAG,
                                "messagesArrived newCount = " + newCount + ", unread count = " + unreadMessageCount);
                    }

                    if (unreadMessageCount == 0) {