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:
Jean Raby 2012-03-15 21:02:00 +00:00
commit 0f568210fc
44 changed files with 1742 additions and 1270 deletions

163
ChangeLog
View file

@ -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

View file

@ -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
- (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;

View file

@ -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,7 +502,7 @@ static NSCharacterSet *hexCharacterSet = nil;
return MAPISTORE_SUCCESS;
}
- (int) getPrOwnerApptId: (void **) data
- (int) getPidTagOwnerAppointmentId: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
int rc;
@ -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);
}

View file

@ -65,7 +65,7 @@
return mimeAttachTag;
}
- (int) getPrMid: (void **) data
- (int) getPidTagMid: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPILongLongValue (memCtx, [container objectId]);
@ -73,7 +73,7 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrAttachNum: (void **) data
- (int) getPidTagAttachNumber: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPILongValue (memCtx, aid);
@ -81,7 +81,7 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrRenderingPosition: (void **) data
- (int) getPidTagRenderingPosition: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPILongValue (memCtx, 0xffffffff);

View file

@ -34,7 +34,7 @@
@implementation MAPIStoreCalendarAttachment
- (int) getPrAttachmentHidden: (void **) data
- (int) getPidTagAttachmentHidden: (void **) data
inMemCtx: (TALLOC_CTX *) localMemCtx
{
*data = MAPIBoolValue (localMemCtx, YES);
@ -42,7 +42,7 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrAttachmentFlags: (void **) data
- (int) getPidTagAttachmentFlags: (void **) data
inMemCtx: (TALLOC_CTX *) localMemCtx
{
*data = MAPILongValue (localMemCtx, 0x00000002); /* afException */
@ -50,7 +50,7 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrAttachmMethod: (void **) data
- (int) getPidTagAttachMethod: (void **) data
inMemCtx: (TALLOC_CTX *) localMemCtx
{
*data = MAPILongValue (localMemCtx, 0x00000005); /* afEmbeddedMessage */

View file

@ -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

View file

@ -126,10 +126,10 @@
}
/* getters */
- (int) getPrIconIndex: (void **) data
- (int) getPidTagIconIndex: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [[self appointmentWrapper] getPrIconIndex: data inMemCtx: memCtx];
return [[self appointmentWrapper] getPidTagIconIndex: data inMemCtx: memCtx];
}
- (int) getPidLidFInvited: (void **) data
@ -138,7 +138,7 @@
return [self getYes: data inMemCtx: memCtx];
}
- (int) getPrMessageClass: (void **) data
- (int) getPidTagMessageClass: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = talloc_strdup (memCtx, "IPM.Appointment");
@ -146,16 +146,24 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrOwnerApptId: (void **) data
- (int) getPidLidAppointmentMessageClass: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [[self appointmentWrapper] getPrOwnerApptId: data inMemCtx: memCtx];
*data = talloc_strdup (memCtx, "IPM.Appointment");
return MAPISTORE_SUCCESS;
}
- (int) getPrStartDate: (void **) data
- (int) getPidTagOwnerAppointmentId: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [[self appointmentWrapper] getPrStartDate: data inMemCtx: memCtx];
return [[self appointmentWrapper] getPidTagOwnerAppointmentId: data inMemCtx: memCtx];
}
- (int) getPidTagStartDate: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [[self appointmentWrapper] getPidTagStartDate: data inMemCtx: memCtx];
}
- (int) getPidLidAppointmentStateFlags: (void **) data
@ -183,10 +191,10 @@
return [[self appointmentWrapper] getPidLidCommonStart: data inMemCtx: memCtx];
}
- (int) getPrEndDate: (void **) data
- (int) getPidTagEndDate: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [[self appointmentWrapper] getPrEndDate: data inMemCtx: memCtx];
return [[self appointmentWrapper] getPidTagEndDate: data inMemCtx: memCtx];
}
- (int) getPidLidAppointmentEndWhole: (void **) data
@ -220,10 +228,20 @@
return [[self appointmentWrapper] getPidLidBusyStatus: data inMemCtx: memCtx];
}
- (int) getPrSubject: (void **) data // SUMMARY
- (int) getPidTagSubject: (void **) data // SUMMARY
inMemCtx: (TALLOC_CTX *) memCtx
{
return [[self appointmentWrapper] getPrSubject: data inMemCtx: memCtx];
return [[self appointmentWrapper] getPidTagSubject: data inMemCtx: memCtx];
}
- (int) getPidLidSideEffects: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPILongValue (memCtx,
seOpenToDelete | seOpenToCopy | seOpenToMove
| seCoerceToInbox | seOpenForCtxMenu);
return MAPISTORE_SUCCESS;
}
- (int) getPidLidLocation: (void **) data // LOCATION
@ -238,22 +256,22 @@
return [[self appointmentWrapper] getPidLidPrivate: 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
{
return [[self appointmentWrapper] getPrSensitivity: data inMemCtx: memCtx];
return [[self appointmentWrapper] getPidTagSensitivity: data inMemCtx: memCtx];
}
- (int) getPrImportance: (void **) data
- (int) getPidTagImportance: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [[self appointmentWrapper] getPrImportance: data inMemCtx: memCtx];
return [[self appointmentWrapper] getPidTagImportance: data inMemCtx: memCtx];
}
- (int) getPrBody: (void **) data
- (int) getPidTagBody: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [[self appointmentWrapper] getPrBody: data inMemCtx: memCtx];
return [[self appointmentWrapper] getPidTagBody: data inMemCtx: memCtx];
}
- (int) getPidLidIsRecurring: (void **) data
@ -289,7 +307,7 @@
inMemCtx: memCtx];
}
- (int) getPrProcessed: (void **) data inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagProcessed: (void **) data inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getYes: data inMemCtx: memCtx];
}
@ -324,113 +342,113 @@
}
/* sender */
- (int) getPrSenderEmailAddress: (void **) data
- (int) getPidTagSenderEmailAddress: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [[self appointmentWrapper] getPrSenderEmailAddress: data
return [[self appointmentWrapper] getPidTagSenderEmailAddress: data
inMemCtx: memCtx];
}
- (int) getPrSenderAddrtype: (void **) data
- (int) getPidTagSenderAddressType: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [[self appointmentWrapper] getPrSenderAddrtype: data
return [[self appointmentWrapper] getPidTagSenderAddressType: data
inMemCtx: memCtx];
}
- (int) getPrSenderName: (void **) data
- (int) getPidTagSenderName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [[self appointmentWrapper] getPrSenderName: data
return [[self appointmentWrapper] getPidTagSenderName: data
inMemCtx: memCtx];
}
- (int) getPrSenderEntryid: (void **) data inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagSenderEntryId: (void **) data inMemCtx: (TALLOC_CTX *) memCtx
{
return [[self appointmentWrapper] getPrSenderEntryid: data
return [[self appointmentWrapper] getPidTagSenderEntryId: data
inMemCtx: memCtx];
}
/* sender representing */
- (int) getPrSentRepresentingEmailAddress: (void **) data
- (int) getPidTagSentRepresentingEmailAddress: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrSenderEmailAddress: data inMemCtx: memCtx];
return [self getPidTagSenderEmailAddress: data inMemCtx: memCtx];
}
- (int) getPrSentRepresentingAddrtype: (void **) data
- (int) getPidTagSentRepresentingAddressType: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getSMTPAddrType: data inMemCtx: memCtx];
}
- (int) getPrSentRepresentingName: (void **) data
- (int) getPidTagSentRepresentingName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrSenderName: data inMemCtx: memCtx];
return [self getPidTagSenderName: data inMemCtx: memCtx];
}
- (int) getPrSentRepresentingEntryid: (void **) data
- (int) getPidTagSentRepresentingEntryId: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrSenderEntryid: data inMemCtx: memCtx];
return [self getPidTagSenderEntryId: data inMemCtx: memCtx];
}
/* attendee */
// - (int) getPrReceivedByAddrtype: (void **) data
// - (int) getPidTagReceivedByAddressType: (void **) data
// inMemCtx: (TALLOC_CTX *) memCtx
// {
// return [[self appointmentWrapper] getPrReceivedByAddrtype: data
// return [[self appointmentWrapper] getPidTagReceivedByAddressType: data
// inMemCtx: memCtx];
// }
// - (int) getPrReceivedByEmailAddress: (void **) data
// - (int) getPidTagReceivedByEmailAddress: (void **) data
// inMemCtx: (TALLOC_CTX *) memCtx
// {
// return [[self appointmentWrapper] getPrReceivedByEmailAddress: data
// return [[self appointmentWrapper] getPidTagReceivedByEmailAddress: data
// inMemCtx: memCtx];
// }
// - (int) getPrReceivedByName: (void **) data
// - (int) getPidTagReceivedByName: (void **) data
// inMemCtx: (TALLOC_CTX *) memCtx
// {
// return [[self appointmentWrapper] getPrReceivedByName: data
// return [[self appointmentWrapper] getPidTagReceivedByName: data
// inMemCtx: memCtx];
// }
// - (int) getPrReceivedByEntryid: (void **) data
// - (int) getPidTagReceivedByEntryId: (void **) data
// inMemCtx: (TALLOC_CTX *) memCtx
// {
// return [[self appointmentWrapper] getPrReceivedByEntryid: data
// return [[self appointmentWrapper] getPidTagReceivedByEntryId: data
// inMemCtx: memCtx];
// }
// /* attendee representing */
// - (int) getPrRcvdRepresentingEmailAddress: (void **) data
// - (int) getPidTagReceivedRepresentingEmailAddress: (void **) data
// inMemCtx: (TALLOC_CTX *) memCtx
// {
// return [self getPrReceivedByEmailAddress: data inMemCtx: memCtx];
// return [self getPidTagReceivedByEmailAddress: data inMemCtx: memCtx];
// }
// - (int) getPrRcvdRepresentingAddrtype: (void **) data
// - (int) getPidTagReceivedRepresentingAddressType: (void **) data
// inMemCtx: (TALLOC_CTX *) memCtx
// {
// return [self getSMTPAddrType: data inMemCtx: memCtx];
// }
// - (int) getPrRcvdRepresentingName: (void **) data
// - (int) getPidTagReceivedRepresentingName: (void **) data
// inMemCtx: (TALLOC_CTX *) memCtx
// {
// return [self getPrReceivedByName: data inMemCtx: memCtx];
// return [self getPidTagReceivedByName: data inMemCtx: memCtx];
// }
// - (int) getPrRcvdRepresentingEntryid: (void **) data
// - (int) getPidTagReceivedRepresentingEntryId: (void **) data
// inMemCtx: (TALLOC_CTX *) memCtx
// {
// return [self getPrReceivedByEntryid: data inMemCtx: memCtx];
// return [self getPidTagReceivedByEntryId: data inMemCtx: memCtx];
// }
- (int) getPrResponseRequested: (void **) data
- (int) getPidTagResponseRequested: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getYes: data inMemCtx: memCtx];
@ -542,43 +560,50 @@
return uid;
}
- (void) _fixupEventWithExistingUID
- (void) _fixupAppointmentObjectWithUID: (NSString *) uid
{
NSString *uid, *existingCName, *existingURL;
NSString *cname, *url;
MAPIStoreMapping *mapping;
uint64_t objectId;
SOGoAppointmentObject *existingObject;
SOGoAppointmentFolder *folder;
SOGoAppointmentObject *newObject;
WOContext *woContext;
uid = [self _uidFromGlobalObjectId];
existingCName = [[container sogoObject] resourceNameForEventUID: uid];
if (existingCName)
{
cname = [[container sogoObject] resourceNameForEventUID: uid];
if (cname)
isNew = NO;
else
cname = [NSString stringWithFormat: @"%@.ics", uid];
mapping = [self mapping];
url = [NSString stringWithFormat: @"%@%@", [container url], cname];
folder = [container sogoObject];
/* reinstantiate the old sogo object and attach it to self */
woContext = [[self userContext] woContext];
if (isNew)
newObject = [SOGoAppointmentObject objectWithName: cname
inContainer: folder];
else
{
/* dissociate the object url from the old object's id */
existingURL = [NSString stringWithFormat: @"%@%@",
[container url], existingCName];
objectId = [mapping idFromURL: existingURL];
objectId = [mapping idFromURL: url];
[mapping unregisterURLWithID: objectId];
newObject = [folder lookupName: cname
inContext: woContext
acquire: NO];
}
/* dissociate the object url associated with this object, as we want to
discard it */
objectId = [self objectId];
[mapping unregisterURLWithID: objectId];
/* associate the object url with this object id */
[mapping registerURL: existingURL withID: objectId];
/* associate the new object url with this object id */
[mapping registerURL: url withID: objectId];
/* reinstantiate the old sogo object and attach it to self */
woContext = [[self userContext] woContext];
existingObject = [[container sogoObject] lookupName: existingCName
inContext: woContext
acquire: NO];
[existingObject setContext: woContext];
ASSIGN (sogoObject, existingObject);
isNew = NO;
}
[newObject setContext: woContext];
ASSIGN (sogoObject, newObject);
}
- (void) _setupAlarmDataInEvent: (iCalEvent *) newEvent
@ -657,22 +682,28 @@
iCalDateTime *start, *end;
iCalTimeZone *tz;
NSCalendarDate *now;
NSString *content, *tzName, *priority;
NSString *uid, *content, *tzName, *priority, *newParticipationStatus = nil;
iCalEvent *newEvent;
iCalPerson *userPerson;
// iCalPerson *userPerson;
NSUInteger responseStatus = 0;
NSInteger tzOffset;
SOGoUser *activeUser, *ownerUser;
id value;
if (isNew)
{
uid = [self _uidFromGlobalObjectId];
if (uid)
{
/* Hack required because of what's explained in oxocal 3.1.4.7.1:
basically, Outlook creates a copy of the event and then removes the
old instance. We perform a trickery to avoid performing those
operations in the backend, in a way that enables us to recover the
initial instance and act solely on it. */
[self _fixupEventWithExistingUID];
[self _fixupAppointmentObjectWithUID: uid];
}
else
uid = [SOGoObject globallyUniqueObjectId];
}
[self logWithFormat: @"-save, event props:"];
@ -686,63 +717,14 @@
newEvent = [sogoObject component: YES secure: NO];
vCalendar = [newEvent parent];
[vCalendar setProdID: @"-//Inverse inc.//OpenChange+SOGo//EN"];
content = [vCalendar versitString];
[newEvent setCreated: now];
[newEvent setUid: uid];
content = [vCalendar versitString];
}
vCalendar = [iCalCalendar parseSingleFromSource: content];
newEvent = [[vCalendar events] objectAtIndex: 0];
ownerUser = [[self userContext] sogoUser];
userPerson = [newEvent userAsAttendee: ownerUser];
[newEvent setTimeStampAsDate: now];
if (userPerson)
{
// iCalPersonPartStat newPartStat;
NSString *newPartStat;
value
= [properties objectForKey: MAPIPropertyKey (PidLidResponseStatus)];
if (value)
responseStatus = [value unsignedLongValue];
/* FIXME: we should provide a data converter between OL partstats and
SOGo */
switch (responseStatus)
{
case 0x02: /* respTentative */
// newPartStat = iCalPersonPartStatTentative;
newPartStat = @"TENTATIVE";
break;
case 0x03: /* respAccepted */
// newPartStat = iCalPersonPartStatAccepted;
newPartStat = @"ACCEPTED";
break;
case 0x04: /* respDeclined */
// newPartStat = iCalPersonPartStatDeclined;
newPartStat = @"DECLINED";
break;
default:
newPartStat = nil;
}
if (newPartStat // != iCalPersonPartStatUndefined
)
{
// iCalPerson *participant;
// participant = [newEvent userAsAttendee: ownerUser];
// [participant setParticipationStatus: newPartStat];
// [sogoObject saveComponent: newEvent];
[sogoObject changeParticipationStatus: newPartStat
withDelegate: nil];
// [[self context] tearDownRequest];
}
}
else
{
[newEvent setLastModified: now];
// summary
@ -901,7 +883,159 @@
iCalPersonPartStat newPartStat;
NSNumber *flags, *trackStatus;
int i, effective;
BOOL organizerIsSet = NO;
recipients = [value objectForKey: @"to"];
effective = 0;
for (i = 0; i < [recipients count]; i++)
{
dict = [recipients objectAtIndex: i];
person = [iCalPerson new];
[person setCn: [dict objectForKey: @"fullName"]];
attEmail = [dict objectForKey: @"email"];
[person setEmail: attEmail];
flags = [dict objectForKey: MAPIPropertyKey (PR_RECIPIENT_FLAGS)];
if (!flags)
{
[self logWithFormat:
@"no recipient flags specified: skipping recipient"];
continue;
}
if (([flags unsignedIntValue] & 0x0002)) /* recipOrganizer */
{
[newEvent setOrganizer: person];
organizerIsSet = YES;
[self logWithFormat: @"organizer set via recipient flags"];
}
else
{
BOOL isOrganizer = NO;
// /* Work-around: it happens that Outlook still passes the
// organizer as a recipient, maybe because of a feature
// documented in a pre-mesozoic PDF still buried in a
// cavern... In that case we remove it, and we keep the
// number of effective recipients in "effective". If the
// total is 0, we remove the "ORGANIZER" too. */
// if ([attEmail isEqualToString: orgEmail])
// {
// [self logWithFormat:
// @"avoiding setting organizer as recipient"];
// continue;
// }
trackStatus = [dict objectForKey: MAPIPropertyKey (PidTagRecipientTrackStatus)];
if (trackStatus)
{
/* FIXME: we should provide a data converter between OL
partstats and SOGo */
switch ([trackStatus unsignedIntValue])
{
case 0x01: /* respOrganized */
isOrganizer = YES;
break;
case 0x02: /* respTentative */
newPartStat = iCalPersonPartStatTentative;
break;
case 0x03: /* respAccepted */
newPartStat = iCalPersonPartStatAccepted;
break;
case 0x04: /* respDeclined */
newPartStat = iCalPersonPartStatDeclined;
break;
default:
newPartStat = iCalPersonPartStatNeedsAction;
}
if (isOrganizer)
{
[newEvent setOrganizer: person];
organizerIsSet = YES;
[self logWithFormat: @"organizer set via track status"];
}
else
{
[person setParticipationStatus: newPartStat];
[person setRsvp: @"TRUE"];
[person setRole: @"REQ-PARTICIPANT"];
[newEvent addToAttendees: person];
effective++;
}
}
else
[self errorWithFormat: @"skipped recipient due"
@" to missing track status"];
}
[person release];
}
if (effective == 0) /* See work-around above */
[newEvent setOrganizer: nil];
else
{
ownerUser = [[self userContext] sogoUser];
if (organizerIsSet)
{
/* We must reset the participation status to the value
obtained from PidLidResponseStatus as the value in
PidTagRecipientTrackStatus is not correct. Note (hack):
the method used here requires that the user directory
from LDAP and Samba matches perfectly. This can be solved
more appropriately by making use of the sender
properties... */
person = [newEvent userAsAttendee: ownerUser];
if (person)
{
value
= [properties objectForKey: MAPIPropertyKey (PidLidResponseStatus)];
if (value)
responseStatus = [value unsignedLongValue];
/* FIXME: we should provide a data converter between OL partstats and
SOGo */
switch (responseStatus)
{
case 0x02: /* respTentative */
newPartStat = iCalPersonPartStatTentative;
break;
case 0x03: /* respAccepted */
newPartStat = iCalPersonPartStatAccepted;
break;
case 0x04: /* respDeclined */
newPartStat = iCalPersonPartStatDeclined;
break;
default:
newPartStat = iCalPersonPartStatNeedsAction;
}
[person setParticipationStatus: newPartStat];
newParticipationStatus = [person partStatWithDefault];
// if (newPartStat // != iCalPersonPartStatUndefined
// )
// {
// // iCalPerson *participant;
// // participant = [newEvent userAsAttendee: ownerUser];
// // [participant setParticipationStatus: newPartStat];
// // [sogoObject saveComponent: newEvent];
// [sogoObject changeParticipationStatus: newPartStat
// withDelegate: nil];
// // [[self context] tearDownRequest];
// }
// // }1005
// // else
// // {
}
}
else
{
[self errorWithFormat: @"organizer was not set although a"
@" recipient list was specified"];
/* We must set the organizer preliminarily here because, unlike what
the doc states, Outlook does not always pass the real organizer
in the recipients list. */
@ -921,81 +1055,16 @@
}
[newEvent setOrganizer: person];
[person release];
recipients = [value objectForKey: @"to"];
effective = 0;
for (i = 0; i < [recipients count]; i++)
{
dict = [recipients objectAtIndex: i];
flags = [dict objectForKey: MAPIPropertyKey (PR_RECIPIENT_FLAGS)];
if (!flags)
{
[self logWithFormat:
@"no recipient flags specified: skipping recipient"];
continue;
}
person = [iCalPerson new];
[person setCn: [dict objectForKey: @"fullName"]];
attEmail = [dict objectForKey: @"email"];
[person setEmail: attEmail];
if (([flags unsignedIntValue] & 0x0002)) /* recipOrganizer */
[newEvent setOrganizer: person];
else
{
/* Work-around: it happens that Outlook still passes the
organizer as a recipient, maybe because of a feature
documented in a pre-mesozoic PDF still buried in a
cavern... In that case we remove it, and we keep the
number of effective recipients in "effective". If the
total is 0, we remove the "ORGANIZER" too. */
if ([attEmail isEqualToString: orgEmail])
{
[self logWithFormat:
@"avoiding setting organizer as recipient"];
continue;
}
trackStatus
= [dict
objectForKey: MAPIPropertyKey (PR_RECIPIENT_TRACKSTATUS)];
/* FIXME: we should provide a data converter between OL
partstats and SOGo */
switch ([trackStatus unsignedIntValue])
{
case 0x02: /* respTentative */
newPartStat = iCalPersonPartStatTentative;
break;
case 0x03: /* respAccepted */
newPartStat = iCalPersonPartStatAccepted;
break;
case 0x04: /* respDeclined */
newPartStat = iCalPersonPartStatDeclined;
break;
default:
newPartStat = iCalPersonPartStatNeedsAction;
}
[person setParticipationStatus: newPartStat];
[person setRsvp: @"TRUE"];
[person setRole: @"REQ-PARTICIPANT"];
[newEvent addToAttendees: person];
effective++;
}
[person release];
}
if (effective == 0) /* See work-around above */
[newEvent setOrganizer: nil];
}
}
[sogoObject saveComponent: newEvent];
}
if (newParticipationStatus)
[sogoObject changeParticipationStatus: newParticipationStatus
withDelegate: nil];
[(MAPIStoreCalendarFolder *) container synchroniseCache];
value = [properties objectForKey: MAPIPropertyKey (PR_CHANGE_KEY)];
if (value)

