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
inMemCtx: (TALLOC_CTX *) memCtx;
- (int) getPidTagOwnerAppointmentId: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx;
- (int) getPidLidMeetingType: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx;
- (int) getPrMessageClass: (void **) data
- (int) getPidTagMessageClass: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx;
- (int) getPrStartDate: (void **) data
- (int) getPidTagStartDate: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx;
- (int) getPidLidAppointmentStateFlags: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx;
@ -106,7 +106,7 @@ extern NSTimeZone *utcTZ;
inMemCtx: (TALLOC_CTX *) memCtx;
- (int) getPidLidCommonStart: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx;
- (int) getPrEndDate: (void **) data
- (int) getPidTagEndDate: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx;
- (int) getPidLidAppointmentEndWhole: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx;
@ -120,17 +120,17 @@ extern NSTimeZone *utcTZ;
inMemCtx: (TALLOC_CTX *) memCtx;
- (int) getPidLidIndentedBusyStatus: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx;
- (int) getPrSubject: (void **) data // SUMMARY
- (int) getPidTagSubject: (void **) data // SUMMARY
inMemCtx: (TALLOC_CTX *) memCtx;
- (int) getPidLidLocation: (void **) data // LOCATION
inMemCtx: (TALLOC_CTX *) memCtx;
- (int) getPidLidPrivate: (void **) data // private (bool), should depend on CLASS and permissions
inMemCtx: (TALLOC_CTX *) memCtx;
- (int) getPrSensitivity: (void **) data // not implemented, depends on CLASS
- (int) getPidTagSensitivity: (void **) data // not implemented, depends on CLASS
inMemCtx: (TALLOC_CTX *) memCtx;
- (int) getPrImportance: (void **) data
- (int) getPidTagImportance: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx;
- (int) getPrBody: (void **) data
- (int) getPidTagBody: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx;
- (int) getPidLidIsRecurring: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx;

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,8 +502,8 @@ static NSCharacterSet *hexCharacterSet = nil;
return MAPISTORE_SUCCESS;
}
- (int) getPrOwnerApptId: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagOwnerAppointmentId: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
int rc;
const char *utf8UID;
@ -581,7 +581,7 @@ static NSCharacterSet *hexCharacterSet = nil;
return rc;
}
- (int) getPrMessageClass: (void **) data
- (int) getPidTagMessageClass: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
const char *className;
@ -634,7 +634,7 @@ static NSCharacterSet *hexCharacterSet = nil;
return [self getYes: data inMemCtx: memCtx];
}
- (int) getPrStartDate: (void **) data
- (int) getPidTagStartDate: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSCalendarDate *dateValue;
@ -716,7 +716,7 @@ static NSCharacterSet *hexCharacterSet = nil;
- (int) getPidLidAppointmentStartWhole: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrStartDate: data inMemCtx: memCtx];
return [self getPidTagStartDate: data inMemCtx: memCtx];
}
- (int) getPidLidCommonStart: (void **) data
@ -797,7 +797,7 @@ static NSCharacterSet *hexCharacterSet = nil;
return rc;
}
- (int) _getEntryid: (void **) data
- (int) _getEntryId: (void **) data
forICalPerson: (iCalPerson *) person
inMemCtx: (TALLOC_CTX *) memCtx
{
@ -820,7 +820,7 @@ static NSCharacterSet *hexCharacterSet = nil;
}
/* sender (organizer) */
- (int) getPrSenderEmailAddress: (void **) data
- (int) getPidTagSenderEmailAddress: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getEmailAddress: data
@ -828,7 +828,7 @@ static NSCharacterSet *hexCharacterSet = nil;
inMemCtx: memCtx];
}
- (int) getPrSenderAddrtype: (void **) data
- (int) getPidTagSenderAddressType: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getAddrType: data
@ -836,7 +836,7 @@ static NSCharacterSet *hexCharacterSet = nil;
inMemCtx: memCtx];
}
- (int) getPrSenderName: (void **) data
- (int) getPidTagSenderName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getName: data
@ -844,16 +844,16 @@ static NSCharacterSet *hexCharacterSet = nil;
inMemCtx: memCtx];
}
- (int) getPrSenderEntryid: (void **) data
- (int) getPidTagSenderEntryId: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getEntryid: data
return [self _getEntryId: data
forICalPerson: [event organizer]
inMemCtx: memCtx];
}
/* attendee */
- (int) getPrReceivedByEmailAddress: (void **) data
- (int) getPidTagReceivedByEmailAddress: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getEmailAddress: data
@ -861,7 +861,7 @@ static NSCharacterSet *hexCharacterSet = nil;
inMemCtx: memCtx];
}
- (int) getPrReceivedByAddrtype: (void **) data
- (int) getPidTagReceivedByAddressType: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getAddrType: data
@ -869,7 +869,7 @@ static NSCharacterSet *hexCharacterSet = nil;
inMemCtx: memCtx];
}
- (int) getPrReceivedByName: (void **) data
- (int) getPidTagReceivedByName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getName: data
@ -877,16 +877,16 @@ static NSCharacterSet *hexCharacterSet = nil;
inMemCtx: memCtx];
}
- (int) getPrReceivedByEntryid: (void **) data
- (int) getPidTagReceivedByEntryId: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getEntryid: data
return [self _getEntryId: data
forICalPerson: [event userAsAttendee: user]
inMemCtx: memCtx];
}
/* /attendee */
- (int) getPrEndDate: (void **) data
- (int) getPidTagEndDate: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSCalendarDate *dateValue;
@ -911,7 +911,7 @@ static NSCharacterSet *hexCharacterSet = nil;
- (int) getPidLidAppointmentEndWhole: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrEndDate: data inMemCtx: memCtx];
return [self getPidTagEndDate: data inMemCtx: memCtx];
}
- (int) getPidLidCommonEnd: (void **) data
@ -960,7 +960,7 @@ static NSCharacterSet *hexCharacterSet = nil;
return [self getPidLidBusyStatus: data inMemCtx: memCtx];
}
- (int) getPrSubject: (void **) data // SUMMARY
- (int) getPidTagSubject: (void **) data // SUMMARY
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = [[event summary] asUnicodeInMemCtx: memCtx];
@ -1013,14 +1013,14 @@ static NSCharacterSet *hexCharacterSet = nil;
return [self getNo: data inMemCtx: memCtx];
}
- (int) getPrSensitivity: (void **) data // not implemented, depends on CLASS
- (int) getPidTagSensitivity: (void **) data // not implemented, depends on CLASS
inMemCtx: (TALLOC_CTX *) memCtx
{
// normal = 0, personal?? = 1, private = 2, confidential = 3
return [self getLongZero: data inMemCtx: memCtx];
}
- (int) getPrImportance: (void **) data
- (int) getPidTagImportance: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
uint32_t v;
@ -1036,7 +1036,7 @@ static NSCharacterSet *hexCharacterSet = nil;
return MAPISTORE_SUCCESS;
}
- (int) getPrBody: (void **) data
- (int) getPidTagBody: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
int rc = MAPISTORE_SUCCESS;
@ -1397,7 +1397,7 @@ _fillAppointmentRecurrencePattern (struct AppointmentRecurrencePattern *arp,
[self _setupAlarm];
return (alarm
? [self getPrStartDate: data inMemCtx: memCtx]
? [self getPidTagStartDate: data inMemCtx: memCtx]
: MAPISTORE_ERR_NOT_FOUND);
}

View file

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

View file

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

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

File diff suppressed because it is too large Load diff

View file

@ -94,52 +94,52 @@ extern NSTimeZone *utcTZ;
return [container lastModificationTime];
}
- (int) getPrAttachEncoding: (void **) data inMemCtx: (TALLOC_CTX *) memCtx;
- (int) getPidTagAttachEncoding: (void **) data inMemCtx: (TALLOC_CTX *) memCtx;
{
*data = [[NSData data] asBinaryInMemCtx: memCtx];
return MAPISTORE_SUCCESS;
}
- (int) getPrAttachFlags: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getLongZero: data inMemCtx: memCtx];
}
- (int) getPrAttachmentFlags: (void **) data
- (int) getPidTagAttachFlags: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getLongZero: data inMemCtx: memCtx];
}
- (int) getPrAttachmentHidden: (void **) data inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getNo: data inMemCtx: memCtx];
}
- (int) getPrAttachmentLinkid: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagAttachmentFlags: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getLongZero: data inMemCtx: memCtx];
}
- (int) getPrAttachMethod: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagAttachmentHidden: (void **) data inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getNo: data inMemCtx: memCtx];
}
- (int) getPidTagAttachmentLinkId: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getLongZero: data inMemCtx: memCtx];
}
- (int) getPidTagAttachMethod: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPILongValue (memCtx, 0x00000001);
return MAPISTORE_SUCCESS;
}
- (int) getPrAttachmentContactphoto: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagAttachmentContactPhoto: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getYes: data inMemCtx: memCtx];
}
- (int) getPrAttachDataBin: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagAttachDataBinary: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
if (!photoData)
ASSIGN (photoData,
@ -150,8 +150,8 @@ extern NSTimeZone *utcTZ;
return MAPISTORE_SUCCESS;
}
- (int) getPrAttachSize: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagAttachSize: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
if (!photoData)
ASSIGN (photoData,
@ -162,16 +162,16 @@ extern NSTimeZone *utcTZ;
return MAPISTORE_SUCCESS;
}
- (int) getPrAttachExtension: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagAttachExtension: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = [[self fileExtension] asUnicodeInMemCtx: memCtx];
return MAPISTORE_SUCCESS;
}
- (int) getPrAttachLongFilename: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagAttachLongFilename: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSString *filename;
@ -183,17 +183,17 @@ extern NSTimeZone *utcTZ;
return MAPISTORE_SUCCESS;
}
- (int) getPrAttachFilename: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagAttachFilename: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrAttachLongFilename: data
inMemCtx: memCtx];
return [self getPidTagAttachLongFilename: data
inMemCtx: memCtx];
}
- (int) getPrDisplayName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagDisplayName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrAttachLongFilename: data inMemCtx: memCtx];
return [self getPidTagAttachLongFilename: data inMemCtx: memCtx];
}
@end

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

