1
0
mirror of https://github.com/moparisthebest/k-9 synced 2024-11-16 06:25:06 -05:00

Make flag operations work on all messages in a thread

This commit is contained in:
cketti 2012-11-03 05:01:25 +01:00
parent 7a266dcbdf
commit 02aeccdedc
2 changed files with 44 additions and 11 deletions

View File

@ -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<Message> accountMessages) {
try {
List<Message> 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<Message> messages) { List<Message> messages) {
try { try {
LocalStore localStore = account.getLocalStore(); List<Message> messagesToDelete = collectMessagesInThreads(account, messages);
List<Message> messagesToDelete = new ArrayList<Message>();
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);
}
deleteMessagesSynchronous(account, folderName, deleteMessagesSynchronous(account, folderName,
messagesToDelete.toArray(EMPTY_MESSAGE_ARRAY), null); messagesToDelete.toArray(EMPTY_MESSAGE_ARRAY), null);
@ -3603,6 +3615,23 @@ public class MessagingController implements Runnable {
} }
} }
public List<Message> collectMessagesInThreads(Account account, List<Message> messages)
throws MessagingException {
LocalStore localStore = account.getLocalStore();
List<Message> messagesInThreads = new ArrayList<Message>();
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) { public void deleteMessages(final Message[] messages, final MessagingListener listener) {
actOnMessages(messages, new MessageActor() { actOnMessages(messages, new MessageActor() {

View File

@ -1943,7 +1943,11 @@ public class MessageListFragment extends SherlockFragment implements OnItemClick
return; return;
} }
mController.setFlag(messages, flag, newState); if (mThreadedList) {
mController.setFlagForThreads(messages, flag, newState);
} else {
mController.setFlag(messages, flag, newState);
}
computeBatchDirection(); computeBatchDirection();
} }