View file

@ -94,37 +94,37 @@ 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
- (int) getPidTagAttachFlags: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getLongZero: data inMemCtx: memCtx];
}
- (int) getPrAttachmentFlags: (void **) data
- (int) getPidTagAttachmentFlags: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getLongZero: data inMemCtx: memCtx];
}
- (int) getPrAttachmentHidden: (void **) data inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagAttachmentHidden: (void **) data inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getNo: data inMemCtx: memCtx];
}
- (int) getPrAttachmentLinkid: (void **) data
- (int) getPidTagAttachmentLinkId: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getLongZero: data inMemCtx: memCtx];
}
- (int) getPrAttachMethod: (void **) data
- (int) getPidTagAttachMethod: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPILongValue (memCtx, 0x00000001);
@ -132,13 +132,13 @@ extern NSTimeZone *utcTZ;
return MAPISTORE_SUCCESS;
}
- (int) getPrAttachmentContactphoto: (void **) data
- (int) getPidTagAttachmentContactPhoto: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getYes: data inMemCtx: memCtx];
}
- (int) getPrAttachDataBin: (void **) data
- (int) getPidTagAttachDataBinary: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
if (!photoData)
@ -150,7 +150,7 @@ extern NSTimeZone *utcTZ;
return MAPISTORE_SUCCESS;
}
- (int) getPrAttachSize: (void **) data
- (int) getPidTagAttachSize: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
if (!photoData)
@ -162,7 +162,7 @@ extern NSTimeZone *utcTZ;
return MAPISTORE_SUCCESS;
}
- (int) getPrAttachExtension: (void **) data
- (int) getPidTagAttachExtension: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = [[self fileExtension] asUnicodeInMemCtx: memCtx];
@ -170,7 +170,7 @@ extern NSTimeZone *utcTZ;
return MAPISTORE_SUCCESS;
}
- (int) getPrAttachLongFilename: (void **) data
- (int) getPidTagAttachLongFilename: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSString *filename;
@ -183,17 +183,17 @@ extern NSTimeZone *utcTZ;
return MAPISTORE_SUCCESS;
}
- (int) getPrAttachFilename: (void **) data
- (int) getPidTagAttachFilename: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrAttachLongFilename: data
return [self getPidTagAttachLongFilename: data
inMemCtx: memCtx];
}
- (int) getPrDisplayName: (void **) data
- (int) getPidTagDisplayName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrAttachLongFilename: data inMemCtx: memCtx];
return [self getPidTagAttachLongFilename: data inMemCtx: memCtx];
}
@end