@ -85,7 +85,7 @@
CardElement *element;
elements = [card childrenWithTag: tag
andAttribute: @"type" havingValue: type];
andAttribute: @"type" havingValue: type];
if ([elements count] > 0)
element = [elements objectAtIndex: 0];
else
@ -100,8 +100,8 @@
return element;
}
- (int) getPrIconIndex: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagIconIndex: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
{
/* see http://msdn.microsoft.com/en-us/library/cc815472.aspx */
*data = MAPILongValue (memCtx, 0x00000200);
@ -109,15 +109,15 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrMessageClass: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagMessageClass: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = talloc_strdup (memCtx, "IPM.Contact");
return MAPISTORE_SUCCESS;
}
// - (int) getPrOabName: (void **) data
// - (int) getPidTagOfflineAddressBookName: (void **) data
// inMemCtx: (TALLOC_CTX *) memCtx
// {
// *data = talloc_strdup (memCtx, "PR_OAB_NAME_UNICODE");
@ -125,7 +125,7 @@
// return MAPISTORE_SUCCESS;
// }
// - (int) getPrOabLangid: (void **) data
// - (int) getPidTagOfflineAddressBookLanguageId: (void **) data
// inMemCtx: (TALLOC_CTX *) memCtx
// {
// /* see http://msdn.microsoft.com/en-us/goglobal/bb895996.asxp */
@ -136,8 +136,8 @@
// }
- (int) getPrTitle: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagTitle: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSString *stringValue;
@ -147,8 +147,8 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrCompanyName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagCompanyName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
CardElement *org;
@ -159,8 +159,8 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrDepartmentName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagDepartmentName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
CardElement *org;
@ -171,24 +171,24 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrSendInternetEncoding: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagSendInternetEncoding: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPILongValue (memCtx, 0x00065001);
return MAPISTORE_SUCCESS;
}
- (int) getPrSubject: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagSubject: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrDisplayName: data inMemCtx: memCtx];
return [self getPidTagDisplayName: data inMemCtx: memCtx];
}
- (int) getPidLidFileUnder: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrDisplayName: data inMemCtx: memCtx];
return [self getPidTagDisplayName: data inMemCtx: memCtx];
}
- (int) getPidLidFileUnderId: (void **) data
@ -231,14 +231,14 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrAccount: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagAccount: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPidLidEmail1EmailAddress: data inMemCtx: memCtx];
}
- (int) getPrContactEmailAddresses: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagContactEmailAddresses: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSString *stringValue;
@ -251,8 +251,8 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrEmsAbTargetAddress: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagEmsAbTargetAddress: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSString *stringValue;
@ -263,8 +263,8 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrSearchKey: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagSearchKey: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
{
NSString *stringValue;
@ -275,8 +275,8 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrMailPermission: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagMailPermission: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getYes: data inMemCtx: memCtx];
}
@ -321,8 +321,8 @@
return [self getPidLidEmail2EmailAddress: data inMemCtx: memCtx];
}
- (int) getPrBody: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagBody: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
int rc = MAPISTORE_SUCCESS;
NSString *stringValue;
@ -372,57 +372,57 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrOfficeTelephoneNumber: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagBusinessTelephoneNumber: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getElement: @"tel" ofType: @"work" excluding: @"fax"
atPos: 0 inData: data inMemCtx: memCtx];
}
- (int) getPrHomeTelephoneNumber: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagHomeTelephoneNumber: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getElement: @"tel" ofType: @"home" excluding: @"fax"
atPos: 0 inData: data inMemCtx: memCtx];
}
- (int) getPrMobileTelephoneNumber: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagMobileTelephoneNumber: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getElement: @"tel" ofType: @"cell" excluding: nil
atPos: 0 inData: data inMemCtx: memCtx];
}
- (int) getPrPagerTelephoneNumber: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagPagerTelephoneNumber: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getElement: @"tel" ofType: @"pager" excluding: nil
atPos: 0 inData: data inMemCtx: memCtx];
}
- (int) getPrPrimaryTelephoneNumber: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagPrimaryTelephoneNumber: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getElement: @"tel" ofType: @"pref" excluding: nil
atPos: 0 inData: data inMemCtx: memCtx];
}
- (int) getPrBusinessFaxNumber: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagBusinessFaxNumber: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getElement: @"tel" ofType: @"fax" excluding: nil
atPos: 0 inData: data inMemCtx: memCtx];
}
- (int) getPrBusinessHomePage: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagBusinessHomePage: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getElement: @"url" ofType: @"work" excluding: nil
atPos: 0 inData: data inMemCtx: memCtx];
}
- (int) getPrPersonalHomePage: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagPersonalHomePage: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getElement: @"url" ofType: @"home" excluding: nil
atPos: 0 inData: data inMemCtx: memCtx];
@ -491,50 +491,50 @@
//
// getters when no address is selected as the Mailing Address
//
- (int) getPrPostalAddress: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagPostalAddress: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getElement: @"label" ofType: @"pref" excluding: nil
atPos: 0 inData: data inMemCtx: memCtx];
}
- (int) getPrPostOfficeBox: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagPostOfficeBox: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getElement: @"adr" ofType: @"pref" excluding: nil
atPos: 0 inData: data inMemCtx: memCtx];
}
- (int) getPrStreetAddress: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagStreetAddress: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getElement: @"adr" ofType: @"pref" excluding: nil
atPos: 2 inData: data inMemCtx: memCtx];
}
- (int) getPrLocality: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagLocality: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getElement: @"adr" ofType: @"pref" excluding: nil
atPos: 3 inData: data inMemCtx: memCtx];
}
- (int) getPrStateOrProvince: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagStateOrProvince: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getElement: @"adr" ofType: @"pref" excluding: nil
atPos: 4 inData: data inMemCtx: memCtx];
}
- (int) getPrPostalCode: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagPostalCode: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getElement: @"adr" ofType: @"pref" excluding: nil
atPos: 5 inData: data inMemCtx: memCtx];
}
- (int) getPrCountry: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagCountry: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getElement: @"adr" ofType: @"pref" excluding: nil
atPos: 6 inData: data inMemCtx: memCtx];
@ -550,42 +550,42 @@
atPos: 0 inData: data inMemCtx: memCtx];
}
- (int) getPrHomeAddressPostOfficeBox: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagHomeAddressPostOfficeBox: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getElement: @"adr" ofType: @"home" excluding: nil
atPos: 0 inData: data inMemCtx: memCtx];
}
- (int) getPrHomeAddressStreet: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagHomeAddressStreet: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getElement: @"adr" ofType: @"home" excluding: nil
atPos: 2 inData: data inMemCtx: memCtx];
}
- (int) getPrHomeAddressCity: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagHomeAddressCity: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getElement: @"adr" ofType: @"home" excluding: nil
atPos: 3 inData: data inMemCtx: memCtx];
}
- (int) getPrHomeAddressStateOrProvince: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagHomeAddressStateOrProvince: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getElement: @"adr" ofType: @"home" excluding: nil
atPos: 4 inData: data inMemCtx: memCtx];
}
- (int) getPrHomeAddressPostalCode: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagHomeAddressPostalCode: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getElement: @"adr" ofType: @"home" excluding: nil
atPos: 5 inData: data inMemCtx: memCtx];
}
- (int) getPrHomeAddressCountry: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagHomeAddressCountry: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getElement: @"adr" ofType: @"home" excluding: nil
atPos: 6 inData: data inMemCtx: memCtx];
@ -646,8 +646,8 @@
//
//
//
- (int) getPrNickname: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagNickname: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSString *stringValue;
@ -657,8 +657,8 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrBirthday: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagBirthday: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSCalendarDate *dateValue;
NSString *stringValue;
@ -681,8 +681,8 @@
//
// Decomposed fullname getters
//
- (int) getPrSurname: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagSurname: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSString *stringValue;
@ -694,8 +694,8 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrGivenName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagGivenName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSString *stringValue;
@ -707,8 +707,8 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrMiddleName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagMiddleName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSString *stringValue;
@ -720,8 +720,8 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrDisplayNamePrefix: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagDisplayNamePrefix: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSString *stringValue;
@ -733,8 +733,8 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrGeneration: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagGeneration: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSString *stringValue;
@ -746,8 +746,8 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrSensitivity: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagSensitivity: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getLongZero: data inMemCtx: memCtx];
}
@ -808,7 +808,7 @@
}
- (void) _updatePhotoInVCard: (NGVCard *) card
fromProperties: (NSDictionary *) attachmentProps
fromProperties: (NSDictionary *) attachmentProps
{
NSString *photoExt, *photoType, *content;
CardElement *photo;
@ -886,10 +886,10 @@
// Decomposed fullname
[newCard setNWithFamily: [properties objectForKey: MAPIPropertyKey(PR_SURNAME_UNICODE)]
given: [properties objectForKey: MAPIPropertyKey(PR_GIVEN_NAME_UNICODE)]
additional: [properties objectForKey: MAPIPropertyKey(PR_MIDDLE_NAME_UNICODE)]
prefixes: [properties objectForKey: MAPIPropertyKey(PR_DISPLAY_NAME_PREFIX_UNICODE)]
suffixes: [properties objectForKey: MAPIPropertyKey(PR_GENERATION_UNICODE)]];
given: [properties objectForKey: MAPIPropertyKey(PR_GIVEN_NAME_UNICODE)]
additional: [properties objectForKey: MAPIPropertyKey(PR_MIDDLE_NAME_UNICODE)]
prefixes: [properties objectForKey: MAPIPropertyKey(PR_DISPLAY_NAME_PREFIX_UNICODE)]
suffixes: [properties objectForKey: MAPIPropertyKey(PR_GENERATION_UNICODE)]];
//
// display name
@ -1161,7 +1161,7 @@
value = [properties objectForKey: MAPIPropertyKey (PR_CHANGE_KEY)];
if (value)
[(MAPIStoreContactsFolder *) container
setChangeKey: value forMessageWithKey: [self nameInContainer]];
setChangeKey: value forMessageWithKey: [self nameInContainer]];
}
@end

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

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
@ -372,7 +370,7 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
}
else
[NSException raise: @"MAPIStoreIOException"
format: @"unable to fetch created folder"];
format: @"unable to fetch created folder"];
}
}
}
@ -770,9 +768,14 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
isAddition: (BOOL) isAddition
withACLFolder: (SOGoFolder *) aclFolder
{
if (isAddition)
[aclFolder addUserInAcls: user];
[aclFolder setRoles: roles forUser: user];
if (user)
{
if (isAddition)
[aclFolder addUserInAcls: user];
[aclFolder setRoles: roles forUser: user];
}
else
[self logWithFormat: @"user is nil, keeping intended entry intact"];
}
- (void) setupVersionsMessage
@ -951,6 +954,7 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
{
int rc = MAPISTORE_SUCCESS;
MAPIStoreTable *table;
SOGoUser *ownerUser;
if (tableType == MAPISTORE_MESSAGE_TABLE)
table = [self messageTable];
@ -959,21 +963,31 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
else if (tableType == MAPISTORE_FOLDER_TABLE)
table = [self folderTable];
else if (tableType == MAPISTORE_PERMISSIONS_TABLE)
table = [self permissionsTable];
{
ownerUser = [[self userContext] sogoUser];
if ([[context activeUser] isEqual: ownerUser])
table = [self permissionsTable];
else
rc = MAPISTORE_ERR_DENIED;
}
else
{
table = nil;
[NSException raise: @"MAPIStoreIOException"
format: @"unsupported table type: %d", tableType];
}
if (table)
if (rc == MAPISTORE_SUCCESS)
{
[table setHandleId: handleId];
*tablePtr = table;
*countPtr = [[table childKeys] count];
if (table)
{
[table setHandleId: handleId];
*tablePtr = table;
*countPtr = [[table childKeys] count];
}
else
rc = MAPISTORE_ERR_NOT_FOUND;
}
else
rc = MAPISTORE_ERR_NOT_FOUND;
return rc;
}
@ -1004,14 +1018,16 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
- (NSArray *) messageKeys
{
if (!messageKeys)
{
messageKeys = [self messageKeysMatchingQualifier: nil
andSortOrderings: nil];
[messageKeys retain];
}
return [self messageKeysMatchingQualifier: nil
andSortOrderings: nil];
// if (!messageKeys)
// {
// messageKeys = [self messageKeysMatchingQualifier: nil
// andSortOrderings: nil];
// [messageKeys retain];
// }
return messageKeys;
// return messageKeys;
}
- (MAPIStoreFAIMessageTable *) faiMessageTable
@ -1029,14 +1045,16 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
- (NSArray *) faiMessageKeys
{
if (!faiMessageKeys)
{
faiMessageKeys = [self faiMessageKeysMatchingQualifier: nil
andSortOrderings: nil];
[faiMessageKeys retain];
}
return [self faiMessageKeysMatchingQualifier: nil
andSortOrderings: nil];
// if (!faiMessageKeys)
// {
// faiMessageKeys = [self faiMessageKeysMatchingQualifier: nil
// andSortOrderings: nil];
// [faiMessageKeys retain];
// }
return faiMessageKeys;
// return faiMessageKeys;
}
- (MAPIStoreFolderTable *) folderTable
@ -1046,14 +1064,16 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
- (NSArray *) folderKeys
{
if (!folderKeys)
{
folderKeys = [self folderKeysMatchingQualifier: nil
andSortOrderings: nil];
[folderKeys retain];
}
return [self folderKeysMatchingQualifier: nil
andSortOrderings: nil];
// if (!folderKeys)
// {
// folderKeys = [self folderKeysMatchingQualifier: nil
// andSortOrderings: nil];
// [folderKeys retain];
// }
return folderKeys;
// return folderKeys;
}
- (NSArray *) folderKeysMatchingQualifier: (EOQualifier *) qualifier
@ -1099,24 +1119,24 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
[self _cleanupTableCaches: MAPISTORE_MESSAGE_TABLE];
[self _cleanupTableCaches: MAPISTORE_FAI_TABLE];
[self _cleanupTableCaches: MAPISTORE_FOLDER_TABLE];
[faiMessageKeys release];
faiMessageKeys = nil;
[messageKeys release];
messageKeys = nil;
[folderKeys release];
folderKeys = nil;
// [faiMessageKeys release];
// faiMessageKeys = nil;
// [messageKeys release];
// messageKeys = nil;
// [folderKeys release];
// folderKeys = nil;
}
- (int) getPrParentFid: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagParentFolderId: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPILongLongValue (memCtx, [container objectId]);
return MAPISTORE_SUCCESS;
}
- (int) getPrFid: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagFolderId: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPILongLongValue (memCtx, [self objectId]);
@ -1133,8 +1153,8 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
0x00000010 Create Contents Table
0x00000020 Create Associated Contents Table
*/
- (int) getPrAccess: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagAccess: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
uint32_t access = 0;
SOGoUser *ownerUser;
@ -1168,74 +1188,74 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
0x00000000 Read-Only
0x00000001 Modify
*/
- (int) getPrAccessLevel: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagAccessLevel: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPILongValue (memCtx, 0x01);
return MAPISTORE_SUCCESS;
}
- (int) getPrAttrHidden: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagAttributeHidden: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getNo: data inMemCtx: memCtx];
}
- (int) getPrAttrSystem: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagAttributeSystem: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getNo: data inMemCtx: memCtx];
}
- (int) getPrAttrReadOnly: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagAttributeReadOnly: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getNo: data inMemCtx: memCtx];
}
- (int) getPrSubfolders: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagSubfolders: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPIBoolValue (memCtx, [folderKeys count] > 0);
*data = MAPIBoolValue (memCtx, [[self folderKeys] count] > 0);
return MAPISTORE_SUCCESS;
}
- (int) getPrFolderChildCount: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagFolderChildCount: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPILongValue (memCtx, [[self folderKeys] count]);
return MAPISTORE_SUCCESS;
}
- (int) getPrContentCount: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagContentCount: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPILongValue (memCtx, [[self messageKeys] count]);
return MAPISTORE_SUCCESS;
}
- (int) getPrContentUnread: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagContentUnreadCount: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPILongValue (memCtx, 0);
return MAPISTORE_SUCCESS;
}
- (int) getPrAssocContentCount: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagAssociatedContentCount: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPILongValue (memCtx, [[self faiMessageKeys] count]);
return MAPISTORE_SUCCESS;
}
- (int) getPrDeletedCountTotal: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagDeletedCountTotal: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
/* TODO */
*data = MAPILongValue (memCtx, 0);
@ -1243,12 +1263,19 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
return MAPISTORE_SUCCESS;
}
- (int) getPrLocalCommitTimeMax: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagLocalCommitTimeMax: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = [[self lastMessageModificationTime] asFileTimeInMemCtx: memCtx];
int rc = MAPISTORE_SUCCESS;
NSDate *date;
return MAPISTORE_SUCCESS;
date = [self lastMessageModificationTime];
if (date)
*data = [date asFileTimeInMemCtx: memCtx];
else
rc = MAPISTORE_ERR_NOT_FOUND;
return rc;
}
- (int) getProperty: (void **) data
@ -1390,20 +1417,25 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
NSString *username;
struct ldb_context *samCtx;
bin32.cb = bin->cb;
bin32.lpb = bin->lpb;
entryId = get_AddressBookEntryId (NULL, &bin32);
if (entryId)
if (bin && bin->cb)
{
samCtx = [[self context] connectionInfo]->sam_ctx;
username = MAPIStoreSamDBUserAttribute (samCtx, @"legacyExchangeDN",
[NSString stringWithUTF8String: entryId->X500DN],
@"sAMAccountName");
bin32.cb = bin->cb;
bin32.lpb = bin->lpb;
entryId = get_AddressBookEntryId (NULL, &bin32);
if (entryId)
{
samCtx = [[self context] connectionInfo]->sam_ctx;
username = MAPIStoreSamDBUserAttribute (samCtx, @"legacyExchangeDN",
[NSString stringWithUTF8String: entryId->X500DN],
@"sAMAccountName");
}
else
username = nil;
talloc_free (entryId);
}
else
username = nil;
talloc_free (entryId);
return username;
}
@ -1415,12 +1447,19 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
NSUInteger count, max;
MAPIStorePermissionEntry *entry;
max = [entries count];
for (count = 0; !username && count < max; count++)
if (memberId == 0)
username = [[self aclFolder] defaultUserID];
else if (memberId == ULLONG_MAX)
username = @"anonymous";
else
{
entry = [entries objectAtIndex: count];
if ([entry memberId] == memberId)
username = [entry userId];
max = [entries count];
for (count = 0; !username && count < max; count++)
{
entry = [entries objectAtIndex: count];
if ([entry memberId] == memberId)
username = [entry userId];
}
}
return username;
@ -1450,7 +1489,7 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
NSString *permissionUser;
NSArray *entries;
NSArray *permissionRoles;
BOOL reset, isAdd;
BOOL reset, isAdd = NO, isDelete = NO, isModify = NO;
SOGoFolder *aclFolder;
aclFolder = [self aclFolder];
@ -1468,7 +1507,13 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
permissionUser = nil;
permissionRoles = nil;
isAdd = (currentPermission->PermissionDataFlags == ROW_ADD);
if (currentPermission->PermissionDataFlags == ROW_ADD)
isAdd = YES;
else if (currentPermission->PermissionDataFlags == ROW_MODIFY)
isModify = YES;
else
isDelete = YES;
for (propCount = 0;
propCount < currentPermission->lpProps.cValues;
propCount++)
@ -1477,16 +1522,19 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
switch (mapiValue->ulPropTag)
{
case PR_ENTRYID:
permissionUser
= [self _usernameFromEntryId: &mapiValue->value.bin];
if (isAdd)
permissionUser
= [self _usernameFromEntryId: &mapiValue->value.bin];
break;
case PR_MEMBER_ID:
permissionUser = [self _usernameFromMemberId: mapiValue->value.d
inEntries: entries];
if (isModify || isDelete)
permissionUser = [self _usernameFromMemberId: mapiValue->value.d
inEntries: entries];
break;
case PR_MEMBER_RIGHTS:
permissionRoles = [self
rolesForExchangeRights: mapiValue->value.l];
if (isAdd || isModify)
permissionRoles
= [self rolesForExchangeRights: mapiValue->value.l];
break;
default:
if (mapiValue->ulPropTag != PR_MEMBER_NAME)

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,26 +349,7 @@
[sortOrdering retain];
}
now = [NSCalendarDate date];
currentProperties = [[versionsMessage properties] mutableCopy];
if (!currentProperties)
currentProperties = [NSMutableDictionary new];
[currentProperties autorelease];
messages = [currentProperties objectForKey: @"Messages"];
if (!messages)
{
messages = [NSMutableDictionary new];
[currentProperties setObject: messages forKey: @"Messages"];
[messages release];
}
mapping = [currentProperties objectForKey: @"VersionMapping"];
if (!mapping)
{
mapping = [NSMutableDictionary new];
[currentProperties setObject: mapping forKey: @"VersionMapping"];
[mapping release];
}
currentProperties = [versionsMessage properties];
lastModificationDate = [currentProperties objectForKey: @"SyncLastModificationDate"];
if (lastModificationDate)
@ -341,8 +359,9 @@
operatorSelector: EOQualifierOperatorGreaterThanOrEqualTo
value: lastModificationDate];
fetchQualifier = [[EOAndQualifier alloc]
initWithQualifiers:
searchQualifier, [self componentQualifier], nil];
initWithQualifiers: searchQualifier,
[self contentComponentQualifier],
nil];
[fetchQualifier autorelease];
[searchQualifier release];
}
@ -354,17 +373,38 @@
fetchSpecificationWithEntityName: [ocsFolder folderName]
qualifier: fetchQualifier
sortOrderings: [NSArray arrayWithObject: sortOrdering]];
fetchResults = [ocsFolder fetchFields: fields fetchSpecification: fs];
fetchResults = [ocsFolder fetchFields: fields
fetchSpecification: fs
ignoreDeleted: NO];
max = [fetchResults count];
if (max > 0)
{
messages = [currentProperties objectForKey: @"Messages"];
if (!messages)
{
messages = [NSMutableDictionary new];
[currentProperties setObject: messages forKey: @"Messages"];
[messages release];
}
mapping = [currentProperties objectForKey: @"VersionMapping"];
if (!mapping)
{
mapping = [NSMutableDictionary new];
[currentProperties setObject: mapping forKey: @"VersionMapping"];
[mapping release];
}
ldb_transaction_start([[self context] connectionInfo]->oc_ctx);
for (count = 0; count < max; count++)
{
result = [fetchResults objectAtIndex: count];
cName = [result objectForKey: @"c_name"];
cVersion = [result objectForKey: @"c_version"];
cDeleted = [result objectForKey: @"c_deleted"];
if ([cDeleted isKindOfClass: NSNumberK] && [cDeleted intValue])
cVersion = [NSNumber numberWithInt: -1];
else
cVersion = [result objectForKey: @"c_version"];
cLastModified = [result objectForKey: @"c_lastmodified"];
messageEntry = [messages objectForKey: cName];
@ -374,9 +414,12 @@
[messages setObject: messageEntry forKey: cName];
[messageEntry release];
}
if (![[messageEntry objectForKey: @"c_version"]
isEqual: cVersion])
{
[sogoObject removeChildRecordWithName: cName];
foundChange = YES;
newChangeNum = [[self context] getNewChangeNumber];
@ -402,6 +445,7 @@
if (foundChange)
{
now = [NSCalendarDate date];
ti = [NSNumber numberWithDouble: [now timeIntervalSince1970]];
[currentProperties setObject: ti
forKey: @"SyncLastSynchronisationDate"];
@ -526,9 +570,9 @@
NSArray *deletedKeys, *deletedCNames, *records;
NSNumber *changeNumNbr, *lastModified;
NSString *cName;
NSDictionary *versionProperties;
NSMutableDictionary *messages, *mapping;
uint64_t newChangeNum = 0;
NSDictionary *versionProperties, *messageEntry;
NSMutableDictionary *messages;
uint64_t maxChangeNum = changeNum, currentChangeNum;
EOAndQualifier *fetchQualifier;
EOKeyValueQualifier *cDeletedQualifier, *cLastModifiedQualifier;
EOFetchSpecification *fs;
@ -573,28 +617,28 @@
ignoreDeleted: NO];
deletedCNames = [records objectsForKey: @"c_name" notFoundMarker: nil];
max = [deletedCNames count];
if (max > 0)
for (count = 0; count < max; count++)
{
mapping = [versionProperties objectForKey: @"VersionsMapping"];
for (count = 0; count < max; count++)
cName = [deletedCNames objectAtIndex: count];
[sogoObject removeChildRecordWithName: cName];
messageEntry = [messages objectForKey: cName];
if (messageEntry)
{
cName = [deletedCNames objectAtIndex: count];
if ([messages objectForKey: cName])
currentChangeNum
= [[messageEntry objectForKey: @"version"]
unsignedLongLongValue];
if (MAPICNCompare (changeNum, currentChangeNum)
== NSOrderedAscending)
{
[messages removeObjectForKey: cName];
[(NSMutableArray *) deletedKeys addObject: cName];
newChangeNum = [[self context] getNewChangeNumber];
if (MAPICNCompare (maxChangeNum, currentChangeNum)
== NSOrderedAscending)
maxChangeNum = currentChangeNum;
}
}
if (newChangeNum)
{
changeNumNbr
= [NSNumber numberWithUnsignedLongLong: newChangeNum];
[mapping setObject: lastModified forKey: changeNumNbr];
*cnNbr = changeNumNbr;
[versionsMessage save];
}
}
if (maxChangeNum != changeNum)
*cnNbr = [NSNumber numberWithUnsignedLongLong: maxChangeNum];
}
}
else
@ -639,7 +683,7 @@
return nil;
}
- (EOQualifier *) componentQualifier
- (NSString *) component
{
[self subclassResponsibility: _cmd];

View file

@ -51,8 +51,8 @@
return [sogoObject lastModified];
}
- (int) getPrAccess: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagAccess: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
{
MAPIStoreContext *context;
WOContext *woContext;
@ -88,8 +88,8 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrAccessLevel: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagAccessLevel: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
{
MAPIStoreContext *context;
MAPIStoreUserContext *userContext;
@ -117,8 +117,8 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrChangeKey: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagChangeKey: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
int rc = MAPISTORE_SUCCESS;
NSData *changeKey;
@ -145,18 +145,26 @@
return rc;
}
- (int) getPrPredecessorChangeList: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagPredecessorChangeList: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
int rc = MAPISTORE_SUCCESS;
NSData *changeList;
MAPIStoreGCSFolder *parentFolder;
if (isNew)
rc = MAPISTORE_ERR_NOT_FOUND;
else
{
changeList = [(MAPIStoreGCSFolder *)[self container]
predecessorChangeListForMessageWithKey: [self nameInContainer]];
parentFolder = (MAPIStoreGCSFolder *)[self container];
changeList = [parentFolder
predecessorChangeListForMessageWithKey: [self nameInContainer]];
if (!changeList)
{
[parentFolder synchroniseCache];
changeList = [parentFolder
predecessorChangeListForMessageWithKey: [self nameInContainer]];
}
if (!changeList)
abort ();
*data = [changeList asBinaryInMemCtx: memCtx];

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,24 +68,24 @@
ASSIGN (bodyInfo, newBodyInfo);
}
- (int) getPrAttachMethod: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagAttachMethod: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPILongValue (memCtx, 0x00000001); // afByValue
return MAPISTORE_SUCCESS;
}
- (int) getPrAttachTag: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagAttachTag: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = [[self mimeAttachTag] asBinaryInMemCtx: memCtx];
return MAPISTORE_SUCCESS;
}
- (int) getPrAttachSize: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagAttachSize: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
uint32_t longValue;
@ -95,8 +95,8 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrRecordKey: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagRecordKey: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
static char recordBytes[] = {0xd9, 0xd8, 0x11, 0xa3, 0xe2, 0x90, 0x18, 0x41,
0x9e, 0x04, 0x58, 0x46, 0x9d, 0x6d, 0x1b,
@ -125,16 +125,16 @@
return fileName;
}
- (int) getPrAttachLongFilename: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagAttachLongFilename: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = [[self _fileName] asUnicodeInMemCtx: memCtx];
return MAPISTORE_SUCCESS;
}
- (int) getPrAttachFilename: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagAttachFilename: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSString *fileName, *baseName, *ext;
@ -153,7 +153,7 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrDisplayName: (void **) data
- (int) getPidTagDisplayName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = [[bodyInfo objectForKey: @"description"]
@ -162,8 +162,8 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrAttachContentId: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagAttachContentId: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = [[bodyInfo objectForKey: @"bodyId"]
asUnicodeInMemCtx: memCtx];
@ -171,21 +171,21 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrAttachMimeTag: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagAttachMimeTag: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSString *mimeTag;
mimeTag = [NSString stringWithFormat: @"%@/%@",
[bodyInfo objectForKey: @"type"],
[bodyInfo objectForKey: @"subtype"]];
[bodyInfo objectForKey: @"type"],
[bodyInfo objectForKey: @"subtype"]];
*data = [[mimeTag lowercaseString] asUnicodeInMemCtx: memCtx];
return MAPISTORE_SUCCESS;
}
- (int) getPrAttachDataBin: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagAttachDataBinary: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = [[sogoObject fetchBLOBWithPeek: YES] asBinaryInMemCtx: memCtx];

