From 98461e5a21507c1968f3b5936a15d0337f2785be Mon Sep 17 00:00:00 2001 From: cketti Date: Tue, 7 Feb 2012 16:30:38 +0100 Subject: [PATCH] Notify listeners if unread count changed due to a copy/move operation --- .../k9/controller/MessagingController.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/com/fsck/k9/controller/MessagingController.java b/src/com/fsck/k9/controller/MessagingController.java index f4706581a..1d536f91f 100644 --- a/src/com/fsck/k9/controller/MessagingController.java +++ b/src/com/fsck/k9/controller/MessagingController.java @@ -3297,12 +3297,17 @@ public class MessagingController implements Runnable { Folder localSrcFolder = localStore.getFolder(srcFolder); Folder localDestFolder = localStore.getFolder(destFolder); + boolean unreadCountAffected = false; List uids = new LinkedList(); for (Message message : inMessages) { String uid = message.getUid(); if (!uid.startsWith(K9.LOCAL_UID_PREFIX)) { uids.add(uid); } + + if (!unreadCountAffected && !message.isSet(Flag.SEEN)) { + unreadCountAffected = true; + } } Message[] messages = localSrcFolder.getMessages(uids.toArray(EMPTY_STRING_ARRAY), null); @@ -3323,6 +3328,15 @@ public class MessagingController implements Runnable { fp.add(FetchProfile.Item.BODY); localSrcFolder.fetch(messages, fp, null); localSrcFolder.copyMessages(messages, localDestFolder); + + if (unreadCountAffected) { + // If this copy operation changes the unread count in the destination + // folder, notify the listeners. + int unreadMessageCount = localDestFolder.getUnreadMessageCount(); + for (MessagingListener l : getListeners()) { + l.folderStatusChanged(account, destFolder, unreadMessageCount); + } + } } else { localSrcFolder.moveMessages(messages, localDestFolder); for (Map.Entry entry : origUidMap.entrySet()) { @@ -3333,6 +3347,17 @@ public class MessagingController implements Runnable { } unsuppressMessage(account, srcFolder, origUid); } + + if (unreadCountAffected) { + // If this move operation changes the unread count, notify the listeners + // that the unread count changed in both the source and destination folder. + int unreadMessageCountSrc = localSrcFolder.getUnreadMessageCount(); + int unreadMessageCountDest = localDestFolder.getUnreadMessageCount(); + for (MessagingListener l : getListeners()) { + l.folderStatusChanged(account, srcFolder, unreadMessageCountSrc); + l.folderStatusChanged(account, destFolder, unreadMessageCountDest); + } + } } queueMoveOrCopy(account, srcFolder, destFolder, isCopy, origUidMap.keySet().toArray(EMPTY_STRING_ARRAY));