View file

@ -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

View file

@ -100,7 +100,7 @@
return element;
}
- (int) getPrIconIndex: (void **) data // TODO
- (int) getPidTagIconIndex: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
{
/* see http://msdn.microsoft.com/en-us/library/cc815472.aspx */
@ -109,7 +109,7 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrMessageClass: (void **) data
- (int) getPidTagMessageClass: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = talloc_strdup (memCtx, "IPM.Contact");
@ -117,7 +117,7 @@
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,7 +136,7 @@
// }
- (int) getPrTitle: (void **) data
- (int) getPidTagTitle: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSString *stringValue;
@ -147,7 +147,7 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrCompanyName: (void **) data
- (int) getPidTagCompanyName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
CardElement *org;
@ -159,7 +159,7 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrDepartmentName: (void **) data
- (int) getPidTagDepartmentName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
CardElement *org;
@ -171,7 +171,7 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrSendInternetEncoding: (void **) data
- (int) getPidTagSendInternetEncoding: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPILongValue (memCtx, 0x00065001);
@ -179,16 +179,16 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrSubject: (void **) data
- (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,13 +231,13 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrAccount: (void **) data
- (int) getPidTagAccount: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPidLidEmail1EmailAddress: data inMemCtx: memCtx];
}
- (int) getPrContactEmailAddresses: (void **) data
- (int) getPidTagContactEmailAddresses: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSString *stringValue;
@ -251,7 +251,7 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrEmsAbTargetAddress: (void **) data
- (int) getPidTagEmsAbTargetAddress: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSString *stringValue;
@ -263,7 +263,7 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrSearchKey: (void **) data // TODO
- (int) getPidTagSearchKey: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
{
NSString *stringValue;
@ -275,7 +275,7 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrMailPermission: (void **) data
- (int) getPidTagMailPermission: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getYes: data inMemCtx: memCtx];
@ -321,7 +321,7 @@
return [self getPidLidEmail2EmailAddress: data inMemCtx: memCtx];
}
- (int) getPrBody: (void **) data
- (int) getPidTagBody: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
int rc = MAPISTORE_SUCCESS;
@ -372,56 +372,56 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrOfficeTelephoneNumber: (void **) data
- (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
- (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
- (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
- (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
- (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
- (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
- (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
- (int) getPidTagPersonalHomePage: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getElement: @"url" ofType: @"home" excluding: nil
@ -491,49 +491,49 @@
//
// getters when no address is selected as the Mailing Address
//
- (int) getPrPostalAddress: (void **) data
- (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
- (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
- (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
- (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
- (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
- (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
- (int) getPidTagCountry: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getElement: @"adr" ofType: @"pref" excluding: nil
@ -550,41 +550,41 @@
atPos: 0 inData: data inMemCtx: memCtx];
}
- (int) getPrHomeAddressPostOfficeBox: (void **) data
- (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
- (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
- (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
- (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
- (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
- (int) getPidTagHomeAddressCountry: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getElement: @"adr" ofType: @"home" excluding: nil
@ -646,7 +646,7 @@
//
//
//
- (int) getPrNickname: (void **) data
- (int) getPidTagNickname: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSString *stringValue;
@ -657,7 +657,7 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrBirthday: (void **) data
- (int) getPidTagBirthday: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSCalendarDate *dateValue;
@ -681,7 +681,7 @@
//
// Decomposed fullname getters
//
- (int) getPrSurname: (void **) data
- (int) getPidTagSurname: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSString *stringValue;
@ -694,7 +694,7 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrGivenName: (void **) data
- (int) getPidTagGivenName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSString *stringValue;
@ -707,7 +707,7 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrMiddleName: (void **) data
- (int) getPidTagMiddleName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSString *stringValue;
@ -720,7 +720,7 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrDisplayNamePrefix: (void **) data
- (int) getPidTagDisplayNamePrefix: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSString *stringValue;
@ -733,7 +733,7 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrGeneration: (void **) data
- (int) getPidTagGeneration: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSString *stringValue;
@ -746,7 +746,7 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrSensitivity: (void **) data
- (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;

View file

@ -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;
}

View file

@ -42,7 +42,7 @@
andType: MAPISTORE_FAI_TABLE];
}
- (int) getPrAssociated: (void **) data
- (int) getPidTagAssociated: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getYes: data inMemCtx: memCtx];

View file

@ -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];

View file

@ -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);

View file

@ -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;

View file

@ -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
@ -770,9 +768,14 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
isAddition: (BOOL) isAddition
withACLFolder: (SOGoFolder *) aclFolder
{
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,13 +963,22 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
else if (tableType == MAPISTORE_FOLDER_TABLE)
table = [self folderTable];
else if (tableType == MAPISTORE_PERMISSIONS_TABLE)
{
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 (rc == MAPISTORE_SUCCESS)
{
if (table)
{
[table setHandleId: handleId];
@ -974,6 +987,7 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
}
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
return [self messageKeysMatchingQualifier: nil
andSortOrderings: nil];
[messageKeys retain];
}
// 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
return [self faiMessageKeysMatchingQualifier: nil
andSortOrderings: nil];
[faiMessageKeys retain];
}
// 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
return [self folderKeysMatchingQualifier: nil
andSortOrderings: nil];
[folderKeys retain];
}
// if (!folderKeys)
// {
// folderKeys = [self folderKeysMatchingQualifier: nil
// andSortOrderings: nil];
// [folderKeys retain];
// }
return folderKeys;
// return folderKeys;
}
- (NSArray *) folderKeysMatchingQualifier: (EOQualifier *) qualifier
@ -1099,15 +1119,15 @@ 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
- (int) getPidTagParentFolderId: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPILongLongValue (memCtx, [container objectId]);
@ -1115,7 +1135,7 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
return MAPISTORE_SUCCESS;
}
- (int) getPrFid: (void **) data
- (int) getPidTagFolderId: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPILongLongValue (memCtx, [self objectId]);
@ -1133,7 +1153,7 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
0x00000010 Create Contents Table
0x00000020 Create Associated Contents Table
*/
- (int) getPrAccess: (void **) data
- (int) getPidTagAccess: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
uint32_t access = 0;
@ -1168,7 +1188,7 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
0x00000000 Read-Only
0x00000001 Modify
*/
- (int) getPrAccessLevel: (void **) data
- (int) getPidTagAccessLevel: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPILongValue (memCtx, 0x01);
@ -1176,33 +1196,33 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
return MAPISTORE_SUCCESS;
}
- (int) getPrAttrHidden: (void **) data
- (int) getPidTagAttributeHidden: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getNo: data inMemCtx: memCtx];
}
- (int) getPrAttrSystem: (void **) data
- (int) getPidTagAttributeSystem: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getNo: data inMemCtx: memCtx];
}
- (int) getPrAttrReadOnly: (void **) data
- (int) getPidTagAttributeReadOnly: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getNo: data inMemCtx: memCtx];
}
- (int) getPrSubfolders: (void **) data
- (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
- (int) getPidTagFolderChildCount: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPILongValue (memCtx, [[self folderKeys] count]);
@ -1210,7 +1230,7 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
return MAPISTORE_SUCCESS;
}
- (int) getPrContentCount: (void **) data
- (int) getPidTagContentCount: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPILongValue (memCtx, [[self messageKeys] count]);
@ -1218,7 +1238,7 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
return MAPISTORE_SUCCESS;
}
- (int) getPrContentUnread: (void **) data
- (int) getPidTagContentUnreadCount: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPILongValue (memCtx, 0);
@ -1226,7 +1246,7 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
return MAPISTORE_SUCCESS;
}
- (int) getPrAssocContentCount: (void **) data
- (int) getPidTagAssociatedContentCount: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPILongValue (memCtx, [[self faiMessageKeys] count]);
@ -1234,7 +1254,7 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
return MAPISTORE_SUCCESS;
}
- (int) getPrDeletedCountTotal: (void **) data
- (int) getPidTagDeletedCountTotal: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
/* TODO */
@ -1243,12 +1263,19 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
return MAPISTORE_SUCCESS;
}
- (int) getPrLocalCommitTimeMax: (void **) data
- (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,6 +1417,8 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
NSString *username;
struct ldb_context *samCtx;
if (bin && bin->cb)
{
bin32.cb = bin->cb;
bin32.lpb = bin->lpb;
@ -1404,6 +1433,9 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
else
username = nil;
talloc_free (entryId);
}
else
username = nil;
return username;
}
@ -1415,6 +1447,12 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
NSUInteger count, max;
MAPIStorePermissionEntry *entry;
if (memberId == 0)
username = [[self aclFolder] defaultUserID];
else if (memberId == ULLONG_MAX)
username = @"anonymous";
else
{
max = [entries count];
for (count = 0; !username && count < max; count++)
{
@ -1422,6 +1460,7 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
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:
if (isAdd)
permissionUser
= [self _usernameFromEntryId: &mapiValue->value.bin];
break;
case PR_MEMBER_ID:
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)

View file

@ -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:

View file

@ -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

View file

@ -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,12 +349,36 @@
[sortOrdering retain];
}
now = [NSCalendarDate date];
currentProperties = [versionsMessage properties];
currentProperties = [[versionsMessage properties] mutableCopy];
if (!currentProperties)
currentProperties = [NSMutableDictionary new];
[currentProperties autorelease];
lastModificationDate = [currentProperties objectForKey: @"SyncLastModificationDate"];
if (lastModificationDate)
{
searchQualifier = [[EOKeyValueQualifier alloc]
initWithKey: @"c_lastmodified"
operatorSelector: EOQualifierOperatorGreaterThanOrEqualTo
value: lastModificationDate];
fetchQualifier = [[EOAndQualifier alloc]
initWithQualifiers: searchQualifier,
[self contentComponentQualifier],
nil];
[fetchQualifier autorelease];
[searchQualifier release];
}
else
fetchQualifier = [self componentQualifier];
ocsFolder = [sogoObject ocsFolder];
fs = [EOFetchSpecification
fetchSpecificationWithEntityName: [ocsFolder folderName]
qualifier: fetchQualifier
sortOrderings: [NSArray arrayWithObject: sortOrdering]];
fetchResults = [ocsFolder fetchFields: fields
fetchSpecification: fs
ignoreDeleted: NO];
max = [fetchResults count];
if (max > 0)
{
messages = [currentProperties objectForKey: @"Messages"];
if (!messages)
{
@ -333,37 +394,16 @@
[mapping release];
}
lastModificationDate = [currentProperties objectForKey: @"SyncLastModificationDate"];
if (lastModificationDate)
{
searchQualifier = [[EOKeyValueQualifier alloc]
initWithKey: @"c_lastmodified"
operatorSelector: EOQualifierOperatorGreaterThanOrEqualTo
value: lastModificationDate];
fetchQualifier = [[EOAndQualifier alloc]
initWithQualifiers:
searchQualifier, [self componentQualifier], nil];
[fetchQualifier autorelease];
[searchQualifier release];
}
else
fetchQualifier = [self componentQualifier];
ocsFolder = [sogoObject ocsFolder];
fs = [EOFetchSpecification
fetchSpecificationWithEntityName: [ocsFolder folderName]
qualifier: fetchQualifier
sortOrderings: [NSArray arrayWithObject: sortOrdering]];
fetchResults = [ocsFolder fetchFields: fields fetchSpecification: fs];
max = [fetchResults count];
if (max > 0)
{
ldb_transaction_start([[self context] connectionInfo]->oc_ctx);
for (count = 0; count < max; count++)
{
result = [fetchResults objectAtIndex: count];
cName = [result objectForKey: @"c_name"];
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"];
@ -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)
{
mapping = [versionProperties objectForKey: @"VersionsMapping"];
for (count = 0; count < max; count++)
{
cName = [deletedCNames objectAtIndex: count];
if ([messages objectForKey: cName])
[sogoObject removeChildRecordWithName: cName];
messageEntry = [messages objectForKey: cName];
if (messageEntry)
{
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];

View file

@ -51,7 +51,7 @@
return [sogoObject lastModified];
}
- (int) getPrAccess: (void **) data // TODO
- (int) getPidTagAccess: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
{
MAPIStoreContext *context;
@ -88,7 +88,7 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrAccessLevel: (void **) data // TODO
- (int) getPidTagAccessLevel: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
{
MAPIStoreContext *context;
@ -117,7 +117,7 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrChangeKey: (void **) data
- (int) getPidTagChangeKey: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
int rc = MAPISTORE_SUCCESS;
@ -145,18 +145,26 @@
return rc;
}
- (int) getPrPredecessorChangeList: (void **) data
- (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]
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];

View file

@ -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 *)

View file

@ -68,7 +68,7 @@
ASSIGN (bodyInfo, newBodyInfo);
}
- (int) getPrAttachMethod: (void **) data
- (int) getPidTagAttachMethod: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPILongValue (memCtx, 0x00000001); // afByValue
@ -76,7 +76,7 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrAttachTag: (void **) data
- (int) getPidTagAttachTag: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = [[self mimeAttachTag] asBinaryInMemCtx: memCtx];
@ -84,7 +84,7 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrAttachSize: (void **) data
- (int) getPidTagAttachSize: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
uint32_t longValue;
@ -95,7 +95,7 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrRecordKey: (void **) data
- (int) getPidTagRecordKey: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
static char recordBytes[] = {0xd9, 0xd8, 0x11, 0xa3, 0xe2, 0x90, 0x18, 0x41,
@ -125,7 +125,7 @@
return fileName;
}
- (int) getPrAttachLongFilename: (void **) data
- (int) getPidTagAttachLongFilename: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = [[self _fileName] asUnicodeInMemCtx: memCtx];
@ -133,7 +133,7 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrAttachFilename: (void **) data
- (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,7 +162,7 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrAttachContentId: (void **) data
- (int) getPidTagAttachContentId: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = [[bodyInfo objectForKey: @"bodyId"]
@ -171,7 +171,7 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrAttachMimeTag: (void **) data
- (int) getPidTagAttachMimeTag: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSString *mimeTag;
@ -184,7 +184,7 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrAttachDataBin: (void **) data
- (int) getPidTagAttachDataBinary: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = [[sogoObject fetchBLOBWithPeek: YES] asBinaryInMemCtx: memCtx];

View file

@ -201,7 +201,7 @@ static Class SOGoMailFolderK, MAPIStoreOutboxFolderK;
return (rc == MAPISTORE_SUCCESS) ? [super deleteFolder] : rc;
}
- (int) getPrContentUnread: (void **) data
- (int) getPidTagContentUnreadCount: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
EOQualifier *searchQualifier;
@ -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];

View file

@ -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

View file

@ -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,7 +293,7 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
return appointmentWrapper;
}
- (int) getPrChangeKey: (void **) data
- (int) getPidTagChangeKey: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
int rc = MAPISTORE_SUCCESS;
@ -330,7 +329,7 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
return rc;
}
- (int) getPrPredecessorChangeList: (void **) data
- (int) getPidTagPredecessorChangeList: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
int rc = MAPISTORE_SUCCESS;
@ -397,7 +396,7 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
return version;
}
- (int) getPrIconIndex: (void **) data
- (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,7 +447,7 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
return MAPISTORE_SUCCESS;
}
- (int) getPrSubject: (void **) data
- (int) getPidTagSubject: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSString *stringValue;
@ -461,7 +460,7 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
return MAPISTORE_SUCCESS;
}
- (int) getPrSubjectPrefix: (void **) data
- (int) getPidTagSubjectPrefix: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSString *subject;
@ -480,7 +479,7 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
return MAPISTORE_SUCCESS;
}
- (int) getPrNormalizedSubject: (void **) data
- (int) getPidTagNormalizedSubject: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSString *subject;
@ -507,14 +506,14 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
return [self getYes: data inMemCtx: memCtx];
}
- (int) getPrMessageClass: (void **) data
- (int) getPidTagMessageClass: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
if (!headerSetup)
[self _fetchHeaderData];
if (mailIsEvent)
[[self _appointmentWrapper] getPrMessageClass: data
[[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,7 +534,7 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
// }
/* ... while this applies to invitations. */
- (int) getPrResponseRequested: (void **) data // TODO
- (int) getPidTagResponseRequested: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
{
if (!headerSetup)
@ -546,31 +545,31 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
: MAPISTORE_ERR_NOT_FOUND);
}
- (int) getPrLatestDeliveryTime: (void **) data // DOUBT
- (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
- (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 getPrCreationTime: data inMemCtx: memCtx];
return [self getPidTagCreationTime: data inMemCtx: memCtx];
}
- (int) getPrMessageDeliveryTime: (void **) data
- (int) getPidTagMessageDeliveryTime: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrCreationTime: data inMemCtx: memCtx];
return [self getPidTagCreationTime: data inMemCtx: memCtx];
}
- (int) getPrMessageFlags: (void **) data // TODO
- (int) getPidTagMessageFlags: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
{
NSDictionary *coreInfos;
@ -594,7 +593,7 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
return MAPISTORE_SUCCESS;
}
- (int) getPrFlagStatus: (void **) data
- (int) getPidTagFlagStatus: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSDictionary *coreInfos;
@ -614,7 +613,7 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
return MAPISTORE_SUCCESS;
}
- (int) getPrFollowupIcon: (void **) data
- (int) getPidTagFollowupIcon: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSDictionary *coreInfos;
@ -634,37 +633,37 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
return MAPISTORE_SUCCESS;
}
- (int) getPrSensitivity: (void **) data // TODO
- (int) getPidTagSensitivity: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getLongZero: data inMemCtx: memCtx];
}
- (int) getPrOriginalSensitivity: (void **) data // TODO
- (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
- (int) getPidTagSentRepresentingAddressType: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getSMTPAddrType: data inMemCtx: memCtx];
}
- (int) getPrRcvdRepresentingAddrtype: (void **) data
- (int) getPidTagReceivedRepresentingAddressType: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getSMTPAddrType: data inMemCtx: memCtx];
}
- (int) getPrReceivedByAddrtype: (void **) data
- (int) getPidTagReceivedByAddressType: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getSMTPAddrType: data inMemCtx: memCtx];
}
- (int) getPrSenderAddrtype: (void **) data
- (int) getPidTagSenderAddressType: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getSMTPAddrType: data inMemCtx: memCtx];
@ -762,7 +761,7 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
return rc;
}
- (int) getPrSenderEmailAddress: (void **) data
- (int) getPidTagSenderEmailAddress: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getEmailAddressFromEmail: [sogoObject from]
@ -770,7 +769,7 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
inMemCtx: memCtx];
}
- (int) getPrSenderName: (void **) data
- (int) getPidTagSenderName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getCNFromEmail: [sogoObject from]
@ -778,38 +777,38 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *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
- (int) getPidTagOriginalAuthorName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrSenderEmailAddress: data inMemCtx: memCtx];
return [self getPidTagSenderEmailAddress: data inMemCtx: memCtx];
}
- (int) getPrSentRepresentingEmailAddress: (void **) data
- (int) getPidTagSentRepresentingEmailAddress: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrSenderEmailAddress: data inMemCtx: memCtx];
return [self getPidTagSenderEmailAddress: data inMemCtx: memCtx];
}
- (int) getPrSentRepresentingName: (void **) data
- (int) getPidTagSentRepresentingName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrSenderName: data inMemCtx: memCtx];
return [self getPidTagSenderName: data inMemCtx: memCtx];
}
- (int) getPrSentRepresentingEntryid: (void **) data
- (int) getPidTagSentRepresentingEntryId: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrSenderEntryid: data inMemCtx: memCtx];
return [self getPidTagSenderEntryId: data inMemCtx: memCtx];
}
- (int) getPrReceivedByEmailAddress: (void **) data
- (int) getPidTagReceivedByEmailAddress: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getEmailAddressFromEmail: [sogoObject to]
@ -817,7 +816,7 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
inMemCtx: memCtx];
}
- (int) getPrReceivedByName: (void **) data
- (int) getPidTagReceivedByName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getCNFromEmail: [sogoObject to]
@ -825,7 +824,7 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
inMemCtx: memCtx];
}
- (int) getPrReceivedByEntryid: (void **) data
- (int) getPidTagReceivedByEntryId: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getEntryIdFromEmail: [sogoObject to]
@ -833,25 +832,25 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
inMemCtx: memCtx];
}
- (int) getPrRcvdRepresentingName: (void **) data
- (int) getPidTagReceivedRepresentingName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrReceivedByName: data inMemCtx: memCtx];
return [self getPidTagReceivedByName: data inMemCtx: memCtx];
}
- (int) getPrRcvdRepresentingEmailAddress: (void **) data
- (int) getPidTagReceivedRepresentingEmailAddress: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrReceivedByEmailAddress: data inMemCtx: memCtx];
return [self getPidTagReceivedByEmailAddress: data inMemCtx: memCtx];
}
- (int) getPrRcvdRepresentingEntryid: (void **) data
- (int) getPidTagReceivedRepresentingEntryId: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrReceivedByEntryid: data inMemCtx: memCtx];
return [self getPidTagReceivedByEntryId: data inMemCtx: memCtx];
}
- (int) getPrDisplayTo: (void **) data
- (int) getPidTagDisplayTo: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = [[sogoObject to] asUnicodeInMemCtx: memCtx];
@ -859,13 +858,13 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
return MAPISTORE_SUCCESS;
}
- (int) getPrOriginalDisplayTo: (void **) data
- (int) getPidTagOriginalDisplayTo: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrDisplayTo: data inMemCtx: memCtx];
return [self getPidTagDisplayTo: data inMemCtx: memCtx];
}
- (int) getPrDisplayCc: (void **) data
- (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
- (int) getPidTagOriginalDisplayCc: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrDisplayCc: data inMemCtx: memCtx];
return [self getPidTagDisplayCc: data inMemCtx: memCtx];
}
- (int) getPrDisplayBcc: (void **) data
- (int) getPidTagDisplayBcc: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getEmptyString: data inMemCtx: memCtx];
}
- (int) getPrOriginalDisplayBcc: (void **) data
- (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,7 +904,7 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
return MAPISTORE_SUCCESS;
}
- (int) getPrImportance: (void **) data
- (int) getPidTagImportance: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
uint32_t v;
@ -924,7 +923,7 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
return MAPISTORE_SUCCESS;
}
- (int) getPrInternetCpid: (void **) data
- (int) getPidTagInternetCodepage: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
/* ref:
@ -940,7 +939,7 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
return MAPISTORE_SUCCESS;
}
- (int) getPrBody: (void **) data
- (int) getPidTagBody: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSString *stringValue;
@ -955,7 +954,7 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
*data = [stringValue asUnicodeInMemCtx: memCtx];
}
else if (mailIsEvent)
rc = [[self _appointmentWrapper] getPrBody: data
rc = [[self _appointmentWrapper] getPidTagBody: data
inMemCtx: memCtx];
else
{
@ -966,7 +965,7 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
return rc;
}
- (int) getPrHtml: (void **) data
- (int) getPidTagHtml: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
int rc = MAPISTORE_SUCCESS;
@ -985,7 +984,7 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
return rc;
}
- (int) getPrRtfCompressed: (void **) data
- (int) getPidTagRtfCompressed: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = NULL;
@ -993,13 +992,13 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
return MAPISTORE_ERR_NOT_FOUND;
}
- (int) getPrRtfInSync: (void **) data
- (int) getPidTagRtfInSync: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getNo: data inMemCtx: memCtx];
}
- (int) getPrInternetMessageId: (void **) data
- (int) getPidTagInternetMessageId: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = [[sogoObject messageId] asUnicodeInMemCtx: memCtx];
@ -1007,13 +1006,13 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
return MAPISTORE_SUCCESS;
}
- (int) getPrReadReceiptRequested: (void **) data // TODO
- (int) getPidTagReadReceiptRequested: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getNo: data inMemCtx: memCtx];
}
- (int) getPrDeleteAfterSubmit: (void **) data // TODO
- (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,7 +1103,7 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
: [self getNo: data inMemCtx: memCtx]);
}
- (int) getPrMsgEditorFormat: (void **) data
- (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
- (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
- (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,14 +1318,14 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
: MAPISTORE_ERR_NOT_FOUND);
}
- (int) getPrOwnerApptId: (void **) data
- (int) getPidTagOwnerAppointmentId: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
if (!headerSetup)
[self _fetchHeaderData];
return (mailIsEvent
? [[self _appointmentWrapper] getPrOwnerApptId: data
? [[self _appointmentWrapper] getPidTagOwnerAppointmentId: data
inMemCtx: memCtx]
: MAPISTORE_ERR_NOT_FOUND);
}

View file

@ -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:

View file

@ -774,16 +774,18 @@ 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;
mailProperties = [sogoObject properties];
msgClass = [mailProperties objectForKey: MAPIPropertyKey (PidTagMessageClass)];
if ([msgClass isEqualToString: @"IPM.Note"]) /* we skip invitation replies */
{
/* send mail */
messageData = [self _generateMailDataWithBcc: NO];
@ -800,8 +802,7 @@ MakeMessageBody (NSDictionary *mailProperties, NSDictionary *attachmentParts,
notFoundMarker: nil]];
}
connInfo = [[self context] connectionInfo];
activeUser = [SOGoUser userWithLogin: [NSString stringWithUTF8String: connInfo->username]];
activeUser = [[self context] activeUser];
[self logWithFormat: @"recipients: %@", recipientEmails];
dd = [activeUser domainDefaults];
@ -818,6 +819,10 @@ MakeMessageBody (NSDictionary *mailProperties, NSDictionary *attachmentParts,
[self setIsNew: NO];
[properties removeAllObjects];
[[self container] cleanupCaches];
}
else
[self logWithFormat: @"skipping submit of message with class '%@'",
msgClass];
return MAPISTORE_SUCCESS;
}

