Changeset 574


Ignore:
Timestamp:
12/29/09 15:34:00 (2 years ago)
Author:
octorian
Message:

Unread count improvements, but still some runtime quirks

Location:
trunk/LogicMail/src/org/logicprobe/LogicMail/model
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/LogicMail/src/org/logicprobe/LogicMail/model/AccountNode.java

    r564 r574  
    550550            mailboxFolder.setMsgCount(currentFolder.getMsgCount()); 
    551551            mailboxFolder.setUnseenCount(currentFolder.getUnseenCount()); 
     552            mailboxNode.updateUnseenFolderTreeItem(); 
    552553            mailboxNode.fireMailboxStatusChanged(MailboxNodeEvent.TYPE_STATUS, 
    553554                null); 
     
    640641 
    641642        if (messageNode != null) { 
     643            // Set the SEEN bit 
     644            int flags = messageNode.getFlags(); 
     645            flags |= MessageNode.Flag.SEEN; 
     646            messageNode.setFlags(flags); 
     647 
    642648                switch(e.getType()) { 
    643649                case MessageEvent.TYPE_FULLY_LOADED: 
  • trunk/LogicMail/src/org/logicprobe/LogicMail/model/MailboxNode.java

    r565 r574  
    7171        private FolderTreeItem folderTreeItem; 
    7272        private boolean hasAppend; 
     73        private int unseenMessageCount; 
    7374         
    7475        private Object fetchLock = new Object(); 
     
    472473                if(messageAdded) { 
    473474                        fireMailboxStatusChanged(MailboxNodeEvent.TYPE_NEW_MESSAGES, new MessageNode[] { message }); 
     475                        updateUnseenMessages(true); 
    474476                } 
    475477        } 
     
    496498                        addedMessages.copyInto(addedMessagesArray); 
    497499                        fireMailboxStatusChanged(MailboxNodeEvent.TYPE_NEW_MESSAGES, addedMessagesArray); 
     500                        updateUnseenMessages(true); 
    498501                } 
    499502        } 
     
    536539                        } 
    537540                } 
     541        updateUnseenMessages(false); 
    538542                fireMailboxStatusChanged(MailboxNodeEvent.TYPE_STATUS, null); 
    539543        } 
     
    554558                        messageTokenMap.clear(); 
    555559                } 
     560        updateUnseenMessages(false); 
    556561                fireMailboxStatusChanged(MailboxNodeEvent.TYPE_STATUS, null); 
    557562        } 
     
    685690 
    686691    /** 
     692     * Update the unseen message count from the local messages collection. 
     693     *  
     694     * @param fireEvent true to fire a status event if the count has changed 
     695     */ 
     696    void updateUnseenMessages(boolean fireEvent) { 
     697        boolean updated = false; 
     698        synchronized(messages) { 
     699            int newCount = 0; 
     700            int size = messages.size(); 
     701            for(int i=0; i<size; i++) { 
     702                int flags = ((MessageNode)messages.elementAt(i)).getFlags(); 
     703                if((flags & MessageNode.Flag.SEEN) == 0) { 
     704                    newCount++; 
     705                } 
     706            } 
     707            if(newCount != unseenMessageCount) { 
     708                unseenMessageCount = newCount; 
     709                updated = true; 
     710            } 
     711        } 
     712        if(updated && fireEvent) { 
     713            fireMailboxStatusChanged(MailboxNodeEvent.TYPE_STATUS, null); 
     714        } 
     715    } 
     716     
     717    /** 
     718     * Update the unseen message count from the folder tree item. 
     719     */ 
     720    void updateUnseenFolderTreeItem() { 
     721        synchronized(messages) { 
     722            unseenMessageCount = this.folderTreeItem.getUnseenCount(); 
     723        } 
     724    } 
     725     
     726    /** 
    687727     * Gets the unseen message count for this folder. 
    688728     *  
     
    690730     */ 
    691731    public int getUnseenMessageCount() { 
    692         return this.folderTreeItem.getUnseenCount(); 
     732        return unseenMessageCount; 
    693733    } 
    694734         
  • trunk/LogicMail/src/org/logicprobe/LogicMail/model/MessageNode.java

    r571 r574  
    347347        public void setFlags(int flags) { 
    348348                cached = false; 
    349                 this.flags = flags; 
     349                if(this.flags != flags) { 
     350                    this.flags = flags; 
     351                    if(this.getParent() != null) { 
     352                        this.getParent().updateUnseenMessages(true); 
     353                    } 
     354                } 
    350355        } 
    351356 
Note: See TracChangeset for help on using the changeset viewer.