Changeset 532
- Timestamp:
- 11/09/09 23:56:19 (2 years ago)
- Location:
- trunk/LogicMail/src/org/logicprobe/LogicMail
- Files:
-
- 6 edited
-
message/MimeMessageContent.java (modified) (1 diff)
-
message/MimeMessagePart.java (modified) (1 diff)
-
model/AccountNode.java (modified) (1 diff)
-
model/MailFileManager.java (modified) (3 diffs)
-
model/MailboxNode.java (modified) (1 diff)
-
model/MessageNode.java (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LogicMail/src/org/logicprobe/LogicMail/message/MimeMessageContent.java
r518 r532 121 121 putRawData(data); 122 122 } 123 124 /* (non-Javadoc) 125 * @see java.lang.Object#hashCode() 126 */ 127 public int hashCode() { 128 final int prime = 31; 129 int result = 1; 130 result = prime * result + (int) (uniqueId ^ (uniqueId >>> 32)); 131 return result; 132 } 133 134 /* (non-Javadoc) 135 * @see java.lang.Object#equals(java.lang.Object) 136 */ 137 public boolean equals(Object obj) { 138 if (this == obj) 139 return true; 140 if (obj == null) 141 return false; 142 if (getClass() != obj.getClass()) 143 return false; 144 MimeMessageContent other = (MimeMessageContent) obj; 145 if (uniqueId != other.uniqueId) 146 return false; 147 return true; 148 } 123 149 } -
trunk/LogicMail/src/org/logicprobe/LogicMail/message/MimeMessagePart.java
r518 r532 144 144 size = input.readInt(); 145 145 } 146 147 /* (non-Javadoc) 148 * @see java.lang.Object#hashCode() 149 */ 150 public int hashCode() { 151 final int prime = 31; 152 int result = 1; 153 result = prime * result + (int) (uniqueId ^ (uniqueId >>> 32)); 154 return result; 155 } 156 157 /* (non-Javadoc) 158 * @see java.lang.Object#equals(java.lang.Object) 159 */ 160 public boolean equals(Object obj) { 161 if (this == obj) 162 return true; 163 if (obj == null) 164 return false; 165 if (getClass() != obj.getClass()) 166 return false; 167 MimeMessagePart other = (MimeMessagePart) obj; 168 if (uniqueId != other.uniqueId) 169 return false; 170 return true; 171 } 146 172 } -
trunk/LogicMail/src/org/logicprobe/LogicMail/model/AccountNode.java
r529 r532 626 626 messageNode.setMessageSource(e.getMessageSource()); 627 627 messageNode.putMessageContent(e.getMessageContent()); 628 messageNode.commitMessage(); 628 629 break; 629 630 case MessageEvent.TYPE_CONTENT_LOADED: 630 631 messageNode.putMessageContent(e.getMessageContent()); 632 messageNode.commitMessage(); 631 633 break; 632 634 } -
trunk/LogicMail/src/org/logicprobe/LogicMail/model/MailFileManager.java
r530 r532 47 47 import org.logicprobe.LogicMail.conf.MailSettingsListener; 48 48 import org.logicprobe.LogicMail.mail.MessageToken; 49 import org.logicprobe.LogicMail.message.MimeMessageContent; 49 50 50 51 /** … … 209 210 } 210 211 212 public MessageNode readMessageNode(MailboxNode mailboxNode, MessageToken messageToken, boolean loadContent) throws IOException { 213 FileConnection fileConnection = getMailboxFileConnection(mailboxNode); 214 if(!fileConnection.exists()) { return null; } 215 216 String mailboxUrl = fileConnection.getURL(); 217 fileConnection.close(); 218 String fileUrl = 219 mailboxUrl 220 + messageToken.getMessageUid() 221 + MSG_SUFFIX; 222 MessageNode messageNode = readMessageNode(fileUrl); 223 if(loadContent) { 224 MimeMessageContent[] content = readMessageContent(mailboxNode, messageToken); 225 messageNode.putMessageContent(content); 226 } 227 return messageNode; 228 } 229 230 public MimeMessageContent[] readMessageContent(MailboxNode mailboxNode, MessageToken messageToken) throws IOException { 231 FileConnection fileConnection = getMailboxFileConnection(mailboxNode); 232 if(!fileConnection.exists()) { return null; } 233 234 String mailboxUrl = fileConnection.getURL(); 235 fileConnection.close(); 236 String fileUrl = 237 mailboxUrl 238 + messageToken.getMessageUid() 239 + MSG_SUFFIX; 240 MimeMessageContent[] messageContent = readMessageContent(fileUrl, messageToken); 241 242 return messageContent; 243 } 244 211 245 private FileConnection getMailboxFileConnection(MailboxNode mailboxNode) throws IOException { 212 246 // Build the account and mailbox UID strings … … 283 317 return result; 284 318 } 319 320 private MimeMessageContent[] readMessageContent(String fileUrl, MessageToken messageToken) { 321 FileConnection fileConnection = null; 322 Vector content = new Vector(); 323 try { 324 fileConnection = (FileConnection)Connector.open(fileUrl); 325 DataInputStream input = fileConnection.openDataInputStream(); 326 MessageNodeReader reader = new MessageNodeReader(input); 327 MessageToken tempToken = reader.read(); 328 if(messageToken.equals(tempToken)) { 329 while(reader.isContentAvailable()) { 330 content.addElement(reader.getNextContent()); 331 } 332 } 333 input.close(); 334 fileConnection.close(); 335 } catch (Exception e) { 336 EventLogger.logEvent(AppInfo.GUID, 337 ("Unable to read content: " + fileUrl 338 + "\r\n" + e.getMessage()).getBytes(), 339 EventLogger.ERROR); 340 } finally { 341 if(fileConnection != null) { 342 try { fileConnection.close(); } catch (Exception e) { } 343 } 344 } 345 MimeMessageContent[] result = new MimeMessageContent[content.size()]; 346 content.copyInto(result); 347 return result; 348 } 285 349 } -
trunk/LogicMail/src/org/logicprobe/LogicMail/model/MailboxNode.java
r529 r532 503 503 messageMap.put(message, message); 504 504 messageTokenMap.put(message.getMessageToken(), message); 505 if(!message.isCached() && message.isCachable()) { 506 try { 507 MailFileManager.getInstance().writeMessage(message); 508 message.setCached(true); 509 } catch (IOException e) { 510 System.err.println("-->Unable to write message: " + e.getMessage()); 511 e.printStackTrace(); 512 } catch (Throwable t) { 513 System.err.println("-->Unable to write message: " + t.getMessage()); 514 t.printStackTrace(); 515 } 516 } 505 message.commitMessage(); 517 506 return true; 518 507 } -
trunk/LogicMail/src/org/logicprobe/LogicMail/model/MessageNode.java
r529 r532 31 31 package org.logicprobe.LogicMail.model; 32 32 33 import java.io.IOException; 33 34 import java.util.Date; 34 35 import java.util.Enumeration; … … 36 37 import java.util.Vector; 37 38 39 import net.rim.device.api.system.EventLogger; 38 40 import net.rim.device.api.util.Arrays; 39 41 import net.rim.device.api.util.Comparator; … … 591 593 } 592 594 fireMessageStatusChanged(MessageNodeEvent.TYPE_CONTENT_LOADED); 595 } 596 597 /** 598 * Commits the current state of the message to the cache, if applicable. 599 * 600 * @return True if written to cache, false otherwise 601 */ 602 boolean commitMessage() { 603 boolean result = false; 604 synchronized(messageContent) { 605 if(!isCached() && isCachable()) { 606 try { 607 MailFileManager.getInstance().writeMessage(this); 608 setCached(true); 609 result = true; 610 } catch (IOException e) { 611 System.err.println("-->Unable to write message: " + e.getMessage()); 612 } catch (Throwable t) { 613 System.err.println("-->Unable to write message: " + t.getMessage()); 614 } 615 } 616 } 617 return result; 593 618 } 594 619 … … 1057 1082 displayableParts = new MimeMessagePart[partsToFetch.size()]; 1058 1083 partsToFetch.copyInto(displayableParts); 1059 mailStore.requestMessageParts(messageToken, displayableParts);1084 (new Thread(new RefreshMessagePartsRunnable(displayableParts))).start(); 1060 1085 result = true; 1061 1086 } 1062 1087 } 1063 1088 else { 1089 (new Thread(new RefreshMessageWholeRunnable())).start(); 1090 result = true; 1091 } 1092 } 1093 return result; 1094 } 1095 1096 private class RefreshMessageWholeRunnable implements Runnable { 1097 public void run() { 1098 boolean messageLoaded = false; 1099 try { 1100 MessageNode tempNode = MailFileManager.getInstance().readMessageNode(parent, messageToken, true); 1101 if(tempNode != null) { 1102 setMessageStructure(tempNode.getMessageStructure()); 1103 setMessageSource(tempNode.getMessageSource()); 1104 putMessageContent(tempNode.getAllMessageContent()); 1105 messageLoaded = true; 1106 } 1107 } catch (IOException e) { 1108 EventLogger.logEvent(AppInfo.GUID, 1109 ("Unable to read message from cache\r\n" 1110 + e.getMessage()).getBytes(), 1111 EventLogger.ERROR); 1112 } 1113 1114 if(!messageLoaded) { 1115 AbstractMailStore mailStore = parent.getParentAccount().getMailStore(); 1064 1116 mailStore.requestMessage(messageToken); 1065 result = true; 1066 } 1067 } 1068 return result; 1117 } 1118 } 1119 }; 1120 1121 private class RefreshMessagePartsRunnable implements Runnable { 1122 private MimeMessagePart[] displayableParts; 1123 RefreshMessagePartsRunnable(MimeMessagePart[] displayableParts) { 1124 this.displayableParts = displayableParts; 1125 } 1126 public void run() { 1127 Vector contentToLoad = new Vector(displayableParts.length); 1128 for(int i=0; i<displayableParts.length; i++) { 1129 contentToLoad.addElement(displayableParts[i]); 1130 } 1131 1132 try { 1133 MimeMessageContent[] content = MailFileManager.getInstance().readMessageContent(parent, messageToken); 1134 if(content != null) { 1135 putMessageContent(content); 1136 for(int i=0; i<content.length; i++) { 1137 contentToLoad.removeElement(content[i].getMessagePart()); 1138 } 1139 } 1140 } catch (IOException e) { 1141 EventLogger.logEvent(AppInfo.GUID, 1142 ("Unable to read message from cache\r\n" 1143 + e.getMessage()).getBytes(), 1144 EventLogger.ERROR); 1145 } 1146 1147 if(!contentToLoad.isEmpty()) { 1148 MimeMessagePart[] partsToLoad = new MimeMessagePart[contentToLoad.size()]; 1149 contentToLoad.copyInto(partsToLoad); 1150 AbstractMailStore mailStore = parent.getParentAccount().getMailStore(); 1151 mailStore.requestMessageParts(messageToken, partsToLoad); 1152 } 1153 } 1069 1154 } 1070 1155
Note: See TracChangeset
for help on using the changeset viewer.