View file

@ -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;
@ -165,14 +164,14 @@ rtf2html (NSData *compressedRTF)
msgData = talloc_zero (memCtx, struct mapistore_message);
if ([self getPrSubjectPrefix: &propValue
if ([self getPidTagSubjectPrefix: &propValue
inMemCtx: msgData] == MAPISTORE_SUCCESS
&& propValue)
msgData->subject_prefix = propValue;
else
msgData->subject_prefix = "";
if ([self getPrNormalizedSubject: &propValue
if ([self getPidTagNormalizedSubject: &propValue
inMemCtx: msgData] == MAPISTORE_SUCCESS
&& propValue)
msgData->normalized_subject = propValue;
@ -517,7 +516,7 @@ rtf2html (NSData *compressedRTF)
}
/* getters */
- (int) getPrInstId: (void **) data // TODO: DOUBT
- (int) getPidTagInstID: (void **) data // TODO: DOUBT
inMemCtx: (TALLOC_CTX *) memCtx
{
/* we return a unique id based on the key */
@ -526,13 +525,13 @@ rtf2html (NSData *compressedRTF)
return MAPISTORE_SUCCESS;
}
- (int) getPrInstanceNum: (void **) data // TODO: DOUBT
- (int) getPidTagInstanceNum: (void **) data // TODO: DOUBT
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getLongZero: data inMemCtx: memCtx];
}
- (int) getPrRowType: (void **) data // TODO: DOUBT
- (int) getPidTagRowType: (void **) data // TODO: DOUBT
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPILongValue (memCtx, TBL_LEAF_ROW);
@ -540,7 +539,7 @@ rtf2html (NSData *compressedRTF)
return MAPISTORE_SUCCESS;
}
- (int) getPrDepth: (void **) data // TODO: DOUBT
- (int) getPidTagDepth: (void **) data // TODO: DOUBT
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPILongLongValue (memCtx, 0);
@ -558,7 +557,7 @@ rtf2html (NSData *compressedRTF)
0x00000010 Create Contents Table
0x00000020 Create Associated Contents Table
*/
- (int) getPrAccess: (void **) data
- (int) getPidTagAccess: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
uint32_t access = 0;
@ -587,7 +586,7 @@ rtf2html (NSData *compressedRTF)
0x00000000 Read-Only
0x00000001 Modify
*/
- (int) getPrAccessLevel: (void **) data
- (int) getPidTagAccessLevel: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
uint32_t access = 0;
@ -645,7 +644,7 @@ rtf2html (NSData *compressedRTF)
return MAPISTORE_SUCCESS;
}
- (int) getPrFid: (void **) data
- (int) getPidTagFolderId: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPILongLongValue (memCtx, [container objectId]);
@ -653,7 +652,7 @@ rtf2html (NSData *compressedRTF)
return MAPISTORE_SUCCESS;
}
- (int) getPrMid: (void **) data
- (int) getPidTagMid: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPILongLongValue (memCtx, [self objectId]);
@ -661,7 +660,7 @@ rtf2html (NSData *compressedRTF)
return MAPISTORE_SUCCESS;
}
- (int) getPrMessageLocaleId: (void **) data
- (int) getPidTagMessageLocaleId: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPILongValue (memCtx, 0x0409);
@ -669,7 +668,7 @@ rtf2html (NSData *compressedRTF)
return MAPISTORE_SUCCESS;
}
- (int) getPrMessageFlags: (void **) data // TODO
- (int) getPidTagMessageFlags: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPILongValue (memCtx, MSGFLAG_FROMME | MSGFLAG_READ | MSGFLAG_UNMODIFIED);
@ -677,7 +676,7 @@ rtf2html (NSData *compressedRTF)
return MAPISTORE_SUCCESS;
}
- (int) getPrMessageSize: (void **) data // TODO
- (int) getPidTagMessageSize: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
{
/* TODO: choose another name in SOGo for that method */
@ -686,13 +685,13 @@ rtf2html (NSData *compressedRTF)
return MAPISTORE_SUCCESS;
}
- (int) getPrMsgStatus: (void **) data // TODO
- (int) getPidTagMessageStatus: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getLongZero: data inMemCtx: memCtx];
}
- (int) getPrImportance: (void **) data // TODO -> subclass?
- (int) getPidTagImportance: (void **) data // TODO -> subclass?
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPILongValue (memCtx, 1);
@ -700,19 +699,19 @@ rtf2html (NSData *compressedRTF)
return MAPISTORE_SUCCESS;
}
- (int) getPrPriority: (void **) data // TODO -> subclass?
- (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) getPrSubject: (void **) data
- (int) getPidTagSubject: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
[self subclassResponsibility: _cmd];
@ -720,64 +719,64 @@ rtf2html (NSData *compressedRTF)
return MAPISTORE_ERR_NOT_FOUND;
}
- (int) getPrNormalizedSubject: (void **) data
- (int) getPidTagNormalizedSubject: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrSubject: data inMemCtx: memCtx];
return [self getPidTagSubject: data inMemCtx: memCtx];
}
- (int) getPrOriginalSubject: (void **) data
- (int) getPidTagOriginalSubject: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrNormalizedSubject: data inMemCtx: memCtx];
return [self getPidTagNormalizedSubject: data inMemCtx: memCtx];
}
- (int) getPrConversationTopic: (void **) data
- (int) getPidTagConversationTopic: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrNormalizedSubject: data inMemCtx: memCtx];
return [self getPidTagNormalizedSubject: data inMemCtx: memCtx];
}
- (int) getPrSubjectPrefix: (void **) data
- (int) getPidTagSubjectPrefix: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getEmptyString: data inMemCtx: memCtx];
}
- (int) getPrDisplayTo: (void **) data
- (int) getPidTagDisplayTo: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getEmptyString: data inMemCtx: memCtx];
}
- (int) getPrDisplayCc: (void **) data
- (int) getPidTagDisplayCc: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getEmptyString: data inMemCtx: memCtx];
}
- (int) getPrDisplayBcc: (void **) data
- (int) getPidTagDisplayBcc: (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
- (int) getPidTagLastModifierName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSURL *contextUrl;
@ -788,7 +787,7 @@ rtf2html (NSData *compressedRTF)
return MAPISTORE_SUCCESS;
}
- (int) getPrMessageClass: (void **) data
- (int) getPidTagMessageClass: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
[self subclassResponsibility: _cmd];
@ -796,13 +795,13 @@ rtf2html (NSData *compressedRTF)
return MAPISTORE_ERR_NOT_FOUND;
}
- (int) getPrOrigMessageClass: (void **) data
- (int) getPidTagOriginalMessageClass: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrMessageClass: data inMemCtx: memCtx];
return [self getPidTagMessageClass: data inMemCtx: memCtx];
}
- (int) getPrHasattach: (void **) data
- (int) getPidTagHasAttachments: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPIBoolValue (memCtx,
@ -811,7 +810,7 @@ rtf2html (NSData *compressedRTF)
return MAPISTORE_SUCCESS;
}
- (int) getPrAssociated: (void **) data
- (int) getPidTagAssociated: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getNo: data inMemCtx: memCtx];;

