From 02aeccdedcbcd4790442abef7fea1a4e0c4b2064 Mon Sep 17 00:00:00 2001 From: cketti Date: Sat, 3 Nov 2012 05:01:25 +0100 Subject: [PATCH] Make flag operations work on all messages in a thread --- .../k9/controller/MessagingController.java | 49 +++++++++++++++---- .../fsck/k9/fragment/MessageListFragment.java | 6 ++- 2 files changed, 44 insertions(+), 11 deletions(-) diff --git a/src/com/fsck/k9/controller/MessagingController.java b/src/com/fsck/k9/controller/MessagingController.java index 7da30973c..176ea055a 100644 --- a/src/com/fsck/k9/controller/MessagingController.java +++ b/src/com/fsck/k9/controller/MessagingController.java @@ -2569,7 +2569,28 @@ public class MessagingController implements Runnable { } }); + } + public void setFlagForThreads(final Message[] messages, final Flag flag, + final boolean newState) { + + actOnMessages(messages, new MessageActor() { + @Override + public void act(final Account account, final Folder folder, + final List accountMessages) { + + try { + List messagesInThreads = collectMessagesInThreads(account, + accountMessages); + + setFlag(account, folder.getName(), + messagesInThreads.toArray(EMPTY_MESSAGE_ARRAY), flag, newState); + + } catch (MessagingException e) { + addErrorMessage(account, "Something went wrong in setFlagForThreads()", e); + } + } + }); } /** @@ -3585,16 +3606,7 @@ public class MessagingController implements Runnable { List messages) { try { - LocalStore localStore = account.getLocalStore(); - - List messagesToDelete = new ArrayList(); - for (Message message : messages) { - long rootId = ((LocalMessage) message).getRootId(); - long threadId = (rootId == -1) ? message.getId() : rootId; - - Message[] messagesInThread = localStore.getMessagesInThread(threadId); - Collections.addAll(messagesToDelete, messagesInThread); - } + List messagesToDelete = collectMessagesInThreads(account, messages); deleteMessagesSynchronous(account, folderName, messagesToDelete.toArray(EMPTY_MESSAGE_ARRAY), null); @@ -3603,6 +3615,23 @@ public class MessagingController implements Runnable { } } + public List collectMessagesInThreads(Account account, List messages) + throws MessagingException { + + LocalStore localStore = account.getLocalStore(); + + List messagesInThreads = new ArrayList(); + for (Message message : messages) { + long rootId = ((LocalMessage) message).getRootId(); + long threadId = (rootId == -1) ? message.getId() : rootId; + + Message[] messagesInThread = localStore.getMessagesInThread(threadId); + Collections.addAll(messagesInThreads, messagesInThread); + } + + return messagesInThreads; + } + public void deleteMessages(final Message[] messages, final MessagingListener listener) { actOnMessages(messages, new MessageActor() { diff --git a/src/com/fsck/k9/fragment/MessageListFragment.java b/src/com/fsck/k9/fragment/MessageListFragment.java index a6f74d9d6..7ccae8599 100644 --- a/src/com/fsck/k9/fragment/MessageListFragment.java +++ b/src/com/fsck/k9/fragment/MessageListFragment.java @@ -1943,7 +1943,11 @@ public class MessageListFragment extends SherlockFragment implements OnItemClick return; } - mController.setFlag(messages, flag, newState); + if (mThreadedList) { + mController.setFlagForThreads(messages, flag, newState); + } else { + mController.setFlag(messages, flag, newState); + } computeBatchDirection(); }