diff --git a/OpenChange/MAPIStoreAttachment.m b/OpenChange/MAPIStoreAttachment.m index 9e1551eb0..b7a2a75d4 100644 --- a/OpenChange/MAPIStoreAttachment.m +++ b/OpenChange/MAPIStoreAttachment.m @@ -28,6 +28,7 @@ #import "MAPIStoreMapping.h" #import "MAPIStoreMessage.h" #import "MAPIStoreTypes.h" +#import "NSObject+MAPIStore.h" #undef DEBUG #include @@ -90,6 +91,12 @@ return MAPISTORE_SUCCESS; } +- (int) getPidTagAccessLevel: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx +{ + return [self getLongZero: data inMemCtx: memCtx]; +} + - (int) openEmbeddedMessage: (MAPIStoreEmbeddedMessage **) messagePtr withMID: (uint64_t *) mid withMAPIStoreMsg: (struct mapistore_message **) mapistoreMsgPtr diff --git a/OpenChange/MAPIStoreCalendarAttachment.m b/OpenChange/MAPIStoreCalendarAttachment.m index a6d7848a2..d44a21e47 100644 --- a/OpenChange/MAPIStoreCalendarAttachment.m +++ b/OpenChange/MAPIStoreCalendarAttachment.m @@ -20,14 +20,22 @@ * Boston, MA 02111-1307, USA. */ +#import +#import #import +#import #import #import #import "iCalEvent+MAPIStore.h" -#import "MAPIStoreTypes.h" #import "MAPIStoreCalendarEmbeddedMessage.h" +#import "MAPIStoreTypes.h" +#import "MAPIStoreUserContext.h" +#import "NSDate+MAPIStore.h" +#import "NSData+MAPIStore.h" +#import "NSObject+MAPIStore.h" +#import "NSString+MAPIStore.h" #import "MAPIStoreCalendarAttachment.h" @@ -65,12 +73,16 @@ return event; } +- (NSString *) nameInContainer +{ + return [[event uniqueChildWithTag: @"recurrence-id"] + flattenedValuesForKey: @""]; +} + - (int) getPidTagAttachmentHidden: (void **) data inMemCtx: (TALLOC_CTX *) localMemCtx { - *data = MAPIBoolValue (localMemCtx, YES); - - return MAPISTORE_SUCCESS; + return [self getYes: data inMemCtx: localMemCtx]; } - (int) getPidTagAttachmentFlags: (void **) data @@ -81,6 +93,18 @@ return MAPISTORE_SUCCESS; } +- (int) getPidTagAttachmentLinkId: (void **) data + inMemCtx: (TALLOC_CTX *) localMemCtx +{ + return [self getLongZero: data inMemCtx: localMemCtx]; +} + +- (int) getPidTagAttachFlags: (void **) data + inMemCtx: (TALLOC_CTX *) localMemCtx +{ + return [self getLongZero: data inMemCtx: localMemCtx]; +} + - (int) getPidTagAttachMethod: (void **) data inMemCtx: (TALLOC_CTX *) localMemCtx { @@ -89,8 +113,28 @@ return MAPISTORE_SUCCESS; } -// case PidTagExceptionStartTime: -// case PidTagExceptionEndTime: +- (int) getPidTagAttachEncoding: (void **) data + inMemCtx: (TALLOC_CTX *) localMemCtx +{ + *data = [[NSData data] asBinaryInMemCtx: localMemCtx]; + + return MAPISTORE_SUCCESS; +} + +- (int) getPidTagDisplayName: (void **) data + inMemCtx: (TALLOC_CTX *) localMemCtx +{ + *data = "Untitled"; + + return MAPISTORE_SUCCESS; +} + +- (int) getPidTagAttachmentContactPhoto: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx +{ + return [self getNo: data inMemCtx: memCtx]; +} + // case PidTagExceptionReplaceTime: /* subclasses */ diff --git a/OpenChange/MAPIStoreCalendarEmbeddedMessage.m b/OpenChange/MAPIStoreCalendarEmbeddedMessage.m index 361b10d6f..7fa3274c3 100644 --- a/OpenChange/MAPIStoreCalendarEmbeddedMessage.m +++ b/OpenChange/MAPIStoreCalendarEmbeddedMessage.m @@ -98,6 +98,14 @@ return MAPISTORE_SUCCESS; } +- (int) getPidTagMessageFlags: (void **) data // TODO + inMemCtx: (TALLOC_CTX *) memCtx +{ + *data = MAPILongValue (memCtx, MSGFLAG_UNMODIFIED); + + return MAPISTORE_SUCCESS; +} + - (int) getPidTagProcessed: (void **) data inMemCtx: (TALLOC_CTX *) memCtx { return [self getYes: data inMemCtx: memCtx]; @@ -109,6 +117,44 @@ return [self getYes: data inMemCtx: memCtx]; } +/* discarded properties */ + +- (int) getPidLidAppointmentLastSequence: (void **) + inMemCtx: (TALLOC_CTX *) memCtx +{ + return MAPISTORE_ERR_NOT_FOUND; +} + +- (int) getPidLidMeetingWorkspaceUrl: (void **) + inMemCtx: (TALLOC_CTX *) memCtx +{ + return MAPISTORE_ERR_NOT_FOUND; +} + +- (int) getPidLidContacts: (void **) + inMemCtx: (TALLOC_CTX *) memCtx +{ + return MAPISTORE_ERR_NOT_FOUND; +} + +- (int) getPidTagSensitivity: (void **) + inMemCtx: (TALLOC_CTX *) memCtx +{ + return MAPISTORE_ERR_NOT_FOUND; +} + +- (int) getPidLidPrivate: (void **) + inMemCtx: (TALLOC_CTX *) memCtx +{ + return MAPISTORE_ERR_NOT_FOUND; +} + +- (int) getPidNameKeywords: (void **) + inMemCtx: (TALLOC_CTX *) memCtx +{ + return MAPISTORE_ERR_NOT_FOUND; +} + - (void) save { // (gdb) po embeddedMessage->properties diff --git a/OpenChange/MAPIStoreCalendarMessage.m b/OpenChange/MAPIStoreCalendarMessage.m index f4dd3fbd6..fddadedf9 100644 --- a/OpenChange/MAPIStoreCalendarMessage.m +++ b/OpenChange/MAPIStoreCalendarMessage.m @@ -122,6 +122,7 @@ NSString *newKey; MAPIStoreCalendarAttachment *attachment; NSUInteger aid; + iCalEvent *event; events = [calendar events]; max = [events count]; @@ -133,8 +134,10 @@ right AID is 0 from the start */ aid = count - 1; [attachment setAID: aid]; - [attachment setEvent: [events objectAtIndex: count]]; - newKey = [NSString stringWithFormat: @"%ul", aid]; + event = [events objectAtIndex: count]; + [attachment setEvent: event]; + newKey = [[event uniqueChildWithTag: @"recurrence-id"] + flattenedValuesForKey: @""]; [attachmentParts setObject: attachment forKey: newKey]; } } @@ -201,14 +204,6 @@ return MAPISTORE_SUCCESS; } -- (int) getPidLidAppointmentMessageClass: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx -{ - *data = talloc_strdup (memCtx, "IPM.Appointment"); - - return MAPISTORE_SUCCESS; -} - - (int) getPidLidSideEffects: (void **) data // TODO inMemCtx: (TALLOC_CTX *) memCtx { @@ -422,41 +417,28 @@ return rc; } -- (void) _updateAttachedEvent: (MAPIStoreCalendarAttachment *) attachment - withUID: (NSString *) uid -{ - iCalEvent *newEvent; - SOGoUser *activeUser; - - newEvent = [iCalEvent groupWithTag: @"vevent"]; - [calendar addToEvents: newEvent]; - activeUser = [[self context] activeUser]; - [newEvent setUid: uid]; - [newEvent updateFromMAPIProperties: [attachment properties] - inUserContext: [self userContext] - withActiveUser: activeUser]; -} - - (void) _updateAttachedEvents { - NSMutableArray *otherEvents; NSArray *allAttachments; NSUInteger count, max; - NSString *uid; - - /* cleanup all recurring events */ - otherEvents = [[calendar events] mutableCopy]; - [otherEvents removeObject: masterEvent]; - [calendar removeChildren: otherEvents]; - [otherEvents release]; + NSString *uid, *summary; + iCalEvent *event; + MAPIStoreCalendarAttachment *attachment; + /* ensure that all exception events have the same UID as the master */ uid = [masterEvent uid]; + summary = [masterEvent summary]; allAttachments = [attachmentParts allValues]; max = [allAttachments count]; for (count = 0; count < max; count++) - [self _updateAttachedEvent: [allAttachments objectAtIndex: count] - withUID: uid]; + { + attachment = [allAttachments objectAtIndex: count]; + event = [attachment event]; + if ([[event summary] length] == 0) + [event setSummary: summary]; + [event setUid: uid]; + } } - (void) save @@ -513,12 +495,17 @@ MAPIStoreCalendarAttachment *newAttachment; uint32_t newAid; NSString *newKey; + iCalEvent *newEvent; newAid = [[self attachmentKeys] count]; newAttachment = [MAPIStoreCalendarAttachment mapiStoreObjectInContainer: self]; [newAttachment setAID: newAid]; + newEvent = [iCalEvent groupWithTag: @"vevent"]; + [newAttachment setEvent: newEvent]; + [calendar addToEvents: newEvent]; + newKey = [NSString stringWithFormat: @"%ul", newAid]; [attachmentParts setObject: newAttachment forKey: newKey]; diff --git a/OpenChange/MAPIStoreEmbeddedMessage.m b/OpenChange/MAPIStoreEmbeddedMessage.m index 63f093095..2d408e1ba 100644 --- a/OpenChange/MAPIStoreEmbeddedMessage.m +++ b/OpenChange/MAPIStoreEmbeddedMessage.m @@ -23,6 +23,8 @@ #import #import "MAPIStoreAttachment.h" +#import "MAPIStoreFolder.h" +#import "NSObject+MAPIStore.h" #import "MAPIStoreEmbeddedMessage.h" @@ -37,6 +39,30 @@ static Class MAPIStoreAttachmentK; MAPIStoreAttachmentK = [MAPIStoreAttachment class]; } +- (uint64_t) objectId +{ + NSString *objectKey; + MAPIStoreMessage *grandParent; + + grandParent = (MAPIStoreMessage *) [container container]; + + /* FIXME: this is a hack */ + objectKey = [NSString stringWithFormat: @"%@/%@/as-message", + [grandParent nameInContainer], + [container nameInContainer], + [self nameInContainer]]; + + return [(MAPIStoreFolder *) [grandParent container] + idForObjectWithKey: objectKey]; +} + +- (int) getPidTagAccessLevel: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx +{ + return [self getLongZero: data inMemCtx: memCtx]; +} + +/* disabled properties */ - (int) getPidTagFolderId: (void **) data inMemCtx: (TALLOC_CTX *) memCtx { @@ -49,6 +75,12 @@ static Class MAPIStoreAttachmentK; return MAPISTORE_ERR_NOT_FOUND; } +- (int) getPidTagSourceKey: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx +{ + return MAPISTORE_ERR_NOT_FOUND; +} + - (int) getPidTagParentSourceKey: (void **) data inMemCtx: (TALLOC_CTX *) memCtx { @@ -61,6 +93,49 @@ static Class MAPIStoreAttachmentK; return MAPISTORE_ERR_NOT_FOUND; } +- (int) getPidTagInstID: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx +{ + return MAPISTORE_ERR_NOT_FOUND; +} + +- (int) getPidTagInstanceNum: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx +{ + return MAPISTORE_ERR_NOT_FOUND; +} + +- (int) getPidTagRowType: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx +{ + return MAPISTORE_ERR_NOT_FOUND; +} + +- (int) getPidTagDepth: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx +{ + return MAPISTORE_ERR_NOT_FOUND; +} + +- (int) getPidTagIconIndex: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx +{ + return MAPISTORE_ERR_NOT_FOUND; +} + +- (int) getPidTagGenerateExchangeViews: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx +{ + return MAPISTORE_ERR_NOT_FOUND; +} + +- (int) getPidTagOriginalMessageClass: (void **) dataa + inMemCtx: (TALLOC_CTX *) memCtx +{ + return MAPISTORE_ERR_NOT_FOUND; +} + +/* common methods */ - (NSString *) nameInContainer { return @"as-message";