Changeset 564
- Timestamp:
- 12/28/09 17:27:58 (2 years ago)
- Location:
- trunk
- Files:
-
- 1 added
- 8 edited
-
LogicMail/src/org/logicprobe/LogicMail/mail/AbstractMailConnectionHandler.java (modified) (1 diff)
-
LogicMail/src/org/logicprobe/LogicMail/mail/IncomingMailConnectionHandler.java (modified) (1 diff)
-
LogicMail/src/org/logicprobe/LogicMail/mail/imap/ImapClient.java (modified) (2 diffs)
-
LogicMail/src/org/logicprobe/LogicMail/mail/pop/PopClient.java (modified) (4 diffs)
-
LogicMail/src/org/logicprobe/LogicMail/model/AccountNode.java (modified) (5 diffs)
-
LogicMail/src/org/logicprobe/LogicMail/model/MailFileManager.java (modified) (1 diff)
-
LogicMail/src/org/logicprobe/LogicMail/model/MailboxNode.java (modified) (2 diffs)
-
LogicMail/src/org/logicprobe/LogicMail/model/MessageNodeCallback.java (added)
-
LogicMailTests/src/org/logicprobe/LogicMail/mail/NetworkMailStoreTest.java (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LogicMail/src/org/logicprobe/LogicMail/mail/AbstractMailConnectionHandler.java
r471 r564 657 657 } 658 658 else if(type == MailProgressHandler.TYPE_PROCESSING && max > 0){ 659 if(count > 0) { count = count/ max; }659 if(count > 0) { count = (count * 100) / max; } 660 660 showStatus(messageStart + count + processingMessageEnd); 661 661 } -
trunk/LogicMail/src/org/logicprobe/LogicMail/mail/IncomingMailConnectionHandler.java
r562 r564 271 271 } 272 272 273 if(resultMessages != null && listener != null) { 274 if(param == null) { 275 listener.mailConnectionRequestComplete(type, new Object[] { folder, resultMessages }); 273 if(listener != null) { 274 if(resultMessages != null) { 275 if(param == null) { 276 listener.mailConnectionRequestComplete(type, new Object[] { folder, resultMessages }); 277 } 278 else { 279 listener.mailConnectionRequestComplete(type, new Object[] { folder, resultMessages, param }); 280 } 276 281 } 277 else { 278 listener.mailConnectionRequestComplete(type, new Object[] { folder, resultMessages, param }); 282 283 // If this is the last update of the sequence, make sure we notify 284 // the listener with a null array so it knows we are done. 285 if(folderMessage == null) { 286 if(param == null) { 287 listener.mailConnectionRequestComplete(type, new Object[] { folder, null }); 288 } 289 else { 290 listener.mailConnectionRequestComplete(type, new Object[] { folder, null, param }); 291 } 279 292 } 280 293 } -
trunk/LogicMail/src/org/logicprobe/LogicMail/mail/imap/ImapClient.java
r562 r564 624 624 callback.folderMessageUpdate(result[i]); 625 625 } 626 callback.folderMessageUpdate(null); 626 627 } 627 628 else { … … 644 645 uids[i] = ((ImapMessageToken)messageTokens[i]).getImapMessageUid(); 645 646 } 647 646 648 imapProtocol.executeFetchEnvelopeUid(uids, new ImapFetchEnvelopeCallback(callback), progressHandler); 647 649 } -
trunk/LogicMail/src/org/logicprobe/LogicMail/mail/pop/PopClient.java
r562 r564 36 36 import java.util.Hashtable; 37 37 38 import net.rim.device.api.util.Arrays; 39 38 40 import org.logicprobe.LogicMail.conf.AccountConfig; 39 41 import org.logicprobe.LogicMail.conf.ConnectionConfig; … … 389 391 indices[i] = ((PopMessageToken)messageTokens[i]).getMessageIndex(); 390 392 } 393 Arrays.sort(indices, 0, indices.length); 394 395 if(!globalConfig.getDispOrder()) { 396 int[] reverseIndices = new int[indices.length]; 397 for(int i=0; i<indices.length; i++) { 398 reverseIndices[indices.length - i - 1] = indices[i]; 399 } 400 indices = reverseIndices; 401 } 391 402 392 403 getFolderMessagesImpl(indices, false, callback, progressHandler); … … 398 409 String uid; 399 410 MessageEnvelope env; 400 int preCount;401 int postCount = connection.getBytesReceived();402 411 for(int i=0; i<indices.length; i++) { 403 preCount = postCount;404 412 if(!flagsOnly) { 405 413 headerText = popProtocol.executeTop(indices[i], 0); … … 413 421 new PopMessageToken(indices[i], uid), 414 422 env, indices[i], uid.hashCode()); 415 postCount = connection.getBytesReceived(); 416 if(progressHandler != null) { progressHandler.mailProgress(MailProgressHandler.TYPE_NETWORK, (postCount - preCount), -1); } 423 if(progressHandler != null) { progressHandler.mailProgress(MailProgressHandler.TYPE_PROCESSING, i + 1, indices.length); } 417 424 418 425 callback.folderMessageUpdate(folderMessage); -
trunk/LogicMail/src/org/logicprobe/LogicMail/model/AccountNode.java
r562 r564 81 81 private boolean shutdown = false; 82 82 private DataStore accountDataStore; 83 84 /** Map of folders to message to fetch for them. */ 85 private Hashtable folderMessagesToFetch; 86 83 87 private MailSenderListener mailSenderListener = new MailSenderListener() { 84 88 public void messageSent(MessageSentEvent e) { … … 106 110 this.rootMailbox = null; 107 111 this.pathMailboxMap = new Hashtable(); 112 this.folderMessagesToFetch = new Hashtable(); 108 113 109 114 this.mailStore = mailStore; … … 578 583 // be checked and additional actions requested accordingly. 579 584 //TODO: Implement flags-only logic 580 Vector messagesToFetch = null;581 585 for (int i = 0; i < folderMessages.length; i++) { 582 586 MessageNode messageNode = … … 591 595 } 592 596 else { 593 if(messagesToFetch == null) { messagesToFetch = new Vector(); } 594 messagesToFetch.addElement(folderMessages[i].getMessageToken()); 597 synchronized(folderMessagesToFetch) { 598 Vector messagesToFetch = (Vector)folderMessagesToFetch.get(e.getFolder()); 599 if(messagesToFetch == null) { 600 messagesToFetch = new Vector(); 601 folderMessagesToFetch.put(e.getFolder(), messagesToFetch); 602 } 603 messagesToFetch.addElement(folderMessages[i].getMessageToken()); 604 } 595 605 } 596 }597 if(messagesToFetch != null) {598 MessageToken[] fetchArray = new MessageToken[messagesToFetch.size()];599 messagesToFetch.copyInto(fetchArray);600 mailStore.requestFolderMessagesSet(e.getFolder(), fetchArray);601 606 } 602 607 } … … 612 617 addedMessages.copyInto(addedMessagesArray); 613 618 mailboxNode.addMessages(addedMessagesArray); 619 } 620 } 621 else { 622 synchronized(folderMessagesToFetch) { 623 Vector messagesToFetch = (Vector)folderMessagesToFetch.remove(e.getFolder()); 624 if(messagesToFetch != null) { 625 MessageToken[] fetchArray = new MessageToken[messagesToFetch.size()]; 626 messagesToFetch.copyInto(fetchArray); 627 mailStore.requestFolderMessagesSet(e.getFolder(), fetchArray); 628 } 614 629 } 615 630 } -
trunk/LogicMail/src/org/logicprobe/LogicMail/model/MailFileManager.java
r549 r564 216 216 } 217 217 218 public void readMessageNodes(MailboxNode mailboxNode, MessageNodeCallback callback) throws IOException { 219 if(cacheUrl == null) { callback.messageNodeUpdated(null); } 220 221 FileConnection fileConnection = getMailboxFileConnection(mailboxNode); 222 String mailboxUrl = fileConnection.getURL(); 223 Enumeration e = fileConnection.list(MSG_FILTER, false); 224 while(e.hasMoreElements()) { 225 String fileUrl = mailboxUrl + e.nextElement(); 226 MessageNode messageNode = readMessageNode(fileUrl); 227 if(messageNode != null) { 228 callback.messageNodeUpdated(messageNode); 229 } 230 } 231 fileConnection.close(); 232 callback.messageNodeUpdated(null); 233 } 234 218 235 public MessageNode readMessageNode(MailboxNode mailboxNode, MessageToken messageToken, boolean loadContent) throws IOException { 219 236 if(cacheUrl == null) { return null; } -
trunk/LogicMail/src/org/logicprobe/LogicMail/model/MailboxNode.java
r563 r564 72 72 private boolean hasAppend; 73 73 74 private Object fetchLock = new Object(); 75 private RefreshMessagesThread fetchThread; 76 74 77 public final static int TYPE_NORMAL = 0; 75 78 public final static int TYPE_INBOX = 1; … … 701 704 public void refreshMessages() { 702 705 // Fetch messages stored in the cache 703 if(parentAccount.getAccountConfig() != null) { 704 //TODO: Make this thread-safe and prevent redundant calls 705 Thread fetchThread = new Thread() { 706 public void run() { 707 try { 708 MessageNode[] messages = 709 MailFileManager.getInstance().readMessageNodes(MailboxNode.this); 710 MailboxNode.this.addMessages(messages); 711 } catch (IOException e) { 712 EventLogger.logEvent(AppInfo.GUID, 713 ("Unable to read messages from cache\r\n" 714 + e.getMessage()).getBytes(), 715 EventLogger.ERROR); 716 } 717 718 // Request flags and tokens for recent messages from the mail store 719 parentAccount.getMailStore().requestFolderMessagesRecent(folderTreeItem, true); 720 } 721 }; 722 fetchThread.start(); 723 } 724 else { 725 parentAccount.getMailStore().requestFolderMessagesRecent(this.folderTreeItem); 726 } 706 synchronized(fetchLock) { 707 if(parentAccount.getAccountConfig() != null) { 708 if(fetchThread == null || !fetchThread.isAlive()) { 709 fetchThread = new RefreshMessagesThread(); 710 fetchThread.run(); 711 } 712 } 713 else { 714 parentAccount.getMailStore().requestFolderMessagesRecent(this.folderTreeItem); 715 } 716 } 717 } 718 719 private class RefreshMessagesThread extends Thread implements MessageNodeCallback { 720 721 public RefreshMessagesThread() { 722 723 } 724 725 public void run() { 726 try { 727 MailFileManager.getInstance().readMessageNodes(MailboxNode.this, this); 728 } catch (IOException e) { 729 EventLogger.logEvent(AppInfo.GUID, 730 ("Unable to read messages from cache\r\n" 731 + e.getMessage()).getBytes(), 732 EventLogger.ERROR); 733 } 734 } 735 736 public void messageNodeUpdated(MessageNode messageNode) { 737 if(messageNode != null) { 738 MailboxNode.this.addMessage(messageNode); 739 } 740 else { 741 // Request flags and tokens for recent messages from the mail store 742 parentAccount.getMailStore().requestFolderMessagesRecent(folderTreeItem, true); 743 } 744 } 727 745 } 728 746 -
trunk/LogicMailTests/src/org/logicprobe/LogicMail/mail/NetworkMailStoreTest.java
r562 r564 213 213 assertNotNull(event); 214 214 assertEquals("INBOX", event.getFolder().getName()); 215 assertNotNull(event.getMessages());216 215 217 // Collect folder messages within the event218 216 FolderMessage[] messages = event.getMessages(); 219 for(int j=0; j<messages.length; j++) { 220 folderMessagesAvailable.addElement(messages[j]); 217 if(i < eventCount - 1) { 218 assertNotNull(messages); 219 220 // Collect folder messages within the event 221 for(int j=0; j<messages.length; j++) { 222 folderMessagesAvailable.addElement(messages[j]); 223 } 221 224 } 222 225 }
Note: See TracChangeset
for help on using the changeset viewer.
