propagate from branch 'ca.inverse.sogo.1_3_13' (head 9cacc7ba282ab08c75e02952d2f95a3f5bdf9010)
to branch 'ca.inverse.sogo' (head b3c1d7bab2024077b5c89d49297c6ceb5bc5aa0e) Monotone-Parent: 9cacc7ba282ab08c75e02952d2f95a3f5bdf9010 Monotone-Parent: b3c1d7bab2024077b5c89d49297c6ceb5bc5aa0e Monotone-Revision: 7fc3840c26038b9a53ac374b2e5b17f2ceeb99ab Monotone-Author: jraby@inverse.ca Monotone-Date: 2012-03-15T21:02:00 Monotone-Branch: ca.inverse.sogo
This commit is contained in:
commit
0f568210fc
163
ChangeLog
163
ChangeLog
|
@ -41,13 +41,99 @@
|
|||
* UI/WebServerResources/UIxAclEditor.js (addUser): fixed
|
||||
positioning of new user.
|
||||
|
||||
2012-03-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||||
|
||||
* OpenChange/MAPIStoreCalendarFolder.m
|
||||
(-getPidTagDefaultPostMessageClass:inMemCtx:): new getter.
|
||||
|
||||
* OpenChange/MAPIStoreFolder.m
|
||||
(_modifyPermissionEntryForUser:withRoles:isAddition:withACLFolder:):
|
||||
skip any modification when user is nil.
|
||||
(_usernameFromEntryId:): when the bytes array is nil or is empty,
|
||||
we return a nil username.
|
||||
(-modifyPermissions:withCount:andFlags:): ignore the presence of
|
||||
certain fields but not others depending on the requested
|
||||
modification.
|
||||
|
||||
2012-03-12 Francis Lachapelle <flachapelle@inverse.ca>
|
||||
|
||||
* SoObjects/SOGo/WORequest+SOGo.m (-isIPhoneAddressBookApp): catch
|
||||
the user agent of iOS 5.0.1 on iPad.
|
||||
|
||||
2012-03-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||||
|
||||
* OpenChange/MAPIStoreGCSFolder.m (-lastMessageModificationTime):
|
||||
force a synchronisation from here to ensure that the cache is
|
||||
up-to-date.
|
||||
|
||||
* OpenChange/MAPIStoreTypes.m (_reverseCN): fixed used of ull
|
||||
constants on 32 bit platforms.
|
||||
|
||||
* OpenChange/MAPIStoreGCSFolder.m (-componentQualifier): now
|
||||
provided by the parent class itself.
|
||||
(-contentComponentQualifier): new method that returns a qualifier
|
||||
that translated to "c_content like '%BEGIN:XXX%'". This is a hack
|
||||
to work-around the fact that calendar folders may content both
|
||||
vevent and vtodo and that c_component, being part of the quick
|
||||
table, is no longer available when a record is deleted.
|
||||
(-synchroniseCache): update version values for deleted records
|
||||
too, by taking into account the fact that their c_version value
|
||||
might still be 0. Make use of contentComponentQualifier above.
|
||||
Remove the modified records from the SOGoGCSFolder cache.
|
||||
(-getDeletedKeysFromChangeNumber:andCN:inTableType:): wander the
|
||||
list of deleted records and no longer increase the change number,
|
||||
as this is now done from "synchroniseCache". Also, handle the case
|
||||
were deleted records might already have been reported by comparing
|
||||
their change number to the one provided as parameter. The
|
||||
resulting change number is now guaranteed to be the highest one.
|
||||
(-component): new subclassable method that returns a string
|
||||
matching the folder's handled component.
|
||||
|
||||
* OpenChange/MAPIStoreFolder.m
|
||||
(-getPidTagLocalCommitTimeMax:inMemCtx:): returns
|
||||
MAPISTORE_ERR_NOT_FOUND if the resulting date is nil.
|
||||
|
||||
* OpenChange/MAPIStoreGCSMessage.m
|
||||
(-getPidTagPredecessorChangeList:inMemCtx:): when the list is
|
||||
missing, request a synchronisation from the container as the
|
||||
message might now have been synchronised yet...
|
||||
|
||||
* OpenChange/MAPIStoreTypes.m (MAPICNCompare): new function that
|
||||
returns an NSComparisonResult for two change numbers (reverse
|
||||
format).
|
||||
|
||||
2012-03-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||||
|
||||
* OpenChange/MAPIStoreCalendarMessage.m
|
||||
(-getPidLidAppointmentMessageClass:inMemCtx:): returns "IPM.Appointment".
|
||||
(-getPidLidSideEffects:inMemCtx:): returns the value specified in
|
||||
OXOCAL, section 2.2.2.2.
|
||||
(_fixupAppointmentObjectWithUID:): renamed method and made more
|
||||
generic, in order to handle the case where the response record has
|
||||
already been deleted.
|
||||
(-save): handle organizer and attendees more in compliance with
|
||||
the spec, in order to avoid ending up with an empty event when an
|
||||
invitation is being replied to. Of course, the documentation
|
||||
happened to be inexact with regardes to the value of
|
||||
"PidTagRecipientTrackStatus", which can be 5 even though the user
|
||||
replied with another value... Also, lowered the priority of
|
||||
SOGo-specific hacks for setting the organizer.
|
||||
|
||||
2012-03-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||||
|
||||
* OpenChange/MAPIStoreMailVolatileMessage.m (-submitWithFlags:):
|
||||
skip any message that is not of class "IPM.Note", in order to
|
||||
avoid sending invitations or responses.
|
||||
|
||||
* SoObjects/Mailer/SOGoMailFolder.m (-renameTo:): reset the
|
||||
imap4URL to nil and change the nameInContainer after a successful
|
||||
operation.
|
||||
|
||||
* OpenChange/MAPIStoreFolder.m
|
||||
(-getTable:andRowCount:tableType:andHandleId:): if the current
|
||||
user is not the owner of the folder, the permissions table cannot
|
||||
be open and MAPISTORE_ERR_DENIED is now returned.
|
||||
|
||||
* SoObjects/Contacts/NGVCard+SOGo.m
|
||||
(_setupEmailFieldsInLDIFRecord:): the value of card elements were
|
||||
not properly extracted when no email field were of type "home" or
|
||||
|
@ -59,6 +145,27 @@
|
|||
attributes of document.body before calling "hasClassName" to fix
|
||||
an error with IE9.
|
||||
|
||||
2012-03-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||||
|
||||
* OpenChange/MAPIStoreFolder.m: commented out key cache ivars
|
||||
(temporarily).
|
||||
|
||||
* OpenChange/MAPIStoreContext.m (-getRootFolder:inMemCtx:): do not
|
||||
store the looked up folders when they are not descendants of
|
||||
SOGoObject. Return MAPISTORE_ERR_NOT_FOUND when the looked up
|
||||
folder is owner by the current user and MAPISTORE_ERR_DENIED
|
||||
otherwise.
|
||||
|
||||
* OpenChange/MAPIStoreGCSFolder.m (-synchroniseCache): ensure that
|
||||
any record that are marked as updated are removed from the record
|
||||
cache of the corresponding SOGoGCSFolder instance.
|
||||
|
||||
* OpenChange/MAPIStoreFolder.m (-getPidTagSubFolders:inMemCtx:):
|
||||
invoke [self folderKeys] rather than the corresponding ivar.
|
||||
|
||||
* OpenChange/MAPIStoreTypes.m (NSObjectFromMAPISPropValue)
|
||||
(NSObjectFromSPropValue): treat PT_ERROR just as PT_LONG.
|
||||
|
||||
2012-03-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||||
|
||||
* SoObjects/Mailer/SOGoMailFolder.m
|
||||
|
@ -70,6 +177,37 @@
|
|||
where the home mail would be taken for both first and second email
|
||||
fields when no work mail was present.
|
||||
|
||||
2012-03-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||||
|
||||
* OpenChange/MAPIStoreAppointmentWrapper.m,,
|
||||
OpenChange/MAPIStoreAttachment.m,
|
||||
OpenChange/MAPIStoreCalendarAttachment.m,
|
||||
OpenChange/MAPIStoreCalendarMessage.m,
|
||||
OpenChange/MAPIStoreContactsAttachment.m,
|
||||
OpenChange/MAPIStoreContactsMessage.m,
|
||||
OpenChange/MAPIStoreFAIMessage.m,
|
||||
OpenChange/MAPIStoreFSMessageTable.m,
|
||||
OpenChange/MAPIStoreFolder.m, OpenChange/MAPIStoreFolderTable.m,
|
||||
OpenChange/MAPIStoreGCSFolder.m, OpenChange/MAPIStoreGCSMessage.m,
|
||||
OpenChange/MAPIStoreGCSMessageTable.m,
|
||||
OpenChange/MAPIStoreMailAttachment.m,
|
||||
OpenChange/MAPIStoreMailFolder.m,
|
||||
OpenChange/MAPIStoreMailMessage.m,
|
||||
OpenChange/MAPIStoreMailMessageTable.m,
|
||||
OpenChange/MAPIStoreMessage.m, OpenChange/MAPIStoreNotesMessage.m,
|
||||
OpenChange/MAPIStoreObject.m,
|
||||
OpenChange/MAPIStorePermissionsTable.m,
|
||||
OpenChange/MAPIStoreTasksMessage.m,
|
||||
OpenChange/MAPIStoreVolatileMessage.m: updated name of getters to
|
||||
reflect the new nomenclature.
|
||||
|
||||
* OpenChange/NSArray+MAPIStore.[hm]: updated to new name of
|
||||
handled structs.
|
||||
|
||||
* OpenChange/gen-property-selectors.py: adapted for new getters
|
||||
name, based on new property names. Added all new clashing
|
||||
properties to bannedProps.
|
||||
|
||||
2012-03-02 Jean Raby <jraby@inverse.ca>
|
||||
|
||||
* Scripts/sogo-backup.sh: new script to automate backups.
|
||||
|
@ -92,6 +230,31 @@
|
|||
* UI/WebServerResources/ContactsUI.js (appendAddressBook): assume
|
||||
that lists can be created in the new addressbook.
|
||||
|
||||
2012-02-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||||
|
||||
* OpenChange/MAPIStoreMailFolder.m
|
||||
(-moveCopyMessagesWithMIDs:andCount:fromFolder:withMIDs:andChangeKeys:wantCopy:):
|
||||
we sync the version cache with the folder in order to update the
|
||||
target message change keys, which was causing versioning issues
|
||||
with Outlook 2010.
|
||||
|
||||
* OpenChange/gen-property-selectors.py: bannedProps is now an
|
||||
array instead of a dict of "True" values.
|
||||
Added "PrOabContainerGuid" to bannedProps.
|
||||
|
||||
2012-02-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||||
|
||||
* OpenChange/MAPIStoreUserContext.m (-rootFolders:):
|
||||
-[NGImap4Connection enableExtensions:] now takes an array of
|
||||
strings rather than a single string argument.
|
||||
|
||||
2012-02-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||||
|
||||
* SoObjects/Mailer/SOGoMailFolder.m: ensure the imap connection is
|
||||
available before performing certain operations, otherwise return
|
||||
an exception. This only applies on methods that return an
|
||||
exception, others were left untouched.
|
||||
|
||||
2012-02-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||||
|
||||
* OpenChange/MAPIStoreMailContext.m
|
||||
|
|
|
@ -69,33 +69,33 @@ extern NSTimeZone *utcTZ;
|
|||
- (void) fillMessageData: (struct mapistore_message *) dataPtr
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
|
||||
- (int) getPrSenderEmailAddress: (void **) data
|
||||
- (int) getPidTagSenderEmailAddress: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPrSenderAddrtype: (void **) data
|
||||
- (int) getPidTagSenderAddressType: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPrSenderName: (void **) data
|
||||
- (int) getPidTagSenderName: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPrSenderEntryid: (void **) data
|
||||
- (int) getPidTagSenderEntryId: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
|
||||
- (int) getPrReceivedByAddrtype: (void **) data
|
||||
- (int) getPidTagReceivedByAddressType: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPrReceivedByEmailAddress: (void **) data
|
||||
- (int) getPidTagReceivedByEmailAddress: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPrReceivedByName: (void **) data
|
||||
- (int) getPidTagReceivedByName: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPrReceivedByEntryid: (void **) data
|
||||
- (int) getPidTagReceivedByEntryId: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
|
||||
- (int) getPrIconIndex: (void **) data
|
||||
- (int) getPidTagIconIndex: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPrOwnerApptId: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPidTagOwnerAppointmentId: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPidLidMeetingType: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPrMessageClass: (void **) data
|
||||
- (int) getPidTagMessageClass: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPrStartDate: (void **) data
|
||||
- (int) getPidTagStartDate: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPidLidAppointmentStateFlags: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
|
@ -106,7 +106,7 @@ extern NSTimeZone *utcTZ;
|
|||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPidLidCommonStart: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPrEndDate: (void **) data
|
||||
- (int) getPidTagEndDate: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPidLidAppointmentEndWhole: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
|
@ -120,17 +120,17 @@ extern NSTimeZone *utcTZ;
|
|||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPidLidIndentedBusyStatus: (void **) data // TODO
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPrSubject: (void **) data // SUMMARY
|
||||
- (int) getPidTagSubject: (void **) data // SUMMARY
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPidLidLocation: (void **) data // LOCATION
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPidLidPrivate: (void **) data // private (bool), should depend on CLASS and permissions
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPrSensitivity: (void **) data // not implemented, depends on CLASS
|
||||
- (int) getPidTagSensitivity: (void **) data // not implemented, depends on CLASS
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPrImportance: (void **) data
|
||||
- (int) getPidTagImportance: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPrBody: (void **) data
|
||||
- (int) getPidTagBody: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPidLidIsRecurring: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
|
|
|
@ -436,7 +436,7 @@ static NSCharacterSet *hexCharacterSet = nil;
|
|||
}
|
||||
}
|
||||
|
||||
- (int) getPrIconIndex: (void **) data // TODO
|
||||
- (int) getPidTagIconIndex: (void **) data // TODO
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
uint32_t longValue;
|
||||
|
@ -502,8 +502,8 @@ static NSCharacterSet *hexCharacterSet = nil;
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrOwnerApptId: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagOwnerAppointmentId: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
int rc;
|
||||
const char *utf8UID;
|
||||
|
@ -581,7 +581,7 @@ static NSCharacterSet *hexCharacterSet = nil;
|
|||
return rc;
|
||||
}
|
||||
|
||||
- (int) getPrMessageClass: (void **) data
|
||||
- (int) getPidTagMessageClass: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
const char *className;
|
||||
|
@ -634,7 +634,7 @@ static NSCharacterSet *hexCharacterSet = nil;
|
|||
return [self getYes: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrStartDate: (void **) data
|
||||
- (int) getPidTagStartDate: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
NSCalendarDate *dateValue;
|
||||
|
@ -716,7 +716,7 @@ static NSCharacterSet *hexCharacterSet = nil;
|
|||
- (int) getPidLidAppointmentStartWhole: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getPrStartDate: data inMemCtx: memCtx];
|
||||
return [self getPidTagStartDate: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPidLidCommonStart: (void **) data
|
||||
|
@ -797,7 +797,7 @@ static NSCharacterSet *hexCharacterSet = nil;
|
|||
return rc;
|
||||
}
|
||||
|
||||
- (int) _getEntryid: (void **) data
|
||||
- (int) _getEntryId: (void **) data
|
||||
forICalPerson: (iCalPerson *) person
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
|
@ -820,7 +820,7 @@ static NSCharacterSet *hexCharacterSet = nil;
|
|||
}
|
||||
|
||||
/* sender (organizer) */
|
||||
- (int) getPrSenderEmailAddress: (void **) data
|
||||
- (int) getPidTagSenderEmailAddress: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self _getEmailAddress: data
|
||||
|
@ -828,7 +828,7 @@ static NSCharacterSet *hexCharacterSet = nil;
|
|||
inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrSenderAddrtype: (void **) data
|
||||
- (int) getPidTagSenderAddressType: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self _getAddrType: data
|
||||
|
@ -836,7 +836,7 @@ static NSCharacterSet *hexCharacterSet = nil;
|
|||
inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrSenderName: (void **) data
|
||||
- (int) getPidTagSenderName: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self _getName: data
|
||||
|
@ -844,16 +844,16 @@ static NSCharacterSet *hexCharacterSet = nil;
|
|||
inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrSenderEntryid: (void **) data
|
||||
- (int) getPidTagSenderEntryId: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self _getEntryid: data
|
||||
return [self _getEntryId: data
|
||||
forICalPerson: [event organizer]
|
||||
inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
/* attendee */
|
||||
- (int) getPrReceivedByEmailAddress: (void **) data
|
||||
- (int) getPidTagReceivedByEmailAddress: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self _getEmailAddress: data
|
||||
|
@ -861,7 +861,7 @@ static NSCharacterSet *hexCharacterSet = nil;
|
|||
inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrReceivedByAddrtype: (void **) data
|
||||
- (int) getPidTagReceivedByAddressType: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self _getAddrType: data
|
||||
|
@ -869,7 +869,7 @@ static NSCharacterSet *hexCharacterSet = nil;
|
|||
inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrReceivedByName: (void **) data
|
||||
- (int) getPidTagReceivedByName: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self _getName: data
|
||||
|
@ -877,16 +877,16 @@ static NSCharacterSet *hexCharacterSet = nil;
|
|||
inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrReceivedByEntryid: (void **) data
|
||||
- (int) getPidTagReceivedByEntryId: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self _getEntryid: data
|
||||
return [self _getEntryId: data
|
||||
forICalPerson: [event userAsAttendee: user]
|
||||
inMemCtx: memCtx];
|
||||
}
|
||||
/* /attendee */
|
||||
|
||||
- (int) getPrEndDate: (void **) data
|
||||
- (int) getPidTagEndDate: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
NSCalendarDate *dateValue;
|
||||
|
@ -911,7 +911,7 @@ static NSCharacterSet *hexCharacterSet = nil;
|
|||
- (int) getPidLidAppointmentEndWhole: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getPrEndDate: data inMemCtx: memCtx];
|
||||
return [self getPidTagEndDate: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPidLidCommonEnd: (void **) data
|
||||
|
@ -960,7 +960,7 @@ static NSCharacterSet *hexCharacterSet = nil;
|
|||
return [self getPidLidBusyStatus: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrSubject: (void **) data // SUMMARY
|
||||
- (int) getPidTagSubject: (void **) data // SUMMARY
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = [[event summary] asUnicodeInMemCtx: memCtx];
|
||||
|
@ -1013,14 +1013,14 @@ static NSCharacterSet *hexCharacterSet = nil;
|
|||
return [self getNo: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrSensitivity: (void **) data // not implemented, depends on CLASS
|
||||
- (int) getPidTagSensitivity: (void **) data // not implemented, depends on CLASS
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
// normal = 0, personal?? = 1, private = 2, confidential = 3
|
||||
return [self getLongZero: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrImportance: (void **) data
|
||||
- (int) getPidTagImportance: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
uint32_t v;
|
||||
|
@ -1036,7 +1036,7 @@ static NSCharacterSet *hexCharacterSet = nil;
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrBody: (void **) data
|
||||
- (int) getPidTagBody: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
int rc = MAPISTORE_SUCCESS;
|
||||
|
@ -1397,7 +1397,7 @@ _fillAppointmentRecurrencePattern (struct AppointmentRecurrencePattern *arp,
|
|||
[self _setupAlarm];
|
||||
|
||||
return (alarm
|
||||
? [self getPrStartDate: data inMemCtx: memCtx]
|
||||
? [self getPidTagStartDate: data inMemCtx: memCtx]
|
||||
: MAPISTORE_ERR_NOT_FOUND);
|
||||
}
|
||||
|
||||
|
|
|
@ -65,24 +65,24 @@
|
|||
return mimeAttachTag;
|
||||
}
|
||||
|
||||
- (int) getPrMid: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagMid: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = MAPILongLongValue (memCtx, [container objectId]);
|
||||
|
||||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrAttachNum: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagAttachNumber: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = MAPILongValue (memCtx, aid);
|
||||
|
||||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrRenderingPosition: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagRenderingPosition: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = MAPILongValue (memCtx, 0xffffffff);
|
||||
|
||||
|
|
|
@ -34,24 +34,24 @@
|
|||
|
||||
@implementation MAPIStoreCalendarAttachment
|
||||
|
||||
- (int) getPrAttachmentHidden: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) localMemCtx
|
||||
- (int) getPidTagAttachmentHidden: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) localMemCtx
|
||||
{
|
||||
*data = MAPIBoolValue (localMemCtx, YES);
|
||||
|
||||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrAttachmentFlags: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) localMemCtx
|
||||
- (int) getPidTagAttachmentFlags: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) localMemCtx
|
||||
{
|
||||
*data = MAPILongValue (localMemCtx, 0x00000002); /* afException */
|
||||
|
||||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrAttachmMethod: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) localMemCtx
|
||||
- (int) getPidTagAttachMethod: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) localMemCtx
|
||||
{
|
||||
*data = MAPILongValue (localMemCtx, 0x00000005); /* afEmbeddedMessage */
|
||||
|
||||
|
|
|
@ -35,9 +35,11 @@
|
|||
#import "MAPIStoreCalendarContext.h"
|
||||
#import "MAPIStoreCalendarMessage.h"
|
||||
#import "MAPIStoreCalendarMessageTable.h"
|
||||
#import "NSString+MAPIStore.h"
|
||||
|
||||
#import "MAPIStoreCalendarFolder.h"
|
||||
|
||||
#include <mapistore/mapistore_errors.h>
|
||||
#include <util/time.h>
|
||||
#include <gen_ndr/exchange.h>
|
||||
|
||||
|
@ -49,17 +51,9 @@
|
|||
return [MAPIStoreCalendarMessageTable tableForContainer: self];
|
||||
}
|
||||
|
||||
- (EOQualifier *) componentQualifier
|
||||
- (NSString *) component
|
||||
{
|
||||
static EOQualifier *componentQualifier = nil;
|
||||
|
||||
if (!componentQualifier)
|
||||
componentQualifier
|
||||
= [[EOKeyValueQualifier alloc] initWithKey: @"c_component"
|
||||
operatorSelector: EOQualifierOperatorEqual
|
||||
value: @"vevent"];
|
||||
|
||||
return componentQualifier;
|
||||
return @"vevent";
|
||||
}
|
||||
|
||||
- (MAPIStoreMessage *) createMessage
|
||||
|
@ -170,4 +164,13 @@
|
|||
[(SOGoAppointmentFolder *) sogoObject aclSQLListingFilter]];
|
||||
}
|
||||
|
||||
- (int) getPidTagDefaultPostMessageClass: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = [@"IPM.Appointment" asUnicodeInMemCtx: memCtx];
|
||||
|
||||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -94,52 +94,52 @@ extern NSTimeZone *utcTZ;
|
|||
return [container lastModificationTime];
|
||||
}
|
||||
|
||||
- (int) getPrAttachEncoding: (void **) data inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPidTagAttachEncoding: (void **) data inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
{
|
||||
*data = [[NSData data] asBinaryInMemCtx: memCtx];
|
||||
|
||||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrAttachFlags: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getLongZero: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrAttachmentFlags: (void **) data
|
||||
- (int) getPidTagAttachFlags: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getLongZero: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrAttachmentHidden: (void **) data inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getNo: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrAttachmentLinkid: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagAttachmentFlags: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getLongZero: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrAttachMethod: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagAttachmentHidden: (void **) data inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getNo: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPidTagAttachmentLinkId: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getLongZero: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPidTagAttachMethod: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = MAPILongValue (memCtx, 0x00000001);
|
||||
|
||||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrAttachmentContactphoto: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagAttachmentContactPhoto: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getYes: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrAttachDataBin: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagAttachDataBinary: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
if (!photoData)
|
||||
ASSIGN (photoData,
|
||||
|
@ -150,8 +150,8 @@ extern NSTimeZone *utcTZ;
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrAttachSize: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagAttachSize: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
if (!photoData)
|
||||
ASSIGN (photoData,
|
||||
|
@ -162,16 +162,16 @@ extern NSTimeZone *utcTZ;
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrAttachExtension: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagAttachExtension: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = [[self fileExtension] asUnicodeInMemCtx: memCtx];
|
||||
|
||||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrAttachLongFilename: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagAttachLongFilename: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
NSString *filename;
|
||||
|
||||
|
@ -183,17 +183,17 @@ extern NSTimeZone *utcTZ;
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrAttachFilename: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagAttachFilename: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getPrAttachLongFilename: data
|
||||
inMemCtx: memCtx];
|
||||
return [self getPidTagAttachLongFilename: data
|
||||
inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrDisplayName: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagDisplayName: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getPrAttachLongFilename: data inMemCtx: memCtx];
|
||||
return [self getPidTagAttachLongFilename: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
|
@ -45,18 +45,9 @@
|
|||
return [MAPIStoreContactsMessageTable tableForContainer: self];
|
||||
}
|
||||
|
||||
- (EOQualifier *) componentQualifier
|
||||
- (NSString *) component
|
||||
{
|
||||
static EOQualifier *componentQualifier = nil;
|
||||
|
||||
/* TODO: we need to support vlist as well */
|
||||
if (!componentQualifier)
|
||||
componentQualifier
|
||||
= [[EOKeyValueQualifier alloc] initWithKey: @"c_component"
|
||||
operatorSelector: EOQualifierOperatorEqual
|
||||
value: @"vcard"];
|
||||
|
||||
return componentQualifier;
|
||||
return @"vcard";
|
||||
}
|
||||
|
||||
- (MAPIStoreMessage *) createMessage
|
||||
|
|
|
@ -85,7 +85,7 @@
|
|||
CardElement *element;
|
||||
|
||||
elements = [card childrenWithTag: tag
|
||||
andAttribute: @"type" havingValue: type];
|
||||
andAttribute: @"type" havingValue: type];
|
||||
if ([elements count] > 0)
|
||||
element = [elements objectAtIndex: 0];
|
||||
else
|
||||
|
@ -100,8 +100,8 @@
|
|||
return element;
|
||||
}
|
||||
|
||||
- (int) getPrIconIndex: (void **) data // TODO
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagIconIndex: (void **) data // TODO
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
/* see http://msdn.microsoft.com/en-us/library/cc815472.aspx */
|
||||
*data = MAPILongValue (memCtx, 0x00000200);
|
||||
|
@ -109,15 +109,15 @@
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrMessageClass: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagMessageClass: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = talloc_strdup (memCtx, "IPM.Contact");
|
||||
|
||||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
// - (int) getPrOabName: (void **) data
|
||||
// - (int) getPidTagOfflineAddressBookName: (void **) data
|
||||
// inMemCtx: (TALLOC_CTX *) memCtx
|
||||
// {
|
||||
// *data = talloc_strdup (memCtx, "PR_OAB_NAME_UNICODE");
|
||||
|
@ -125,7 +125,7 @@
|
|||
// return MAPISTORE_SUCCESS;
|
||||
// }
|
||||
|
||||
// - (int) getPrOabLangid: (void **) data
|
||||
// - (int) getPidTagOfflineAddressBookLanguageId: (void **) data
|
||||
// inMemCtx: (TALLOC_CTX *) memCtx
|
||||
// {
|
||||
// /* see http://msdn.microsoft.com/en-us/goglobal/bb895996.asxp */
|
||||
|
@ -136,8 +136,8 @@
|
|||
// }
|
||||
|
||||
|
||||
- (int) getPrTitle: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagTitle: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
NSString *stringValue;
|
||||
|
||||
|
@ -147,8 +147,8 @@
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrCompanyName: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagCompanyName: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
CardElement *org;
|
||||
|
||||
|
@ -159,8 +159,8 @@
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrDepartmentName: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagDepartmentName: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
CardElement *org;
|
||||
|
||||
|
@ -171,24 +171,24 @@
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrSendInternetEncoding: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagSendInternetEncoding: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = MAPILongValue (memCtx, 0x00065001);
|
||||
|
||||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrSubject: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagSubject: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getPrDisplayName: data inMemCtx: memCtx];
|
||||
return [self getPidTagDisplayName: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPidLidFileUnder: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getPrDisplayName: data inMemCtx: memCtx];
|
||||
return [self getPidTagDisplayName: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPidLidFileUnderId: (void **) data
|
||||
|
@ -231,14 +231,14 @@
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrAccount: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagAccount: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getPidLidEmail1EmailAddress: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrContactEmailAddresses: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagContactEmailAddresses: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
NSString *stringValue;
|
||||
|
||||
|
@ -251,8 +251,8 @@
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrEmsAbTargetAddress: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagEmsAbTargetAddress: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
NSString *stringValue;
|
||||
|
||||
|
@ -263,8 +263,8 @@
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrSearchKey: (void **) data // TODO
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagSearchKey: (void **) data // TODO
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
NSString *stringValue;
|
||||
|
||||
|
@ -275,8 +275,8 @@
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrMailPermission: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagMailPermission: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getYes: data inMemCtx: memCtx];
|
||||
}
|
||||
|
@ -321,8 +321,8 @@
|
|||
return [self getPidLidEmail2EmailAddress: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrBody: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagBody: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
int rc = MAPISTORE_SUCCESS;
|
||||
NSString *stringValue;
|
||||
|
@ -372,57 +372,57 @@
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrOfficeTelephoneNumber: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagBusinessTelephoneNumber: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self _getElement: @"tel" ofType: @"work" excluding: @"fax"
|
||||
atPos: 0 inData: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrHomeTelephoneNumber: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagHomeTelephoneNumber: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self _getElement: @"tel" ofType: @"home" excluding: @"fax"
|
||||
atPos: 0 inData: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrMobileTelephoneNumber: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagMobileTelephoneNumber: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self _getElement: @"tel" ofType: @"cell" excluding: nil
|
||||
atPos: 0 inData: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrPagerTelephoneNumber: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagPagerTelephoneNumber: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self _getElement: @"tel" ofType: @"pager" excluding: nil
|
||||
atPos: 0 inData: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrPrimaryTelephoneNumber: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagPrimaryTelephoneNumber: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self _getElement: @"tel" ofType: @"pref" excluding: nil
|
||||
atPos: 0 inData: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrBusinessFaxNumber: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagBusinessFaxNumber: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self _getElement: @"tel" ofType: @"fax" excluding: nil
|
||||
atPos: 0 inData: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrBusinessHomePage: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagBusinessHomePage: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self _getElement: @"url" ofType: @"work" excluding: nil
|
||||
atPos: 0 inData: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrPersonalHomePage: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagPersonalHomePage: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self _getElement: @"url" ofType: @"home" excluding: nil
|
||||
atPos: 0 inData: data inMemCtx: memCtx];
|
||||
|
@ -491,50 +491,50 @@
|
|||
//
|
||||
// getters when no address is selected as the Mailing Address
|
||||
//
|
||||
- (int) getPrPostalAddress: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagPostalAddress: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self _getElement: @"label" ofType: @"pref" excluding: nil
|
||||
atPos: 0 inData: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrPostOfficeBox: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagPostOfficeBox: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self _getElement: @"adr" ofType: @"pref" excluding: nil
|
||||
atPos: 0 inData: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrStreetAddress: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagStreetAddress: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self _getElement: @"adr" ofType: @"pref" excluding: nil
|
||||
atPos: 2 inData: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrLocality: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagLocality: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self _getElement: @"adr" ofType: @"pref" excluding: nil
|
||||
atPos: 3 inData: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrStateOrProvince: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagStateOrProvince: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self _getElement: @"adr" ofType: @"pref" excluding: nil
|
||||
atPos: 4 inData: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrPostalCode: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagPostalCode: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self _getElement: @"adr" ofType: @"pref" excluding: nil
|
||||
atPos: 5 inData: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrCountry: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagCountry: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self _getElement: @"adr" ofType: @"pref" excluding: nil
|
||||
atPos: 6 inData: data inMemCtx: memCtx];
|
||||
|
@ -550,42 +550,42 @@
|
|||
atPos: 0 inData: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrHomeAddressPostOfficeBox: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagHomeAddressPostOfficeBox: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self _getElement: @"adr" ofType: @"home" excluding: nil
|
||||
atPos: 0 inData: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrHomeAddressStreet: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagHomeAddressStreet: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self _getElement: @"adr" ofType: @"home" excluding: nil
|
||||
atPos: 2 inData: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrHomeAddressCity: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagHomeAddressCity: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self _getElement: @"adr" ofType: @"home" excluding: nil
|
||||
atPos: 3 inData: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrHomeAddressStateOrProvince: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagHomeAddressStateOrProvince: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self _getElement: @"adr" ofType: @"home" excluding: nil
|
||||
atPos: 4 inData: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrHomeAddressPostalCode: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagHomeAddressPostalCode: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self _getElement: @"adr" ofType: @"home" excluding: nil
|
||||
atPos: 5 inData: data inMemCtx: memCtx];
|
||||
}
|
||||
- (int) getPrHomeAddressCountry: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagHomeAddressCountry: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self _getElement: @"adr" ofType: @"home" excluding: nil
|
||||
atPos: 6 inData: data inMemCtx: memCtx];
|
||||
|
@ -646,8 +646,8 @@
|
|||
//
|
||||
//
|
||||
//
|
||||
- (int) getPrNickname: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagNickname: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
NSString *stringValue;
|
||||
|
||||
|
@ -657,8 +657,8 @@
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrBirthday: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagBirthday: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
NSCalendarDate *dateValue;
|
||||
NSString *stringValue;
|
||||
|
@ -681,8 +681,8 @@
|
|||
//
|
||||
// Decomposed fullname getters
|
||||
//
|
||||
- (int) getPrSurname: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagSurname: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
NSString *stringValue;
|
||||
|
||||
|
@ -694,8 +694,8 @@
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrGivenName: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagGivenName: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
NSString *stringValue;
|
||||
|
||||
|
@ -707,8 +707,8 @@
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrMiddleName: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagMiddleName: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
NSString *stringValue;
|
||||
|
||||
|
@ -720,8 +720,8 @@
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrDisplayNamePrefix: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagDisplayNamePrefix: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
NSString *stringValue;
|
||||
|
||||
|
@ -733,8 +733,8 @@
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrGeneration: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagGeneration: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
NSString *stringValue;
|
||||
|
||||
|
@ -746,8 +746,8 @@
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrSensitivity: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagSensitivity: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getLongZero: data inMemCtx: memCtx];
|
||||
}
|
||||
|
@ -808,7 +808,7 @@
|
|||
}
|
||||
|
||||
- (void) _updatePhotoInVCard: (NGVCard *) card
|
||||
fromProperties: (NSDictionary *) attachmentProps
|
||||
fromProperties: (NSDictionary *) attachmentProps
|
||||
{
|
||||
NSString *photoExt, *photoType, *content;
|
||||
CardElement *photo;
|
||||
|
@ -886,10 +886,10 @@
|
|||
|
||||
// Decomposed fullname
|
||||
[newCard setNWithFamily: [properties objectForKey: MAPIPropertyKey(PR_SURNAME_UNICODE)]
|
||||
given: [properties objectForKey: MAPIPropertyKey(PR_GIVEN_NAME_UNICODE)]
|
||||
additional: [properties objectForKey: MAPIPropertyKey(PR_MIDDLE_NAME_UNICODE)]
|
||||
prefixes: [properties objectForKey: MAPIPropertyKey(PR_DISPLAY_NAME_PREFIX_UNICODE)]
|
||||
suffixes: [properties objectForKey: MAPIPropertyKey(PR_GENERATION_UNICODE)]];
|
||||
given: [properties objectForKey: MAPIPropertyKey(PR_GIVEN_NAME_UNICODE)]
|
||||
additional: [properties objectForKey: MAPIPropertyKey(PR_MIDDLE_NAME_UNICODE)]
|
||||
prefixes: [properties objectForKey: MAPIPropertyKey(PR_DISPLAY_NAME_PREFIX_UNICODE)]
|
||||
suffixes: [properties objectForKey: MAPIPropertyKey(PR_GENERATION_UNICODE)]];
|
||||
|
||||
//
|
||||
// display name
|
||||
|
@ -1161,7 +1161,7 @@
|
|||
value = [properties objectForKey: MAPIPropertyKey (PR_CHANGE_KEY)];
|
||||
if (value)
|
||||
[(MAPIStoreContactsFolder *) container
|
||||
setChangeKey: value forMessageWithKey: [self nameInContainer]];
|
||||
setChangeKey: value forMessageWithKey: [self nameInContainer]];
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
|
@ -67,7 +67,7 @@
|
|||
|
||||
/* sogo://username:password@{contacts,calendar,tasks,journal,notes,mail}/dossier/id */
|
||||
|
||||
static Class NSExceptionK, MAPIStoreFallbackContextK;
|
||||
static Class NSExceptionK, MAPIStoreFallbackContextK, SOGoObjectK;
|
||||
|
||||
static NSMutableDictionary *contextClassMapping;
|
||||
|
||||
|
@ -79,6 +79,7 @@ static NSMutableDictionary *contextClassMapping;
|
|||
NSString *moduleName;
|
||||
|
||||
NSExceptionK = [NSException class];
|
||||
SOGoObjectK = [SOGoObject class];
|
||||
|
||||
contextClassMapping = [NSMutableDictionary new];
|
||||
classes = GSObjCAllSubclassesOfClass (self);
|
||||
|
@ -441,10 +442,11 @@ static inline NSURL *CompleteURLFromMapistoreURI (const char *uri)
|
|||
= [currentFolder lookupName: [pathComponents objectAtIndex: count]
|
||||
inContext: woContext
|
||||
acquire: NO];
|
||||
if ([currentFolder isKindOfClass: NSExceptionK])
|
||||
currentFolder = nil;
|
||||
else
|
||||
if ([currentFolder isKindOfClass: SOGoObjectK]) /* class common to all
|
||||
SOGo folder types */
|
||||
[containersBag addObject: currentFolder];
|
||||
else
|
||||
currentFolder = nil;
|
||||
}
|
||||
|
||||
if (currentFolder)
|
||||
|
@ -457,8 +459,10 @@ static inline NSURL *CompleteURLFromMapistoreURI (const char *uri)
|
|||
*folderPtr = baseFolder;
|
||||
rc = MAPISTORE_SUCCESS;
|
||||
}
|
||||
else
|
||||
else if ([[userContext sogoUser] isEqual: activeUser])
|
||||
rc = MAPISTORE_ERR_NOT_FOUND;
|
||||
else
|
||||
rc = MAPISTORE_ERR_DENIED;
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
|
|
@ -42,8 +42,8 @@
|
|||
andType: MAPISTORE_FAI_TABLE];
|
||||
}
|
||||
|
||||
- (int) getPrAssociated: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagAssociated: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getYes: data inMemCtx: memCtx];
|
||||
}
|
||||
|
|
|
@ -163,8 +163,9 @@ static NSString *MAPIStoreRightFolderContact = @"RightsFolderContact";
|
|||
NSUInteger count, max;
|
||||
NSDate *date, *fileDate;
|
||||
MAPIStoreFSMessage *msg;
|
||||
NSArray *messageKeys;
|
||||
|
||||
[self messageKeys];
|
||||
messageKeys = [self messageKeys];
|
||||
|
||||
date = [NSCalendarDate date];
|
||||
[self logWithFormat: @"current date: %@", date];
|
||||
|
|
|
@ -59,7 +59,7 @@ static Class MAPIStoreFSMessageK = Nil;
|
|||
NSNumber *version;
|
||||
uint64_t cVersion;
|
||||
|
||||
if ((uint32_t) res->ulPropTag == PR_CHANGE_NUM)
|
||||
if ((uint32_t) res->ulPropTag == PidTagChangeNumber)
|
||||
{
|
||||
value = NSObjectFromMAPISPropValue (&res->lpProp);
|
||||
cVersion = exchange_globcnt ([value unsignedLongLongValue] >> 16);
|
||||
|
|
|
@ -46,9 +46,9 @@
|
|||
@interface MAPIStoreFolder : MAPIStoreObject
|
||||
{
|
||||
MAPIStoreContext *context;
|
||||
NSArray *messageKeys;
|
||||
NSArray *faiMessageKeys;
|
||||
NSArray *folderKeys;
|
||||
// NSArray *messageKeys;
|
||||
// NSArray *faiMessageKeys;
|
||||
// NSArray *folderKeys;
|
||||
|
||||
SOGoMAPIFSFolder *faiFolder;
|
||||
SOGoMAPIFSFolder *propsFolder;
|
||||
|
|
|
@ -56,7 +56,6 @@
|
|||
#include <util/attr.h>
|
||||
#include <libmapiproxy.h>
|
||||
#include <mapistore/mapistore.h>
|
||||
#include <mapistore/mapistore_nameid.h>
|
||||
#include <mapistore/mapistore_errors.h>
|
||||
|
||||
Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMessageTableK, MAPIStoreFolderTableK;
|
||||
|
@ -76,9 +75,9 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
|
|||
{
|
||||
if ((self = [super init]))
|
||||
{
|
||||
messageKeys = nil;
|
||||
faiMessageKeys = nil;
|
||||
folderKeys = nil;
|
||||
// messageKeys = nil;
|
||||
// faiMessageKeys = nil;
|
||||
// folderKeys = nil;
|
||||
faiFolder = nil;
|
||||
context = nil;
|
||||
|
||||
|
@ -142,11 +141,11 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
|
|||
|
||||
- (void) dealloc
|
||||
{
|
||||
// [messageKeys release];
|
||||
// [faiMessageKeys release];
|
||||
// [folderKeys release];
|
||||
[propsMessage release];
|
||||
[propsFolder release];
|
||||
[messageKeys release];
|
||||
[faiMessageKeys release];
|
||||
[folderKeys release];
|
||||
[faiFolder release];
|
||||
[context release];
|
||||
|
||||
|
@ -167,16 +166,16 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
|
|||
uint64_t cn;
|
||||
|
||||
props = [propsMessage properties];
|
||||
value = [props objectForKey: MAPIPropertyKey (PR_CHANGE_NUM)];
|
||||
value = [props objectForKey: MAPIPropertyKey (PidTagChangeNumber)];
|
||||
if (value)
|
||||
cn = [value unsignedLongLongValue];
|
||||
else
|
||||
{
|
||||
[self logWithFormat: @"no value for PR_CHANGE_NUM, adding one now"];
|
||||
[self logWithFormat: @"no value for PidTagChangeNumber, adding one now"];
|
||||
cn = [[self context] getNewChangeNumber];
|
||||
value = [NSNumber numberWithUnsignedLongLong: cn];
|
||||
props = [NSDictionary dictionaryWithObject: value
|
||||
forKey: MAPIPropertyKey (PR_CHANGE_NUM)];
|
||||
forKey: MAPIPropertyKey (PidTagChangeNumber)];
|
||||
[propsMessage appendProperties: props];
|
||||
[propsMessage save];
|
||||
}
|
||||
|
@ -262,8 +261,7 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
|
|||
|
||||
if (messageKey)
|
||||
{
|
||||
[self faiMessageKeys];
|
||||
if ([faiMessageKeys containsObject: messageKey])
|
||||
if ([[self faiMessageKeys] containsObject: messageKey])
|
||||
{
|
||||
msgObject = [faiFolder lookupName: messageKey
|
||||
inContext: nil
|
||||
|
@ -372,7 +370,7 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
|
|||
}
|
||||
else
|
||||
[NSException raise: @"MAPIStoreIOException"
|
||||
format: @"unable to fetch created folder"];
|
||||
format: @"unable to fetch created folder"];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -770,9 +768,14 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
|
|||
isAddition: (BOOL) isAddition
|
||||
withACLFolder: (SOGoFolder *) aclFolder
|
||||
{
|
||||
if (isAddition)
|
||||
[aclFolder addUserInAcls: user];
|
||||
[aclFolder setRoles: roles forUser: user];
|
||||
if (user)
|
||||
{
|
||||
if (isAddition)
|
||||
[aclFolder addUserInAcls: user];
|
||||
[aclFolder setRoles: roles forUser: user];
|
||||
}
|
||||
else
|
||||
[self logWithFormat: @"user is nil, keeping intended entry intact"];
|
||||
}
|
||||
|
||||
- (void) setupVersionsMessage
|
||||
|
@ -951,6 +954,7 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
|
|||
{
|
||||
int rc = MAPISTORE_SUCCESS;
|
||||
MAPIStoreTable *table;
|
||||
SOGoUser *ownerUser;
|
||||
|
||||
if (tableType == MAPISTORE_MESSAGE_TABLE)
|
||||
table = [self messageTable];
|
||||
|
@ -959,21 +963,31 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
|
|||
else if (tableType == MAPISTORE_FOLDER_TABLE)
|
||||
table = [self folderTable];
|
||||
else if (tableType == MAPISTORE_PERMISSIONS_TABLE)
|
||||
table = [self permissionsTable];
|
||||
{
|
||||
ownerUser = [[self userContext] sogoUser];
|
||||
if ([[context activeUser] isEqual: ownerUser])
|
||||
table = [self permissionsTable];
|
||||
else
|
||||
rc = MAPISTORE_ERR_DENIED;
|
||||
}
|
||||
else
|
||||
{
|
||||
table = nil;
|
||||
[NSException raise: @"MAPIStoreIOException"
|
||||
format: @"unsupported table type: %d", tableType];
|
||||
}
|
||||
if (table)
|
||||
|
||||
if (rc == MAPISTORE_SUCCESS)
|
||||
{
|
||||
[table setHandleId: handleId];
|
||||
*tablePtr = table;
|
||||
*countPtr = [[table childKeys] count];
|
||||
if (table)
|
||||
{
|
||||
[table setHandleId: handleId];
|
||||
*tablePtr = table;
|
||||
*countPtr = [[table childKeys] count];
|
||||
}
|
||||
else
|
||||
rc = MAPISTORE_ERR_NOT_FOUND;
|
||||
}
|
||||
else
|
||||
rc = MAPISTORE_ERR_NOT_FOUND;
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
@ -1004,14 +1018,16 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
|
|||
|
||||
- (NSArray *) messageKeys
|
||||
{
|
||||
if (!messageKeys)
|
||||
{
|
||||
messageKeys = [self messageKeysMatchingQualifier: nil
|
||||
andSortOrderings: nil];
|
||||
[messageKeys retain];
|
||||
}
|
||||
return [self messageKeysMatchingQualifier: nil
|
||||
andSortOrderings: nil];
|
||||
// if (!messageKeys)
|
||||
// {
|
||||
// messageKeys = [self messageKeysMatchingQualifier: nil
|
||||
// andSortOrderings: nil];
|
||||
// [messageKeys retain];
|
||||
// }
|
||||
|
||||
return messageKeys;
|
||||
// return messageKeys;
|
||||
}
|
||||
|
||||
- (MAPIStoreFAIMessageTable *) faiMessageTable
|
||||
|
@ -1029,14 +1045,16 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
|
|||
|
||||
- (NSArray *) faiMessageKeys
|
||||
{
|
||||
if (!faiMessageKeys)
|
||||
{
|
||||
faiMessageKeys = [self faiMessageKeysMatchingQualifier: nil
|
||||
andSortOrderings: nil];
|
||||
[faiMessageKeys retain];
|
||||
}
|
||||
return [self faiMessageKeysMatchingQualifier: nil
|
||||
andSortOrderings: nil];
|
||||
// if (!faiMessageKeys)
|
||||
// {
|
||||
// faiMessageKeys = [self faiMessageKeysMatchingQualifier: nil
|
||||
// andSortOrderings: nil];
|
||||
// [faiMessageKeys retain];
|
||||
// }
|
||||
|
||||
return faiMessageKeys;
|
||||
// return faiMessageKeys;
|
||||
}
|
||||
|
||||
- (MAPIStoreFolderTable *) folderTable
|
||||
|
@ -1046,14 +1064,16 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
|
|||
|
||||
- (NSArray *) folderKeys
|
||||
{
|
||||
if (!folderKeys)
|
||||
{
|
||||
folderKeys = [self folderKeysMatchingQualifier: nil
|
||||
andSortOrderings: nil];
|
||||
[folderKeys retain];
|
||||
}
|
||||
return [self folderKeysMatchingQualifier: nil
|
||||
andSortOrderings: nil];
|
||||
// if (!folderKeys)
|
||||
// {
|
||||
// folderKeys = [self folderKeysMatchingQualifier: nil
|
||||
// andSortOrderings: nil];
|
||||
// [folderKeys retain];
|
||||
// }
|
||||
|
||||
return folderKeys;
|
||||
// return folderKeys;
|
||||
}
|
||||
|
||||
- (NSArray *) folderKeysMatchingQualifier: (EOQualifier *) qualifier
|
||||
|
@ -1099,24 +1119,24 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
|
|||
[self _cleanupTableCaches: MAPISTORE_MESSAGE_TABLE];
|
||||
[self _cleanupTableCaches: MAPISTORE_FAI_TABLE];
|
||||
[self _cleanupTableCaches: MAPISTORE_FOLDER_TABLE];
|
||||
[faiMessageKeys release];
|
||||
faiMessageKeys = nil;
|
||||
[messageKeys release];
|
||||
messageKeys = nil;
|
||||
[folderKeys release];
|
||||
folderKeys = nil;
|
||||
// [faiMessageKeys release];
|
||||
// faiMessageKeys = nil;
|
||||
// [messageKeys release];
|
||||
// messageKeys = nil;
|
||||
// [folderKeys release];
|
||||
// folderKeys = nil;
|
||||
}
|
||||
|
||||
- (int) getPrParentFid: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagParentFolderId: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = MAPILongLongValue (memCtx, [container objectId]);
|
||||
|
||||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrFid: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagFolderId: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = MAPILongLongValue (memCtx, [self objectId]);
|
||||
|
||||
|
@ -1133,8 +1153,8 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
|
|||
0x00000010 Create Contents Table
|
||||
0x00000020 Create Associated Contents Table
|
||||
*/
|
||||
- (int) getPrAccess: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagAccess: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
uint32_t access = 0;
|
||||
SOGoUser *ownerUser;
|
||||
|
@ -1168,74 +1188,74 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
|
|||
0x00000000 Read-Only
|
||||
0x00000001 Modify
|
||||
*/
|
||||
- (int) getPrAccessLevel: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagAccessLevel: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = MAPILongValue (memCtx, 0x01);
|
||||
|
||||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrAttrHidden: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagAttributeHidden: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getNo: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrAttrSystem: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagAttributeSystem: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getNo: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrAttrReadOnly: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagAttributeReadOnly: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getNo: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrSubfolders: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagSubfolders: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = MAPIBoolValue (memCtx, [folderKeys count] > 0);
|
||||
*data = MAPIBoolValue (memCtx, [[self folderKeys] count] > 0);
|
||||
|
||||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrFolderChildCount: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagFolderChildCount: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = MAPILongValue (memCtx, [[self folderKeys] count]);
|
||||
|
||||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrContentCount: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagContentCount: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = MAPILongValue (memCtx, [[self messageKeys] count]);
|
||||
|
||||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrContentUnread: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagContentUnreadCount: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = MAPILongValue (memCtx, 0);
|
||||
|
||||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrAssocContentCount: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagAssociatedContentCount: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = MAPILongValue (memCtx, [[self faiMessageKeys] count]);
|
||||
|
||||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrDeletedCountTotal: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagDeletedCountTotal: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
/* TODO */
|
||||
*data = MAPILongValue (memCtx, 0);
|
||||
|
@ -1243,12 +1263,19 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrLocalCommitTimeMax: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagLocalCommitTimeMax: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = [[self lastMessageModificationTime] asFileTimeInMemCtx: memCtx];
|
||||
int rc = MAPISTORE_SUCCESS;
|
||||
NSDate *date;
|
||||
|
||||
return MAPISTORE_SUCCESS;
|
||||
date = [self lastMessageModificationTime];
|
||||
if (date)
|
||||
*data = [date asFileTimeInMemCtx: memCtx];
|
||||
else
|
||||
rc = MAPISTORE_ERR_NOT_FOUND;
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
- (int) getProperty: (void **) data
|
||||
|
@ -1390,20 +1417,25 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
|
|||
NSString *username;
|
||||
struct ldb_context *samCtx;
|
||||
|
||||
bin32.cb = bin->cb;
|
||||
bin32.lpb = bin->lpb;
|
||||
|
||||
entryId = get_AddressBookEntryId (NULL, &bin32);
|
||||
if (entryId)
|
||||
if (bin && bin->cb)
|
||||
{
|
||||
samCtx = [[self context] connectionInfo]->sam_ctx;
|
||||
username = MAPIStoreSamDBUserAttribute (samCtx, @"legacyExchangeDN",
|
||||
[NSString stringWithUTF8String: entryId->X500DN],
|
||||
@"sAMAccountName");
|
||||
bin32.cb = bin->cb;
|
||||
bin32.lpb = bin->lpb;
|
||||
|
||||
entryId = get_AddressBookEntryId (NULL, &bin32);
|
||||
if (entryId)
|
||||
{
|
||||
samCtx = [[self context] connectionInfo]->sam_ctx;
|
||||
username = MAPIStoreSamDBUserAttribute (samCtx, @"legacyExchangeDN",
|
||||
[NSString stringWithUTF8String: entryId->X500DN],
|
||||
@"sAMAccountName");
|
||||
}
|
||||
else
|
||||
username = nil;
|
||||
talloc_free (entryId);
|
||||
}
|
||||
else
|
||||
username = nil;
|
||||
talloc_free (entryId);
|
||||
|
||||
return username;
|
||||
}
|
||||
|
@ -1415,12 +1447,19 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
|
|||
NSUInteger count, max;
|
||||
MAPIStorePermissionEntry *entry;
|
||||
|
||||
max = [entries count];
|
||||
for (count = 0; !username && count < max; count++)
|
||||
if (memberId == 0)
|
||||
username = [[self aclFolder] defaultUserID];
|
||||
else if (memberId == ULLONG_MAX)
|
||||
username = @"anonymous";
|
||||
else
|
||||
{
|
||||
entry = [entries objectAtIndex: count];
|
||||
if ([entry memberId] == memberId)
|
||||
username = [entry userId];
|
||||
max = [entries count];
|
||||
for (count = 0; !username && count < max; count++)
|
||||
{
|
||||
entry = [entries objectAtIndex: count];
|
||||
if ([entry memberId] == memberId)
|
||||
username = [entry userId];
|
||||
}
|
||||
}
|
||||
|
||||
return username;
|
||||
|
@ -1450,7 +1489,7 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
|
|||
NSString *permissionUser;
|
||||
NSArray *entries;
|
||||
NSArray *permissionRoles;
|
||||
BOOL reset, isAdd;
|
||||
BOOL reset, isAdd = NO, isDelete = NO, isModify = NO;
|
||||
SOGoFolder *aclFolder;
|
||||
|
||||
aclFolder = [self aclFolder];
|
||||
|
@ -1468,7 +1507,13 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
|
|||
permissionUser = nil;
|
||||
permissionRoles = nil;
|
||||
|
||||
isAdd = (currentPermission->PermissionDataFlags == ROW_ADD);
|
||||
if (currentPermission->PermissionDataFlags == ROW_ADD)
|
||||
isAdd = YES;
|
||||
else if (currentPermission->PermissionDataFlags == ROW_MODIFY)
|
||||
isModify = YES;
|
||||
else
|
||||
isDelete = YES;
|
||||
|
||||
for (propCount = 0;
|
||||
propCount < currentPermission->lpProps.cValues;
|
||||
propCount++)
|
||||
|
@ -1477,16 +1522,19 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
|
|||
switch (mapiValue->ulPropTag)
|
||||
{
|
||||
case PR_ENTRYID:
|
||||
permissionUser
|
||||
= [self _usernameFromEntryId: &mapiValue->value.bin];
|
||||
if (isAdd)
|
||||
permissionUser
|
||||
= [self _usernameFromEntryId: &mapiValue->value.bin];
|
||||
break;
|
||||
case PR_MEMBER_ID:
|
||||
permissionUser = [self _usernameFromMemberId: mapiValue->value.d
|
||||
inEntries: entries];
|
||||
if (isModify || isDelete)
|
||||
permissionUser = [self _usernameFromMemberId: mapiValue->value.d
|
||||
inEntries: entries];
|
||||
break;
|
||||
case PR_MEMBER_RIGHTS:
|
||||
permissionRoles = [self
|
||||
rolesForExchangeRights: mapiValue->value.l];
|
||||
if (isAdd || isModify)
|
||||
permissionRoles
|
||||
= [self rolesForExchangeRights: mapiValue->value.l];
|
||||
break;
|
||||
default:
|
||||
if (mapiValue->ulPropTag != PR_MEMBER_NAME)
|
||||
|
|
|
@ -95,7 +95,7 @@
|
|||
/* HACK: we cheat here as we current have no mechanism for searching
|
||||
folders based on PR_CHANGE_NUM, which is used by the oxcfxics
|
||||
mechanism... */
|
||||
case PR_CHANGE_NUM:
|
||||
case PidTagChangeNumber:
|
||||
rc = MAPIRestrictionStateAlwaysTrue;
|
||||
break;
|
||||
default:
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
{
|
||||
SOGoMAPIFSMessage *versionsMessage;
|
||||
NSArray *activeUserRoles;
|
||||
EOQualifier *componentQualifier;
|
||||
}
|
||||
|
||||
/* synchronisation */
|
||||
|
@ -50,9 +51,12 @@
|
|||
|
||||
- (NSArray *) activeUserRoles;
|
||||
|
||||
- (EOQualifier *) componentQualifier;
|
||||
- (EOQualifier *) contentComponentQualifier;
|
||||
|
||||
/* subclasses */
|
||||
- (EOQualifier *) aclQualifier;
|
||||
- (EOQualifier *) componentQualifier;
|
||||
- (NSString *) component;
|
||||
|
||||
@end
|
||||
|
||||
|
|
|
@ -48,8 +48,15 @@
|
|||
#include <mapistore/mapistore.h>
|
||||
#include <mapistore/mapistore_errors.h>
|
||||
|
||||
static Class NSNumberK;
|
||||
|
||||
@implementation MAPIStoreGCSFolder
|
||||
|
||||
+ (void) initialize
|
||||
{
|
||||
NSNumberK = [NSNumber class];
|
||||
}
|
||||
|
||||
- (id) initWithSOGoObject: (id) newSOGoObject
|
||||
inContainer: (MAPIStoreObject *) newContainer
|
||||
{
|
||||
|
@ -72,6 +79,7 @@
|
|||
{
|
||||
[versionsMessage release];
|
||||
[activeUserRoles release];
|
||||
[componentQualifier release];
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
|
@ -127,7 +135,7 @@
|
|||
[sogoObject renameTo: newDisplayName];
|
||||
}
|
||||
|
||||
- (int) getPrDisplayName: (void **) data
|
||||
- (int) getPidTagDisplayName: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
NSString *displayName;
|
||||
|
@ -207,17 +215,17 @@
|
|||
|
||||
- (NSDate *) lastMessageModificationTime
|
||||
{
|
||||
NSDate *value;
|
||||
NSNumber *ti;
|
||||
NSDate *value = nil;
|
||||
|
||||
[self synchroniseCache];
|
||||
|
||||
ti = [[versionsMessage properties]
|
||||
objectForKey: @"SyncLastSynchronisationDate"];
|
||||
objectForKey: @"SyncLastModificationDate"];
|
||||
if (ti)
|
||||
value = [NSDate dateWithTimeIntervalSince1970: [ti doubleValue]];
|
||||
else
|
||||
value = [NSDate date];
|
||||
|
||||
[self logWithFormat: @"lastMessageModificationTime: %@", value];
|
||||
value = nil;
|
||||
|
||||
return value;
|
||||
}
|
||||
|
@ -283,12 +291,41 @@
|
|||
[changeList setObject: globCnt forKey: guid];
|
||||
}
|
||||
|
||||
- (EOQualifier *) componentQualifier
|
||||
{
|
||||
if (!componentQualifier)
|
||||
componentQualifier
|
||||
= [[EOKeyValueQualifier alloc] initWithKey: @"c_component"
|
||||
operatorSelector: EOQualifierOperatorEqual
|
||||
value: [self component]];
|
||||
|
||||
return componentQualifier;
|
||||
}
|
||||
|
||||
- (EOQualifier *) contentComponentQualifier
|
||||
{
|
||||
EOQualifier *contentComponentQualifier;
|
||||
NSString *likeString;
|
||||
|
||||
likeString = [NSString stringWithFormat: @"%%BEGIN:%@%%",
|
||||
[[self component] uppercaseString]];
|
||||
contentComponentQualifier = [[EOKeyValueQualifier alloc]
|
||||
initWithKey: @"c_content"
|
||||
operatorSelector: EOQualifierOperatorLike
|
||||
value: likeString];
|
||||
[contentComponentQualifier autorelease];
|
||||
|
||||
return contentComponentQualifier;
|
||||
}
|
||||
|
||||
- (BOOL) synchroniseCache
|
||||
{
|
||||
BOOL rc = YES, foundChange = NO;
|
||||
uint64_t newChangeNum;
|
||||
NSData *changeKey;
|
||||
NSNumber *ti, *changeNumber, *lastModificationDate, *cName, *cVersion, *cLastModified;
|
||||
NSString *cName;
|
||||
NSNumber *ti, *changeNumber, *lastModificationDate, *cVersion,
|
||||
*cLastModified, *cDeleted;
|
||||
EOFetchSpecification *fs;
|
||||
EOQualifier *searchQualifier, *fetchQualifier;
|
||||
NSUInteger count, max;
|
||||
|
@ -303,7 +340,7 @@
|
|||
if (!fields)
|
||||
fields = [[NSArray alloc]
|
||||
initWithObjects: @"c_name", @"c_version", @"c_lastmodified",
|
||||
nil];
|
||||
@"c_deleted", nil];
|
||||
|
||||
if (!sortOrdering)
|
||||
{
|
||||
|
@ -312,26 +349,7 @@
|
|||
[sortOrdering retain];
|
||||
}
|
||||
|
||||
now = [NSCalendarDate date];
|
||||
|
||||
currentProperties = [[versionsMessage properties] mutableCopy];
|
||||
if (!currentProperties)
|
||||
currentProperties = [NSMutableDictionary new];
|
||||
[currentProperties autorelease];
|
||||
messages = [currentProperties objectForKey: @"Messages"];
|
||||
if (!messages)
|
||||
{
|
||||
messages = [NSMutableDictionary new];
|
||||
[currentProperties setObject: messages forKey: @"Messages"];
|
||||
[messages release];
|
||||
}
|
||||
mapping = [currentProperties objectForKey: @"VersionMapping"];
|
||||
if (!mapping)
|
||||
{
|
||||
mapping = [NSMutableDictionary new];
|
||||
[currentProperties setObject: mapping forKey: @"VersionMapping"];
|
||||
[mapping release];
|
||||
}
|
||||
currentProperties = [versionsMessage properties];
|
||||
|
||||
lastModificationDate = [currentProperties objectForKey: @"SyncLastModificationDate"];
|
||||
if (lastModificationDate)
|
||||
|
@ -341,8 +359,9 @@
|
|||
operatorSelector: EOQualifierOperatorGreaterThanOrEqualTo
|
||||
value: lastModificationDate];
|
||||
fetchQualifier = [[EOAndQualifier alloc]
|
||||
initWithQualifiers:
|
||||
searchQualifier, [self componentQualifier], nil];
|
||||
initWithQualifiers: searchQualifier,
|
||||
[self contentComponentQualifier],
|
||||
nil];
|
||||
[fetchQualifier autorelease];
|
||||
[searchQualifier release];
|
||||
}
|
||||
|
@ -354,17 +373,38 @@
|
|||
fetchSpecificationWithEntityName: [ocsFolder folderName]
|
||||
qualifier: fetchQualifier
|
||||
sortOrderings: [NSArray arrayWithObject: sortOrdering]];
|
||||
fetchResults = [ocsFolder fetchFields: fields fetchSpecification: fs];
|
||||
fetchResults = [ocsFolder fetchFields: fields
|
||||
fetchSpecification: fs
|
||||
ignoreDeleted: NO];
|
||||
max = [fetchResults count];
|
||||
if (max > 0)
|
||||
{
|
||||
messages = [currentProperties objectForKey: @"Messages"];
|
||||
if (!messages)
|
||||
{
|
||||
messages = [NSMutableDictionary new];
|
||||
[currentProperties setObject: messages forKey: @"Messages"];
|
||||
[messages release];
|
||||
}
|
||||
mapping = [currentProperties objectForKey: @"VersionMapping"];
|
||||
if (!mapping)
|
||||
{
|
||||
mapping = [NSMutableDictionary new];
|
||||
[currentProperties setObject: mapping forKey: @"VersionMapping"];
|
||||
[mapping release];
|
||||
}
|
||||
|
||||
ldb_transaction_start([[self context] connectionInfo]->oc_ctx);
|
||||
|
||||
for (count = 0; count < max; count++)
|
||||
{
|
||||
result = [fetchResults objectAtIndex: count];
|
||||
cName = [result objectForKey: @"c_name"];
|
||||
cVersion = [result objectForKey: @"c_version"];
|
||||
cDeleted = [result objectForKey: @"c_deleted"];
|
||||
if ([cDeleted isKindOfClass: NSNumberK] && [cDeleted intValue])
|
||||
cVersion = [NSNumber numberWithInt: -1];
|
||||
else
|
||||
cVersion = [result objectForKey: @"c_version"];
|
||||
cLastModified = [result objectForKey: @"c_lastmodified"];
|
||||
|
||||
messageEntry = [messages objectForKey: cName];
|
||||
|
@ -374,9 +414,12 @@
|
|||
[messages setObject: messageEntry forKey: cName];
|
||||
[messageEntry release];
|
||||
}
|
||||
|
||||
if (![[messageEntry objectForKey: @"c_version"]
|
||||
isEqual: cVersion])
|
||||
{
|
||||
[sogoObject removeChildRecordWithName: cName];
|
||||
|
||||
foundChange = YES;
|
||||
|
||||
newChangeNum = [[self context] getNewChangeNumber];
|
||||
|
@ -402,6 +445,7 @@
|
|||
|
||||
if (foundChange)
|
||||
{
|
||||
now = [NSCalendarDate date];
|
||||
ti = [NSNumber numberWithDouble: [now timeIntervalSince1970]];
|
||||
[currentProperties setObject: ti
|
||||
forKey: @"SyncLastSynchronisationDate"];
|
||||
|
@ -526,9 +570,9 @@
|
|||
NSArray *deletedKeys, *deletedCNames, *records;
|
||||
NSNumber *changeNumNbr, *lastModified;
|
||||
NSString *cName;
|
||||
NSDictionary *versionProperties;
|
||||
NSMutableDictionary *messages, *mapping;
|
||||
uint64_t newChangeNum = 0;
|
||||
NSDictionary *versionProperties, *messageEntry;
|
||||
NSMutableDictionary *messages;
|
||||
uint64_t maxChangeNum = changeNum, currentChangeNum;
|
||||
EOAndQualifier *fetchQualifier;
|
||||
EOKeyValueQualifier *cDeletedQualifier, *cLastModifiedQualifier;
|
||||
EOFetchSpecification *fs;
|
||||
|
@ -573,28 +617,28 @@
|
|||
ignoreDeleted: NO];
|
||||
deletedCNames = [records objectsForKey: @"c_name" notFoundMarker: nil];
|
||||
max = [deletedCNames count];
|
||||
if (max > 0)
|
||||
for (count = 0; count < max; count++)
|
||||
{
|
||||
mapping = [versionProperties objectForKey: @"VersionsMapping"];
|
||||
for (count = 0; count < max; count++)
|
||||
cName = [deletedCNames objectAtIndex: count];
|
||||
[sogoObject removeChildRecordWithName: cName];
|
||||
messageEntry = [messages objectForKey: cName];
|
||||
if (messageEntry)
|
||||
{
|
||||
cName = [deletedCNames objectAtIndex: count];
|
||||
if ([messages objectForKey: cName])
|
||||
currentChangeNum
|
||||
= [[messageEntry objectForKey: @"version"]
|
||||
unsignedLongLongValue];
|
||||
if (MAPICNCompare (changeNum, currentChangeNum)
|
||||
== NSOrderedAscending)
|
||||
{
|
||||
[messages removeObjectForKey: cName];
|
||||
[(NSMutableArray *) deletedKeys addObject: cName];
|
||||
newChangeNum = [[self context] getNewChangeNumber];
|
||||
if (MAPICNCompare (maxChangeNum, currentChangeNum)
|
||||
== NSOrderedAscending)
|
||||
maxChangeNum = currentChangeNum;
|
||||
}
|
||||
}
|
||||
if (newChangeNum)
|
||||
{
|
||||
changeNumNbr
|
||||
= [NSNumber numberWithUnsignedLongLong: newChangeNum];
|
||||
[mapping setObject: lastModified forKey: changeNumNbr];
|
||||
*cnNbr = changeNumNbr;
|
||||
[versionsMessage save];
|
||||
}
|
||||
}
|
||||
if (maxChangeNum != changeNum)
|
||||
*cnNbr = [NSNumber numberWithUnsignedLongLong: maxChangeNum];
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -639,7 +683,7 @@
|
|||
return nil;
|
||||
}
|
||||
|
||||
- (EOQualifier *) componentQualifier
|
||||
- (NSString *) component
|
||||
{
|
||||
[self subclassResponsibility: _cmd];
|
||||
|
||||
|
|
|
@ -51,8 +51,8 @@
|
|||
return [sogoObject lastModified];
|
||||
}
|
||||
|
||||
- (int) getPrAccess: (void **) data // TODO
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagAccess: (void **) data // TODO
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
MAPIStoreContext *context;
|
||||
WOContext *woContext;
|
||||
|
@ -88,8 +88,8 @@
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrAccessLevel: (void **) data // TODO
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagAccessLevel: (void **) data // TODO
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
MAPIStoreContext *context;
|
||||
MAPIStoreUserContext *userContext;
|
||||
|
@ -117,8 +117,8 @@
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrChangeKey: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagChangeKey: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
int rc = MAPISTORE_SUCCESS;
|
||||
NSData *changeKey;
|
||||
|
@ -145,18 +145,26 @@
|
|||
return rc;
|
||||
}
|
||||
|
||||
- (int) getPrPredecessorChangeList: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagPredecessorChangeList: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
int rc = MAPISTORE_SUCCESS;
|
||||
NSData *changeList;
|
||||
MAPIStoreGCSFolder *parentFolder;
|
||||
|
||||
if (isNew)
|
||||
rc = MAPISTORE_ERR_NOT_FOUND;
|
||||
else
|
||||
{
|
||||
changeList = [(MAPIStoreGCSFolder *)[self container]
|
||||
predecessorChangeListForMessageWithKey: [self nameInContainer]];
|
||||
parentFolder = (MAPIStoreGCSFolder *)[self container];
|
||||
changeList = [parentFolder
|
||||
predecessorChangeListForMessageWithKey: [self nameInContainer]];
|
||||
if (!changeList)
|
||||
{
|
||||
[parentFolder synchroniseCache];
|
||||
changeList = [parentFolder
|
||||
predecessorChangeListForMessageWithKey: [self nameInContainer]];
|
||||
}
|
||||
if (!changeList)
|
||||
abort ();
|
||||
*data = [changeList asBinaryInMemCtx: memCtx];
|
||||
|
|
|
@ -86,7 +86,7 @@
|
|||
MAPIRestrictionState rc;
|
||||
TALLOC_CTX *memCtx = NULL;
|
||||
|
||||
if (res->ulPropTag == PR_CHANGE_NUM)
|
||||
if (res->ulPropTag == PidTagChangeNumber)
|
||||
{
|
||||
value = NSObjectFromMAPISPropValue (&res->lpProp);
|
||||
lastModified = [(MAPIStoreGCSFolder *)
|
||||
|
|
|
@ -68,24 +68,24 @@
|
|||
ASSIGN (bodyInfo, newBodyInfo);
|
||||
}
|
||||
|
||||
- (int) getPrAttachMethod: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagAttachMethod: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = MAPILongValue (memCtx, 0x00000001); // afByValue
|
||||
|
||||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrAttachTag: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagAttachTag: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = [[self mimeAttachTag] asBinaryInMemCtx: memCtx];
|
||||
|
||||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrAttachSize: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagAttachSize: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
uint32_t longValue;
|
||||
|
||||
|
@ -95,8 +95,8 @@
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrRecordKey: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagRecordKey: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
static char recordBytes[] = {0xd9, 0xd8, 0x11, 0xa3, 0xe2, 0x90, 0x18, 0x41,
|
||||
0x9e, 0x04, 0x58, 0x46, 0x9d, 0x6d, 0x1b,
|
||||
|
@ -125,16 +125,16 @@
|
|||
return fileName;
|
||||
}
|
||||
|
||||
- (int) getPrAttachLongFilename: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagAttachLongFilename: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = [[self _fileName] asUnicodeInMemCtx: memCtx];
|
||||
|
||||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrAttachFilename: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagAttachFilename: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
NSString *fileName, *baseName, *ext;
|
||||
|
||||
|
@ -153,7 +153,7 @@
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrDisplayName: (void **) data
|
||||
- (int) getPidTagDisplayName: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = [[bodyInfo objectForKey: @"description"]
|
||||
|
@ -162,8 +162,8 @@
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrAttachContentId: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagAttachContentId: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = [[bodyInfo objectForKey: @"bodyId"]
|
||||
asUnicodeInMemCtx: memCtx];
|
||||
|
@ -171,21 +171,21 @@
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrAttachMimeTag: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagAttachMimeTag: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
NSString *mimeTag;
|
||||
|
||||
mimeTag = [NSString stringWithFormat: @"%@/%@",
|
||||
[bodyInfo objectForKey: @"type"],
|
||||
[bodyInfo objectForKey: @"subtype"]];
|
||||
[bodyInfo objectForKey: @"type"],
|
||||
[bodyInfo objectForKey: @"subtype"]];
|
||||
*data = [[mimeTag lowercaseString] asUnicodeInMemCtx: memCtx];
|
||||
|
||||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrAttachDataBin: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagAttachDataBinary: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = [[sogoObject fetchBLOBWithPeek: YES] asBinaryInMemCtx: memCtx];
|
||||
|
||||
|
|
|
@ -201,8 +201,8 @@ static Class SOGoMailFolderK, MAPIStoreOutboxFolderK;
|
|||
return (rc == MAPISTORE_SUCCESS) ? [super deleteFolder] : rc;
|
||||
}
|
||||
|
||||
- (int) getPrContentUnread: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagContentUnreadCount: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
EOQualifier *searchQualifier;
|
||||
uint32_t longValue;
|
||||
|
@ -217,7 +217,7 @@ static Class SOGoMailFolderK, MAPIStoreOutboxFolderK;
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrContainerClass: (void **) data
|
||||
- (int) getPidTagContainerClass: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = [@"IPF.Note" asUnicodeInMemCtx: memCtx];
|
||||
|
@ -225,7 +225,7 @@ static Class SOGoMailFolderK, MAPIStoreOutboxFolderK;
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrMessageClass: (void **) data
|
||||
- (int) getPidTagMessageClass: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = [@"IPM.Note" asUnicodeInMemCtx: memCtx];
|
||||
|
@ -902,7 +902,7 @@ _parseCOPYUID (NSString *line, NSArray **destUIDsP)
|
|||
{
|
||||
NGImap4Connection *connection;
|
||||
NGImap4Client *client;
|
||||
NSString *sourceFolderName, *targetFolderName, *messageURL, *v;
|
||||
NSString *sourceFolderName, *targetFolderName, *messageURL, *messageKey, *v;
|
||||
NSMutableArray *uids, *oldMessageURLs;
|
||||
NSNumber *uid;
|
||||
NSArray *destUIDs;
|
||||
|
@ -910,6 +910,7 @@ _parseCOPYUID (NSString *line, NSArray **destUIDsP)
|
|||
NSDictionary *result;
|
||||
NSUInteger count;
|
||||
NSArray *a;
|
||||
NSData *changeKey;
|
||||
|
||||
if (![sourceFolder isKindOfClass: [MAPIStoreMailFolder class]])
|
||||
return [super moveCopyMessagesWithMIDs: srcMids andCount: midCount
|
||||
|
@ -989,6 +990,17 @@ _parseCOPYUID (NSString *line, NSArray **destUIDsP)
|
|||
[mapping registerURL: messageURL withID: targetMids[count]];
|
||||
}
|
||||
|
||||
/* Update the change keys */
|
||||
[self synchroniseCache];
|
||||
for (count = 0; count < midCount; count++)
|
||||
{
|
||||
changeKey = [NSData dataWithBinary: targetChangeKeys[count]];
|
||||
messageKey = [NSString stringWithFormat: @"%@.eml",
|
||||
[destUIDs objectAtIndex: count]];
|
||||
[self setChangeKey: changeKey
|
||||
forMessageWithKey: messageKey];
|
||||
}
|
||||
|
||||
[self postNotificationsForMoveCopyMessagesWithMIDs: srcMids
|
||||
andMessageURLs: oldMessageURLs
|
||||
andCount: midCount
|
||||
|
@ -1085,7 +1097,7 @@ _parseCOPYUID (NSString *line, NSArray **destUIDsP)
|
|||
|
||||
@implementation MAPIStoreOutboxFolder
|
||||
|
||||
- (int) getPrDisplayName: (void **) data
|
||||
- (int) getPidTagDisplayName: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = [@"Outbox" asUnicodeInMemCtx: memCtx];
|
||||
|
|
|
@ -48,26 +48,26 @@
|
|||
|
||||
- (NSString *) subject;
|
||||
|
||||
- (int) getPrIconIndex: (void **) data
|
||||
- (int) getPidTagIconIndex: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPrFlagStatus: (void **) data
|
||||
- (int) getPidTagFlagStatus: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
|
||||
- (int) getPrMessageFlags: (void **) data
|
||||
- (int) getPidTagMessageFlags: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPrFollowupIcon: (void **) data
|
||||
- (int) getPidTagFollowupIcon: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPrImportance: (void **) data
|
||||
- (int) getPidTagImportance: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPrReceivedByEmailAddress: (void **) data
|
||||
- (int) getPidTagReceivedByEmailAddress: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPrSenderEmailAddress: (void **) data
|
||||
- (int) getPidTagSenderEmailAddress: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPrDisplayTo: (void **) data
|
||||
- (int) getPidTagDisplayTo: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPrDisplayCc: (void **) data
|
||||
- (int) getPidTagDisplayCc: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPrDisplayBcc: (void **) data
|
||||
- (int) getPidTagDisplayBcc: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
|
||||
@end
|
||||
|
|
|
@ -58,7 +58,6 @@
|
|||
#include <gen_ndr/exchange.h>
|
||||
#include <mapistore/mapistore.h>
|
||||
#include <mapistore/mapistore_errors.h>
|
||||
#include <mapistore/mapistore_nameid.h>
|
||||
|
||||
@class iCalCalendar, iCalEvent;
|
||||
|
||||
|
@ -294,8 +293,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
|
|||
return appointmentWrapper;
|
||||
}
|
||||
|
||||
- (int) getPrChangeKey: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagChangeKey: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
int rc = MAPISTORE_SUCCESS;
|
||||
NSData *changeKey;
|
||||
|
@ -330,8 +329,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
|
|||
return rc;
|
||||
}
|
||||
|
||||
- (int) getPrPredecessorChangeList: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagPredecessorChangeList: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
int rc = MAPISTORE_SUCCESS;
|
||||
NSData *changeList;
|
||||
|
@ -341,14 +340,14 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
|
|||
else
|
||||
{
|
||||
changeList = [(MAPIStoreMailFolder *)[self container]
|
||||
predecessorChangeListForMessageWithKey: [self nameInContainer]];
|
||||
predecessorChangeListForMessageWithKey: [self nameInContainer]];
|
||||
if (!changeList)
|
||||
{
|
||||
[self warnWithFormat: @"attempting to get predecessor change list"
|
||||
@" by synchronising folder..."];
|
||||
[(MAPIStoreMailFolder *) container synchroniseCache];
|
||||
changeList = [(MAPIStoreMailFolder *)[self container]
|
||||
predecessorChangeListForMessageWithKey: [self nameInContainer]];
|
||||
predecessorChangeListForMessageWithKey: [self nameInContainer]];
|
||||
if (changeList)
|
||||
[self logWithFormat: @"got one"];
|
||||
else
|
||||
|
@ -373,14 +372,14 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
|
|||
if (uid)
|
||||
{
|
||||
changeNumber = [(MAPIStoreMailFolder *) container
|
||||
changeNumberForMessageUID: uid];
|
||||
changeNumberForMessageUID: uid];
|
||||
if (!changeNumber)
|
||||
{
|
||||
[self warnWithFormat: @"attempting to get change number"
|
||||
@" by synchronising folder..."];
|
||||
[(MAPIStoreMailFolder *) container synchroniseCache];
|
||||
changeNumber = [(MAPIStoreMailFolder *) container
|
||||
changeNumberForMessageUID: uid];
|
||||
changeNumberForMessageUID: uid];
|
||||
if (changeNumber)
|
||||
[self logWithFormat: @"got one"];
|
||||
else
|
||||
|
@ -397,8 +396,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
|
|||
return version;
|
||||
}
|
||||
|
||||
- (int) getPrIconIndex: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagIconIndex: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
uint32_t longValue;
|
||||
|
||||
|
@ -406,7 +405,7 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
|
|||
[self _fetchHeaderData];
|
||||
|
||||
if (mailIsEvent)
|
||||
[[self _appointmentWrapper] getPrIconIndex: data inMemCtx: memCtx];
|
||||
[[self _appointmentWrapper] getPidTagIconIndex: data inMemCtx: memCtx];
|
||||
else
|
||||
{
|
||||
/* see http://msdn.microsoft.com/en-us/library/cc815472.aspx */
|
||||
|
@ -448,8 +447,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrSubject: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagSubject: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
NSString *stringValue;
|
||||
|
||||
|
@ -461,8 +460,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrSubjectPrefix: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagSubjectPrefix: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
NSString *subject;
|
||||
NSUInteger colIdx;
|
||||
|
@ -472,7 +471,7 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
|
|||
colIdx = [subject rangeOfString: @":"].location;
|
||||
if (colIdx != NSNotFound && colIdx < 4)
|
||||
stringValue = [NSString stringWithFormat: @"%@: ",
|
||||
[subject substringToIndex: colIdx]];
|
||||
[subject substringToIndex: colIdx]];
|
||||
else
|
||||
stringValue = @"";
|
||||
*data = [stringValue asUnicodeInMemCtx: memCtx];
|
||||
|
@ -480,8 +479,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrNormalizedSubject: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagNormalizedSubject: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
NSString *subject;
|
||||
NSUInteger colIdx;
|
||||
|
@ -507,15 +506,15 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
|
|||
return [self getYes: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrMessageClass: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagMessageClass: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
if (!headerSetup)
|
||||
[self _fetchHeaderData];
|
||||
|
||||
if (mailIsEvent)
|
||||
[[self _appointmentWrapper] getPrMessageClass: data
|
||||
inMemCtx: memCtx];
|
||||
[[self _appointmentWrapper] getPidTagMessageClass: data
|
||||
inMemCtx: memCtx];
|
||||
else
|
||||
*data = talloc_strdup (memCtx, "IPM.Note");
|
||||
|
||||
|
@ -523,7 +522,7 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
|
|||
}
|
||||
|
||||
/* Note: this applies to regular mails... */
|
||||
// - (int) getPrReplyRequested: (void **) data // TODO
|
||||
// - (int) getPidTagReplyRequested: (void **) data // TODO
|
||||
// inMemCtx: (TALLOC_CTX *) memCtx
|
||||
// {
|
||||
// if (!headerSetup)
|
||||
|
@ -535,8 +534,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
|
|||
// }
|
||||
|
||||
/* ... while this applies to invitations. */
|
||||
- (int) getPrResponseRequested: (void **) data // TODO
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagResponseRequested: (void **) data // TODO
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
if (!headerSetup)
|
||||
[self _fetchHeaderData];
|
||||
|
@ -546,32 +545,32 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
|
|||
: MAPISTORE_ERR_NOT_FOUND);
|
||||
}
|
||||
|
||||
- (int) getPrLatestDeliveryTime: (void **) data // DOUBT
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagLatestDeliveryTime: (void **) data // DOUBT
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getPrCreationTime: data inMemCtx: memCtx];
|
||||
return [self getPidTagCreationTime: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrOriginalSubmitTime: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagOriginalSubmitTime: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getPrCreationTime: data inMemCtx: memCtx];
|
||||
return [self getPidTagCreationTime: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrClientSubmitTime: (void **) data
|
||||
- (int) getPidTagClientSubmitTime: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getPidTagCreationTime: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPidTagMessageDeliveryTime: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getPidTagCreationTime: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPidTagMessageFlags: (void **) data // TODO
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getPrCreationTime: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrMessageDeliveryTime: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getPrCreationTime: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrMessageFlags: (void **) data // TODO
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
NSDictionary *coreInfos;
|
||||
NSArray *flags;
|
||||
|
@ -594,8 +593,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrFlagStatus: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagFlagStatus: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
NSDictionary *coreInfos;
|
||||
NSArray *flags;
|
||||
|
@ -614,8 +613,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrFollowupIcon: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagFollowupIcon: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
NSDictionary *coreInfos;
|
||||
NSArray *flags;
|
||||
|
@ -634,38 +633,38 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrSensitivity: (void **) data // TODO
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagSensitivity: (void **) data // TODO
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getLongZero: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrOriginalSensitivity: (void **) data // TODO
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagOriginalSensitivity: (void **) data // TODO
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getPrSensitivity: data inMemCtx: memCtx];
|
||||
return [self getPidTagSensitivity: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrSentRepresentingAddrtype: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagSentRepresentingAddressType: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getSMTPAddrType: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrRcvdRepresentingAddrtype: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagReceivedRepresentingAddressType: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getSMTPAddrType: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrReceivedByAddrtype: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagReceivedByAddressType: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getSMTPAddrType: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrSenderAddrtype: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagSenderAddressType: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getSMTPAddrType: data inMemCtx: memCtx];
|
||||
}
|
||||
|
@ -762,111 +761,111 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
|
|||
return rc;
|
||||
}
|
||||
|
||||
- (int) getPrSenderEmailAddress: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagSenderEmailAddress: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self _getEmailAddressFromEmail: [sogoObject from]
|
||||
inData: data
|
||||
inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrSenderName: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagSenderName: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self _getCNFromEmail: [sogoObject from]
|
||||
inData: data
|
||||
inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrSenderEntryid: (void **) data inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagSenderEntryId: (void **) data inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self _getEntryIdFromEmail: [sogoObject from]
|
||||
inData: data
|
||||
inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrOriginalAuthorName: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getPrSenderEmailAddress: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrSentRepresentingEmailAddress: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getPrSenderEmailAddress: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrSentRepresentingName: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getPrSenderName: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrSentRepresentingEntryid: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getPrSenderEntryid: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrReceivedByEmailAddress: (void **) data
|
||||
- (int) getPidTagOriginalAuthorName: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getPidTagSenderEmailAddress: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPidTagSentRepresentingEmailAddress: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getPidTagSenderEmailAddress: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPidTagSentRepresentingName: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getPidTagSenderName: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPidTagSentRepresentingEntryId: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getPidTagSenderEntryId: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPidTagReceivedByEmailAddress: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self _getEmailAddressFromEmail: [sogoObject to]
|
||||
inData: data
|
||||
inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrReceivedByName: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagReceivedByName: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self _getCNFromEmail: [sogoObject to]
|
||||
inData: data
|
||||
inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrReceivedByEntryid: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagReceivedByEntryId: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self _getEntryIdFromEmail: [sogoObject to]
|
||||
inData: data
|
||||
inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrRcvdRepresentingName: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getPrReceivedByName: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrRcvdRepresentingEmailAddress: (void **) data
|
||||
- (int) getPidTagReceivedRepresentingName: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getPrReceivedByEmailAddress: data inMemCtx: memCtx];
|
||||
return [self getPidTagReceivedByName: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrRcvdRepresentingEntryid: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagReceivedRepresentingEmailAddress: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getPrReceivedByEntryid: data inMemCtx: memCtx];
|
||||
return [self getPidTagReceivedByEmailAddress: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrDisplayTo: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagReceivedRepresentingEntryId: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getPidTagReceivedByEntryId: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPidTagDisplayTo: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = [[sogoObject to] asUnicodeInMemCtx: memCtx];
|
||||
|
||||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrOriginalDisplayTo: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagOriginalDisplayTo: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getPrDisplayTo: data inMemCtx: memCtx];
|
||||
return [self getPidTagDisplayTo: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrDisplayCc: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagDisplayCc: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
NSString *stringValue;
|
||||
|
||||
|
@ -879,22 +878,22 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrOriginalDisplayCc: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagOriginalDisplayCc: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getPrDisplayCc: data inMemCtx: memCtx];
|
||||
return [self getPidTagDisplayCc: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrDisplayBcc: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagDisplayBcc: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getEmptyString: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrOriginalDisplayBcc: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagOriginalDisplayBcc: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getPrDisplayBcc: data inMemCtx: memCtx];
|
||||
return [self getPidTagDisplayBcc: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPidNameContentType: (void **) data
|
||||
|
@ -905,8 +904,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrImportance: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagImportance: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
uint32_t v;
|
||||
NSString *s;
|
||||
|
@ -924,24 +923,24 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrInternetCpid: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagInternetCodepage: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
/* ref:
|
||||
http://msdn.microsoft.com/en-us/library/dd317756%28v=vs.85%29.aspx
|
||||
http://msdn.microsoft.com/en-us/library/dd317756%28v=vs.85%29.aspx
|
||||
|
||||
minimal list that should be handled:
|
||||
us-ascii: 20127
|
||||
iso-8859-1: 28591
|
||||
iso-8859-15: 28605
|
||||
utf-8: 65001 */
|
||||
minimal list that should be handled:
|
||||
us-ascii: 20127
|
||||
iso-8859-1: 28591
|
||||
iso-8859-15: 28605
|
||||
utf-8: 65001 */
|
||||
*data = MAPILongValue(memCtx, 65001);
|
||||
|
||||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrBody: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagBody: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
NSString *stringValue;
|
||||
int rc = MAPISTORE_SUCCESS;
|
||||
|
@ -955,8 +954,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
|
|||
*data = [stringValue asUnicodeInMemCtx: memCtx];
|
||||
}
|
||||
else if (mailIsEvent)
|
||||
rc = [[self _appointmentWrapper] getPrBody: data
|
||||
inMemCtx: memCtx];
|
||||
rc = [[self _appointmentWrapper] getPidTagBody: data
|
||||
inMemCtx: memCtx];
|
||||
else
|
||||
{
|
||||
*data = NULL;
|
||||
|
@ -966,8 +965,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
|
|||
return rc;
|
||||
}
|
||||
|
||||
- (int) getPrHtml: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagHtml: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
int rc = MAPISTORE_SUCCESS;
|
||||
|
||||
|
@ -985,36 +984,36 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
|
|||
return rc;
|
||||
}
|
||||
|
||||
- (int) getPrRtfCompressed: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagRtfCompressed: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = NULL;
|
||||
|
||||
return MAPISTORE_ERR_NOT_FOUND;
|
||||
}
|
||||
|
||||
- (int) getPrRtfInSync: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagRtfInSync: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getNo: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrInternetMessageId: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagInternetMessageId: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = [[sogoObject messageId] asUnicodeInMemCtx: memCtx];
|
||||
|
||||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrReadReceiptRequested: (void **) data // TODO
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagReadReceiptRequested: (void **) data // TODO
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getNo: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrDeleteAfterSubmit: (void **) data // TODO
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagDeleteAfterSubmit: (void **) data // TODO
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getNo: data inMemCtx: memCtx];
|
||||
}
|
||||
|
@ -1065,7 +1064,7 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
|
|||
: MAPISTORE_ERR_NOT_FOUND);
|
||||
}
|
||||
|
||||
- (int) getPrProcessed: (void **) data inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagProcessed: (void **) data inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
int rc;
|
||||
|
||||
|
@ -1104,8 +1103,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
|
|||
: [self getNo: data inMemCtx: memCtx]);
|
||||
}
|
||||
|
||||
- (int) getPrMsgEditorFormat: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagMessageEditorFormat: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
uint32_t format;
|
||||
|
||||
|
@ -1149,14 +1148,14 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
|
|||
}
|
||||
|
||||
/* event getters */
|
||||
- (int) getPrStartDate: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagStartDate: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
if (!headerSetup)
|
||||
[self _fetchHeaderData];
|
||||
|
||||
return (mailIsEvent
|
||||
? [[self _appointmentWrapper] getPrStartDate: data inMemCtx: memCtx]
|
||||
? [[self _appointmentWrapper] getPidTagStartDate: data inMemCtx: memCtx]
|
||||
: MAPISTORE_ERR_NOT_FOUND);
|
||||
}
|
||||
|
||||
|
@ -1200,14 +1199,14 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
|
|||
: MAPISTORE_ERR_NOT_FOUND);
|
||||
}
|
||||
|
||||
- (int) getPrEndDate: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagEndDate: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
if (!headerSetup)
|
||||
[self _fetchHeaderData];
|
||||
|
||||
return (mailIsEvent
|
||||
? [[self _appointmentWrapper] getPrEndDate: data inMemCtx: memCtx]
|
||||
? [[self _appointmentWrapper] getPidTagEndDate: data inMemCtx: memCtx]
|
||||
: MAPISTORE_ERR_NOT_FOUND);
|
||||
}
|
||||
|
||||
|
@ -1319,15 +1318,15 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
|
|||
: MAPISTORE_ERR_NOT_FOUND);
|
||||
}
|
||||
|
||||
- (int) getPrOwnerApptId: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagOwnerAppointmentId: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
if (!headerSetup)
|
||||
[self _fetchHeaderData];
|
||||
|
||||
return (mailIsEvent
|
||||
? [[self _appointmentWrapper] getPrOwnerApptId: data
|
||||
inMemCtx: memCtx]
|
||||
? [[self _appointmentWrapper] getPidTagOwnerAppointmentId: data
|
||||
inMemCtx: memCtx]
|
||||
: MAPISTORE_ERR_NOT_FOUND);
|
||||
}
|
||||
|
||||
|
|
|
@ -149,11 +149,11 @@ static Class MAPIStoreMailMessageK, NSDataK, NSStringK;
|
|||
rc = MAPIRestrictionStateAlwaysFalse;
|
||||
break;
|
||||
|
||||
case PR_CONVERSATION_KEY:
|
||||
case PidTagConversationKey:
|
||||
rc = MAPIRestrictionStateAlwaysFalse;
|
||||
break;
|
||||
|
||||
case PR_CHANGE_NUM:
|
||||
case PidTagChangeNumber:
|
||||
{
|
||||
modseq = [(MAPIStoreMailFolder *)
|
||||
container modseqFromMessageChangeNumber: value];
|
||||
|
@ -205,7 +205,7 @@ static Class MAPIStoreMailMessageK, NSDataK, NSStringK;
|
|||
else
|
||||
rc = MAPIRestrictionStateAlwaysFalse;
|
||||
break;
|
||||
case PR_CONVERSATION_KEY:
|
||||
case PidTagConversationKey:
|
||||
rc = MAPIRestrictionStateAlwaysFalse;
|
||||
break;
|
||||
default:
|
||||
|
|
|
@ -774,50 +774,55 @@ MakeMessageBody (NSDictionary *mailProperties, NSDictionary *attachmentParts,
|
|||
NSData *messageData;
|
||||
NSMutableArray *recipientEmails;
|
||||
NSArray *list;
|
||||
NSString *recId;
|
||||
NSString *recId, *from, *msgClass;
|
||||
NSUInteger count;
|
||||
struct mapistore_connection_info *connInfo;
|
||||
SOGoUser *activeUser;
|
||||
NSString *from;
|
||||
// SOGoMailFolder *sentFolder;
|
||||
SOGoDomainDefaults *dd;
|
||||
NSException *error;
|
||||
MAPIStoreMapping *mapping;
|
||||
|
||||
/* send mail */
|
||||
|
||||
messageData = [self _generateMailDataWithBcc: NO];
|
||||
|
||||
mailProperties = [sogoObject properties];
|
||||
recipientEmails = [NSMutableArray arrayWithCapacity: 32];
|
||||
recipients = [mailProperties objectForKey: @"recipients"];
|
||||
for (count = 0; count < 3; count++)
|
||||
msgClass = [mailProperties objectForKey: MAPIPropertyKey (PidTagMessageClass)];
|
||||
if ([msgClass isEqualToString: @"IPM.Note"]) /* we skip invitation replies */
|
||||
{
|
||||
recId = recTypes[count];
|
||||
list = [recipients objectForKey: recId];
|
||||
[recipientEmails
|
||||
addObjectsFromArray: [list objectsForKey: @"email"
|
||||
notFoundMarker: nil]];
|
||||
}
|
||||
/* send mail */
|
||||
|
||||
connInfo = [[self context] connectionInfo];
|
||||
activeUser = [SOGoUser userWithLogin: [NSString stringWithUTF8String: connInfo->username]];
|
||||
messageData = [self _generateMailDataWithBcc: NO];
|
||||
|
||||
mailProperties = [sogoObject properties];
|
||||
recipientEmails = [NSMutableArray arrayWithCapacity: 32];
|
||||
recipients = [mailProperties objectForKey: @"recipients"];
|
||||
for (count = 0; count < 3; count++)
|
||||
{
|
||||
recId = recTypes[count];
|
||||
list = [recipients objectForKey: recId];
|
||||
[recipientEmails
|
||||
addObjectsFromArray: [list objectsForKey: @"email"
|
||||
notFoundMarker: nil]];
|
||||
}
|
||||
|
||||
[self logWithFormat: @"recipients: %@", recipientEmails];
|
||||
dd = [activeUser domainDefaults];
|
||||
from = [[activeUser allEmails] objectAtIndex: 0];
|
||||
error = [[SOGoMailer mailerWithDomainDefaults: dd]
|
||||
activeUser = [[self context] activeUser];
|
||||
|
||||
[self logWithFormat: @"recipients: %@", recipientEmails];
|
||||
dd = [activeUser domainDefaults];
|
||||
from = [[activeUser allEmails] objectAtIndex: 0];
|
||||
error = [[SOGoMailer mailerWithDomainDefaults: dd]
|
||||
sendMailData: messageData
|
||||
toRecipients: recipientEmails
|
||||
sender: from];
|
||||
if (error)
|
||||
[self logWithFormat: @"an error occurred: '%@'", error];
|
||||
if (error)
|
||||
[self logWithFormat: @"an error occurred: '%@'", error];
|
||||
|
||||
mapping = [self mapping];
|
||||
[mapping unregisterURLWithID: [self objectId]];
|
||||
[self setIsNew: NO];
|
||||
[properties removeAllObjects];
|
||||
[[self container] cleanupCaches];
|
||||
mapping = [self mapping];
|
||||
[mapping unregisterURLWithID: [self objectId]];
|
||||
[self setIsNew: NO];
|
||||
[properties removeAllObjects];
|
||||
[[self container] cleanupCaches];
|
||||
}
|
||||
else
|
||||
[self logWithFormat: @"skipping submit of message with class '%@'",
|
||||
msgClass];
|
||||
|
||||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
|
|
@ -53,7 +53,6 @@
|
|||
#include <gen_ndr/exchange.h>
|
||||
#include <mapistore/mapistore.h>
|
||||
#include <mapistore/mapistore_errors.h>
|
||||
#include <mapistore/mapistore_nameid.h>
|
||||
|
||||
static NSString *resourcesDir = nil;
|
||||
|
||||
|
@ -164,16 +163,16 @@ rtf2html (NSData *compressedRTF)
|
|||
// __FUNCTION__, __LINE__];
|
||||
|
||||
msgData = talloc_zero (memCtx, struct mapistore_message);
|
||||
|
||||
if ([self getPrSubjectPrefix: &propValue
|
||||
inMemCtx: msgData] == MAPISTORE_SUCCESS
|
||||
|
||||
if ([self getPidTagSubjectPrefix: &propValue
|
||||
inMemCtx: msgData] == MAPISTORE_SUCCESS
|
||||
&& propValue)
|
||||
msgData->subject_prefix = propValue;
|
||||
else
|
||||
msgData->subject_prefix = "";
|
||||
|
||||
if ([self getPrNormalizedSubject: &propValue
|
||||
inMemCtx: msgData] == MAPISTORE_SUCCESS
|
||||
if ([self getPidTagNormalizedSubject: &propValue
|
||||
inMemCtx: msgData] == MAPISTORE_SUCCESS
|
||||
&& propValue)
|
||||
msgData->normalized_subject = propValue;
|
||||
else
|
||||
|
@ -421,8 +420,8 @@ rtf2html (NSData *compressedRTF)
|
|||
- (NSArray *) activeContainerMessageTables
|
||||
{
|
||||
return [[MAPIStoreActiveTables activeTables]
|
||||
activeTablesForFMID: [container objectId]
|
||||
andType: MAPISTORE_MESSAGE_TABLE];
|
||||
activeTablesForFMID: [container objectId]
|
||||
andType: MAPISTORE_MESSAGE_TABLE];
|
||||
}
|
||||
|
||||
- (enum mapistore_error) saveMessage
|
||||
|
@ -517,8 +516,8 @@ rtf2html (NSData *compressedRTF)
|
|||
}
|
||||
|
||||
/* getters */
|
||||
- (int) getPrInstId: (void **) data // TODO: DOUBT
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagInstID: (void **) data // TODO: DOUBT
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
/* we return a unique id based on the key */
|
||||
*data = MAPILongLongValue (memCtx, [[sogoObject nameInContainer] hash]);
|
||||
|
@ -526,22 +525,22 @@ rtf2html (NSData *compressedRTF)
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrInstanceNum: (void **) data // TODO: DOUBT
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagInstanceNum: (void **) data // TODO: DOUBT
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getLongZero: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrRowType: (void **) data // TODO: DOUBT
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagRowType: (void **) data // TODO: DOUBT
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = MAPILongValue (memCtx, TBL_LEAF_ROW);
|
||||
|
||||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrDepth: (void **) data // TODO: DOUBT
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagDepth: (void **) data // TODO: DOUBT
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = MAPILongLongValue (memCtx, 0);
|
||||
|
||||
|
@ -558,8 +557,8 @@ rtf2html (NSData *compressedRTF)
|
|||
0x00000010 Create Contents Table
|
||||
0x00000020 Create Associated Contents Table
|
||||
*/
|
||||
- (int) getPrAccess: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagAccess: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
uint32_t access = 0;
|
||||
BOOL userIsOwner;
|
||||
|
@ -587,8 +586,8 @@ rtf2html (NSData *compressedRTF)
|
|||
0x00000000 Read-Only
|
||||
0x00000001 Modify
|
||||
*/
|
||||
- (int) getPrAccessLevel: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagAccessLevel: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
uint32_t access = 0;
|
||||
BOOL userIsOwner;
|
||||
|
@ -645,40 +644,40 @@ rtf2html (NSData *compressedRTF)
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrFid: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagFolderId: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = MAPILongLongValue (memCtx, [container objectId]);
|
||||
|
||||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrMid: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagMid: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = MAPILongLongValue (memCtx, [self objectId]);
|
||||
|
||||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrMessageLocaleId: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagMessageLocaleId: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = MAPILongValue (memCtx, 0x0409);
|
||||
|
||||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrMessageFlags: (void **) data // TODO
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagMessageFlags: (void **) data // TODO
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = MAPILongValue (memCtx, MSGFLAG_FROMME | MSGFLAG_READ | MSGFLAG_UNMODIFIED);
|
||||
|
||||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrMessageSize: (void **) data // TODO
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagMessageSize: (void **) data // TODO
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
/* TODO: choose another name in SOGo for that method */
|
||||
*data = MAPILongValue (memCtx, [[sogoObject davContentLength] intValue]);
|
||||
|
@ -686,99 +685,99 @@ rtf2html (NSData *compressedRTF)
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrMsgStatus: (void **) data // TODO
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagMessageStatus: (void **) data // TODO
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getLongZero: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrImportance: (void **) data // TODO -> subclass?
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagImportance: (void **) data // TODO -> subclass?
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = MAPILongValue (memCtx, 1);
|
||||
|
||||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrPriority: (void **) data // TODO -> subclass?
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagPriority: (void **) data // TODO -> subclass?
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getLongZero: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrSensitivity: (void **) data // TODO -> subclass in calendar
|
||||
- (int) getPidTagSensitivity: (void **) data // TODO -> subclass in calendar
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getLongZero: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPidTagSubject: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getLongZero: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrSubject: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
[self subclassResponsibility: _cmd];
|
||||
|
||||
return MAPISTORE_ERR_NOT_FOUND;
|
||||
}
|
||||
|
||||
- (int) getPrNormalizedSubject: (void **) data
|
||||
- (int) getPidTagNormalizedSubject: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getPidTagSubject: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPidTagOriginalSubject: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getPidTagNormalizedSubject: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPidTagConversationTopic: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getPidTagNormalizedSubject: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPidTagSubjectPrefix: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getPrSubject: data inMemCtx: memCtx];
|
||||
return [self getEmptyString: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrOriginalSubject: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getPrNormalizedSubject: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrConversationTopic: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getPrNormalizedSubject: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrSubjectPrefix: (void **) data
|
||||
- (int) getPidTagDisplayTo: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getEmptyString: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrDisplayTo: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagDisplayCc: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getEmptyString: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrDisplayCc: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagDisplayBcc: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getEmptyString: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrDisplayBcc: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getEmptyString: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
// - (int) getPrOriginalDisplayTo: (void **) data
|
||||
// - (int) getPidTagOriginalDisplayTo: (void **) data
|
||||
// {
|
||||
// return [self getPrDisplayTo: data];
|
||||
// return [self getPidTagDisplayTo: data];
|
||||
// }
|
||||
|
||||
// - (int) getPrOriginalDisplayCc: (void **) data
|
||||
// - (int) getPidTagOriginalDisplayCc: (void **) data
|
||||
// {
|
||||
// return [self getPrDisplayCc: data];
|
||||
// return [self getPidTagDisplayCc: data];
|
||||
// }
|
||||
|
||||
// - (int) getPrOriginalDisplayBcc: (void **) data
|
||||
// - (int) getPidTagOriginalDisplayBcc: (void **) data
|
||||
// {
|
||||
// return [self getPrDisplayBcc: data];
|
||||
// return [self getPidTagDisplayBcc: data];
|
||||
// }
|
||||
|
||||
- (int) getPrLastModifierName: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagLastModifierName: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
NSURL *contextUrl;
|
||||
|
||||
|
@ -788,22 +787,22 @@ rtf2html (NSData *compressedRTF)
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrMessageClass: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagMessageClass: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
[self subclassResponsibility: _cmd];
|
||||
|
||||
return MAPISTORE_ERR_NOT_FOUND;
|
||||
}
|
||||
|
||||
- (int) getPrOrigMessageClass: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagOriginalMessageClass: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getPrMessageClass: data inMemCtx: memCtx];
|
||||
return [self getPidTagMessageClass: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrHasattach: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagHasAttachments: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = MAPIBoolValue (memCtx,
|
||||
[[self attachmentKeys] count] > 0);
|
||||
|
@ -811,8 +810,8 @@ rtf2html (NSData *compressedRTF)
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrAssociated: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagAssociated: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getNo: data inMemCtx: memCtx];;
|
||||
}
|
||||
|
|
|
@ -32,8 +32,8 @@
|
|||
|
||||
@implementation MAPIStoreNotesMessage
|
||||
|
||||
- (int) getPrIconIndex: (void **) data // TODO
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagIconIndex: (void **) data // TODO
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
/* see http://msdn.microsoft.com/en-us/library/cc815472.aspx */
|
||||
// *longValue = 0x00000300 for blue
|
||||
|
@ -46,23 +46,23 @@
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrMessageClass: (void **) data inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagMessageClass: (void **) data inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = [@"IPM.StickyNote" asUnicodeInMemCtx: memCtx];
|
||||
|
||||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrSubject: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagSubject: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
id value;
|
||||
int rc;
|
||||
|
||||
value = [[sogoObject properties]
|
||||
objectForKey: MAPIPropertyKey (PR_NORMALIZED_SUBJECT_UNICODE)];
|
||||
objectForKey: MAPIPropertyKey (PidTagNormalizedSubject)];
|
||||
if (value)
|
||||
rc = [value getValue: data forTag: PR_NORMALIZED_SUBJECT_UNICODE
|
||||
rc = [value getValue: data forTag: PidTagNormalizedSubject
|
||||
inMemCtx: memCtx];
|
||||
else
|
||||
rc = MAPISTORE_ERR_NOT_FOUND;
|
||||
|
|
|
@ -107,22 +107,22 @@
|
|||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
|
||||
/* implemented getters */
|
||||
- (int) getPrDisplayName: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPrSearchKey: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPrGenerateExchangeViews: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPrParentSourceKey: (void **) data
|
||||
- (int) getPidTagDisplayName: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPrSourceKey: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPrChangeKey: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPrCreationTime: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPrLastModificationTime: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPidTagSearchKey: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPidTagGenerateExchangeViews: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPidTagParentSourceKey: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPidTagSourceKey: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPidTagChangeKey: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPidTagCreationTime: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
- (int) getPidTagLastModificationTime: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx;
|
||||
|
||||
/* subclasses */
|
||||
- (uint64_t) objectVersion;
|
||||
|
|
|
@ -294,7 +294,7 @@ static Class NSExceptionK, MAPIStoreFolderK;
|
|||
}
|
||||
|
||||
/* getters */
|
||||
- (int) getPrDisplayName: (void **) data
|
||||
- (int) getPidTagDisplayName: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = [[sogoObject displayName] asUnicodeInMemCtx: memCtx];
|
||||
|
@ -302,7 +302,7 @@ static Class NSExceptionK, MAPIStoreFolderK;
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrSearchKey: (void **) data
|
||||
- (int) getPidTagSearchKey: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
NSString *stringValue;
|
||||
|
@ -314,20 +314,20 @@ static Class NSExceptionK, MAPIStoreFolderK;
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrGenerateExchangeViews: (void **) data
|
||||
- (int) getPidTagGenerateExchangeViews: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getNo: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrParentSourceKey: (void **) data
|
||||
- (int) getPidTagParentSourceKey: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getReplicaKey: data fromGlobCnt: [container objectId] >> 16
|
||||
inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrSourceKey: (void **) data
|
||||
- (int) getPidTagSourceKey: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getReplicaKey: data fromGlobCnt: [self objectId] >> 16
|
||||
|
@ -341,7 +341,7 @@ static Class NSExceptionK, MAPIStoreFolderK;
|
|||
return ULLONG_MAX;
|
||||
}
|
||||
|
||||
- (int) getPrChangeKey: (void **) data
|
||||
- (int) getPidTagChangeKey: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
int rc;
|
||||
|
@ -357,7 +357,7 @@ static Class NSExceptionK, MAPIStoreFolderK;
|
|||
return rc;
|
||||
}
|
||||
|
||||
- (int) getPrChangeNum: (void **) data
|
||||
- (int) getPidTagChangeNumber: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
int rc;
|
||||
|
@ -376,7 +376,7 @@ static Class NSExceptionK, MAPIStoreFolderK;
|
|||
return rc;
|
||||
}
|
||||
|
||||
- (int) getPrCreationTime: (void **) data
|
||||
- (int) getPidTagCreationTime: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = [[self creationTime] asFileTimeInMemCtx: memCtx];
|
||||
|
@ -384,7 +384,7 @@ static Class NSExceptionK, MAPIStoreFolderK;
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrLastModificationTime: (void **) data
|
||||
- (int) getPidTagLastModificationTime: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = [[self lastModificationTime] asFileTimeInMemCtx: memCtx];
|
||||
|
|
|
@ -84,16 +84,16 @@
|
|||
return memberId;
|
||||
}
|
||||
|
||||
- (int) getPrMemberId: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagMemberId: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = MAPILongLongValue (memCtx, memberId);
|
||||
|
||||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrEntryid: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagEntryId: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
NSData *entryId;
|
||||
struct mapistore_connection_info *connInfo;
|
||||
|
@ -110,8 +110,8 @@
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrMemberName: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagMemberName: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
NSString *displayName;
|
||||
|
||||
|
@ -127,8 +127,8 @@
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrMemberRights: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagMemberRights: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
uint32_t rights;
|
||||
NSArray *roles;
|
||||
|
|
|
@ -48,17 +48,9 @@
|
|||
return [MAPIStoreTasksMessageTable tableForContainer: self];
|
||||
}
|
||||
|
||||
- (EOQualifier *) componentQualifier
|
||||
- (NSString *) component
|
||||
{
|
||||
static EOQualifier *componentQualifier = nil;
|
||||
|
||||
if (!componentQualifier)
|
||||
componentQualifier
|
||||
= [[EOKeyValueQualifier alloc] initWithKey: @"c_component"
|
||||
operatorSelector: EOQualifierOperatorEqual
|
||||
value: @"vtodo"];
|
||||
|
||||
return componentQualifier;
|
||||
return @"vtodo";
|
||||
}
|
||||
|
||||
- (MAPIStoreMessage *) createMessage
|
||||
|
|
|
@ -66,8 +66,8 @@
|
|||
|
||||
@implementation MAPIStoreTasksMessage
|
||||
|
||||
- (int) getPrIconIndex: (void **) data // TODO
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagIconIndex: (void **) data // TODO
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
/* see http://msdn.microsoft.com/en-us/library/cc815472.aspx */
|
||||
// Unassigned recurring task 0x00000501
|
||||
|
@ -81,16 +81,16 @@
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrMessageClass: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagMessageClass: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = talloc_strdup(memCtx, "IPM.Task");
|
||||
|
||||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrSubject: (void **) data // SUMMARY
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagSubject: (void **) data // SUMMARY
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
iCalToDo *task;
|
||||
|
||||
|
@ -100,8 +100,8 @@
|
|||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrImportance: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagImportance: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
uint32_t v;
|
||||
iCalToDo *task;
|
||||
|
@ -201,8 +201,8 @@
|
|||
return [self getLongZero: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrHasattach: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagHasAttachments: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getNo: data inMemCtx: memCtx];
|
||||
}
|
||||
|
@ -242,22 +242,22 @@
|
|||
}
|
||||
|
||||
|
||||
- (int) getPrMessageDeliveryTime: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagMessageDeliveryTime: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getPrLastModificationTime: data inMemCtx: memCtx];
|
||||
return [self getPidTagLastModificationTime: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getClientSubmitTime: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getPrLastModificationTime: data inMemCtx: memCtx];
|
||||
return [self getPidTagLastModificationTime: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getLocalCommitTime: (void **) data
|
||||
inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
return [self getPrLastModificationTime: data inMemCtx: memCtx];
|
||||
return [self getPidTagLastModificationTime: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPidLidTaskStatus: (void **) data // status
|
||||
|
@ -466,7 +466,7 @@
|
|||
value = [properties objectForKey: MAPIPropertyKey (PR_CHANGE_KEY)];
|
||||
if (value)
|
||||
[(MAPIStoreTasksFolder *) container
|
||||
setChangeKey: value forMessageWithKey: [self nameInContainer]];
|
||||
setChangeKey: value forMessageWithKey: [self nameInContainer]];
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
|
@ -42,6 +42,8 @@ id NSObjectFromSPropValue (const struct SPropValue *);
|
|||
id NSObjectFromMAPISPropValue (const struct mapi_SPropValue *);
|
||||
id NSObjectFromValuePointer (enum MAPITAGS, const void *);
|
||||
|
||||
NSComparisonResult MAPICNCompare (uint64_t cn1, uint64_t cn2);
|
||||
|
||||
static inline NSNumber *
|
||||
MAPIPropertyKey (enum MAPITAGS propTag)
|
||||
{
|
||||
|
|
|
@ -96,6 +96,7 @@ NSObjectFromMAPISPropValue (const struct mapi_SPropValue *value)
|
|||
result = [NSNumber numberWithUnsignedShort: value->value.i];
|
||||
break;
|
||||
case PT_LONG:
|
||||
case PT_ERROR:
|
||||
result = [NSNumber numberWithUnsignedLong: value->value.l];
|
||||
break;
|
||||
case PT_I8:
|
||||
|
@ -175,6 +176,7 @@ NSObjectFromSPropValue (const struct SPropValue *value)
|
|||
result = [NSNumber numberWithShort: value->value.i];
|
||||
break;
|
||||
case PT_LONG:
|
||||
case PT_ERROR:
|
||||
result = [NSNumber numberWithLong: value->value.l];
|
||||
break;
|
||||
case PT_I8:
|
||||
|
@ -268,6 +270,34 @@ NSObjectFromValuePointer (enum MAPITAGS propTag, const void *data)
|
|||
return result;
|
||||
}
|
||||
|
||||
static uint64_t
|
||||
_reverseCN (uint64_t cn)
|
||||
{
|
||||
return ((cn & UINT64_C (0x00000000000000ff)) << 56
|
||||
| (cn & UINT64_C (0x000000000000ff00)) << 40
|
||||
| (cn & UINT64_C (0x0000000000ff0000)) << 24
|
||||
| (cn & UINT64_C (0x00000000ff000000)) << 8
|
||||
| (cn & UINT64_C (0x000000ff00000000)) >> 8
|
||||
| (cn & UINT64_C (0x0000ff0000000000)) >> 24
|
||||
| (cn & UINT64_C (0x00ff000000000000)) >> 40
|
||||
| (cn & UINT64_C (0xff00000000000000)) >> 56);
|
||||
}
|
||||
|
||||
NSComparisonResult
|
||||
MAPICNCompare (uint64_t cn1, uint64_t cn2)
|
||||
{
|
||||
NSComparisonResult result;
|
||||
|
||||
if (cn1 == cn2)
|
||||
result = NSOrderedSame;
|
||||
else if (_reverseCN (cn1) < _reverseCN (cn2))
|
||||
result = NSOrderedAscending;
|
||||
else
|
||||
result = NSOrderedDescending;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void
|
||||
MAPIStoreDumpMessageProperties (NSDictionary *properties)
|
||||
{
|
||||
|
|
|
@ -188,7 +188,7 @@ static NSMapTable *contextsTable = nil;
|
|||
[rootFolders setObject: currentFolder
|
||||
forKey: @"mail"];
|
||||
[[currentFolder imap4Connection]
|
||||
enableExtension: @"QRESYNC"];
|
||||
enableExtensions: [NSArray arrayWithObject: @"QRESYNC"]];
|
||||
}
|
||||
|
||||
return rootFolders;
|
||||
|
|
|
@ -121,21 +121,21 @@ Class NSNumberK;
|
|||
return rc;
|
||||
}
|
||||
|
||||
- (int) getPrSubject: (void **) data inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagSubject: (void **) data inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
/* if we get here, it means that the properties file didn't contain a
|
||||
relevant value */
|
||||
return [self getEmptyString: data inMemCtx: memCtx];
|
||||
}
|
||||
|
||||
- (int) getPrMessageClass: (void **) data inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagMessageClass: (void **) data inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
*data = [@"IPM.Note" asUnicodeInMemCtx: memCtx];
|
||||
|
||||
return MAPISTORE_SUCCESS;
|
||||
}
|
||||
|
||||
- (int) getPrChangeKey: (void **) data inMemCtx: (TALLOC_CTX *) memCtx
|
||||
- (int) getPidTagChangeKey: (void **) data inMemCtx: (TALLOC_CTX *) memCtx
|
||||
{
|
||||
NSData *changeKey;
|
||||
int rc;
|
||||
|
@ -148,7 +148,7 @@ Class NSNumberK;
|
|||
rc = MAPISTORE_SUCCESS;
|
||||
}
|
||||
else
|
||||
rc = [super getPrChangeKey: data inMemCtx: memCtx];
|
||||
rc = [super getPidTagChangeKey: data inMemCtx: memCtx];
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
/* mapi structs */
|
||||
+ (id) arrayFromMAPIMVLong: (const struct mapi_MV_LONG_STRUCT *) mvLong;
|
||||
+ (id) arrayFromMAPIMVUnicode: (const struct mapi_SPLSTRArrayW *) mvUnicode;
|
||||
+ (id) arrayFromMAPIMVUnicode: (const struct mapi_SLPSTRArrayW *) mvUnicode;
|
||||
+ (id) arrayFromMAPIMVString: (const struct mapi_SLPSTRArray *) mvString;
|
||||
+ (id) arrayFromMAPIMVBinary: (const struct mapi_SBinaryArray *) mvBinary;
|
||||
+ (id) arrayFromMAPIMVGuid: (const struct mapi_SGuidArray *) mvGuid;
|
||||
|
@ -39,8 +39,8 @@
|
|||
- (struct LongArray_r *) asMVLongInMemCtx: (void *) memCtx;
|
||||
+ (id) arrayFromMVI8: (const struct I8Array_r *) mvI8;
|
||||
+ (id) arrayFromMVString: (const struct StringArray_r *) mvString;
|
||||
+ (id) arrayFromMVUnicode: (const struct WStringArray_r *) mvUnicode;
|
||||
- (struct WStringArray_r *) asMVUnicodeInMemCtx: (void *) memCtx;
|
||||
+ (id) arrayFromMVUnicode: (const struct StringArrayW_r *) mvUnicode;
|
||||
- (struct StringArrayW_r *) asMVUnicodeInMemCtx: (void *) memCtx;
|
||||
+ (id) arrayFromMVBinary: (const struct BinaryArray_r *) mvBinary;
|
||||
- (struct BinaryArray_r *) asMVBinaryInMemCtx: (void *) memCtx;
|
||||
+ (id) arrayFromMVGuid: (const struct FlatUIDArray_r *) mvGuid;
|
||||
|
|
|
@ -52,7 +52,7 @@
|
|||
return mvResult;
|
||||
}
|
||||
|
||||
+ (id) arrayFromMAPIMVUnicode: (struct mapi_SPLSTRArrayW *) mvUnicode
|
||||
+ (id) arrayFromMAPIMVUnicode: (struct mapi_SLPSTRArrayW *) mvUnicode
|
||||
{
|
||||
NSUInteger count;
|
||||
NSString *subObject;
|
||||
|
@ -185,7 +185,7 @@
|
|||
return mvResult;
|
||||
}
|
||||
|
||||
+ (id) arrayFromMVUnicode: (const struct WStringArray_r *) mvUnicode
|
||||
+ (id) arrayFromMVUnicode: (const struct StringArrayW_r *) mvUnicode
|
||||
{
|
||||
NSUInteger count;
|
||||
NSString *subObject;
|
||||
|
@ -201,14 +201,14 @@
|
|||
return mvResult;
|
||||
}
|
||||
|
||||
- (struct WStringArray_r *) asMVUnicodeInMemCtx: (void *) memCtx
|
||||
- (struct StringArrayW_r *) asMVUnicodeInMemCtx: (void *) memCtx
|
||||
{
|
||||
struct WStringArray_r *list;
|
||||
struct StringArrayW_r *list;
|
||||
NSInteger count, max;
|
||||
|
||||
max = [self count];
|
||||
|
||||
list = talloc_zero (memCtx, struct WStringArray_r);
|
||||
list = talloc_zero (memCtx, struct StringArrayW_r);
|
||||
list->cValues = max;
|
||||
list->lppszW = talloc_array (list, const char *, max);
|
||||
|
||||
|
|
|
@ -106,15 +106,32 @@ extern const enum MAPITAGS MAPIStoreSupportedProperties[];
|
|||
|
||||
# hack: some properties have multiple and incompatible types. Sometimes those
|
||||
# props are not related at all...
|
||||
bannedProps = { "PrBodyHtml": True, "PrFavAutosubfolders": True,
|
||||
"PrAttachDataObj": True, "PrAclTable": True,
|
||||
"PrAclData": True, "PrRulesTable": True, "PrRulesData": True,
|
||||
"PrDisableWinsock": True, "PrHierarchyServer": True,
|
||||
"PrOfflineAddrbookEntryid": True,
|
||||
"PrShorttermEntryidFromObject": True,
|
||||
"PrNormalMessageSizeExtended": True,
|
||||
"PrAssocMessageSizeExtended": True,
|
||||
"PrMessageSizeExtended": True }
|
||||
bannedProps = [ "PidTagBodyHtml", "PidTagFavAutosubfolders",
|
||||
"PidTagAttachDataObj", "PidTagAclTable", "PidTagAclData",
|
||||
"PidTagRulesTable", "PidTagRulesData", "PidTagDisableWinsock",
|
||||
"PidTagHierarchyServer", "PidTagOfflineAddrbookEntryid",
|
||||
"PidTagShorttermEntryidFromObject",
|
||||
"PidTagNormalMessageSizeExtended",
|
||||
"PidTagAssocMessageSizeExtended", "PidTagMessageSizeExtended",
|
||||
"PidTagOabContainerGuid",
|
||||
"PidTagOfflineAddressBookMessageClass", "PidTagScriptData",
|
||||
"PidTagOfflineAddressBookTruncatedProperties",
|
||||
"PidTagOfflineAddressBookContainerGuid",
|
||||
"PidTagOfflineAddressBookDistinguishedName",
|
||||
"PidTagOfflineAddressBookShaHash",
|
||||
"PidTagSenderTelephoneNumber", "PidTagGatewayNeedsToRefresh",
|
||||
"PidTagWlinkType", "PidTagWlinkFlags",
|
||||
"PidTagWlinkGroupClsid", "PidTagWlinkGroupName",
|
||||
"PidTagWlinkGroupHeaderID",
|
||||
"PidTagScheduleInfoDelegatorWantsCopy", "PidTagWlinkOrdinal",
|
||||
"PidTagWlinkSection", "PidTagWlinkCalendarColor",
|
||||
"PidTagWlinkAddressBookEID", "PidTagWlinkFolderType",
|
||||
"PidTagScheduleInfoDelegateNames",
|
||||
"PidTagScheduleInfoDelegateEntryIds",
|
||||
"PidTagBusiness2TelephoneNumbers",
|
||||
"PidTagHome2TelephoneNumbers",
|
||||
"PidTagAttachDataObject", "PidTagShorttermEntryIdFromObject",
|
||||
]
|
||||
|
||||
def ParseExchangeH(names, lines):
|
||||
state = 0
|
||||
|
@ -135,23 +152,15 @@ def ParseExchangeH(names, lines):
|
|||
ParseExchangeHDefinition(names, stripped)
|
||||
x = x + 1
|
||||
|
||||
def GenExchangeHName(startname):
|
||||
parts = startname.split("_")
|
||||
newParts = []
|
||||
for part in parts:
|
||||
newParts.append("%s%s" % (part[0].upper(), part[1:].lower()))
|
||||
|
||||
return "".join(newParts)
|
||||
|
||||
def ParseExchangeHDefinition(names, line):
|
||||
stripped = line.strip()
|
||||
eqIdx = stripped.find("=")
|
||||
if eqIdx == -1:
|
||||
raise Exception, "line does not contain a '='"
|
||||
propName = GenExchangeHName(stripped[0:eqIdx])
|
||||
if not propName.endswith("Error") and not propName.endswith("Unicode") \
|
||||
and not propName.startswith("PrProfile") \
|
||||
and not bannedProps.has_key(propName):
|
||||
|
||||
propName = stripped[0:eqIdx]
|
||||
if not propName.endswith("_Error") and not propName.endswith("_string8") \
|
||||
and propName not in bannedProps:
|
||||
intIdx = stripped.find("(int", eqIdx)
|
||||
valueIdx = stripped.find("0x", intIdx + 1)
|
||||
endIdx = stripped.find(")", valueIdx)
|
||||
|
@ -172,9 +181,9 @@ def ParseMapistoreNameIDHDefinition(names, line):
|
|||
raise Exception, "line does not contain a 'Pid'"
|
||||
valueIdx = stripped.find("0x")
|
||||
propName = stripped[pidIdx:valueIdx].strip()
|
||||
value = int(stripped[valueIdx:], 16)
|
||||
|
||||
names[propName] = value
|
||||
if not propName.startswith("PidLidUnknown") and propName not in bannedProps:
|
||||
value = int(stripped[valueIdx:], 16)
|
||||
names[propName] = value
|
||||
|
||||
def FindHFile(filename):
|
||||
found = None
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
diff -durpN unrtf-0.21.2.old/outputs/html.conf unrtf-0.21.2/outputs/html.conf
|
||||
--- unrtf-0.21.2.old/outputs/html.conf 2010-08-15 08:44:09.000000000 -0400
|
||||
+++ unrtf-0.21.2/outputs/html.conf 2011-11-09 15:53:21.802783775 -0500
|
||||
+++ unrtf-0.21.2/outputs/html.conf 2012-03-13 16:38:53.295941363 -0400
|
||||
@@ -5,7 +5,7 @@ comment_end
|
||||
-->
|
||||
|
||||
|
@ -10,9 +10,18 @@ diff -durpN unrtf-0.21.2.old/outputs/html.conf unrtf-0.21.2/outputs/html.conf
|
|||
#Second test of comments
|
||||
<html>
|
||||
|
||||
@@ -67,7 +67,7 @@ align_right_end
|
||||
</div>
|
||||
|
||||
forced_space
|
||||
-  
|
||||
+
|
||||
line_break
|
||||
<br>
|
||||
|
||||
diff -durpN unrtf-0.21.2.old/src/attr.c unrtf-0.21.2/src/attr.c
|
||||
--- unrtf-0.21.2.old/src/attr.c 2010-07-03 22:30:58.000000000 -0400
|
||||
+++ unrtf-0.21.2/src/attr.c 2011-12-01 10:14:45.282855488 -0500
|
||||
+++ unrtf-0.21.2/src/attr.c 2012-03-13 16:38:41.323940752 -0400
|
||||
@@ -1,23 +1,23 @@
|
||||
/*=============================================================================
|
||||
- GNU UnRTF, a command-line program to convert RTF documents to other formats.
|
||||
|
@ -1265,7 +1274,7 @@ diff -durpN unrtf-0.21.2.old/src/attr.c unrtf-0.21.2/src/attr.c
|
|||
-
|
||||
diff -durpN unrtf-0.21.2.old/src/attr.h unrtf-0.21.2/src/attr.h
|
||||
--- unrtf-0.21.2.old/src/attr.h 2010-07-03 22:30:58.000000000 -0400
|
||||
+++ unrtf-0.21.2/src/attr.h 2011-11-09 15:53:21.806783776 -0500
|
||||
+++ unrtf-0.21.2/src/attr.h 2012-03-13 16:38:41.323940752 -0400
|
||||
@@ -1,23 +1,23 @@
|
||||
/*=============================================================================
|
||||
- GNU UnRTF, a command-line program to convert RTF documents to other formats.
|
||||
|
@ -1415,7 +1424,7 @@ diff -durpN unrtf-0.21.2.old/src/attr.h unrtf-0.21.2/src/attr.h
|
|||
+#endif /* ATTR_H */
|
||||
diff -durpN unrtf-0.21.2.old/src/convert.c unrtf-0.21.2/src/convert.c
|
||||
--- unrtf-0.21.2.old/src/convert.c 2011-06-07 08:00:23.000000000 -0400
|
||||
+++ unrtf-0.21.2/src/convert.c 2011-12-01 10:32:16.958862025 -0500
|
||||
+++ unrtf-0.21.2/src/convert.c 2012-03-13 16:38:41.327940973 -0400
|
||||
@@ -1,24 +1,24 @@
|
||||
|
||||
/*===========================================================================
|
||||
|
@ -7111,7 +7120,7 @@ diff -durpN unrtf-0.21.2.old/src/convert.c unrtf-0.21.2/src/convert.c
|
|||
}
|
||||
diff -durpN unrtf-0.21.2.old/src/convert.h unrtf-0.21.2/src/convert.h
|
||||
--- unrtf-0.21.2.old/src/convert.h 2010-07-03 22:30:58.000000000 -0400
|
||||
+++ unrtf-0.21.2/src/convert.h 2011-11-09 15:53:21.810783765 -0500
|
||||
+++ unrtf-0.21.2/src/convert.h 2012-03-13 16:38:41.327940973 -0400
|
||||
@@ -36,18 +36,135 @@
|
||||
|
||||
#ifndef _CONVERT
|
||||
|
@ -7255,7 +7264,7 @@ diff -durpN unrtf-0.21.2.old/src/convert.h unrtf-0.21.2/src/convert.h
|
|||
|
||||
diff -durpN unrtf-0.21.2.old/src/defs.h unrtf-0.21.2/src/defs.h
|
||||
--- unrtf-0.21.2.old/src/defs.h 2010-07-03 22:30:58.000000000 -0400
|
||||
+++ unrtf-0.21.2/src/defs.h 2011-11-09 15:53:21.810783765 -0500
|
||||
+++ unrtf-0.21.2/src/defs.h 2012-03-13 16:38:41.327940973 -0400
|
||||
@@ -64,9 +64,6 @@
|
||||
#define SKIP_ONE_WORD 2
|
||||
#endif
|
||||
|
@ -7275,7 +7284,7 @@ diff -durpN unrtf-0.21.2.old/src/defs.h unrtf-0.21.2/src/defs.h
|
|||
+#define DEFAULT_OUTPUT "html"
|
||||
diff -durpN unrtf-0.21.2.old/src/error.c unrtf-0.21.2/src/error.c
|
||||
--- unrtf-0.21.2.old/src/error.c 2010-07-03 22:30:58.000000000 -0400
|
||||
+++ unrtf-0.21.2/src/error.c 2011-11-09 15:53:21.810783765 -0500
|
||||
+++ unrtf-0.21.2/src/error.c 2012-03-13 16:38:41.327940973 -0400
|
||||
@@ -51,27 +51,11 @@
|
||||
#include <stdlib.h>
|
||||
#endif
|
||||
|
@ -7320,7 +7329,7 @@ diff -durpN unrtf-0.21.2.old/src/error.c unrtf-0.21.2/src/error.c
|
|||
#endif
|
||||
diff -durpN unrtf-0.21.2.old/src/error.h unrtf-0.21.2/src/error.h
|
||||
--- unrtf-0.21.2.old/src/error.h 2010-07-03 22:30:58.000000000 -0400
|
||||
+++ unrtf-0.21.2/src/error.h 2011-11-09 15:53:21.810783765 -0500
|
||||
+++ unrtf-0.21.2/src/error.h 2012-03-13 16:38:41.327940973 -0400
|
||||
@@ -37,9 +37,10 @@
|
||||
|
||||
#define CHECK_MALLOC_SUCCESS(XX) { if ((XX)==NULL) { fprintf (stderr, "internal error: cannot allocate memory in %s at %d\n", __FILE__, __LINE__); exit (1); }}
|
||||
|
@ -7335,7 +7344,7 @@ diff -durpN unrtf-0.21.2.old/src/error.h unrtf-0.21.2/src/error.h
|
|||
|
||||
diff -durpN unrtf-0.21.2.old/src/hash.c unrtf-0.21.2/src/hash.c
|
||||
--- unrtf-0.21.2.old/src/hash.c 2010-07-03 22:30:58.000000000 -0400
|
||||
+++ unrtf-0.21.2/src/hash.c 2011-11-09 15:53:21.810783765 -0500
|
||||
+++ unrtf-0.21.2/src/hash.c 2012-03-13 16:38:41.327940973 -0400
|
||||
@@ -53,24 +53,16 @@
|
||||
#include <string.h>
|
||||
#endif
|
||||
|
@ -7540,7 +7549,7 @@ diff -durpN unrtf-0.21.2.old/src/hash.c unrtf-0.21.2/src/hash.c
|
|||
+}
|
||||
diff -durpN unrtf-0.21.2.old/src/hash.h unrtf-0.21.2/src/hash.h
|
||||
--- unrtf-0.21.2.old/src/hash.h 2010-07-03 22:30:58.000000000 -0400
|
||||
+++ unrtf-0.21.2/src/hash.h 2011-11-09 15:53:21.810783765 -0500
|
||||
+++ unrtf-0.21.2/src/hash.h 2012-03-13 16:38:41.327940973 -0400
|
||||
@@ -32,11 +32,15 @@
|
||||
* 16 Dec 07, daved@physiol.usyd.edu.au: updated to GPL v3
|
||||
*--------------------------------------------------------------------*/
|
||||
|
@ -7564,7 +7573,7 @@ diff -durpN unrtf-0.21.2.old/src/hash.h unrtf-0.21.2/src/hash.h
|
|||
+#endif /* HASH_H */
|
||||
diff -durpN unrtf-0.21.2.old/src/main.c unrtf-0.21.2/src/main.c
|
||||
--- unrtf-0.21.2.old/src/main.c 2010-07-03 22:30:58.000000000 -0400
|
||||
+++ unrtf-0.21.2/src/main.c 2011-11-09 15:53:21.810783765 -0500
|
||||
+++ unrtf-0.21.2/src/main.c 2012-03-13 16:38:41.327940973 -0400
|
||||
@@ -1,23 +1,23 @@
|
||||
/*=============================================================================
|
||||
- GNU UnRTF, a command-line program to convert RTF documents to other formats.
|
||||
|
@ -7986,7 +7995,7 @@ diff -durpN unrtf-0.21.2.old/src/main.c unrtf-0.21.2/src/main.c
|
|||
-
|
||||
diff -durpN unrtf-0.21.2.old/src/main.h unrtf-0.21.2/src/main.h
|
||||
--- unrtf-0.21.2.old/src/main.h 2010-07-03 22:30:58.000000000 -0400
|
||||
+++ unrtf-0.21.2/src/main.h 2011-11-09 15:53:21.810783765 -0500
|
||||
+++ unrtf-0.21.2/src/main.h 2012-03-13 16:38:41.327940973 -0400
|
||||
@@ -35,21 +35,8 @@
|
||||
* 17 Jan 10, daved@physiol.usyd.edu.au: change CONFIG_DIR to drop outputs/
|
||||
*--------------------------------------------------------------------*/
|
||||
|
@ -8012,7 +8021,7 @@ diff -durpN unrtf-0.21.2.old/src/main.h unrtf-0.21.2/src/main.h
|
|||
+#define USAGE "unrtf [--version] [--verbose] [--help] [--nopict|-n] [--noremap] [--html] [--text] [--vt] [--latex] [--rtf] [-P config_search_path] [-t <file_with_tags>)] <filename>"
|
||||
diff -durpN unrtf-0.21.2.old/src/Makefile.am unrtf-0.21.2/src/Makefile.am
|
||||
--- unrtf-0.21.2.old/src/Makefile.am 2010-07-03 22:30:58.000000000 -0400
|
||||
+++ unrtf-0.21.2/src/Makefile.am 2011-11-09 15:53:21.810783765 -0500
|
||||
+++ unrtf-0.21.2/src/Makefile.am 2012-03-13 16:38:41.327940973 -0400
|
||||
@@ -13,7 +13,6 @@ unrtf_SOURCES = attr.c attr.h \
|
||||
malloc.c malloc.h \
|
||||
output.c output.h \
|
||||
|
@ -8023,7 +8032,7 @@ diff -durpN unrtf-0.21.2.old/src/Makefile.am unrtf-0.21.2/src/Makefile.am
|
|||
util.c util.h \
|
||||
diff -durpN unrtf-0.21.2.old/src/malloc.c unrtf-0.21.2/src/malloc.c
|
||||
--- unrtf-0.21.2.old/src/malloc.c 2010-07-09 01:13:05.000000000 -0400
|
||||
+++ unrtf-0.21.2/src/malloc.c 2011-12-01 10:36:18.514864760 -0500
|
||||
+++ unrtf-0.21.2/src/malloc.c 2012-03-13 16:38:41.327940973 -0400
|
||||
@@ -135,19 +135,19 @@ total_malloced (void) {
|
||||
*=======================================================================*/
|
||||
|
||||
|
@ -8063,7 +8072,7 @@ diff -durpN unrtf-0.21.2.old/src/malloc.c unrtf-0.21.2/src/malloc.c
|
|||
}
|
||||
diff -durpN unrtf-0.21.2.old/src/malloc.h unrtf-0.21.2/src/malloc.h
|
||||
--- unrtf-0.21.2.old/src/malloc.h 2010-07-03 22:30:58.000000000 -0400
|
||||
+++ unrtf-0.21.2/src/malloc.h 2011-11-09 15:53:21.810783765 -0500
|
||||
+++ unrtf-0.21.2/src/malloc.h 2012-03-13 16:38:41.327940973 -0400
|
||||
@@ -32,9 +32,10 @@
|
||||
* 09 Nov 08, arkadiusz.firus@gmail.com: added my_realloc
|
||||
*--------------------------------------------------------------------*/
|
||||
|
@ -8079,7 +8088,7 @@ diff -durpN unrtf-0.21.2.old/src/malloc.h unrtf-0.21.2/src/malloc.h
|
|||
+extern char * my_strdup (struct ConversionContext *, char*);
|
||||
diff -durpN unrtf-0.21.2.old/src/my_iconv.c unrtf-0.21.2/src/my_iconv.c
|
||||
--- unrtf-0.21.2.old/src/my_iconv.c 2010-08-16 00:12:43.000000000 -0400
|
||||
+++ unrtf-0.21.2/src/my_iconv.c 2011-11-09 15:53:21.814783744 -0500
|
||||
+++ unrtf-0.21.2/src/my_iconv.c 2012-03-13 16:38:41.327940973 -0400
|
||||
@@ -12,154 +12,133 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
@ -8321,7 +8330,7 @@ diff -durpN unrtf-0.21.2.old/src/my_iconv.c unrtf-0.21.2/src/my_iconv.c
|
|||
|
||||
diff -durpN unrtf-0.21.2.old/src/my_iconv.h unrtf-0.21.2/src/my_iconv.h
|
||||
--- unrtf-0.21.2.old/src/my_iconv.h 2010-07-03 22:30:58.000000000 -0400
|
||||
+++ unrtf-0.21.2/src/my_iconv.h 2011-11-09 15:53:21.814783744 -0500
|
||||
+++ unrtf-0.21.2/src/my_iconv.h 2012-03-13 16:38:41.327940973 -0400
|
||||
@@ -5,6 +5,9 @@
|
||||
* Purpose: my_conv definitions
|
||||
*--------------------------------------------------------------------*/
|
||||
|
@ -8351,7 +8360,7 @@ diff -durpN unrtf-0.21.2.old/src/my_iconv.h unrtf-0.21.2/src/my_iconv.h
|
|||
+#endif /* _MY_ICONV */
|
||||
diff -durpN unrtf-0.21.2.old/src/output.c unrtf-0.21.2/src/output.c
|
||||
--- unrtf-0.21.2.old/src/output.c 2011-06-07 08:04:38.000000000 -0400
|
||||
+++ unrtf-0.21.2/src/output.c 2011-12-01 10:30:41.598861702 -0500
|
||||
+++ unrtf-0.21.2/src/output.c 2012-03-13 16:38:41.327940973 -0400
|
||||
@@ -1,23 +1,23 @@
|
||||
/*=============================================================================
|
||||
- GNU UnRTF, a command-line program to convert RTF documents to other formats.
|
||||
|
@ -9535,7 +9544,7 @@ diff -durpN unrtf-0.21.2.old/src/output.c unrtf-0.21.2/src/output.c
|
|||
-
|
||||
diff -durpN unrtf-0.21.2.old/src/output.h unrtf-0.21.2/src/output.h
|
||||
--- unrtf-0.21.2.old/src/output.h 2010-08-11 21:09:02.000000000 -0400
|
||||
+++ unrtf-0.21.2/src/output.h 2011-11-09 15:53:21.814783744 -0500
|
||||
+++ unrtf-0.21.2/src/output.h 2012-03-13 16:38:41.327940973 -0400
|
||||
@@ -44,227 +44,228 @@
|
||||
typedef Collection Aliases;
|
||||
|
||||
|
@ -9923,7 +9932,7 @@ diff -durpN unrtf-0.21.2.old/src/output.h unrtf-0.21.2/src/output.h
|
|||
-
|
||||
diff -durpN unrtf-0.21.2.old/src/parse.c unrtf-0.21.2/src/parse.c
|
||||
--- unrtf-0.21.2.old/src/parse.c 2010-07-03 22:30:58.000000000 -0400
|
||||
+++ unrtf-0.21.2/src/parse.c 2011-12-01 10:27:41.486860883 -0500
|
||||
+++ unrtf-0.21.2/src/parse.c 2012-03-13 16:38:41.327940973 -0400
|
||||
@@ -1,23 +1,23 @@
|
||||
/*=============================================================================
|
||||
- GNU UnRTF, a command-line program to convert RTF documents to other formats.
|
||||
|
@ -10597,7 +10606,7 @@ diff -durpN unrtf-0.21.2.old/src/parse.c unrtf-0.21.2/src/parse.c
|
|||
}
|
||||
diff -durpN unrtf-0.21.2.old/src/parse.h unrtf-0.21.2/src/parse.h
|
||||
--- unrtf-0.21.2.old/src/parse.h 2010-07-03 22:30:58.000000000 -0400
|
||||
+++ unrtf-0.21.2/src/parse.h 2011-11-09 15:53:21.814783744 -0500
|
||||
+++ unrtf-0.21.2/src/parse.h 2012-03-13 16:38:41.327940973 -0400
|
||||
@@ -38,8 +38,6 @@
|
||||
#include "word.h"
|
||||
#endif
|
||||
|
@ -10690,7 +10699,7 @@ diff -durpN unrtf-0.21.2.old/src/path.h unrtf-0.21.2/src/path.h
|
|||
-void show_dirs();
|
||||
diff -durpN unrtf-0.21.2.old/src/unrtf.h unrtf-0.21.2/src/unrtf.h
|
||||
--- unrtf-0.21.2.old/src/unrtf.h 1969-12-31 19:00:00.000000000 -0500
|
||||
+++ unrtf-0.21.2/src/unrtf.h 2011-11-09 15:53:21.814783744 -0500
|
||||
+++ unrtf-0.21.2/src/unrtf.h 2012-03-13 16:38:41.327940973 -0400
|
||||
@@ -0,0 +1,55 @@
|
||||
+/*===========================================================================
|
||||
+ GNU UnRTF, a command-line program to convert RTF documents to other formats.
|
||||
|
@ -10749,7 +10758,7 @@ diff -durpN unrtf-0.21.2.old/src/unrtf.h unrtf-0.21.2/src/unrtf.h
|
|||
+#endif /* UNRTF_H */
|
||||
diff -durpN unrtf-0.21.2.old/src/user.c unrtf-0.21.2/src/user.c
|
||||
--- unrtf-0.21.2.old/src/user.c 2011-06-07 08:08:17.000000000 -0400
|
||||
+++ unrtf-0.21.2/src/user.c 2011-12-01 09:59:46.215667415 -0500
|
||||
+++ unrtf-0.21.2/src/user.c 2012-03-13 16:38:41.327940973 -0400
|
||||
@@ -7,7 +7,7 @@
|
||||
*----------------------------------------------------------------------
|
||||
* Changes:
|
||||
|
@ -11179,7 +11188,7 @@ diff -durpN unrtf-0.21.2.old/src/user.c unrtf-0.21.2/src/user.c
|
|||
|
||||
diff -durpN unrtf-0.21.2.old/src/user.h unrtf-0.21.2/src/user.h
|
||||
--- unrtf-0.21.2.old/src/user.h 2010-07-03 22:30:58.000000000 -0400
|
||||
+++ unrtf-0.21.2/src/user.h 2011-11-09 15:53:21.814783744 -0500
|
||||
+++ unrtf-0.21.2/src/user.h 2012-03-13 16:38:41.327940973 -0400
|
||||
@@ -151,9 +151,10 @@
|
||||
|
||||
#ifndef _USER
|
||||
|
@ -11195,7 +11204,7 @@ diff -durpN unrtf-0.21.2.old/src/user.h unrtf-0.21.2/src/user.h
|
|||
#endif
|
||||
diff -durpN unrtf-0.21.2.old/src/word.c unrtf-0.21.2/src/word.c
|
||||
--- unrtf-0.21.2.old/src/word.c 2010-07-03 22:30:58.000000000 -0400
|
||||
+++ unrtf-0.21.2/src/word.c 2011-12-01 10:15:34.590855632 -0500
|
||||
+++ unrtf-0.21.2/src/word.c 2012-03-13 16:38:41.327940973 -0400
|
||||
@@ -1,23 +1,23 @@
|
||||
/*=============================================================================
|
||||
- GNU UnRTF, a command-line program to convert RTF documents to other formats.
|
||||
|
@ -11520,7 +11529,7 @@ diff -durpN unrtf-0.21.2.old/src/word.c unrtf-0.21.2/src/word.c
|
|||
|
||||
diff -durpN unrtf-0.21.2.old/src/word.h unrtf-0.21.2/src/word.h
|
||||
--- unrtf-0.21.2.old/src/word.h 2010-07-03 22:30:58.000000000 -0400
|
||||
+++ unrtf-0.21.2/src/word.h 2011-11-09 15:53:21.814783744 -0500
|
||||
+++ unrtf-0.21.2/src/word.h 2012-03-13 16:38:41.327940973 -0400
|
||||
@@ -41,14 +41,15 @@ typedef struct _w {
|
||||
struct _w * child;
|
||||
} Word;
|
||||
|
|
|
@ -279,28 +279,38 @@ static NSString *defaultUserID = @"anyone";
|
|||
{
|
||||
[self imap4URL];
|
||||
|
||||
[self imap4Connection];
|
||||
client = [imap4 client];
|
||||
if ([self imap4Connection])
|
||||
{
|
||||
client = [imap4 client];
|
||||
|
||||
inbox = [[self mailAccountFolder] inboxFolderInContext: context];
|
||||
[client select: [inbox absoluteImap4Name]];
|
||||
inbox = [[self mailAccountFolder] inboxFolderInContext: context];
|
||||
[client select: [inbox absoluteImap4Name]];
|
||||
|
||||
path = [[imap4URL path] stringByDeletingLastPathComponent];
|
||||
if (![path hasSuffix: @"/"])
|
||||
path = [path stringByAppendingString: @"/"];
|
||||
destURL = [[NSURL alloc] initWithScheme: [imap4URL scheme]
|
||||
host: [imap4URL host]
|
||||
path: [NSString stringWithFormat: @"%@%@",
|
||||
path, newName]];
|
||||
[destURL autorelease];
|
||||
error = [imap4 moveMailboxAtURL: imap4URL
|
||||
toURL: destURL];
|
||||
if (!error)
|
||||
{
|
||||
// We unsubscribe to the old one, and subscribe back to the new one
|
||||
[client subscribe: [destURL path]];
|
||||
[client unsubscribe: [imap4URL path]];
|
||||
path = [[imap4URL path] stringByDeletingLastPathComponent];
|
||||
if (![path hasSuffix: @"/"])
|
||||
path = [path stringByAppendingString: @"/"];
|
||||
destURL = [[NSURL alloc] initWithScheme: [imap4URL scheme]
|
||||
host: [imap4URL host]
|
||||
path: [NSString stringWithFormat: @"%@%@",
|
||||
path, newName]];
|
||||
[destURL autorelease];
|
||||
error = [imap4 moveMailboxAtURL: imap4URL
|
||||
toURL: destURL];
|
||||
if (!error)
|
||||
{
|
||||
ASSIGN (imap4URL, nil);
|
||||
ASSIGN (nameInContainer,
|
||||
([NSString stringWithFormat: @"folder%@", [newName asCSSIdentifier]]));
|
||||
|
||||
// We unsubscribe to the old one, and subscribe back to the new one
|
||||
[client subscribe: [destURL path]];
|
||||
[client unsubscribe: [imap4URL path]];
|
||||
}
|
||||
}
|
||||
else
|
||||
error = [NSException exceptionWithName: @"SOGoMailException"
|
||||
reason: @"IMAP connection is invalid"
|
||||
userInfo: nil];
|
||||
}
|
||||
else
|
||||
error = [NSException exceptionWithName: @"SOGoMailException"
|
||||
|
@ -386,33 +396,41 @@ static NSString *defaultUserID = @"anyone";
|
|||
error = (NSException *) trashFolder;
|
||||
else
|
||||
{
|
||||
client = [[self imap4Connection] client];
|
||||
[imap4 selectFolder: [self imap4URL]];
|
||||
folderName = [imap4 imap4FolderNameForURL: [trashFolder imap4URL]];
|
||||
b = YES;
|
||||
if ([self imap4Connection])
|
||||
{
|
||||
error = nil;
|
||||
client = [imap4 client];
|
||||
[imap4 selectFolder: [self imap4URL]];
|
||||
folderName = [imap4 imap4FolderNameForURL: [trashFolder imap4URL]];
|
||||
b = YES;
|
||||
|
||||
// If we are deleting messages within the Trash folder itself, we
|
||||
// do not, of course, try to move messages to the Trash folder.
|
||||
if ([folderName isEqualToString: [self relativeImap4Name]])
|
||||
{
|
||||
*withTrash = NO;
|
||||
}
|
||||
else
|
||||
{
|
||||
// If our Trash folder doesn't exist when we try to copy messages
|
||||
// to it, we create it.
|
||||
result = [[client status: folderName flags: [NSArray arrayWithObject: @"UIDVALIDITY"]]
|
||||
objectForKey: @"result"];
|
||||
// If we are deleting messages within the Trash folder itself, we
|
||||
// do not, of course, try to move messages to the Trash folder.
|
||||
if ([folderName isEqualToString: [self relativeImap4Name]])
|
||||
{
|
||||
*withTrash = NO;
|
||||
}
|
||||
else
|
||||
{
|
||||
// If our Trash folder doesn't exist when we try to copy messages
|
||||
// to it, we create it.
|
||||
result = [[client status: folderName flags: [NSArray arrayWithObject: @"UIDVALIDITY"]]
|
||||
objectForKey: @"result"];
|
||||
|
||||
if (![result boolValue])
|
||||
[[self imap4Connection] createMailbox: folderName
|
||||
atURL: [[self mailAccountFolder] imap4URL]];
|
||||
if (![result boolValue])
|
||||
[imap4 createMailbox: folderName
|
||||
atURL: [[self mailAccountFolder] imap4URL]];
|
||||
|
||||
result = [[client copyUids: uids toFolder: folderName]
|
||||
objectForKey: @"result"];
|
||||
result = [[client copyUids: uids toFolder: folderName]
|
||||
objectForKey: @"result"];
|
||||
|
||||
b = [result boolValue];
|
||||
b = [result boolValue];
|
||||
}
|
||||
}
|
||||
else
|
||||
error = [NSException exceptionWithName: @"SOGoMailException"
|
||||
reason: @"IMAP connection is invalid"
|
||||
userInfo: nil];
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -608,23 +626,32 @@ static NSString *defaultUserID = @"anyone";
|
|||
}
|
||||
|
||||
client = [[self imap4Connection] client];
|
||||
[imap4 selectFolder: [self imap4URL]];
|
||||
if (client)
|
||||
{
|
||||
[imap4 selectFolder: [self imap4URL]];
|
||||
|
||||
// We make sure the destination IMAP folder exist, if not, we create it.
|
||||
result = [[client status: imapDestinationFolder
|
||||
flags: [NSArray arrayWithObject: @"UIDVALIDITY"]]
|
||||
objectForKey: @"result"];
|
||||
if (![result boolValue])
|
||||
result = [[self imap4Connection] createMailbox: imapDestinationFolder
|
||||
atURL: [[self mailAccountFolder] imap4URL]];
|
||||
if (!result || [result boolValue])
|
||||
result = [client copyUids: uids toFolder: imapDestinationFolder];
|
||||
// We make sure the destination IMAP folder exist, if not, we create it.
|
||||
result = [[client status: imapDestinationFolder
|
||||
flags: [NSArray arrayWithObject: @"UIDVALIDITY"]]
|
||||
objectForKey: @"result"];
|
||||
if (![result boolValue])
|
||||
result = [[self imap4Connection] createMailbox: imapDestinationFolder
|
||||
atURL: [[self mailAccountFolder] imap4URL]];
|
||||
if (!result || [result boolValue])
|
||||
result = [client copyUids: uids toFolder: imapDestinationFolder];
|
||||
|
||||
if ([[result valueForKey: @"result"] boolValue])
|
||||
result = nil;
|
||||
if ([[result valueForKey: @"result"] boolValue])
|
||||
result = nil;
|
||||
else
|
||||
result = [NSException exceptionWithHTTPStatus: 500
|
||||
reason: [[[result objectForKey: @"RawResponse"]
|
||||
objectForKey: @"ResponseResult"]
|
||||
objectForKey: @"description"]];
|
||||
}
|
||||
else
|
||||
result = [NSException exceptionWithHTTPStatus: 500
|
||||
reason: [[[result objectForKey: @"RawResponse"] objectForKey: @"ResponseResult"] objectForKey: @"description"]];
|
||||
result = [NSException exceptionWithName: @"SOGoMailException"
|
||||
reason: @"IMAP connection is invalid"
|
||||
userInfo: nil];
|
||||
}
|
||||
else
|
||||
result = [NSException exceptionWithHTTPStatus: 500
|
||||
|
@ -645,18 +672,24 @@ static NSString *defaultUserID = @"anyone";
|
|||
NGImap4Client *client;
|
||||
|
||||
client = [[self imap4Connection] client];
|
||||
|
||||
result = [self copyUIDs: uids toFolder: destinationFolder inContext: localContext];
|
||||
if (![result isNotNull])
|
||||
if (client)
|
||||
{
|
||||
result = [client storeFlags: [NSArray arrayWithObject: @"Deleted"]
|
||||
forUIDs: uids addOrRemove: YES];
|
||||
if ([[result valueForKey: @"result"] boolValue])
|
||||
{
|
||||
[self markForExpunge];
|
||||
result = nil;
|
||||
}
|
||||
result = [self copyUIDs: uids toFolder: destinationFolder inContext: localContext];
|
||||
if (![result isNotNull])
|
||||
{
|
||||
result = [client storeFlags: [NSArray arrayWithObject: @"Deleted"]
|
||||
forUIDs: uids addOrRemove: YES];
|
||||
if ([[result valueForKey: @"result"] boolValue])
|
||||
{
|
||||
[self markForExpunge];
|
||||
result = nil;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
result = [NSException exceptionWithName: @"SOGoMailException"
|
||||
reason: @"IMAP connection is invalid"
|
||||
userInfo: nil];
|
||||
|
||||
return result;
|
||||
}
|
||||
|
@ -740,7 +773,15 @@ static NSString *defaultUserID = @"anyone";
|
|||
|
||||
- (NSException *) expunge
|
||||
{
|
||||
return [[self imap4Connection] expungeAtURL: [self imap4URL]];
|
||||
NSException *error;
|
||||
|
||||
if ([self imap4Connection])
|
||||
error = [imap4 expungeAtURL: [self imap4URL]];
|
||||
else
|
||||
error = [NSException exceptionWithName: @"SOGoMailException"
|
||||
reason: @"IMAP connection is invalid"
|
||||
userInfo: nil];
|
||||
return error;
|
||||
}
|
||||
|
||||
- (void) markForExpunge
|
||||
|
@ -796,8 +837,17 @@ static NSString *defaultUserID = @"anyone";
|
|||
|
||||
- (NSException *) addFlagsToAllMessages: (id) _f
|
||||
{
|
||||
return [[self imap4Connection] addFlags:_f
|
||||
toAllMessagesInURL: [self imap4URL]];
|
||||
NSException *error;
|
||||
|
||||
if ([self imap4Connection])
|
||||
error = [imap4 addFlags:_f
|
||||
toAllMessagesInURL: [self imap4URL]];
|
||||
else
|
||||
error = [NSException exceptionWithName: @"SOGoMailException"
|
||||
reason: @"IMAP connection is invalid"
|
||||
userInfo: nil];
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
/* name lookup */
|
||||
|
@ -866,7 +916,16 @@ static NSString *defaultUserID = @"anyone";
|
|||
- (NSException *) davCreateCollection: (NSString *) _name
|
||||
inContext: (id) _ctx
|
||||
{
|
||||
return [[self imap4Connection] createMailbox:_name atURL:[self imap4URL]];
|
||||
NSException *error;
|
||||
|
||||
if ([self imap4Connection])
|
||||
error = [imap4 createMailbox:_name atURL:[self imap4URL]];
|
||||
else
|
||||
error = [NSException exceptionWithName: @"SOGoMailException"
|
||||
reason: @"IMAP connection is invalid"
|
||||
userInfo: nil];
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
- (BOOL) exists
|
||||
|
@ -879,29 +938,43 @@ static NSString *defaultUserID = @"anyone";
|
|||
NSException *error;
|
||||
BOOL rc;
|
||||
|
||||
[self imap4Connection];
|
||||
error = [imap4 createMailbox: [self relativeImap4Name]
|
||||
atURL: [container imap4URL]];
|
||||
if (error)
|
||||
rc = NO;
|
||||
else
|
||||
if ([self imap4Connection])
|
||||
{
|
||||
[[imap4 client] subscribe: [self absoluteImap4Name]];
|
||||
rc = YES;
|
||||
error = [imap4 createMailbox: [self relativeImap4Name]
|
||||
atURL: [container imap4URL]];
|
||||
if (error)
|
||||
rc = NO;
|
||||
else
|
||||
{
|
||||
[[imap4 client] subscribe: [self absoluteImap4Name]];
|
||||
rc = YES;
|
||||
}
|
||||
}
|
||||
else
|
||||
rc = NO;
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
- (NSException *) delete
|
||||
{
|
||||
return [[self imap4Connection] deleteMailboxAtURL:[self imap4URL]];
|
||||
NSException *error;
|
||||
|
||||
if ([self imap4Connection])
|
||||
error = [imap4 deleteMailboxAtURL: [self imap4URL]];
|
||||
else
|
||||
error = [NSException exceptionWithName: @"SOGoMailException"
|
||||
reason: @"IMAP connection is invalid"
|
||||
userInfo: nil];
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
- (NSException *) davMoveToTargetObject: (id) _target
|
||||
newName: (NSString *) _name
|
||||
inContext: (id)_ctx
|
||||
{
|
||||
NSException *error;
|
||||
NSURL *destImapURL;
|
||||
|
||||
if ([_name length] == 0) { /* target already exists! */
|
||||
|
@ -926,9 +999,16 @@ static NSString *defaultUserID = @"anyone";
|
|||
[self logWithFormat:@"TODO: should move collection as '%@' to: %@",
|
||||
[[self imap4URL] absoluteString],
|
||||
[destImapURL absoluteString]];
|
||||
|
||||
return [[self imap4Connection] moveMailboxAtURL:[self imap4URL]
|
||||
toURL:destImapURL];
|
||||
|
||||
if ([self imap4Connection])
|
||||
error = [imap4 moveMailboxAtURL: [self imap4URL]
|
||||
toURL: destImapURL];
|
||||
else
|
||||
error = [NSException exceptionWithName: @"SOGoMailException"
|
||||
reason: @"IMAP connection is invalid"
|
||||
userInfo: nil];
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
- (NSException *) davCopyToTargetObject: (id) _target
|
||||
|
|
Loading…
Reference in a new issue