View file

@ -32,7 +32,7 @@
@implementation MAPIStoreNotesMessage
- (int) getPrIconIndex: (void **) data // TODO
- (int) getPidTagIconIndex: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
{
/* see http://msdn.microsoft.com/en-us/library/cc815472.aspx */
@ -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
- (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;

View file

@ -107,21 +107,21 @@
inMemCtx: (TALLOC_CTX *) memCtx;
/* implemented getters */
- (int) getPrDisplayName: (void **) data
- (int) getPidTagDisplayName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx;
- (int) getPrSearchKey: (void **) data
- (int) getPidTagSearchKey: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx;
- (int) getPrGenerateExchangeViews: (void **) data
- (int) getPidTagGenerateExchangeViews: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx;
- (int) getPrParentSourceKey: (void **) data
- (int) getPidTagParentSourceKey: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx;
- (int) getPrSourceKey: (void **) data
- (int) getPidTagSourceKey: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx;
- (int) getPrChangeKey: (void **) data
- (int) getPidTagChangeKey: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx;
- (int) getPrCreationTime: (void **) data
- (int) getPidTagCreationTime: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx;
- (int) getPrLastModificationTime: (void **) data
- (int) getPidTagLastModificationTime: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx;
/* subclasses */

View file

@ -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];

View file

@ -84,7 +84,7 @@
return memberId;
}
- (int) getPrMemberId: (void **) data
- (int) getPidTagMemberId: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPILongLongValue (memCtx, memberId);
@ -92,7 +92,7 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrEntryid: (void **) data
- (int) getPidTagEntryId: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSData *entryId;
@ -110,7 +110,7 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrMemberName: (void **) data
- (int) getPidTagMemberName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSString *displayName;
@ -127,7 +127,7 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrMemberRights: (void **) data
- (int) getPidTagMemberRights: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
uint32_t rights;

