Changeset 562
- Timestamp:
- 12/28/09 12:45:23 (2 years ago)
- Location:
- trunk
- Files:
-
- 1 added
- 19 edited
-
LogicMail/src/org/logicprobe/LogicMail/conf/GlobalConfig.java (modified) (2 diffs)
-
LogicMail/src/org/logicprobe/LogicMail/mail/FolderMessageCallback.java (added)
-
LogicMail/src/org/logicprobe/LogicMail/mail/IncomingMailClient.java (modified) (4 diffs)
-
LogicMail/src/org/logicprobe/LogicMail/mail/IncomingMailConnectionHandler.java (modified) (4 diffs)
-
LogicMail/src/org/logicprobe/LogicMail/mail/LocalMessageToken.java (modified) (1 diff)
-
LogicMail/src/org/logicprobe/LogicMail/mail/MessageToken.java (modified) (1 diff)
-
LogicMail/src/org/logicprobe/LogicMail/mail/imap/ImapClient.java (modified) (7 diffs)
-
LogicMail/src/org/logicprobe/LogicMail/mail/imap/ImapMessageToken.java (modified) (1 diff)
-
LogicMail/src/org/logicprobe/LogicMail/mail/imap/ImapProtocol.java (modified) (10 diffs)
-
LogicMail/src/org/logicprobe/LogicMail/mail/pop/PopClient.java (modified) (6 diffs)
-
LogicMail/src/org/logicprobe/LogicMail/mail/pop/PopMessageToken.java (modified) (5 diffs)
-
LogicMail/src/org/logicprobe/LogicMail/model/AccountNode.java (modified) (1 diff)
-
LogicMail/src/org/logicprobe/LogicMail/model/MessageNode.java (modified) (1 diff)
-
LogicMail/src/org/logicprobe/LogicMail/model/MessageNodeWriter.java (modified) (2 diffs)
-
LogicMail/src/org/logicprobe/LogicMail/model/OutboxMailboxNode.java (modified) (1 diff)
-
LogicMail/src/org/logicprobe/LogicMail/ui/MessageScreen.java (modified) (1 diff)
-
LogicMailTests/src/org/logicprobe/LogicMail/mail/NetworkMailStoreTest.java (modified) (6 diffs)
-
LogicMailTests/src/org/logicprobe/LogicMail/mail/imap/ImapProtocolTest.java (modified) (6 diffs)
-
LogicMailTests/src/org/logicprobe/LogicMail/model/MailboxNodeTest.java (modified) (1 diff)
-
LogicMailTests/src/org/logicprobe/LogicMail/model/MessageNodeWriterTest.java (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LogicMail/src/org/logicprobe/LogicMail/conf/GlobalConfig.java
r561 r562 80 80 81 81 /** Root URL for local file storage */ 82 private String localDataLocation ;82 private String localDataLocation = ""; 83 83 84 84 /** Mode for WiFi support */ … … 129 129 this.hideDeletedMsg = true; 130 130 this.localHostname = ""; 131 this.localDataLocation = null;131 this.localDataLocation = ""; 132 132 } 133 133 -
trunk/LogicMail/src/org/logicprobe/LogicMail/mail/IncomingMailClient.java
r529 r562 34 34 import java.io.IOException; 35 35 import org.logicprobe.LogicMail.conf.AccountConfig; 36 import org.logicprobe.LogicMail.message.FolderMessage;37 36 import org.logicprobe.LogicMail.message.Message; 38 37 import org.logicprobe.LogicMail.message.MessageFlags; … … 191 190 * @param firstIndex Index of the first message 192 191 * @param lastIndex Index of the last message 193 * @param progressHandler the progress handler194 * @ return List of message envelopes195 * 196 * @throws IOException on I/O errors 197 * @throws MailException on protocol errors 198 */ 199 FolderMessage[] getFolderMessages(int firstIndex, int lastIndex, MailProgressHandler progressHandler)192 * @param callback The callback to provide notifications as individual folder messages are loaded 193 * @param progressHandler the progress handler 194 * 195 * @throws IOException on I/O errors 196 * @throws MailException on protocol errors 197 */ 198 void getFolderMessages(int firstIndex, int lastIndex, FolderMessageCallback callback, MailProgressHandler progressHandler) 200 199 throws IOException, MailException; 201 200 … … 205 204 * 206 205 * @param messageTokens Tokens of the messages 207 * @param progressHandler the progress handler208 * @ return List of message envelopes209 * 210 * @throws IOException on I/O errors 211 * @throws MailException on protocol errors 212 */ 213 FolderMessage[] getFolderMessages(MessageToken[] messageTokens, MailProgressHandler progressHandler)206 * @param callback The callback to provide notifications as individual folder messages are loaded 207 * @param progressHandler the progress handler 208 * 209 * @throws IOException on I/O errors 210 * @throws MailException on protocol errors 211 */ 212 void getFolderMessages(MessageToken[] messageTokens, FolderMessageCallback callback, MailProgressHandler progressHandler) 214 213 throws IOException, MailException; 215 214 … … 226 225 * 227 226 * @param flagsOnly If true, only tokens and flags will be fetched 228 * @param progressHandler the progress handler 229 * 230 * @return List of message envelopes 231 * 232 * @throws IOException on I/O errors 233 * @throws MailException on protocol errors 234 */ 235 FolderMessage[] getNewFolderMessages(boolean flagsOnly, MailProgressHandler progressHandler) throws IOException, MailException; 227 * @param callback The callback to provide notifications as individual folder messages are loaded 228 * @param progressHandler the progress handler 229 * 230 * @throws IOException on I/O errors 231 * @throws MailException on protocol errors 232 */ 233 void getNewFolderMessages(boolean flagsOnly, FolderMessageCallback callback, MailProgressHandler progressHandler) throws IOException, MailException; 236 234 237 235 /** -
trunk/LogicMail/src/org/logicprobe/LogicMail/mail/IncomingMailConnectionHandler.java
r529 r562 223 223 } 224 224 225 private static class GetFolderMessageCallback implements FolderMessageCallback { 226 private int maxCount; 227 private int type; 228 private FolderTreeItem folder; 229 private MailConnectionHandlerListener listener; 230 private Object param; 231 private FolderMessage[] folderMessages; 232 private int count; 233 234 public GetFolderMessageCallback(int maxCount, int type, FolderTreeItem folder, MailConnectionHandlerListener listener) { 235 this(maxCount, type, folder, listener, null); 236 } 237 238 public GetFolderMessageCallback(int maxCount, int type, FolderTreeItem folder, MailConnectionHandlerListener listener, Object param) { 239 this.maxCount = maxCount; 240 this.type = type; 241 this.folder = folder; 242 this.listener = listener; 243 this.param = param; 244 this.count = 0; 245 246 } 247 248 public void folderMessageUpdate(FolderMessage folderMessage) { 249 FolderMessage[] resultMessages = null; 250 synchronized(this) { 251 if(folderMessage != null) { 252 if(count == 0) { 253 folderMessages = new FolderMessage[maxCount]; 254 } 255 folderMessages[count++] = folderMessage; 256 } 257 258 if(count == maxCount) { 259 resultMessages = folderMessages; 260 folderMessages = null; 261 count = 0; 262 } 263 else if(folderMessage == null) { 264 resultMessages = new FolderMessage[count]; 265 for(int i=0; i<count; i++) { 266 resultMessages[i] = folderMessages[i]; 267 } 268 folderMessages = null; 269 count = 0; 270 } 271 } 272 273 if(resultMessages != null && listener != null) { 274 if(param == null) { 275 listener.mailConnectionRequestComplete(type, new Object[] { folder, resultMessages }); 276 } 277 else { 278 listener.mailConnectionRequestComplete(type, new Object[] { folder, resultMessages, param }); 279 } 280 } 281 } 282 }; 283 284 225 285 private void handleRequestFolderMessagesRange(FolderTreeItem folder, int firstIndex, int lastIndex) throws IOException, MailException { 226 286 String message = resources.getString(LogicMailResource.MAILCONNECTION_REQUEST_FOLDER_MESSAGES); … … 228 288 checkActiveFolder(folder); 229 289 230 FolderMessage[] messages = incomingClient.getFolderMessages(firstIndex, lastIndex, getProgressHandler(message)); 231 232 MailConnectionHandlerListener listener = getListener(); 233 if(messages != null && messages.length > 0 && listener != null) { 234 listener.mailConnectionRequestComplete(REQUEST_FOLDER_MESSAGES_RANGE, new Object[] { folder, messages }); 235 } 290 incomingClient.getFolderMessages( 291 firstIndex, lastIndex, 292 new GetFolderMessageCallback( 293 getFolderMessageUpdateFrequency(), 294 REQUEST_FOLDER_MESSAGES_RANGE, 295 folder, 296 getListener()), 297 getProgressHandler(message)); 236 298 } 237 299 … … 241 303 checkActiveFolder(folder); 242 304 243 FolderMessage[] messages = incomingClient.getFolderMessages(messageTokens, getProgressHandler(message)); 244 245 MailConnectionHandlerListener listener = getListener(); 246 if(messages != null && messages.length > 0 && listener != null) { 247 listener.mailConnectionRequestComplete(REQUEST_FOLDER_MESSAGES_SET, new Object[] { folder, messages }); 248 } 305 incomingClient.getFolderMessages( 306 messageTokens, 307 new GetFolderMessageCallback( 308 getFolderMessageUpdateFrequency(), 309 REQUEST_FOLDER_MESSAGES_SET, 310 folder, 311 getListener()), 312 getProgressHandler(message)); 249 313 } 250 314 … … 254 318 checkActiveFolder(folder); 255 319 256 FolderMessage[] messages = incomingClient.getNewFolderMessages(flagsOnly, getProgressHandler(message)); 257 258 MailConnectionHandlerListener listener = getListener(); 259 if(messages != null && messages.length > 0 && listener != null) { 260 listener.mailConnectionRequestComplete(REQUEST_FOLDER_MESSAGES_RECENT, new Object[] { folder, messages, new Boolean(flagsOnly) }); 261 } 320 incomingClient.getNewFolderMessages( 321 flagsOnly, 322 new GetFolderMessageCallback( 323 getFolderMessageUpdateFrequency(), 324 REQUEST_FOLDER_MESSAGES_RECENT, 325 folder, 326 getListener(), 327 new Boolean(flagsOnly)), 328 getProgressHandler(message)); 329 } 330 331 private int getFolderMessageUpdateFrequency() { 332 // Replace this with a more general method: 333 int frequency; 334 if(incomingClient instanceof org.logicprobe.LogicMail.mail.imap.ImapClient) { 335 frequency = 5; 336 } 337 else if(incomingClient instanceof org.logicprobe.LogicMail.mail.pop.PopClient) { 338 frequency = 2; 339 } 340 else { 341 frequency = 10; 342 } 343 return frequency; 262 344 } 263 345 -
trunk/LogicMail/src/org/logicprobe/LogicMail/mail/LocalMessageToken.java
r529 r562 158 158 return buf.toString(); 159 159 } 160 161 /* (non-Javadoc) 162 * @see org.logicprobe.LogicMail.mail.MessageToken#updateToken(org.logicprobe.LogicMail.mail.MessageToken) 163 */ 164 public void updateToken(MessageToken messageToken) { 165 // Local tokens are complete and only have immutable data 166 } 167 168 /* (non-Javadoc) 169 * @see org.logicprobe.LogicMail.mail.MessageToken#isLoadable() 170 */ 171 public boolean isLoadable() { 172 return true; 173 } 160 174 } -
trunk/LogicMail/src/org/logicprobe/LogicMail/mail/MessageToken.java
r529 r562 65 65 */ 66 66 boolean containedWithin(FolderTreeItem folderTreeItem); 67 68 /** 69 * Update this message token with information from the provided 70 * message token. This is meant to update volatile token fields 71 * that are not serialized or checked with {@link #equals(Object)}. 72 * 73 * @param messageToken other token to update from 74 */ 75 void updateToken(MessageToken messageToken); 76 77 /** 78 * Gets whether this token is sufficiently complete to load a message 79 * from a mail store. Messages not loadable from a mail store should 80 * still be loadable from local cache. 81 * 82 * @return True if loadable, false otherwise 83 */ 84 boolean isLoadable(); 67 85 } -
trunk/LogicMail/src/org/logicprobe/LogicMail/mail/imap/ImapClient.java
r529 r562 44 44 import org.logicprobe.LogicMail.conf.MailSettingsEvent; 45 45 import org.logicprobe.LogicMail.conf.MailSettingsListener; 46 import org.logicprobe.LogicMail.mail.FolderMessageCallback; 46 47 import org.logicprobe.LogicMail.mail.FolderTreeItem; 47 48 import org.logicprobe.LogicMail.mail.IncomingMailClient; … … 49 50 import org.logicprobe.LogicMail.mail.MailProgressHandler; 50 51 import org.logicprobe.LogicMail.mail.MessageToken; 52 import org.logicprobe.LogicMail.mail.imap.ImapProtocol.FetchEnvelopeResponse; 51 53 import org.logicprobe.LogicMail.message.FolderMessage; 52 54 import org.logicprobe.LogicMail.message.Message; … … 582 584 583 585 /* (non-Javadoc) 584 * @see org.logicprobe.LogicMail.mail.IncomingMailClient#getFolderMessages(int, int, org.logicprobe.LogicMail.mail.MailProgressHandler) 585 */ 586 public FolderMessage[] getFolderMessages(int firstIndex, int lastIndex, MailProgressHandler progressHandler) throws IOException, MailException { 587 return getFolderMessages(firstIndex, lastIndex, false, progressHandler); 588 } 589 590 private FolderMessage[] getFolderMessages(int firstIndex, int lastIndex, boolean flagsOnly, MailProgressHandler progressHandler) throws IOException, MailException { 586 * @see org.logicprobe.LogicMail.mail.IncomingMailClient#getFolderMessages(int, int, org.logicprobe.LogicMail.mail.FolderMessageCallback, org.logicprobe.LogicMail.mail.MailProgressHandler) 587 */ 588 public void getFolderMessages(int firstIndex, int lastIndex, FolderMessageCallback callback, MailProgressHandler progressHandler) throws IOException, MailException { 589 getFolderMessages(firstIndex, lastIndex, false, callback, progressHandler); 590 } 591 592 private class ImapFetchEnvelopeCallback implements ImapProtocol.FetchEnvelopeCallback { 593 private FolderMessageCallback callback; 594 public ImapFetchEnvelopeCallback(FolderMessageCallback callback) { 595 this.callback = callback; 596 } 597 public void responseAvailable(FetchEnvelopeResponse response) { 598 if(response != null) { 599 callback.folderMessageUpdate(ImapClient.this.prepareFolderMessagesEnvelope(response)); 600 } 601 else { 602 callback.folderMessageUpdate(null); 603 } 604 } 605 } 606 607 private void getFolderMessages(int firstIndex, int lastIndex, boolean flagsOnly, FolderMessageCallback callback, MailProgressHandler progressHandler) throws IOException, MailException { 591 608 // Sanity check 592 609 if(activeMailbox == null) { … … 596 613 // Make sure we do not FETCH an empty folder 597 614 if(firstIndex > lastIndex) { 598 return new FolderMessage[0]; 615 callback.folderMessageUpdate(null); 616 return; 599 617 } 600 618 601 FolderMessage[] result;602 619 if(flagsOnly) { 603 620 ImapProtocol.FetchFlagsResponse[] flagsResponse = 604 621 imapProtocol.executeFetchFlags(firstIndex, lastIndex, progressHandler); 605 result = prepareFolderMessagesFlags(flagsResponse); 622 FolderMessage[] result = prepareFolderMessagesFlags(flagsResponse); 623 for(int i=0; i<result.length; i++) { 624 callback.folderMessageUpdate(result[i]); 625 } 606 626 } 607 627 else { 608 ImapProtocol.FetchEnvelopeResponse[] envResponse = 609 imapProtocol.executeFetchEnvelope(firstIndex, lastIndex, progressHandler); 610 result = prepareFolderMessagesEnvelope(envResponse); 611 } 612 613 return result; 628 imapProtocol.executeFetchEnvelope(firstIndex, lastIndex, new ImapFetchEnvelopeCallback(callback), progressHandler); 629 } 614 630 } 615 631 616 632 /* (non-Javadoc) 617 * @see org.logicprobe.LogicMail.mail.IncomingMailClient#getFolderMessages(org.logicprobe.LogicMail.mail.MessageToken[], org.logicprobe.LogicMail.mail. MailProgressHandler)633 * @see org.logicprobe.LogicMail.mail.IncomingMailClient#getFolderMessages(org.logicprobe.LogicMail.mail.MessageToken[], org.logicprobe.LogicMail.mail.FolderMessageCallback, org.logicprobe.LogicMail.mail.MailProgressHandler) 618 634 */ 619 public FolderMessage[] getFolderMessages(MessageToken[] messageTokens, MailProgressHandler progressHandler)635 public void getFolderMessages(MessageToken[] messageTokens, FolderMessageCallback callback, MailProgressHandler progressHandler) 620 636 throws IOException, MailException { 621 // TODO Auto-generated method stub622 637 // Sanity check 623 638 if(activeMailbox == null) { … … 629 644 uids[i] = ((ImapMessageToken)messageTokens[i]).getImapMessageUid(); 630 645 } 631 ImapProtocol.FetchEnvelopeResponse[] envResponse = 632 imapProtocol.executeFetchEnvelopeUid(uids, progressHandler); 633 634 return prepareFolderMessagesEnvelope(envResponse); 646 imapProtocol.executeFetchEnvelopeUid(uids, new ImapFetchEnvelopeCallback(callback), progressHandler); 635 647 } 636 648 637 /* (non-Javadoc) 638 * @see org.logicprobe.LogicMail.mail.IncomingMailClient#getNewFolderMessages(boolean, org.logicprobe.LogicMail.mail.MailProgressHandler) 639 */ 640 public FolderMessage[] getNewFolderMessages(boolean flagsOnly, MailProgressHandler progressHandler) throws IOException, MailException { 649 private class ImapNewFetchEnvelopeCallback implements ImapProtocol.FetchEnvelopeCallback { 650 private FolderMessageCallback callback; 651 private FolderMessage lastFolderMessage; 652 public ImapNewFetchEnvelopeCallback(FolderMessageCallback callback) { 653 this.callback = callback; 654 } 655 public void responseAvailable(FetchEnvelopeResponse response) { 656 if(response != null) { 657 FolderMessage folderMessage = ImapClient.this.prepareFolderMessagesEnvelope(response); 658 callback.folderMessageUpdate(folderMessage); 659 lastFolderMessage = folderMessage; 660 } 661 else { 662 if(lastFolderMessage != null) { 663 int uidNext = lastFolderMessage.getUid() + 1; 664 ((ImapProtocol.SelectResponse)knownMailboxes.get(activeMailbox)).uidNext = uidNext; 665 } 666 callback.folderMessageUpdate(null); 667 } 668 } 669 } 670 671 /* (non-Javadoc) 672 * @see org.logicprobe.LogicMail.mail.IncomingMailClient#getNewFolderMessages(boolean, org.logicprobe.LogicMail.mail.FolderMessageCallback, org.logicprobe.LogicMail.mail.MailProgressHandler) 673 */ 674 public void getNewFolderMessages(boolean flagsOnly, FolderMessageCallback callback, MailProgressHandler progressHandler) throws IOException, MailException { 641 675 // Sanity check 642 676 if(activeMailbox == null) { … … 644 678 } 645 679 646 FolderMessage[] result;647 680 if(!seenMailboxes.containsKey(activeMailbox)) { 648 681 int count = MailSettings.getInstance().getGlobalConfig().getRetMsgCount(); 649 682 int msgCount = activeMailbox.getMsgCount(); 650 683 int firstIndex = Math.max(1, msgCount - count); 651 result = getFolderMessages(firstIndex, activeMailbox.getMsgCount(), flagsOnly, progressHandler);684 getFolderMessages(firstIndex, activeMailbox.getMsgCount(), flagsOnly, callback, progressHandler); 652 685 seenMailboxes.put(activeMailbox, new Object()); 653 686 } 654 687 else { 688 FolderMessage[] result; 655 689 int uidNext = ((ImapProtocol.SelectResponse)knownMailboxes.get(activeMailbox)).uidNext; 656 690 if(flagsOnly) { … … 658 692 imapProtocol.executeFetchFlagsUid(uidNext, progressHandler); 659 693 result = prepareFolderMessagesFlags(flagsResponse); 694 if(result.length > 0) { 695 uidNext = result[result.length-1].getUid() + 1; 696 ((ImapProtocol.SelectResponse)knownMailboxes.get(activeMailbox)).uidNext = uidNext; 697 } 698 for(int i=0; i<result.length; i++) { 699 callback.folderMessageUpdate(result[i]); 700 } 660 701 } 661 702 else { 662 ImapProtocol.FetchEnvelopeResponse[] envResponse = 663 imapProtocol.executeFetchEnvelopeUid(uidNext, progressHandler); 664 result = prepareFolderMessagesEnvelope(envResponse); 703 imapProtocol.executeFetchEnvelopeUid(uidNext, new ImapNewFetchEnvelopeCallback(callback), progressHandler); 665 704 } 666 667 if(result.length > 0) { 668 uidNext = result[result.length-1].getUid() + 1; 669 ((ImapProtocol.SelectResponse)knownMailboxes.get(activeMailbox)).uidNext = uidNext; 670 } 671 } 672 return result; 673 } 674 675 private FolderMessage[] prepareFolderMessagesEnvelope(ImapProtocol.FetchEnvelopeResponse[] response) { 676 FolderMessage[] folderMessages = new FolderMessage[response.length]; 677 for(int i=0;i<response.length;i++) { 678 folderMessages[i] = new FolderMessage( 679 new ImapMessageToken(activeMailbox.getPath(), response[i].uid), 680 response[i].envelope, 681 response[i].index, 682 response[i].uid); 683 folderMessages[i].setSeen(response[i].flags.seen); 684 folderMessages[i].setAnswered(response[i].flags.answered); 685 folderMessages[i].setDeleted(response[i].flags.deleted); 686 folderMessages[i].setRecent(response[i].flags.recent); 687 folderMessages[i].setFlagged(response[i].flags.flagged); 688 folderMessages[i].setDraft(response[i].flags.draft); 689 folderMessages[i].setJunk(response[i].flags.junk); 690 folderMessages[i].setStructure(createMessagePartTree(response[i].structure)); 691 } 692 return folderMessages; 705 } 706 } 707 708 private FolderMessage prepareFolderMessagesEnvelope(ImapProtocol.FetchEnvelopeResponse response) { 709 FolderMessage folderMessage = new FolderMessage( 710 new ImapMessageToken(activeMailbox.getPath(), response.uid), 711 response.envelope, 712 response.index, 713 response.uid); 714 folderMessage.setSeen(response.flags.seen); 715 folderMessage.setAnswered(response.flags.answered); 716 folderMessage.setDeleted(response.flags.deleted); 717 folderMessage.setRecent(response.flags.recent); 718 folderMessage.setFlagged(response.flags.flagged); 719 folderMessage.setDraft(response.flags.draft); 720 folderMessage.setJunk(response.flags.junk); 721 folderMessage.setStructure(createMessagePartTree(response.structure)); 722 return folderMessage; 693 723 } 694 724 -
trunk/LogicMail/src/org/logicprobe/LogicMail/mail/imap/ImapMessageToken.java
r529 r562 167 167 return buf.toString(); 168 168 } 169 170 /* (non-Javadoc) 171 * @see org.logicprobe.LogicMail.mail.MessageToken#updateToken(org.logicprobe.LogicMail.mail.MessageToken) 172 */ 173 public void updateToken(MessageToken messageToken) { 174 // IMAP tokens are complete and only have immutable data 175 } 176 177 /* (non-Javadoc) 178 * @see org.logicprobe.LogicMail.mail.MessageToken#isLoadable() 179 */ 180 public boolean isLoadable() { 181 return true; 182 } 169 183 } -
trunk/LogicMail/src/org/logicprobe/LogicMail/mail/imap/ImapProtocol.java
r529 r562 565 565 * @param firstIndex Index of the first message 566 566 * @param lastIndex Index of the last message 567 * @param callback Callback for asynchronous notification of new envelopes 567 568 * @param progressHandler the progress handler 568 * @return Array of FetchEnvelopeResponse objects 569 */ 570 public FetchEnvelopeResponse[] executeFetchEnvelope( 569 */ 570 public void executeFetchEnvelope( 571 571 int firstIndex, 572 572 int lastIndex, 573 FetchEnvelopeCallback callback, 573 574 MailProgressHandler progressHandler) throws IOException, MailException { 574 575 if (EventLogger.getMinimumLevel() >= EventLogger.DEBUG_INFO) { … … 582 583 Integer.toString(lastIndex) + " (FLAGS UID ENVELOPE BODYSTRUCTURE)", progressHandler); 583 584 584 return prepareFetchEnvelopeResponse(rawList, progressHandler);585 prepareFetchEnvelopeResponse(rawList, callback, progressHandler); 585 586 } 586 587 … … 588 589 * Execute the "UID FETCH (FLAGS UID ENVELOPE BODYSTRUCTURE)" command 589 590 * @param uidNext Unique ID of the next message 591 * @param callback Callback for asynchronous notification of new envelopes 590 592 * @param progressHandler the progress handler 591 * @return Array of FetchEnvelopeResponse objects 592 */ 593 public FetchEnvelopeResponse[] executeFetchEnvelopeUid(int uidNext, MailProgressHandler progressHandler) 593 */ 594 public void executeFetchEnvelopeUid(int uidNext, FetchEnvelopeCallback callback, MailProgressHandler progressHandler) 594 595 throws IOException, MailException { 595 596 if (EventLogger.getMinimumLevel() >= EventLogger.DEBUG_INFO) { … … 602 603 Integer.toString(uidNext) + ":*" + " (FLAGS UID ENVELOPE BODYSTRUCTURE)", progressHandler); 603 604 604 return prepareFetchEnvelopeResponse(rawList, progressHandler);605 prepareFetchEnvelopeResponse(rawList, callback, progressHandler); 605 606 } 606 607 … … 608 609 * Execute the "UID FETCH (FLAGS UID ENVELOPE BODYSTRUCTURE)" command 609 610 * @param uids Set of unique IDs for the messages to fetch 611 * @param callback Callback for asynchronous notification of new envelopes 610 612 * @param progressHandler the progress handler 611 * @return Array of FetchEnvelopeResponse objects 612 */ 613 public FetchEnvelopeResponse[] executeFetchEnvelopeUid(int[] uids, MailProgressHandler progressHandler) 613 */ 614 public void executeFetchEnvelopeUid(int[] uids, FetchEnvelopeCallback callback, MailProgressHandler progressHandler) 614 615 throws IOException, MailException { 615 if(uids.length == 0) { return new FetchEnvelopeResponse[0]; }616 if(uids.length == 0) { callback.responseAvailable(null); return; } 616 617 StringBuffer buf = new StringBuffer(); 617 618 for(int i=0; i<uids.length - 1; i++) { … … 631 632 uidList + " (FLAGS UID ENVELOPE BODYSTRUCTURE)", progressHandler); 632 633 633 return prepareFetchEnvelopeResponse(rawList, progressHandler);634 } 635 636 private FetchEnvelopeResponse[]prepareFetchEnvelopeResponse(637 String[] rawList, MailProgressHandler progressHandler) throws IOException, MailException {634 prepareFetchEnvelopeResponse(rawList, callback, progressHandler); 635 } 636 637 private void prepareFetchEnvelopeResponse( 638 String[] rawList, FetchEnvelopeCallback callback, MailProgressHandler progressHandler) throws IOException, MailException { 638 639 639 640 if(progressHandler != null) { progressHandler.mailProgress(MailProgressHandler.TYPE_PROCESSING, 0, -1); } … … 643 644 Vector rawList2 = prepareCleanFetchResponse(rawList); 644 645 645 Vector envResponses = new Vector();646 646 int size = rawList2.size(); 647 647 648 648 if(progressHandler != null) { progressHandler.mailProgress(MailProgressHandler.TYPE_PROCESSING, 0, size); } 649 649 for (int i = 0; i < size; i++) { 650 FetchEnvelopeResponse envRespItem = null; 650 651 try { 651 652 String rawText = (String) rawList2.elementAt(i); … … 662 663 } 663 664 664 FetchEnvelopeResponseenvRespItem = new FetchEnvelopeResponse();665 envRespItem = new FetchEnvelopeResponse(); 665 666 envRespItem.flags = null; 666 667 … … 716 717 envRespItem.envelope = env; 717 718 envRespItem.structure = structure; 718 envResponses.addElement(envRespItem);719 719 } catch (Exception exp) { 720 720 System.err.println("Parse error: " + exp); 721 envRespItem = null; 722 } 723 if(envRespItem != null) { 724 callback.responseAvailable(envRespItem); 721 725 } 722 726 if(progressHandler != null) { progressHandler.mailProgress(MailProgressHandler.TYPE_PROCESSING, i, size); } 723 727 } 724 728 725 FetchEnvelopeResponse[] result = new FetchEnvelopeResponse[envResponses.size()]; 726 envResponses.copyInto(result); 727 if(progressHandler != null) { progressHandler.mailProgress(MailProgressHandler.TYPE_PROCESSING, size, size); } 728 729 return result; 729 callback.responseAvailable(null); 730 730 } 731 731 … … 1527 1527 1528 1528 /** 1529 * Callback for fetching envelopes. 1530 */ 1531 public static interface FetchEnvelopeCallback { 1532 void responseAvailable(FetchEnvelopeResponse response); 1533 } 1534 1535 /** 1529 1536 * Container for a LIST response 1530 1537 */ -
trunk/LogicMail/src/org/logicprobe/LogicMail/mail/pop/PopClient.java
r529 r562 43 43 import org.logicprobe.LogicMail.conf.MailSettingsListener; 44 44 import org.logicprobe.LogicMail.conf.PopConfig; 45 import org.logicprobe.LogicMail.mail.FolderMessageCallback; 45 46 import org.logicprobe.LogicMail.mail.FolderTreeItem; 46 47 import org.logicprobe.LogicMail.mail.IncomingMailClient; … … 64 65 */ 65 66 public class PopClient implements IncomingMailClient { 67 private GlobalConfig globalConfig; 66 68 private PopConfig accountConfig; 67 69 private Connection connection; … … 86 88 /** Creates a new instance of PopClient */ 87 89 public PopClient(GlobalConfig globalConfig, PopConfig accountConfig) { 90 this.globalConfig = globalConfig; 88 91 this.accountConfig = accountConfig; 89 92 connection = new Connection( … … 332 335 333 336 /* (non-Javadoc) 334 * @see org.logicprobe.LogicMail.mail.IncomingMailClient#getFolderMessages(int, int, org.logicprobe.LogicMail.mail.MailProgressHandler) 335 */ 336 public FolderMessage[] getFolderMessages(int firstIndex, int lastIndex, MailProgressHandler progressHandler) throws IOException, MailException { 337 return getFolderMessages(firstIndex, lastIndex, false, progressHandler); 338 } 339 340 private FolderMessage[] getFolderMessages(int firstIndex, int lastIndex, boolean flagsOnly, MailProgressHandler progressHandler) throws IOException, MailException { 341 int[] indices = new int[(lastIndex - firstIndex)+1]; 342 for(int i=firstIndex; i<=lastIndex; i++) { 343 indices[i] = i; 344 } 345 346 return getFolderMessagesImpl(indices, flagsOnly, progressHandler); 337 * @see org.logicprobe.LogicMail.mail.IncomingMailClient#getFolderMessages(int, int, org.logicprobe.LogicMail.mail.FolderMessageCallback, org.logicprobe.LogicMail.mail.MailProgressHandler) 338 */ 339 public void getFolderMessages(int firstIndex, int lastIndex, FolderMessageCallback callback, MailProgressHandler progressHandler) throws IOException, MailException { 340 getFolderMessages(firstIndex, lastIndex, false, callback, progressHandler); 341 } 342 343 /** 344 * Gets the folder messages from the mail server for a range of indices. 345 * In order to provide a more natural ordering of the results, messages 346 * are requested in an ordering based on the {@link GlobalConfig#getDispOrder()} 347 * value. 348 * 349 * @param firstIndex the first index of the range 350 * @param lastIndex the last index of the range 351 * @param flagsOnly whether to request only flags 352 * @param callback the callback for result notification 353 * @param progressHandler the progress handler 354 * 355 * @throws IOException Signals that an I/O exception has occurred. 356 * @throws MailException the mail exception 357 */ 358 private void getFolderMessages(int firstIndex, int lastIndex, boolean flagsOnly, FolderMessageCallback callback, MailProgressHandler progressHandler) throws IOException, MailException { 359 int[] indices = new int[(lastIndex - firstIndex)+1]; 360 361 if(globalConfig.getDispOrder()) { 362 int currentIndex = firstIndex; 363 for(int i=0; i<indices.length; i++) { 364 indices[i] = currentIndex++; 365 } 366 } 367 else { 368 int currentIndex = lastIndex; 369 for(int i=0; i<indices.length; i++) { 370 indices[i] = currentIndex--; 371 } 372 } 373 374 getFolderMessagesImpl(indices, flagsOnly, callback, progressHandler); 347 375 } 348 376 349 377 /* (non-Javadoc) 350 * @see org.logicprobe.LogicMail.mail.IncomingMailClient#getFolderMessages(org.logicprobe.LogicMail.mail.MessageToken[], org.logicprobe.LogicMail.mail. MailProgressHandler)378 * @see org.logicprobe.LogicMail.mail.IncomingMailClient#getFolderMessages(org.logicprobe.LogicMail.mail.MessageToken[], org.logicprobe.LogicMail.mail.FolderMessageCallback, org.logicprobe.LogicMail.mail.MailProgressHandler) 351 379 */ 352 public FolderMessage[] getFolderMessages(MessageToken[] messageTokens, MailProgressHandler progressHandler)380 public void getFolderMessages(MessageToken[] messageTokens, FolderMessageCallback callback, MailProgressHandler progressHandler) 353 381 throws IOException, MailException { 354 382 // Since POP servers typically lock the mailbox while a client is connected, … … 362 390 } 363 391 364 return getFolderMessagesImpl(indices, false, progressHandler);365 } 366 367 private FolderMessage[] getFolderMessagesImpl(int[] indices, boolean flagsOnly, MailProgressHandler progressHandler)392 getFolderMessagesImpl(indices, false, callback, progressHandler); 393 } 394 395 private void getFolderMessagesImpl(int[] indices, boolean flagsOnly, FolderMessageCallback callback, MailProgressHandler progressHandler) 368 396 throws IOException, MailException { 369 FolderMessage[] folderMessages = new FolderMessage[indices.length];370 int index = 0;371 397 String[] headerText; 372 398 String uid; … … 375 401 int postCount = connection.getBytesReceived(); 376 402 for(int i=0; i<indices.length; i++) { 377 preCount = postCount;403 preCount = postCount; 378 404 if(!flagsOnly) { 379 headerText = popProtocol.executeTop(indices[i], 0);380 env = MailMessageParser.parseMessageEnvelope(headerText);381 }405 headerText = popProtocol.executeTop(indices[i], 0); 406 env = MailMessageParser.parseMessageEnvelope(headerText); 407 } 382 408 else { 383 env = null;409 env = null; 384 410 } 385 411 uid = popProtocol.executeUidl(indices[i]); 386 folderMessages[index++]= new FolderMessage(387 new PopMessageToken(indices[i], uid),388 env, indices[i], uid.hashCode());412 FolderMessage folderMessage = new FolderMessage( 413 new PopMessageToken(indices[i], uid), 414 env, indices[i], uid.hashCode()); 389 415 postCount = connection.getBytesReceived(); 390 416 if(progressHandler != null) { progressHandler.mailProgress(MailProgressHandler.TYPE_NETWORK, (postCount - preCount), -1); } 391 } 392 return folderMessages; 393 } 394 395 /* (non-Javadoc) 396 * @see org.logicprobe.LogicMail.mail.IncomingMailClient#getNewFolderMessages(boolean, org.logicprobe.LogicMail.mail.MailProgressHandler) 397 */ 398 public FolderMessage[] getNewFolderMessages(boolean flagsOnly, MailProgressHandler progressHandler) throws IOException, MailException { 417 418 callback.folderMessageUpdate(folderMessage); 419 } 420 callback.folderMessageUpdate(null); 421 } 422 423 /* (non-Javadoc) 424 * @see org.logicprobe.LogicMail.mail.IncomingMailClient#getNewFolderMessages(boolean, org.logicprobe.LogicMail.mail.FolderMessageCallback, org.logicprobe.LogicMail.mail.MailProgressHandler) 425 */ 426 public void getNewFolderMessages(boolean flagsOnly, FolderMessageCallback callback, MailProgressHandler progressHandler) throws IOException, MailException { 399 427 int count = MailSettings.getInstance().getGlobalConfig().getRetMsgCount(); 400 428 int msgCount = activeMailbox.getMsgCount(); 401 429 int firstIndex = Math.max(1, msgCount - count); 402 return getFolderMessages(firstIndex, activeMailbox.getMsgCount(), flagsOnly, progressHandler);430 getFolderMessages(firstIndex, activeMailbox.getMsgCount(), flagsOnly, callback, progressHandler); 403 431 } 404 432 -
trunk/LogicMail/src/org/logicprobe/LogicMail/mail/pop/PopMessageToken.java
r529 r562 55 55 56 56 /** Index of the message within the mailbox */ 57 private int messageIndex; 57 private int messageIndex = -1; 58 58 59 /** POP unique ID that identifies the message */ 59 60 private String messageUid; … … 125 126 public void serialize(DataOutput output) throws IOException { 126 127 output.writeLong(uniqueId); 128 output.writeUTF(messageUid); 127 129 } 128 130 … … 132 134 public void deserialize(DataInput input) throws IOException { 133 135 uniqueId = input.readLong(); 136 messageUid = input.readUTF(); 134 137 } 135 138 … … 138 141 */ 139 142 public boolean equals(Object obj) { 140 if(obj instanceof PopMessageToken) { 141 PopMessageToken rhs = (PopMessageToken)obj; 142 return (this.messageIndex == rhs.messageIndex && 143 this.messageUid.equals(rhs.messageUid)); 144 } 145 else { 146 return false; 147 } 143 if(obj instanceof PopMessageToken) { 144 PopMessageToken rhs = (PopMessageToken)obj; 145 return this.messageUid.equals(rhs.messageUid); 146 } 147 else { 148 return false; 149 } 148 150 } 149 151 150 152 /* (non-Javadoc) 151 153 * @see java.lang.Object#hashCode() 152 154 */ 153 155 public int hashCode() { 154 if(hashCode == -1) { 155 int hash = 7; 156 hash = 31 * hash + messageIndex; 157 hash = 31 * hash + (messageUid == null ? 0 : messageUid.hashCode()); 158 hashCode = hash; 159 } 160 return hashCode; 156 if(hashCode == -1) { 157 int result = 1; 158 result = 31 * result + ((messageUid == null) ? 0 : messageUid.hashCode()); 159 } 160 return hashCode; 161 161 } 162 162 … … 173 173 return buf.toString(); 174 174 } 175 176 public void updateToken(MessageToken messageToken) { 177 if(messageToken.equals(this)) { 178 PopMessageToken rhs = (PopMessageToken)messageToken; 179 this.messageIndex = rhs.messageIndex; 180 } 181 } 182 183 public boolean isLoadable() { 184 return messageIndex != -1; 185 } 175 186 } -
trunk/LogicMail/src/org/logicprobe/LogicMail/model/AccountNode.java
r532 r562 584 584 if(messageNode != null) { 585 585 messageNode.setFlags(MessageNode.convertMessageFlags(folderMessages[i].getFlags())); 586 587 // Update the token based on the token that came along 588 // with the flags. This will update any volatile state 589 // information, such as POP message indices 590 messageNode.getMessageToken().updateToken(folderMessages[i].getMessageToken()); 586 591 } 587 592 else { 588 593 if(messagesToFetch == null) { messagesToFetch = new Vector(); } 589 594 messagesToFetch.addElement(folderMessages[i].getMessageToken()); 590 System.err.println("-->Need to fetch: " + folderMessages[i].getMessageToken());591 595 } 592 596 } -
trunk/LogicMail/src/org/logicprobe/LogicMail/model/MessageNode.java
r532 r562 1100 1100 MessageNode tempNode = MailFileManager.getInstance().readMessageNode(parent, messageToken, true); 1101 1101 if(tempNode != null) { 1102 setMessageStructure(tempNode.getMessageStructure()); 1103 setMessageSource(tempNode.getMessageSource()); 1104 putMessageContent(tempNode.getAllMessageContent()); 1105 messageLoaded = true; 1102 MimeMessagePart messageStructure = tempNode.getMessageStructure(); 1103 MimeMessageContent[] messageContent = tempNode.getAllMessageContent(); 1104 1105 if(messageStructure != null && messageContent != null && messageContent.length > 0) { 1106 setMessageStructure(messageStructure); 1107 setMessageSource(tempNode.getMessageSource()); 1108 putMessageContent(messageContent); 1109 messageLoaded = true; 1110 } 1106 1111 } 1107 1112 } catch (IOException e) { -
trunk/LogicMail/src/org/logicprobe/LogicMail/model/MessageNodeWriter.java
r529 r562 160 160 SerializableHashtable table = new SerializableHashtable(); 161 161 table.put(HEADER_KEY_FLAGS, new Integer(messageNode.getFlags())); 162 table.put(HEADER_KEY_DATE, messageNode.getDate());163 table.put(HEADER_KEY_SUBJECT, messageNode.getSubject());162 putInTable(table, HEADER_KEY_DATE, messageNode.getDate()); 163 putInTable(table, HEADER_KEY_SUBJECT, messageNode.getSubject()); 164 164 table.put(HEADER_KEY_FROM, createAddressArray(messageNode.getFrom())); 165 165 table.put(HEADER_KEY_SENDER, createAddressArray(messageNode.getSender())); … … 168 168 table.put(HEADER_KEY_CC, createAddressArray(messageNode.getCc())); 169 169 table.put(HEADER_KEY_BCC, createAddressArray(messageNode.getBcc())); 170 table.put(HEADER_KEY_INREPLYTO, messageNode.getInReplyTo());171 table.put(HEADER_KEY_MESSAGEID, messageNode.getMessageId());170 putInTable(table, HEADER_KEY_INREPLYTO, messageNode.getInReplyTo()); 171 putInTable(table, HEADER_KEY_MESSAGEID, messageNode.getMessageId()); 172 172 return SerializationUtils.serializeClass(table); 173 } 174 175 /** 176 * Puts an item in the table, checking the value for null first. 177 * This is a shortcut to simplify methods that populate a table. 178 * 179 * @param table the table being populated 180 * @param key the item key 181 * @param value the item value 182 */ 183 private static void putInTable(SerializableHashtable table, Object key, Object value) { 184 if(value != null) { 185 table.put(key, value); 186 } 173 187 } 174 188 -
trunk/LogicMail/src/org/logicprobe/LogicMail/model/OutboxMailboxNode.java
r551 r562 235 235 // Empty because this special token is not intended to be serialized 236 236 } 237 238 public void updateToken(MessageToken messageToken) { 239 // Empty because this special token is not intended to be synchronized 240 } 241 242 public boolean isLoadable() { 243 return true; 244 } 237 245 } 238 246 } -
trunk/LogicMail/src/org/logicprobe/LogicMail/ui/MessageScreen.java
r506 r562 364 364 // Add a collapsed TreeField to show attachments, if any exist 365 365 MimeMessagePart[] attachmentParts = messageNode.getAttachmentParts(); 366 if(attachmentParts .length > 0) {366 if(attachmentParts != null && attachmentParts.length > 0) { 367 367 attachmentsTreeField = new TreeField(new TreeFieldCallback() { 368 368 public void drawTreeItem(TreeField treeField, Graphics graphics, int node, int y, int width, int indent) { -
trunk/LogicMailTests/src/org/logicprobe/LogicMail/mail/NetworkMailStoreTest.java
r551 r562 35 35 import java.io.DataOutput; 36 36 import java.io.IOException; 37 import java.util.Vector; 37 38 38 39 import org.logicprobe.LogicMail.conf.AccountConfig; … … 63 64 64 65 private FolderEvent eventFolderTreeUpdated; 65 private FolderMessagesEvent eventFolderMessagesAvailable;66 private Vector eventFolderMessagesAvailable = new Vector(); 66 67 private FolderEvent eventFolderStatusChanged; 67 68 private MessageEvent eventMessageAvailable; … … 90 91 instance.addFolderListener(new FolderListener() { 91 92 public void folderMessagesAvailable(FolderMessagesEvent e) { 92 eventFolderMessagesAvailable = e;93 eventFolderMessagesAvailable.addElement(e); 93 94 } 94 95 public void folderStatusChanged(FolderEvent e) { … … 199 200 instance.shutdown(true); 200 201 201 assertNotNull(eventFolderMessagesAvailable); 202 assertEquals("INBOX", eventFolderMessagesAvailable.getFolder().getName()); 203 assertNotNull(eventFolderMessagesAvailable.getMessages()); 204 assertEquals(2, eventFolderMessagesAvailable.getMessages().length); 205 assertEquals(52, eventFolderMessagesAvailable.getMessages()[0].getUid()); 206 assertEquals(53, eventFolderMessagesAvailable.getMessages()[1].getUid()); 202 // Cannot assume the number of events that will be fired, 203 // but only the number of folder messages contained within 204 // all of them put together. 205 206 int eventCount = eventFolderMessagesAvailable.size(); 207 assertTrue(eventCount > 0); 208 209 Vector folderMessagesAvailable = new Vector(); 210 for(int i=0; i<eventCount; i++) { 211 // Check general event properties 212 FolderMessagesEvent event = (FolderMessagesEvent)eventFolderMessagesAvailable.elementAt(i); 213 assertNotNull(event); 214 assertEquals("INBOX", event.getFolder().getName()); 215 assertNotNull(event.getMessages()); 216 217 // Collect folder messages within the event 218 FolderMessage[] messages = event.getMessages(); 219 for(int j=0; j<messages.length; j++) { 220 folderMessagesAvailable.addElement(messages[j]); 221 } 222 } 223 224 // Assert the folder messages 225 assertEquals(2, folderMessagesAvailable.size()); 226 227 FolderMessage folderMessage1 = (FolderMessage)folderMessagesAvailable.elementAt(0); 228 assertEquals(52, folderMessage1.getUid()); 229 230 FolderMessage folderMessage2 = (FolderMessage)folderMessagesAvailable.elementAt(1); 231 assertEquals(53, folderMessage2.getUid()); 207 232 } 208 233 … … 344 369 public FolderTreeItem getInboxFolder() { return inboxFolder; } 345 370 public FolderTreeItem getActiveFolder() { return activeFolder; } 346 public FolderMessage[] getFolderMessages(int firstIndex, int lastIndex, MailProgressHandler progressHandler) 347 throws IOException, MailException { return this.folderMessages; } 348 public FolderMessage[] getFolderMessages(MessageToken[] messageTokens, MailProgressHandler progressHandler) 349 throws IOException, MailException { return null; } 350 public FolderMessage[] getNewFolderMessages(boolean flagsOnly, MailProgressHandler progressHandler) 351 throws IOException, MailException { return null; } 371 public void getFolderMessages(int firstIndex, int lastIndex, FolderMessageCallback callback, MailProgressHandler progressHandler) 372 throws IOException, MailException { 373 for(int i=0; i<folderMessages.length; i++) { 374 callback.folderMessageUpdate(folderMessages[i]); 375 } 376 callback.folderMessageUpdate(null); 377 } 378 public void getFolderMessages(MessageToken[] messageTokens, FolderMessageCallback callback, MailProgressHandler progressHandler) 379 throws IOException, MailException { } 380 public void getNewFolderMessages(boolean flagsOnly, FolderMessageCallback callback, MailProgressHandler progressHandler) 381 throws IOException, MailException { } 352 382 public FolderTreeItem getFolderTree(MailProgressHandler progressHandler) throws IOException, MailException { return this.folderTree; } 353 383 public Message getMessage(MessageToken messageToken, MailProgressHandler progressHandler) … … 383 413 public boolean containedWithin(FolderTreeItem folderTreeItem) { return true; } 384 414 public String getMessageUid() { return null; } 415 public void updateToken(MessageToken messageToken) { } 416 public boolean isLoadable() { return true; } 385 417 } 386 418 } -
trunk/LogicMailTests/src/org/logicprobe/LogicMail/mail/imap/ImapProtocolTest.java
r471 r562 45 45 import java.util.Vector; 46 46 47 48 47 /** 49 48 * Unit test for ImapProtocol … … 346 345 fail("Exception thrown during test: " + t.toString()); 347 346 t.printStackTrace(); 347 } 348 } 349 350 private static class ShimCallback implements ImapProtocol.FetchEnvelopeCallback { 351 private Vector responses = new Vector(); 352 353 public void responseAvailable(ImapProtocol.FetchEnvelopeResponse response) { 354 if(response != null) { 355 responses.addElement(response); 356 } 357 } 358 359 public ImapProtocol.FetchEnvelopeResponse[] getResponses() { 360 ImapProtocol.FetchEnvelopeResponse[] result = new ImapProtocol.FetchEnvelopeResponse[responses.size()]; 361 responses.copyInto(result); 362 return result; 348 363 } 349 364 } … … 364 379 }); 365 380 366 ImapProtocol.FetchEnvelopeResponse[] result = instance.executeFetchEnvelope(1, 1, null); 381 ShimCallback shim = new ShimCallback(); 382 instance.executeFetchEnvelope(1, 1, shim, null); 383 ImapProtocol.FetchEnvelopeResponse[] result = shim.getResponses(); 384 367 385 assertNotNull(result); 368 386 assertEquals(1, result.length); … … 448 466 }); 449 467 450 ImapProtocol.FetchEnvelopeResponse[] result = instance.executeFetchEnvelope(1, 1, null); 468 ShimCallback shim = new ShimCallback(); 469 instance.executeFetchEnvelope(1, 1, shim, null); 470 ImapProtocol.FetchEnvelopeResponse[] result = shim.getResponses(); 471 451 472 assertNotNull(result); 452 473 assertEquals(1, result.length); … … 532 553 }); 533 554 534 ImapProtocol.FetchEnvelopeResponse[] result = instance.executeFetchEnvelope(1, 1, null); 555 ShimCallback shim = new ShimCallback(); 556 instance.executeFetchEnvelope(1, 1, shim, null); 557 ImapProtocol.FetchEnvelopeResponse[] result = shim.getResponses(); 558 535 559 assertNotNull(result); 536 560 assertEquals(1, result.length); … … 619 643 }); 620 644 621 ImapProtocol.FetchEnvelopeResponse[] result = instance.executeFetchEnvelope(1, 1, null); 645 ShimCallback shim = new ShimCallback(); 646 instance.executeFetchEnvelope(1, 1, shim, null); 647 ImapProtocol.FetchEnvelopeResponse[] result = shim.getResponses(); 648 622 649 assertNotNull(result); 623 650 assertEquals(1, result.length); -
trunk/LogicMailTests/src/org/logicprobe/LogicMail/model/MailboxNodeTest.java
r538 r562 120 120 public boolean containedWithin(FolderTreeItem folderTreeItem) { return true; } 121 121 public String getMessageUid() { return null; } 122 public void updateToken(MessageToken messageToken) { } 123 public boolean isLoadable() { return true; } 122 124 } 123 125 } -
trunk/LogicMailTests/src/org/logicprobe/LogicMail/model/MessageNodeWriterTest.java
r538 r562 224 224 return "42"; 225 225 } 226 227 public void updateToken(MessageToken messageToken) { } 228 public boolean isLoadable() { return true; } 226 229 } 227 230
Note: See TracChangeset
for help on using the changeset viewer.