View file

@ -201,8 +201,8 @@ static Class SOGoMailFolderK, MAPIStoreOutboxFolderK;
return (rc == MAPISTORE_SUCCESS) ? [super deleteFolder] : rc;
}
- (int) getPrContentUnread: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagContentUnreadCount: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
EOQualifier *searchQualifier;
uint32_t longValue;
@ -217,7 +217,7 @@ static Class SOGoMailFolderK, MAPIStoreOutboxFolderK;
return MAPISTORE_SUCCESS;
}
- (int) getPrContainerClass: (void **) data
- (int) getPidTagContainerClass: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = [@"IPF.Note" asUnicodeInMemCtx: memCtx];
@ -225,7 +225,7 @@ static Class SOGoMailFolderK, MAPIStoreOutboxFolderK;
return MAPISTORE_SUCCESS;
}
- (int) getPrMessageClass: (void **) data
- (int) getPidTagMessageClass: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = [@"IPM.Note" asUnicodeInMemCtx: memCtx];
@ -902,7 +902,7 @@ _parseCOPYUID (NSString *line, NSArray **destUIDsP)
{
NGImap4Connection *connection;
NGImap4Client *client;
NSString *sourceFolderName, *targetFolderName, *messageURL, *v;
NSString *sourceFolderName, *targetFolderName, *messageURL, *messageKey, *v;
NSMutableArray *uids, *oldMessageURLs;
NSNumber *uid;
NSArray *destUIDs;
@ -910,6 +910,7 @@ _parseCOPYUID (NSString *line, NSArray **destUIDsP)
NSDictionary *result;
NSUInteger count;
NSArray *a;
NSData *changeKey;
if (![sourceFolder isKindOfClass: [MAPIStoreMailFolder class]])
return [super moveCopyMessagesWithMIDs: srcMids andCount: midCount
@ -989,6 +990,17 @@ _parseCOPYUID (NSString *line, NSArray **destUIDsP)
[mapping registerURL: messageURL withID: targetMids[count]];
}
/* Update the change keys */
[self synchroniseCache];
for (count = 0; count < midCount; count++)
{
changeKey = [NSData dataWithBinary: targetChangeKeys[count]];
messageKey = [NSString stringWithFormat: @"%@.eml",
[destUIDs objectAtIndex: count]];
[self setChangeKey: changeKey
forMessageWithKey: messageKey];
}
[self postNotificationsForMoveCopyMessagesWithMIDs: srcMids
andMessageURLs: oldMessageURLs
andCount: midCount
@ -1085,7 +1097,7 @@ _parseCOPYUID (NSString *line, NSArray **destUIDsP)
@implementation MAPIStoreOutboxFolder
- (int) getPrDisplayName: (void **) data
- (int) getPidTagDisplayName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = [@"Outbox" asUnicodeInMemCtx: memCtx];

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,8 +293,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
return appointmentWrapper;
}
- (int) getPrChangeKey: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagChangeKey: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
int rc = MAPISTORE_SUCCESS;
NSData *changeKey;
@ -330,8 +329,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
return rc;
}
- (int) getPrPredecessorChangeList: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagPredecessorChangeList: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
int rc = MAPISTORE_SUCCESS;
NSData *changeList;
@ -341,14 +340,14 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
else
{
changeList = [(MAPIStoreMailFolder *)[self container]
predecessorChangeListForMessageWithKey: [self nameInContainer]];
predecessorChangeListForMessageWithKey: [self nameInContainer]];
if (!changeList)
{
[self warnWithFormat: @"attempting to get predecessor change list"
@" by synchronising folder..."];
[(MAPIStoreMailFolder *) container synchroniseCache];
changeList = [(MAPIStoreMailFolder *)[self container]
predecessorChangeListForMessageWithKey: [self nameInContainer]];
predecessorChangeListForMessageWithKey: [self nameInContainer]];
if (changeList)
[self logWithFormat: @"got one"];
else
@ -373,14 +372,14 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
if (uid)
{
changeNumber = [(MAPIStoreMailFolder *) container
changeNumberForMessageUID: uid];
changeNumberForMessageUID: uid];
if (!changeNumber)
{
[self warnWithFormat: @"attempting to get change number"
@" by synchronising folder..."];
[(MAPIStoreMailFolder *) container synchroniseCache];
changeNumber = [(MAPIStoreMailFolder *) container
changeNumberForMessageUID: uid];
changeNumberForMessageUID: uid];
if (changeNumber)
[self logWithFormat: @"got one"];
else
@ -397,8 +396,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
return version;
}
- (int) getPrIconIndex: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagIconIndex: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
uint32_t longValue;
@ -406,7 +405,7 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
[self _fetchHeaderData];
if (mailIsEvent)
[[self _appointmentWrapper] getPrIconIndex: data inMemCtx: memCtx];
[[self _appointmentWrapper] getPidTagIconIndex: data inMemCtx: memCtx];
else
{
/* see http://msdn.microsoft.com/en-us/library/cc815472.aspx */
@ -448,8 +447,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
return MAPISTORE_SUCCESS;
}
- (int) getPrSubject: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagSubject: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSString *stringValue;
@ -461,8 +460,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
return MAPISTORE_SUCCESS;
}
- (int) getPrSubjectPrefix: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagSubjectPrefix: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSString *subject;
NSUInteger colIdx;
@ -472,7 +471,7 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
colIdx = [subject rangeOfString: @":"].location;
if (colIdx != NSNotFound && colIdx < 4)
stringValue = [NSString stringWithFormat: @"%@: ",
[subject substringToIndex: colIdx]];
[subject substringToIndex: colIdx]];
else
stringValue = @"";
*data = [stringValue asUnicodeInMemCtx: memCtx];
@ -480,8 +479,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
return MAPISTORE_SUCCESS;
}
- (int) getPrNormalizedSubject: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagNormalizedSubject: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSString *subject;
NSUInteger colIdx;
@ -507,15 +506,15 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
return [self getYes: data inMemCtx: memCtx];
}
- (int) getPrMessageClass: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagMessageClass: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
if (!headerSetup)
[self _fetchHeaderData];
if (mailIsEvent)
[[self _appointmentWrapper] getPrMessageClass: data
inMemCtx: memCtx];
[[self _appointmentWrapper] getPidTagMessageClass: data
inMemCtx: memCtx];
else
*data = talloc_strdup (memCtx, "IPM.Note");
@ -523,7 +522,7 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
}
/* Note: this applies to regular mails... */
// - (int) getPrReplyRequested: (void **) data // TODO
// - (int) getPidTagReplyRequested: (void **) data // TODO
// inMemCtx: (TALLOC_CTX *) memCtx
// {
// if (!headerSetup)
@ -535,8 +534,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
// }
/* ... while this applies to invitations. */
- (int) getPrResponseRequested: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagResponseRequested: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
{
if (!headerSetup)
[self _fetchHeaderData];
@ -546,32 +545,32 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
: MAPISTORE_ERR_NOT_FOUND);
}
- (int) getPrLatestDeliveryTime: (void **) data // DOUBT
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagLatestDeliveryTime: (void **) data // DOUBT
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrCreationTime: data inMemCtx: memCtx];
return [self getPidTagCreationTime: data inMemCtx: memCtx];
}
- (int) getPrOriginalSubmitTime: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagOriginalSubmitTime: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrCreationTime: data inMemCtx: memCtx];
return [self getPidTagCreationTime: data inMemCtx: memCtx];
}
- (int) getPrClientSubmitTime: (void **) data
- (int) getPidTagClientSubmitTime: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPidTagCreationTime: data inMemCtx: memCtx];
}
- (int) getPidTagMessageDeliveryTime: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPidTagCreationTime: data inMemCtx: memCtx];
}
- (int) getPidTagMessageFlags: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrCreationTime: data inMemCtx: memCtx];
}
- (int) getPrMessageDeliveryTime: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrCreationTime: data inMemCtx: memCtx];
}
- (int) getPrMessageFlags: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
{
NSDictionary *coreInfos;
NSArray *flags;
@ -594,8 +593,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
return MAPISTORE_SUCCESS;
}
- (int) getPrFlagStatus: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagFlagStatus: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSDictionary *coreInfos;
NSArray *flags;
@ -614,8 +613,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
return MAPISTORE_SUCCESS;
}
- (int) getPrFollowupIcon: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagFollowupIcon: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSDictionary *coreInfos;
NSArray *flags;
@ -634,38 +633,38 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
return MAPISTORE_SUCCESS;
}
- (int) getPrSensitivity: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagSensitivity: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getLongZero: data inMemCtx: memCtx];
}
- (int) getPrOriginalSensitivity: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagOriginalSensitivity: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrSensitivity: data inMemCtx: memCtx];
return [self getPidTagSensitivity: data inMemCtx: memCtx];
}
- (int) getPrSentRepresentingAddrtype: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagSentRepresentingAddressType: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getSMTPAddrType: data inMemCtx: memCtx];
}
- (int) getPrRcvdRepresentingAddrtype: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagReceivedRepresentingAddressType: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getSMTPAddrType: data inMemCtx: memCtx];
}
- (int) getPrReceivedByAddrtype: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagReceivedByAddressType: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getSMTPAddrType: data inMemCtx: memCtx];
}
- (int) getPrSenderAddrtype: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagSenderAddressType: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getSMTPAddrType: data inMemCtx: memCtx];
}
@ -762,111 +761,111 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
return rc;
}
- (int) getPrSenderEmailAddress: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagSenderEmailAddress: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getEmailAddressFromEmail: [sogoObject from]
inData: data
inMemCtx: memCtx];
}
- (int) getPrSenderName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagSenderName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getCNFromEmail: [sogoObject from]
inData: data
inMemCtx: memCtx];
}
- (int) getPrSenderEntryid: (void **) data inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagSenderEntryId: (void **) data inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getEntryIdFromEmail: [sogoObject from]
inData: data
inMemCtx: memCtx];
}
- (int) getPrOriginalAuthorName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrSenderEmailAddress: data inMemCtx: memCtx];
}
- (int) getPrSentRepresentingEmailAddress: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrSenderEmailAddress: data inMemCtx: memCtx];
}
- (int) getPrSentRepresentingName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrSenderName: data inMemCtx: memCtx];
}
- (int) getPrSentRepresentingEntryid: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrSenderEntryid: data inMemCtx: memCtx];
}
- (int) getPrReceivedByEmailAddress: (void **) data
- (int) getPidTagOriginalAuthorName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPidTagSenderEmailAddress: data inMemCtx: memCtx];
}
- (int) getPidTagSentRepresentingEmailAddress: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPidTagSenderEmailAddress: data inMemCtx: memCtx];
}
- (int) getPidTagSentRepresentingName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPidTagSenderName: data inMemCtx: memCtx];
}
- (int) getPidTagSentRepresentingEntryId: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPidTagSenderEntryId: data inMemCtx: memCtx];
}
- (int) getPidTagReceivedByEmailAddress: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getEmailAddressFromEmail: [sogoObject to]
inData: data
inMemCtx: memCtx];
}
- (int) getPrReceivedByName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagReceivedByName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getCNFromEmail: [sogoObject to]
inData: data
inMemCtx: memCtx];
}
- (int) getPrReceivedByEntryid: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagReceivedByEntryId: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self _getEntryIdFromEmail: [sogoObject to]
inData: data
inMemCtx: memCtx];
}
- (int) getPrRcvdRepresentingName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrReceivedByName: data inMemCtx: memCtx];
}
- (int) getPrRcvdRepresentingEmailAddress: (void **) data
- (int) getPidTagReceivedRepresentingName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrReceivedByEmailAddress: data inMemCtx: memCtx];
return [self getPidTagReceivedByName: data inMemCtx: memCtx];
}
- (int) getPrRcvdRepresentingEntryid: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagReceivedRepresentingEmailAddress: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrReceivedByEntryid: data inMemCtx: memCtx];
return [self getPidTagReceivedByEmailAddress: data inMemCtx: memCtx];
}
- (int) getPrDisplayTo: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagReceivedRepresentingEntryId: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPidTagReceivedByEntryId: data inMemCtx: memCtx];
}
- (int) getPidTagDisplayTo: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = [[sogoObject to] asUnicodeInMemCtx: memCtx];
return MAPISTORE_SUCCESS;
}
- (int) getPrOriginalDisplayTo: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagOriginalDisplayTo: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrDisplayTo: data inMemCtx: memCtx];
return [self getPidTagDisplayTo: data inMemCtx: memCtx];
}
- (int) getPrDisplayCc: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagDisplayCc: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSString *stringValue;
@ -879,22 +878,22 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
return MAPISTORE_SUCCESS;
}
- (int) getPrOriginalDisplayCc: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagOriginalDisplayCc: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrDisplayCc: data inMemCtx: memCtx];
return [self getPidTagDisplayCc: data inMemCtx: memCtx];
}
- (int) getPrDisplayBcc: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagDisplayBcc: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getEmptyString: data inMemCtx: memCtx];
}
- (int) getPrOriginalDisplayBcc: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagOriginalDisplayBcc: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrDisplayBcc: data inMemCtx: memCtx];
return [self getPidTagDisplayBcc: data inMemCtx: memCtx];
}
- (int) getPidNameContentType: (void **) data
@ -905,8 +904,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
return MAPISTORE_SUCCESS;
}
- (int) getPrImportance: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagImportance: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
uint32_t v;
NSString *s;
@ -924,24 +923,24 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
return MAPISTORE_SUCCESS;
}
- (int) getPrInternetCpid: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagInternetCodepage: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
/* ref:
http://msdn.microsoft.com/en-us/library/dd317756%28v=vs.85%29.aspx
http://msdn.microsoft.com/en-us/library/dd317756%28v=vs.85%29.aspx
minimal list that should be handled:
us-ascii: 20127
iso-8859-1: 28591
iso-8859-15: 28605
utf-8: 65001 */
minimal list that should be handled:
us-ascii: 20127
iso-8859-1: 28591
iso-8859-15: 28605
utf-8: 65001 */
*data = MAPILongValue(memCtx, 65001);
return MAPISTORE_SUCCESS;
}
- (int) getPrBody: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagBody: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSString *stringValue;
int rc = MAPISTORE_SUCCESS;
@ -955,8 +954,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
*data = [stringValue asUnicodeInMemCtx: memCtx];
}
else if (mailIsEvent)
rc = [[self _appointmentWrapper] getPrBody: data
inMemCtx: memCtx];
rc = [[self _appointmentWrapper] getPidTagBody: data
inMemCtx: memCtx];
else
{
*data = NULL;
@ -966,8 +965,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
return rc;
}
- (int) getPrHtml: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagHtml: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
int rc = MAPISTORE_SUCCESS;
@ -985,36 +984,36 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
return rc;
}
- (int) getPrRtfCompressed: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagRtfCompressed: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = NULL;
return MAPISTORE_ERR_NOT_FOUND;
}
- (int) getPrRtfInSync: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagRtfInSync: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getNo: data inMemCtx: memCtx];
}
- (int) getPrInternetMessageId: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagInternetMessageId: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = [[sogoObject messageId] asUnicodeInMemCtx: memCtx];
return MAPISTORE_SUCCESS;
}
- (int) getPrReadReceiptRequested: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagReadReceiptRequested: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getNo: data inMemCtx: memCtx];
}
- (int) getPrDeleteAfterSubmit: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagDeleteAfterSubmit: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getNo: data inMemCtx: memCtx];
}
@ -1065,7 +1064,7 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
: MAPISTORE_ERR_NOT_FOUND);
}
- (int) getPrProcessed: (void **) data inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagProcessed: (void **) data inMemCtx: (TALLOC_CTX *) memCtx
{
int rc;
@ -1104,8 +1103,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
: [self getNo: data inMemCtx: memCtx]);
}
- (int) getPrMsgEditorFormat: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagMessageEditorFormat: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
uint32_t format;
@ -1149,14 +1148,14 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
}
/* event getters */
- (int) getPrStartDate: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagStartDate: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
if (!headerSetup)
[self _fetchHeaderData];
return (mailIsEvent
? [[self _appointmentWrapper] getPrStartDate: data inMemCtx: memCtx]
? [[self _appointmentWrapper] getPidTagStartDate: data inMemCtx: memCtx]
: MAPISTORE_ERR_NOT_FOUND);
}
@ -1200,14 +1199,14 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
: MAPISTORE_ERR_NOT_FOUND);
}
- (int) getPrEndDate: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagEndDate: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
if (!headerSetup)
[self _fetchHeaderData];
return (mailIsEvent
? [[self _appointmentWrapper] getPrEndDate: data inMemCtx: memCtx]
? [[self _appointmentWrapper] getPidTagEndDate: data inMemCtx: memCtx]
: MAPISTORE_ERR_NOT_FOUND);
}
@ -1319,15 +1318,15 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
: MAPISTORE_ERR_NOT_FOUND);
}
- (int) getPrOwnerApptId: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagOwnerAppointmentId: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
if (!headerSetup)
[self _fetchHeaderData];
return (mailIsEvent
? [[self _appointmentWrapper] getPrOwnerApptId: data
inMemCtx: memCtx]
? [[self _appointmentWrapper] getPidTagOwnerAppointmentId: data
inMemCtx: memCtx]
: MAPISTORE_ERR_NOT_FOUND);
}

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,50 +774,55 @@ MakeMessageBody (NSDictionary *mailProperties, NSDictionary *attachmentParts,
NSData *messageData;
NSMutableArray *recipientEmails;
NSArray *list;
NSString *recId;
NSString *recId, *from, *msgClass;
NSUInteger count;
struct mapistore_connection_info *connInfo;
SOGoUser *activeUser;
NSString *from;
// SOGoMailFolder *sentFolder;
SOGoDomainDefaults *dd;
NSException *error;
MAPIStoreMapping *mapping;
/* send mail */
messageData = [self _generateMailDataWithBcc: NO];
mailProperties = [sogoObject properties];
recipientEmails = [NSMutableArray arrayWithCapacity: 32];
recipients = [mailProperties objectForKey: @"recipients"];
for (count = 0; count < 3; count++)
msgClass = [mailProperties objectForKey: MAPIPropertyKey (PidTagMessageClass)];
if ([msgClass isEqualToString: @"IPM.Note"]) /* we skip invitation replies */
{
recId = recTypes[count];
list = [recipients objectForKey: recId];
[recipientEmails
addObjectsFromArray: [list objectsForKey: @"email"
notFoundMarker: nil]];
}
/* send mail */
connInfo = [[self context] connectionInfo];
activeUser = [SOGoUser userWithLogin: [NSString stringWithUTF8String: connInfo->username]];
messageData = [self _generateMailDataWithBcc: NO];
mailProperties = [sogoObject properties];
recipientEmails = [NSMutableArray arrayWithCapacity: 32];
recipients = [mailProperties objectForKey: @"recipients"];
for (count = 0; count < 3; count++)
{
recId = recTypes[count];
list = [recipients objectForKey: recId];
[recipientEmails
addObjectsFromArray: [list objectsForKey: @"email"
notFoundMarker: nil]];
}
[self logWithFormat: @"recipients: %@", recipientEmails];
dd = [activeUser domainDefaults];
from = [[activeUser allEmails] objectAtIndex: 0];
error = [[SOGoMailer mailerWithDomainDefaults: dd]
activeUser = [[self context] activeUser];
[self logWithFormat: @"recipients: %@", recipientEmails];
dd = [activeUser domainDefaults];
from = [[activeUser allEmails] objectAtIndex: 0];
error = [[SOGoMailer mailerWithDomainDefaults: dd]
sendMailData: messageData
toRecipients: recipientEmails
sender: from];
if (error)
[self logWithFormat: @"an error occurred: '%@'", error];
if (error)
[self logWithFormat: @"an error occurred: '%@'", error];
mapping = [self mapping];
[mapping unregisterURLWithID: [self objectId]];
[self setIsNew: NO];
[properties removeAllObjects];
[[self container] cleanupCaches];
mapping = [self mapping];
[mapping unregisterURLWithID: [self objectId]];
[self setIsNew: NO];
[properties removeAllObjects];
[[self container] cleanupCaches];
}
else
[self logWithFormat: @"skipping submit of message with class '%@'",
msgClass];
return MAPISTORE_SUCCESS;
}

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;
@ -164,16 +163,16 @@ rtf2html (NSData *compressedRTF)
// __FUNCTION__, __LINE__];
msgData = talloc_zero (memCtx, struct mapistore_message);
if ([self getPrSubjectPrefix: &propValue
inMemCtx: msgData] == MAPISTORE_SUCCESS
if ([self getPidTagSubjectPrefix: &propValue
inMemCtx: msgData] == MAPISTORE_SUCCESS
&& propValue)
msgData->subject_prefix = propValue;
else
msgData->subject_prefix = "";
if ([self getPrNormalizedSubject: &propValue
inMemCtx: msgData] == MAPISTORE_SUCCESS
if ([self getPidTagNormalizedSubject: &propValue
inMemCtx: msgData] == MAPISTORE_SUCCESS
&& propValue)
msgData->normalized_subject = propValue;
else
@ -421,8 +420,8 @@ rtf2html (NSData *compressedRTF)
- (NSArray *) activeContainerMessageTables
{
return [[MAPIStoreActiveTables activeTables]
activeTablesForFMID: [container objectId]
andType: MAPISTORE_MESSAGE_TABLE];
activeTablesForFMID: [container objectId]
andType: MAPISTORE_MESSAGE_TABLE];
}
- (enum mapistore_error) saveMessage
@ -517,8 +516,8 @@ rtf2html (NSData *compressedRTF)
}
/* getters */
- (int) getPrInstId: (void **) data // TODO: DOUBT
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagInstID: (void **) data // TODO: DOUBT
inMemCtx: (TALLOC_CTX *) memCtx
{
/* we return a unique id based on the key */
*data = MAPILongLongValue (memCtx, [[sogoObject nameInContainer] hash]);
@ -526,22 +525,22 @@ rtf2html (NSData *compressedRTF)
return MAPISTORE_SUCCESS;
}
- (int) getPrInstanceNum: (void **) data // TODO: DOUBT
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagInstanceNum: (void **) data // TODO: DOUBT
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getLongZero: data inMemCtx: memCtx];
}
- (int) getPrRowType: (void **) data // TODO: DOUBT
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagRowType: (void **) data // TODO: DOUBT
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPILongValue (memCtx, TBL_LEAF_ROW);
return MAPISTORE_SUCCESS;
}
- (int) getPrDepth: (void **) data // TODO: DOUBT
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagDepth: (void **) data // TODO: DOUBT
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPILongLongValue (memCtx, 0);
@ -558,8 +557,8 @@ rtf2html (NSData *compressedRTF)
0x00000010 Create Contents Table
0x00000020 Create Associated Contents Table
*/
- (int) getPrAccess: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagAccess: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
uint32_t access = 0;
BOOL userIsOwner;
@ -587,8 +586,8 @@ rtf2html (NSData *compressedRTF)
0x00000000 Read-Only
0x00000001 Modify
*/
- (int) getPrAccessLevel: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagAccessLevel: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
uint32_t access = 0;
BOOL userIsOwner;
@ -645,40 +644,40 @@ rtf2html (NSData *compressedRTF)
return MAPISTORE_SUCCESS;
}
- (int) getPrFid: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagFolderId: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPILongLongValue (memCtx, [container objectId]);
return MAPISTORE_SUCCESS;
}
- (int) getPrMid: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagMid: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPILongLongValue (memCtx, [self objectId]);
return MAPISTORE_SUCCESS;
}
- (int) getPrMessageLocaleId: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagMessageLocaleId: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPILongValue (memCtx, 0x0409);
return MAPISTORE_SUCCESS;
}
- (int) getPrMessageFlags: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagMessageFlags: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPILongValue (memCtx, MSGFLAG_FROMME | MSGFLAG_READ | MSGFLAG_UNMODIFIED);
return MAPISTORE_SUCCESS;
}
- (int) getPrMessageSize: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagMessageSize: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
{
/* TODO: choose another name in SOGo for that method */
*data = MAPILongValue (memCtx, [[sogoObject davContentLength] intValue]);
@ -686,99 +685,99 @@ rtf2html (NSData *compressedRTF)
return MAPISTORE_SUCCESS;
}
- (int) getPrMsgStatus: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagMessageStatus: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getLongZero: data inMemCtx: memCtx];
}
- (int) getPrImportance: (void **) data // TODO -> subclass?
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagImportance: (void **) data // TODO -> subclass?
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPILongValue (memCtx, 1);
return MAPISTORE_SUCCESS;
}
- (int) getPrPriority: (void **) data // TODO -> subclass?
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagPriority: (void **) data // TODO -> subclass?
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getLongZero: data inMemCtx: memCtx];
}
- (int) getPrSensitivity: (void **) data // TODO -> subclass in calendar
- (int) getPidTagSensitivity: (void **) data // TODO -> subclass in calendar
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getLongZero: data inMemCtx: memCtx];
}
- (int) getPidTagSubject: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getLongZero: data inMemCtx: memCtx];
}
- (int) getPrSubject: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
[self subclassResponsibility: _cmd];
return MAPISTORE_ERR_NOT_FOUND;
}
- (int) getPrNormalizedSubject: (void **) data
- (int) getPidTagNormalizedSubject: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPidTagSubject: data inMemCtx: memCtx];
}
- (int) getPidTagOriginalSubject: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPidTagNormalizedSubject: data inMemCtx: memCtx];
}
- (int) getPidTagConversationTopic: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPidTagNormalizedSubject: data inMemCtx: memCtx];
}
- (int) getPidTagSubjectPrefix: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrSubject: data inMemCtx: memCtx];
return [self getEmptyString: data inMemCtx: memCtx];
}
- (int) getPrOriginalSubject: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrNormalizedSubject: data inMemCtx: memCtx];
}
- (int) getPrConversationTopic: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrNormalizedSubject: data inMemCtx: memCtx];
}
- (int) getPrSubjectPrefix: (void **) data
- (int) getPidTagDisplayTo: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getEmptyString: data inMemCtx: memCtx];
}
- (int) getPrDisplayTo: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagDisplayCc: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getEmptyString: data inMemCtx: memCtx];
}
- (int) getPrDisplayCc: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagDisplayBcc: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getEmptyString: data inMemCtx: memCtx];
}
- (int) getPrDisplayBcc: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getEmptyString: data inMemCtx: memCtx];
}
// - (int) getPrOriginalDisplayTo: (void **) data
// - (int) getPidTagOriginalDisplayTo: (void **) data
// {
// return [self getPrDisplayTo: data];
// return [self getPidTagDisplayTo: data];
// }
// - (int) getPrOriginalDisplayCc: (void **) data
// - (int) getPidTagOriginalDisplayCc: (void **) data
// {
// return [self getPrDisplayCc: data];
// return [self getPidTagDisplayCc: data];
// }
// - (int) getPrOriginalDisplayBcc: (void **) data
// - (int) getPidTagOriginalDisplayBcc: (void **) data
// {
// return [self getPrDisplayBcc: data];
// return [self getPidTagDisplayBcc: data];
// }
- (int) getPrLastModifierName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagLastModifierName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSURL *contextUrl;
@ -788,22 +787,22 @@ rtf2html (NSData *compressedRTF)
return MAPISTORE_SUCCESS;
}
- (int) getPrMessageClass: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagMessageClass: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
[self subclassResponsibility: _cmd];
return MAPISTORE_ERR_NOT_FOUND;
}
- (int) getPrOrigMessageClass: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagOriginalMessageClass: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrMessageClass: data inMemCtx: memCtx];
return [self getPidTagMessageClass: data inMemCtx: memCtx];
}
- (int) getPrHasattach: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagHasAttachments: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPIBoolValue (memCtx,
[[self attachmentKeys] count] > 0);
@ -811,8 +810,8 @@ rtf2html (NSData *compressedRTF)
return MAPISTORE_SUCCESS;
}
- (int) getPrAssociated: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagAssociated: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getNo: data inMemCtx: memCtx];;
}