View file

@ -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

View file

@ -66,7 +66,7 @@
@implementation MAPIStoreTasksMessage
- (int) getPrIconIndex: (void **) data // TODO
- (int) getPidTagIconIndex: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
{
/* see http://msdn.microsoft.com/en-us/library/cc815472.aspx */
@ -81,7 +81,7 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrMessageClass: (void **) data
- (int) getPidTagMessageClass: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = talloc_strdup(memCtx, "IPM.Task");
@ -89,7 +89,7 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrSubject: (void **) data // SUMMARY
- (int) getPidTagSubject: (void **) data // SUMMARY
inMemCtx: (TALLOC_CTX *) memCtx
{
iCalToDo *task;
@ -100,7 +100,7 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrImportance: (void **) data
- (int) getPidTagImportance: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
uint32_t v;
@ -201,7 +201,7 @@
return [self getLongZero: data inMemCtx: memCtx];
}
- (int) getPrHasattach: (void **) data
- (int) getPidTagHasAttachments: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getNo: data inMemCtx: memCtx];
@ -242,22 +242,22 @@
}
- (int) getPrMessageDeliveryTime: (void **) data
- (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

View file

@ -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)
{

View file

@ -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)
{

View file

@ -188,7 +188,7 @@ static NSMapTable *contextsTable = nil;
[rootFolders setObject: currentFolder
forKey: @"mail"];
[[currentFolder imap4Connection]
enableExtension: @"QRESYNC"];
enableExtensions: [NSArray arrayWithObject: @"QRESYNC"]];
}
return rootFolders;

