From 44f161fc7f259ef91eb0d7c686b4c595c9361f06 Mon Sep 17 00:00:00 2001 From: Jesse Vincent Date: Sat, 10 Jul 2010 17:10:24 +0000 Subject: [PATCH] extract "fetch unsyncced messages" from downloadMessages --- .../k9/controller/MessagingController.java | 199 ++++++++++-------- 1 file changed, 108 insertions(+), 91 deletions(-) diff --git a/src/com/fsck/k9/controller/MessagingController.java b/src/com/fsck/k9/controller/MessagingController.java index 2f37e2eaa..0570450c2 100644 --- a/src/com/fsck/k9/controller/MessagingController.java +++ b/src/com/fsck/k9/controller/MessagingController.java @@ -1490,99 +1490,9 @@ public class MessagingController implements Runnable if (K9.DEBUG) Log.d(K9.LOG_TAG, "SYNC: About to fetch " + unsyncedMessages.size() + " unsynced messages for folder " + folder); - remoteFolder.fetch(unsyncedMessages.toArray(new Message[0]), fp, - new MessageRetrievalListener() - { - public void messageFinished(Message message, int number, int ofTotal) - { - try - { - String newPushState = remoteFolder.getNewPushState(localFolder.getPushState(), message); - if (newPushState != null) - { - localFolder.setPushState(newPushState); - } - 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() - + " was marked deleted on server, skipping"); - } - else - { - Log.d(K9.LOG_TAG, "Newly downloaded message " + message.getUid() + " is older than " - + earliestDate + ", skipping"); - } - } - progress.incrementAndGet(); - for (MessagingListener l : getListeners()) - { - l.synchronizeMailboxProgress(account, folder, progress.get(), todo); - } - return; - } + fetchUnsyncedMessages(account, remoteFolder, localFolder, unsyncedMessages, smallMessages,largeMessages, progress, todo, fp); - if (message.getSize() > (MAX_SMALL_MESSAGE_SIZE)) - { - largeMessages.add(message); - } - else - { - smallMessages.add(message); - } - - // And include it in the view - if (message.getSubject() != null && - message.getFrom() != null) - { - /* - * We check to make sure that we got something worth - * showing (subject and from) because some protocols - * (POP) may not be able to give us headers for - * ENVELOPE, only size. - */ - if (isMessageSuppressed(account, folder, message) == false) - { - // Store the new message locally - localFolder.appendMessages(new Message[] - { - message - }); - - Message localMessage = localFolder.getMessage(message.getUid()); - syncFlags(localMessage, message); - if (K9.DEBUG) - Log.v(K9.LOG_TAG, "About to notify listeners that we got a new unsynced message " - + account + ":" + folder + ":" + message.getUid()); - for (MessagingListener l : getListeners()) - { - l.synchronizeMailboxAddOrUpdateMessage(account, folder, localMessage); - } - - - } - - } - - } - catch (Exception e) - { - Log.e(K9.LOG_TAG, "Error while storing downloaded message.", e); - addErrorMessage(account, null, e); - - } - } - - public void messageStarted(String uid, int number, int ofTotal) - { - } - - public void messagesFinished(int total) {} - }); // If a message didn't exist, messageFinished won't be called, but we shouldn't try again // If we got here, nothing failed for (Message message : unsyncedMessages) @@ -1663,6 +1573,113 @@ public class MessagingController implements Runnable return newMessages.get(); } + private void fetchUnsyncedMessages(final Account account, final Folder remoteFolder, + final LocalFolder localFolder, + List unsyncedMessages, + final ArrayList smallMessages, + final ArrayList largeMessages, + final AtomicInteger progress, + final int todo, + FetchProfile fp) throws MessagingException + { + final String folder = remoteFolder.getName(); + + final Date earliestDate = account.getEarliestPollDate(); + remoteFolder.fetch(unsyncedMessages.toArray(new Message[0]), fp, + new MessageRetrievalListener() + { + public void messageFinished(Message message, int number, int ofTotal) + { + try + { + String newPushState = remoteFolder.getNewPushState(localFolder.getPushState(), message); + if (newPushState != null) + { + localFolder.setPushState(newPushState); + } + 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() + + " was marked deleted on server, skipping"); + } + else + { + Log.d(K9.LOG_TAG, "Newly downloaded message " + message.getUid() + " is older than " + + earliestDate + ", skipping"); + } + } + progress.incrementAndGet(); + for (MessagingListener l : getListeners()) + { + l.synchronizeMailboxProgress(account, folder, progress.get(), todo); + } + return; + } + + if (message.getSize() > (MAX_SMALL_MESSAGE_SIZE)) + { + largeMessages.add(message); + } + else + { + smallMessages.add(message); + } + + // And include it in the view + if (message.getSubject() != null && + message.getFrom() != null) + { + /* + * We check to make sure that we got something worth + * showing (subject and from) because some protocols + * (POP) may not be able to give us headers for + * ENVELOPE, only size. + */ + if (isMessageSuppressed(account, folder, message) == false) + { + // Store the new message locally + localFolder.appendMessages(new Message[] + { + message + }); + + Message localMessage = localFolder.getMessage(message.getUid()); + syncFlags(localMessage, message); + if (K9.DEBUG) + Log.v(K9.LOG_TAG, "About to notify listeners that we got a new unsynced message " + + account + ":" + folder + ":" + message.getUid()); + for (MessagingListener l : getListeners()) + { + l.synchronizeMailboxAddOrUpdateMessage(account, folder, localMessage); + } + + + } + + } + + } + catch (Exception e) + { + Log.e(K9.LOG_TAG, "Error while storing downloaded message.", e); + addErrorMessage(account, null, e); + + } + } + + public void messageStarted(String uid, int number, int ofTotal) + { + } + + public void messagesFinished(int total) {} + }); + } + private void downloadSmallMessages(final Account account, final Folder remoteFolder, final LocalFolder localFolder, ArrayList smallMessages,