Monotone-Parent: 78c0405a3665172ccb21ec34bba08331cc479f71

Monotone-Revision: e70a6a4e35fcf0aacec5ec5ef392c0c8e6bb4e31

Monotone-Author: wsourdeau@inverse.ca
Monotone-Date: 2012-08-21T20:36:32
Monotone-Branch: ca.inverse.sogo
This commit is contained in:
Wolfgang Sourdeau
2012-08-21 20:36:32 +00:00
parent 4f9e0f9963
commit e86f5ff841
3 changed files with 37 additions and 35 deletions

View File

@@ -1,3 +1,13 @@
2012-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* OpenChange/MAPIStoreGCSFolder.m
(-setChangeKey:forMessageWithKey:): removed useless method.
(-updateVersionsForMessageWithKey:withChangeKey:): set the change
key provided by the client as member of the predecessor
changelist, but never as the actual change key for the object.
This hopefully fixes the issue where Outlook deletes objects that
have a different change list than what they expect.
2012-08-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* OpenChange/MAPIStoreCalendarMessage.m

View File

@@ -45,11 +45,8 @@
withChangeKey: (NSData *) newChangeKey;
- (NSNumber *) lastModifiedFromMessageChangeNumber: (NSNumber *) changeNum;
- (NSNumber *) changeNumberForMessageWithKey: (NSString *) messageKey;
- (NSData *) changeKeyForMessageWithKey: (NSString *) messageKey;
- (NSData *) predecessorChangeListForMessageWithKey: (NSString *) messageKey;
- (void) setChangeKey: (NSData *) changeKey
forMessageWithKey: (NSString *) messageKey;
- (NSArray *) activeUserRoles;

View File

@@ -261,6 +261,7 @@ static Class NSNumberK;
- (void) _setChangeKey: (NSData *) changeKey
forMessageEntry: (NSMutableDictionary *) messageEntry
inChangeListOnly: (BOOL) inChangeListOnly
{
struct XID *xid;
NSString *guid;
@@ -273,12 +274,15 @@ static Class NSNumberK;
globCnt = [NSData dataWithBytes: xid->Data length: xid->Size];
talloc_free (xid);
/* 1. set change key association */
changeKeyDict = [NSDictionary dictionaryWithObjectsAndKeys:
guid, @"GUID",
globCnt, @"LocalId",
nil];
[messageEntry setObject: changeKeyDict forKey: @"ChangeKey"];
if (!inChangeListOnly)
{
/* 1. set change key association */
changeKeyDict = [NSDictionary dictionaryWithObjectsAndKeys:
guid, @"GUID",
globCnt, @"LocalId",
nil];
[messageEntry setObject: changeKeyDict forKey: @"ChangeKey"];
}
/* 2. append/update predecessor change list */
changeList = [messageEntry objectForKey: @"PredecessorChangeList"];
@@ -286,11 +290,10 @@ static Class NSNumberK;
{
changeList = [NSMutableDictionary new];
[messageEntry setObject: changeList
forKey: @"PredecessorChangeList"];
forKey: @"PredecessorChangeList"];
[changeList release];
}
[changeList setObject: globCnt
forKey: guid];
[changeList setObject: globCnt forKey: guid];
}
- (EOQualifier *) componentQualifier
@@ -433,7 +436,8 @@ static Class NSNumberK;
[messageEntry setObject: changeNumber forKey: @"version"];
changeKey = [self getReplicaKeyFromGlobCnt: newChangeNum >> 16];
[self _setChangeKey: changeKey forMessageEntry: messageEntry];
[self _setChangeKey: changeKey forMessageEntry: messageEntry
inChangeListOnly: NO];
[mapping setObject: cLastModified forKey: changeNumber];
@@ -464,10 +468,21 @@ static Class NSNumberK;
- (void) updateVersionsForMessageWithKey: (NSString *) messageKey
withChangeKey: (NSData *) newChangeKey
{
[self synchroniseCache];
NSMutableDictionary *messages, *messageEntry;
[self synchroniseCache];
if (newChangeKey)
[self setChangeKey: newChangeKey forMessageWithKey: messageKey];
{
messages = [[versionsMessage properties] objectForKey: @"Messages"];
messageEntry = [messages objectForKey: messageKey];
if (!messageEntry)
[NSException raise: @"MAPIStoreIOException"
format: @"no version record found for message '%@'",
messageKey];
[self _setChangeKey: newChangeKey forMessageEntry: messageEntry
inChangeListOnly: YES];
[versionsMessage save];
}
}
- (NSNumber *) lastModifiedFromMessageChangeNumber: (NSNumber *) changeNum
@@ -493,26 +508,6 @@ static Class NSNumberK;
return changeNumber;
}
- (void) setChangeKey: (NSData *) changeKey
forMessageWithKey: (NSString *) messageKey
{
NSMutableDictionary *messages;
NSMutableDictionary *messageEntry;
messages = [[versionsMessage properties] objectForKey: @"Messages"];
messageEntry = [messages objectForKey: messageKey];
if (!messageEntry)
{
[self synchroniseCache];
messageEntry = [messages objectForKey: messageKey];
if (!messageEntry)
abort ();
}
[self _setChangeKey: changeKey forMessageEntry: messageEntry];
[versionsMessage save];
}
- (NSData *) changeKeyForMessageWithKey: (NSString *) messageKey
{
NSDictionary *messages, *changeKeyDict;