View file

@ -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;
}

View file

@ -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;

View file

@ -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);

View file

@ -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,8 +181,8 @@ def ParseMapistoreNameIDHDefinition(names, line):
raise Exception, "line does not contain a 'Pid'"
valueIdx = stripped.find("0x")
propName = stripped[pidIdx:valueIdx].strip()
if not propName.startswith("PidLidUnknown") and propName not in bannedProps:
value = int(stripped[valueIdx:], 16)
names[propName] = value
def FindHFile(filename):

View file

@ -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
- &nbsp
+ &nbsp;
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;

View file

@ -279,7 +279,8 @@ static NSString *defaultUserID = @"anyone";
{
[self imap4URL];
[self imap4Connection];
if ([self imap4Connection])
{
client = [imap4 client];
inbox = [[self mailAccountFolder] inboxFolderInContext: context];
@ -297,11 +298,20 @@ static NSString *defaultUserID = @"anyone";
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"
reason: @"given name is empty"
@ -386,7 +396,10 @@ static NSString *defaultUserID = @"anyone";
error = (NSException *) trashFolder;
else
{
client = [[self imap4Connection] client];
if ([self imap4Connection])
{
error = nil;
client = [imap4 client];
[imap4 selectFolder: [self imap4URL]];
folderName = [imap4 imap4FolderNameForURL: [trashFolder imap4URL]];
b = YES;
@ -405,7 +418,7 @@ static NSString *defaultUserID = @"anyone";
objectForKey: @"result"];
if (![result boolValue])
[[self imap4Connection] createMailbox: folderName
[imap4 createMailbox: folderName
atURL: [[self mailAccountFolder] imap4URL]];
result = [[client copyUids: uids toFolder: folderName]
@ -414,6 +427,11 @@ static NSString *defaultUserID = @"anyone";
b = [result boolValue];
}
}
else
error = [NSException exceptionWithName: @"SOGoMailException"
reason: @"IMAP connection is invalid"
userInfo: nil];
}
}
else
error = [NSException exceptionWithHTTPStatus: 500
@ -608,6 +626,8 @@ static NSString *defaultUserID = @"anyone";
}
client = [[self imap4Connection] client];
if (client)
{
[imap4 selectFolder: [self imap4URL]];
// We make sure the destination IMAP folder exist, if not, we create it.
@ -624,7 +644,14 @@ static NSString *defaultUserID = @"anyone";
result = nil;
else
result = [NSException exceptionWithHTTPStatus: 500
reason: [[[result objectForKey: @"RawResponse"] objectForKey: @"ResponseResult"] objectForKey: @"description"]];
reason: [[[result objectForKey: @"RawResponse"]
objectForKey: @"ResponseResult"]
objectForKey: @"description"]];
}
else
result = [NSException exceptionWithName: @"SOGoMailException"
reason: @"IMAP connection is invalid"
userInfo: nil];
}
else
result = [NSException exceptionWithHTTPStatus: 500
@ -645,7 +672,8 @@ static NSString *defaultUserID = @"anyone";
NGImap4Client *client;
client = [[self imap4Connection] client];
if (client)
{
result = [self copyUIDs: uids toFolder: destinationFolder inContext: localContext];
if (![result isNotNull])
{
@ -657,6 +685,11 @@ static NSString *defaultUserID = @"anyone";
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
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,7 +938,8 @@ static NSString *defaultUserID = @"anyone";
NSException *error;
BOOL rc;
[self imap4Connection];
if ([self imap4Connection])
{
error = [imap4 createMailbox: [self relativeImap4Name]
atURL: [container imap4URL]];
if (error)
@ -889,19 +949,32 @@ static NSString *defaultUserID = @"anyone";
[[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! */
@ -927,8 +1000,15 @@ static NSString *defaultUserID = @"anyone";
[[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

View file

@ -2,6 +2,6 @@
# This file is included by library makefiles to set the version information
# of the executable.
MAJOR_VERSION=1
MINOR_VERSION=3
SUBMINOR_VERSION=13
MAJOR_VERSION=2
MINOR_VERSION=0
SUBMINOR_VERSION=0