Changeset 568


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

Ordered cache loading

Location:
trunk
Files:
2 added
2 edited

Legend:

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

    r565 r568  
    4141 
    4242import net.rim.device.api.system.EventLogger; 
     43import net.rim.device.api.util.InvertedOrderComparator; 
     44import net.rim.device.api.util.SimpleSortingVector; 
    4345 
    4446import org.logicprobe.LogicMail.AppInfo; 
     
    177179                Vector messageTokenList = new Vector(); 
    178180                 
    179                 FileConnection fileConnection = getMailboxFileConnection(mailboxNode); 
    180                 String mailboxUrl = fileConnection.getURL(); 
    181                 Enumeration e = fileConnection.list(MSG_FILTER, false); 
    182                 while(e.hasMoreElements()) { 
    183                         String fileUrl = mailboxUrl + e.nextElement(); 
    184                         MessageToken messageToken = readMessageToken(fileUrl); 
    185                         if(messageToken != null) { 
    186                                 messageTokenList.addElement(messageToken); 
    187                         } 
    188                 } 
    189                 fileConnection.close(); 
    190                  
     181        String[] fileUrls = getMessageFiles(mailboxNode); 
     182        for(int i=0; i<fileUrls.length; i++) { 
     183            MessageToken messageToken = readMessageToken(fileUrls[i]); 
     184            if(messageToken != null) { 
     185                messageTokenList.addElement(messageToken); 
     186            } 
     187        } 
     188         
    191189                MessageToken[] result = new MessageToken[messageTokenList.size()]; 
    192190                messageTokenList.copyInto(result); 
     
    199197                Vector messageNodeList = new Vector(); 
    200198                 
    201                 FileConnection fileConnection = getMailboxFileConnection(mailboxNode); 
    202                 String mailboxUrl = fileConnection.getURL(); 
    203                 Enumeration e = fileConnection.list(MSG_FILTER, false); 
    204                 while(e.hasMoreElements()) { 
    205                         String fileUrl = mailboxUrl + e.nextElement(); 
    206                         MessageNode messageNode = readMessageNode(fileUrl); 
    207                         if(messageNode != null) { 
    208                                 messageNodeList.addElement(messageNode); 
    209                         } 
    210                 } 
    211                 fileConnection.close(); 
     199        String[] fileUrls = getMessageFiles(mailboxNode); 
     200        for(int i=0; i<fileUrls.length; i++) { 
     201            MessageNode messageNode = readMessageNode(fileUrls[i]); 
     202            if(messageNode != null) { 
     203                messageNodeList.addElement(messageNode); 
     204            } 
     205        } 
    212206                 
    213207                MessageNode[] result = new MessageNode[messageNodeList.size()]; 
     
    218212    public void readMessageNodes(MailboxNode mailboxNode, MessageNodeCallback callback) throws IOException { 
    219213        if(cacheUrl == null) { callback.messageNodeUpdated(null); } 
    220  
    221         //TODO: Implement sort ordering in both directions for sane cache loading 
     214         
     215        String[] fileUrls = getMessageFiles(mailboxNode); 
     216        for(int i=0; i<fileUrls.length; i++) { 
     217            MessageNode messageNode = readMessageNode(fileUrls[i]); 
     218            if(messageNode != null) { 
     219                callback.messageNodeUpdated(messageNode); 
     220            } 
     221        } 
     222         
     223        callback.messageNodeUpdated(null); 
     224    } 
     225         
     226    private String[] getMessageFiles(MailboxNode mailboxNode) throws IOException { 
     227        SimpleSortingVector fileVector = new SimpleSortingVector(); 
     228        if(mailSettings.getGlobalConfig().getDispOrder()) { 
     229            fileVector.setSortComparator(new MailFileComparator()); 
     230        } 
     231        else { 
     232            fileVector.setSortComparator(new InvertedOrderComparator(new MailFileComparator())); 
     233        } 
     234        fileVector.setSort(true); 
     235         
    222236        FileConnection fileConnection = getMailboxFileConnection(mailboxNode); 
    223237        String mailboxUrl = fileConnection.getURL(); 
    224238        Enumeration e = fileConnection.list(MSG_FILTER, false); 
    225239        while(e.hasMoreElements()) { 
    226             String fileUrl = mailboxUrl + e.nextElement(); 
    227             MessageNode messageNode = readMessageNode(fileUrl); 
    228             if(messageNode != null) { 
    229                 callback.messageNodeUpdated(messageNode); 
    230             } 
     240            fileVector.addElement(e.nextElement()); 
    231241        } 
    232242        fileConnection.close(); 
    233         callback.messageNodeUpdated(null); 
     243 
     244        int size = fileVector.size(); 
     245        String[] result = new String[size]; 
     246        for(int i=0; i<size; i++) { 
     247            result[i] = mailboxUrl + fileVector.elementAt(i); 
     248        } 
     249        return result; 
    234250    } 
    235          
     251     
    236252        public MessageNode readMessageNode(MailboxNode mailboxNode, MessageToken messageToken, boolean loadContent) throws IOException { 
    237253                if(cacheUrl == null) { return null; } 
  • trunk/LogicMailTests/src/org/logicprobe/LogicMail/model/ModelTests.java

    r517 r568  
    5050        testSuite.addTest(new MessageNodeTest().suite()); 
    5151        testSuite.addTest(new MessageNodeWriterTest().suite()); 
     52        testSuite.addTest(new MailFileComparatorTest().suite()); 
    5253        return testSuite; 
    5354    } 
Note: See TracChangeset for help on using the changeset viewer.