IMAP: fix regression on imap uid restore
git-svn-id: http://svn.code.sf.net/p/davmail/code/trunk@1131 3d1905a2-6b24-0410-a738-b14d5a86fcbd
This commit is contained in:
parent
6ed9845497
commit
e1b12c63ef
|
@ -541,6 +541,7 @@ public abstract class ExchangeSession {
|
|||
protected static final Set<String> IMAP_MESSAGE_ATTRIBUTES = new HashSet<String>();
|
||||
|
||||
static {
|
||||
IMAP_MESSAGE_ATTRIBUTES.add("permanenturl");
|
||||
IMAP_MESSAGE_ATTRIBUTES.add("uid");
|
||||
IMAP_MESSAGE_ATTRIBUTES.add("messageSize");
|
||||
IMAP_MESSAGE_ATTRIBUTES.add("imapUid");
|
||||
|
@ -1108,7 +1109,7 @@ public abstract class ExchangeSession {
|
|||
/**
|
||||
* Permanent uid (PR_SEARCH_KEY) to IMAP UID map.
|
||||
*/
|
||||
private final HashMap<String, Long> uidToImapUidMap = new HashMap<String, Long>();
|
||||
private final HashMap<String, Long> permanentUrlToImapUidMap = new HashMap<String, Long>();
|
||||
|
||||
/**
|
||||
* Get IMAP folder flags.
|
||||
|
@ -1156,16 +1157,16 @@ public abstract class ExchangeSession {
|
|||
protected void fixUids(MessageList messages) {
|
||||
boolean sortNeeded = false;
|
||||
for (Message message : messages) {
|
||||
if (uidToImapUidMap.containsKey(message.getUid())) {
|
||||
long previousUid = uidToImapUidMap.get(message.getUid());
|
||||
if (permanentUrlToImapUidMap.containsKey(message.permanentUrl)) {
|
||||
long previousUid = permanentUrlToImapUidMap.get(message.permanentUrl);
|
||||
if (message.getImapUid() != previousUid) {
|
||||
LOGGER.debug("Restoring IMAP uid " + message.getImapUid() + " -> " + previousUid + " for message uid " + message.getUid());
|
||||
LOGGER.debug("Restoring IMAP uid " + message.getImapUid() + " -> " + previousUid + " for message " + message.permanentUrl);
|
||||
message.setImapUid(previousUid);
|
||||
sortNeeded = true;
|
||||
}
|
||||
} else {
|
||||
// add message to uid map
|
||||
uidToImapUidMap.put(message.getUid(), message.getImapUid());
|
||||
permanentUrlToImapUidMap.put(message.permanentUrl, message.getImapUid());
|
||||
}
|
||||
}
|
||||
if (sortNeeded) {
|
||||
|
|
|
@ -238,6 +238,8 @@ public class EwsExchangeSession extends ExchangeSession {
|
|||
// get item id
|
||||
message.itemId = new ItemId(response.get("ItemId"), response.get("ChangeKey"));
|
||||
|
||||
message.permanentUrl = response.get(Field.get("permanenturl").getResponseName());
|
||||
|
||||
message.size = response.getInt(Field.get("messageSize").getResponseName());
|
||||
message.uid = response.get(Field.get("uid").getResponseName());
|
||||
message.imapUid = response.getLong(Field.get("imapUid").getResponseName());
|
||||
|
|
|
@ -28,6 +28,8 @@ public class Field {
|
|||
protected static final Map<String, FieldURI> FIELD_MAP = new HashMap<String, FieldURI>();
|
||||
|
||||
static {
|
||||
FIELD_MAP.put("permanenturl", new ExtendedFieldURI(0x670E, ExtendedFieldURI.PropertyType.String)); //PR_FLAT_URL_NAME
|
||||
|
||||
FIELD_MAP.put("uid", new ExtendedFieldURI(0x300b, ExtendedFieldURI.PropertyType.Binary));
|
||||
FIELD_MAP.put("messageFlags", new ExtendedFieldURI(0x0e07, ExtendedFieldURI.PropertyType.Integer));//PR_MESSAGE_FLAGS
|
||||
FIELD_MAP.put("imapUid", new ExtendedFieldURI(0x0e23, ExtendedFieldURI.PropertyType.Integer));
|
||||
|
|
|
@ -51,11 +51,24 @@ public class TestExchangeSessionMessage extends AbstractExchangeSessionTestCase
|
|||
assertFalse(message.draft);
|
||||
assertTrue(message.size > 0);
|
||||
assertFalse(message.deleted);
|
||||
// TODO
|
||||
assertFalse(message.read);
|
||||
assertNotNull(message.date);
|
||||
}
|
||||
|
||||
public void testFlagMessage() throws IOException, MessagingException {
|
||||
ExchangeSession.Folder testFolder = session.getFolder("testfolder");
|
||||
testFolder.loadMessages();
|
||||
HashMap<String,String> properties = new HashMap<String,String>();
|
||||
properties.put("flagged", "2");
|
||||
session.updateMessage(message, properties);
|
||||
|
||||
// refresh folder
|
||||
testFolder.loadMessages();
|
||||
assertNotNull(testFolder.get(0));
|
||||
assertTrue(testFolder.get(0).flagged);
|
||||
assertEquals(message.getImapUid(), testFolder.get(0).getImapUid());
|
||||
}
|
||||
|
||||
public void testGetContent() throws IOException, MessagingException {
|
||||
byte[] content = session.getContent(message);
|
||||
assertNotNull(content);
|
||||
|
|
Loading…
Reference in New Issue