View file

@ -32,8 +32,8 @@
@implementation MAPIStoreNotesMessage
- (int) getPrIconIndex: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagIconIndex: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
{
/* see http://msdn.microsoft.com/en-us/library/cc815472.aspx */
// *longValue = 0x00000300 for blue
@ -46,23 +46,23 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrMessageClass: (void **) data inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagMessageClass: (void **) data inMemCtx: (TALLOC_CTX *) memCtx
{
*data = [@"IPM.StickyNote" asUnicodeInMemCtx: memCtx];
return MAPISTORE_SUCCESS;
}
- (int) getPrSubject: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagSubject: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
id value;
int rc;
value = [[sogoObject properties]
objectForKey: MAPIPropertyKey (PR_NORMALIZED_SUBJECT_UNICODE)];
objectForKey: MAPIPropertyKey (PidTagNormalizedSubject)];
if (value)
rc = [value getValue: data forTag: PR_NORMALIZED_SUBJECT_UNICODE
rc = [value getValue: data forTag: PidTagNormalizedSubject
inMemCtx: memCtx];
else
rc = MAPISTORE_ERR_NOT_FOUND;

View file

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

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,16 +84,16 @@
return memberId;
}
- (int) getPrMemberId: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagMemberId: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = MAPILongLongValue (memCtx, memberId);
return MAPISTORE_SUCCESS;
}
- (int) getPrEntryid: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagEntryId: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSData *entryId;
struct mapistore_connection_info *connInfo;
@ -110,8 +110,8 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrMemberName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagMemberName: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
NSString *displayName;
@ -127,8 +127,8 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrMemberRights: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagMemberRights: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
uint32_t rights;
NSArray *roles;

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,8 +66,8 @@
@implementation MAPIStoreTasksMessage
- (int) getPrIconIndex: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagIconIndex: (void **) data // TODO
inMemCtx: (TALLOC_CTX *) memCtx
{
/* see http://msdn.microsoft.com/en-us/library/cc815472.aspx */
// Unassigned recurring task 0x00000501
@ -81,16 +81,16 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrMessageClass: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagMessageClass: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
*data = talloc_strdup(memCtx, "IPM.Task");
return MAPISTORE_SUCCESS;
}
- (int) getPrSubject: (void **) data // SUMMARY
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagSubject: (void **) data // SUMMARY
inMemCtx: (TALLOC_CTX *) memCtx
{
iCalToDo *task;
@ -100,8 +100,8 @@
return MAPISTORE_SUCCESS;
}
- (int) getPrImportance: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagImportance: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
uint32_t v;
iCalToDo *task;
@ -201,8 +201,8 @@
return [self getLongZero: data inMemCtx: memCtx];
}
- (int) getPrHasattach: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagHasAttachments: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getNo: data inMemCtx: memCtx];
}
@ -242,22 +242,22 @@
}
- (int) getPrMessageDeliveryTime: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
- (int) getPidTagMessageDeliveryTime: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrLastModificationTime: data inMemCtx: memCtx];
return [self getPidTagLastModificationTime: data inMemCtx: memCtx];
}
- (int) getClientSubmitTime: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrLastModificationTime: data inMemCtx: memCtx];
return [self getPidTagLastModificationTime: data inMemCtx: memCtx];
}
- (int) getLocalCommitTime: (void **) data
inMemCtx: (TALLOC_CTX *) memCtx
{
return [self getPrLastModificationTime: data inMemCtx: memCtx];
return [self getPidTagLastModificationTime: data inMemCtx: memCtx];
}
- (int) getPidLidTaskStatus: (void **) data // status
@ -466,7 +466,7 @@
value = [properties objectForKey: MAPIPropertyKey (PR_CHANGE_KEY)];
if (value)
[(MAPIStoreTasksFolder *) container
setChangeKey: value forMessageWithKey: [self nameInContainer]];
setChangeKey: value forMessageWithKey: [self nameInContainer]];
}
@end

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

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,28 +279,38 @@ static NSString *defaultUserID = @"anyone";
{
[self imap4URL];
[self imap4Connection];
client = [imap4 client];
if ([self imap4Connection])
{
client = [imap4 client];
inbox = [[self mailAccountFolder] inboxFolderInContext: context];
[client select: [inbox absoluteImap4Name]];
inbox = [[self mailAccountFolder] inboxFolderInContext: context];
[client select: [inbox absoluteImap4Name]];
path = [[imap4URL path] stringByDeletingLastPathComponent];
if (![path hasSuffix: @"/"])
path = [path stringByAppendingString: @"/"];
destURL = [[NSURL alloc] initWithScheme: [imap4URL scheme]
host: [imap4URL host]
path: [NSString stringWithFormat: @"%@%@",
path, newName]];
[destURL autorelease];
error = [imap4 moveMailboxAtURL: imap4URL
toURL: destURL];
if (!error)
{
// We unsubscribe to the old one, and subscribe back to the new one
[client subscribe: [destURL path]];
[client unsubscribe: [imap4URL path]];
path = [[imap4URL path] stringByDeletingLastPathComponent];
if (![path hasSuffix: @"/"])
path = [path stringByAppendingString: @"/"];
destURL = [[NSURL alloc] initWithScheme: [imap4URL scheme]
host: [imap4URL host]
path: [NSString stringWithFormat: @"%@%@",
path, newName]];
[destURL autorelease];
error = [imap4 moveMailboxAtURL: imap4URL
toURL: destURL];
if (!error)
{
ASSIGN (imap4URL, nil);
ASSIGN (nameInContainer,
([NSString stringWithFormat: @"folder%@", [newName asCSSIdentifier]]));
// We unsubscribe to the old one, and subscribe back to the new one
[client subscribe: [destURL path]];
[client unsubscribe: [imap4URL path]];
}
}
else
error = [NSException exceptionWithName: @"SOGoMailException"
reason: @"IMAP connection is invalid"
userInfo: nil];
}
else
error = [NSException exceptionWithName: @"SOGoMailException"
@ -386,33 +396,41 @@ static NSString *defaultUserID = @"anyone";
error = (NSException *) trashFolder;
else
{
client = [[self imap4Connection] client];
[imap4 selectFolder: [self imap4URL]];
folderName = [imap4 imap4FolderNameForURL: [trashFolder imap4URL]];
b = YES;
if ([self imap4Connection])
{
error = nil;
client = [imap4 client];
[imap4 selectFolder: [self imap4URL]];
folderName = [imap4 imap4FolderNameForURL: [trashFolder imap4URL]];
b = YES;
// If we are deleting messages within the Trash folder itself, we
// do not, of course, try to move messages to the Trash folder.
if ([folderName isEqualToString: [self relativeImap4Name]])
{
*withTrash = NO;
}
else
{
// If our Trash folder doesn't exist when we try to copy messages
// to it, we create it.
result = [[client status: folderName flags: [NSArray arrayWithObject: @"UIDVALIDITY"]]
objectForKey: @"result"];
// If we are deleting messages within the Trash folder itself, we
// do not, of course, try to move messages to the Trash folder.
if ([folderName isEqualToString: [self relativeImap4Name]])
{
*withTrash = NO;
}
else
{
// If our Trash folder doesn't exist when we try to copy messages
// to it, we create it.
result = [[client status: folderName flags: [NSArray arrayWithObject: @"UIDVALIDITY"]]
objectForKey: @"result"];
if (![result boolValue])
[[self imap4Connection] createMailbox: folderName
atURL: [[self mailAccountFolder] imap4URL]];
if (![result boolValue])
[imap4 createMailbox: folderName
atURL: [[self mailAccountFolder] imap4URL]];
result = [[client copyUids: uids toFolder: folderName]
objectForKey: @"result"];
result = [[client copyUids: uids toFolder: folderName]
objectForKey: @"result"];
b = [result boolValue];
b = [result boolValue];
}
}
else
error = [NSException exceptionWithName: @"SOGoMailException"
reason: @"IMAP connection is invalid"
userInfo: nil];
}
}
else
@ -608,23 +626,32 @@ static NSString *defaultUserID = @"anyone";
}
client = [[self imap4Connection] client];
[imap4 selectFolder: [self imap4URL]];
if (client)
{
[imap4 selectFolder: [self imap4URL]];
// We make sure the destination IMAP folder exist, if not, we create it.
result = [[client status: imapDestinationFolder
flags: [NSArray arrayWithObject: @"UIDVALIDITY"]]
objectForKey: @"result"];
if (![result boolValue])
result = [[self imap4Connection] createMailbox: imapDestinationFolder
atURL: [[self mailAccountFolder] imap4URL]];
if (!result || [result boolValue])
result = [client copyUids: uids toFolder: imapDestinationFolder];
// We make sure the destination IMAP folder exist, if not, we create it.
result = [[client status: imapDestinationFolder
flags: [NSArray arrayWithObject: @"UIDVALIDITY"]]
objectForKey: @"result"];
if (![result boolValue])
result = [[self imap4Connection] createMailbox: imapDestinationFolder
atURL: [[self mailAccountFolder] imap4URL]];
if (!result || [result boolValue])
result = [client copyUids: uids toFolder: imapDestinationFolder];
if ([[result valueForKey: @"result"] boolValue])
result = nil;
if ([[result valueForKey: @"result"] boolValue])
result = nil;
else
result = [NSException exceptionWithHTTPStatus: 500
reason: [[[result objectForKey: @"RawResponse"]
objectForKey: @"ResponseResult"]
objectForKey: @"description"]];
}
else
result = [NSException exceptionWithHTTPStatus: 500
reason: [[[result objectForKey: @"RawResponse"] objectForKey: @"ResponseResult"] objectForKey: @"description"]];
result = [NSException exceptionWithName: @"SOGoMailException"
reason: @"IMAP connection is invalid"
userInfo: nil];
}
else
result = [NSException exceptionWithHTTPStatus: 500
@ -645,18 +672,24 @@ static NSString *defaultUserID = @"anyone";
NGImap4Client *client;
client = [[self imap4Connection] client];
result = [self copyUIDs: uids toFolder: destinationFolder inContext: localContext];
if (![result isNotNull])
if (client)
{
result = [client storeFlags: [NSArray arrayWithObject: @"Deleted"]
forUIDs: uids addOrRemove: YES];
if ([[result valueForKey: @"result"] boolValue])
{
[self markForExpunge];
result = nil;
}
result = [self copyUIDs: uids toFolder: destinationFolder inContext: localContext];
if (![result isNotNull])
{
result = [client storeFlags: [NSArray arrayWithObject: @"Deleted"]
forUIDs: uids addOrRemove: YES];
if ([[result valueForKey: @"result"] boolValue])
{
[self markForExpunge];
result = nil;
}
}
}
else
result = [NSException exceptionWithName: @"SOGoMailException"
reason: @"IMAP connection is invalid"
userInfo: nil];
return result;
}
@ -740,7 +773,15 @@ static NSString *defaultUserID = @"anyone";
- (NSException *) expunge
{
return [[self imap4Connection] expungeAtURL: [self imap4URL]];
NSException *error;
if ([self imap4Connection])
error = [imap4 expungeAtURL: [self imap4URL]];
else
error = [NSException exceptionWithName: @"SOGoMailException"
reason: @"IMAP connection is invalid"
userInfo: nil];
return error;
}
- (void) markForExpunge
@ -796,8 +837,17 @@ static NSString *defaultUserID = @"anyone";
- (NSException *) addFlagsToAllMessages: (id) _f
{
return [[self imap4Connection] addFlags:_f
toAllMessagesInURL: [self imap4URL]];
NSException *error;
if ([self imap4Connection])
error = [imap4 addFlags:_f
toAllMessagesInURL: [self imap4URL]];
else
error = [NSException exceptionWithName: @"SOGoMailException"
reason: @"IMAP connection is invalid"
userInfo: nil];
return error;
}
/* name lookup */
@ -866,7 +916,16 @@ static NSString *defaultUserID = @"anyone";
- (NSException *) davCreateCollection: (NSString *) _name
inContext: (id) _ctx
{
return [[self imap4Connection] createMailbox:_name atURL:[self imap4URL]];
NSException *error;
if ([self imap4Connection])
error = [imap4 createMailbox:_name atURL:[self imap4URL]];
else
error = [NSException exceptionWithName: @"SOGoMailException"
reason: @"IMAP connection is invalid"
userInfo: nil];
return error;
}
- (BOOL) exists
@ -879,29 +938,43 @@ static NSString *defaultUserID = @"anyone";
NSException *error;
BOOL rc;
[self imap4Connection];
error = [imap4 createMailbox: [self relativeImap4Name]
atURL: [container imap4URL]];
if (error)
rc = NO;
else
if ([self imap4Connection])
{
[[imap4 client] subscribe: [self absoluteImap4Name]];
rc = YES;
error = [imap4 createMailbox: [self relativeImap4Name]
atURL: [container imap4URL]];
if (error)
rc = NO;
else
{
[[imap4 client] subscribe: [self absoluteImap4Name]];
rc = YES;
}
}
else
rc = NO;
return rc;
}
- (NSException *) delete
{
return [[self imap4Connection] deleteMailboxAtURL:[self imap4URL]];
NSException *error;
if ([self imap4Connection])
error = [imap4 deleteMailboxAtURL: [self imap4URL]];
else
error = [NSException exceptionWithName: @"SOGoMailException"
reason: @"IMAP connection is invalid"
userInfo: nil];
return error;
}
- (NSException *) davMoveToTargetObject: (id) _target
newName: (NSString *) _name
inContext: (id)_ctx
{
NSException *error;
NSURL *destImapURL;
if ([_name length] == 0) { /* target already exists! */
@ -926,9 +999,16 @@ static NSString *defaultUserID = @"anyone";
[self logWithFormat:@"TODO: should move collection as '%@' to: %@",
[[self imap4URL] absoluteString],
[destImapURL absoluteString]];
return [[self imap4Connection] moveMailboxAtURL:[self imap4URL]
toURL:destImapURL];
if ([self imap4Connection])
error = [imap4 moveMailboxAtURL: [self imap4URL]
toURL: destImapURL];
else
error = [NSException exceptionWithName: @"SOGoMailException"
reason: @"IMAP connection is invalid"
userInfo: nil];
return error;
}
- (NSException *) davCopyToTargetObject: (id) _target

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