diff --git a/ChangeLog b/ChangeLog index 68b5a9e7e..8c9427e48 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,6 +4,8 @@ (sogo_pocop_get_available_table_properties): now takes a SPropTagArray ** argument. (sogo_pocop_get_available_properties): same as above. + (sogo_op_get_available_table_properties): new, non-poc operation, + to retrieve the list of available properties from a table. * OpenChange/MAPIStoreTable.m (-notifyChangesForChild:): same as below. diff --git a/OpenChange/MAPIStoreContext.h b/OpenChange/MAPIStoreContext.h index 59a42b3ad..d8bb94e71 100644 --- a/OpenChange/MAPIStoreContext.h +++ b/OpenChange/MAPIStoreContext.h @@ -136,6 +136,8 @@ ofTableType: (uint8_t) tableType inRow: (struct SRow *) aRow withMID: (uint64_t) fmid; +- (int) getAvailableProperties: (struct SPropTagArray **) propertiesP + ofTableType: (uint8_t) type; - (int) setPropertiesWithFMID: (uint64_t) fmid ofTableType: (uint8_t) tableType inRow: (struct SRow *) aRow; diff --git a/OpenChange/MAPIStoreContext.m b/OpenChange/MAPIStoreContext.m index 1659951e8..2bb300ea5 100644 --- a/OpenChange/MAPIStoreContext.m +++ b/OpenChange/MAPIStoreContext.m @@ -607,6 +607,37 @@ _prepareContextClass (struct mapistore_context *newMemCtx, return rc; } +- (int) getAvailableProperties: (struct SPropTagArray **) propertiesP + ofTableType: (uint8_t) type +{ + int rc = MAPISTORE_SUCCESS; + + switch (type) + { + case MAPISTORE_FOLDER_TABLE: + [[baseFolder class] getAvailableProperties: propertiesP]; + break; + case MAPISTORE_MESSAGE_TABLE: + [[baseFolder messageClass] getAvailableProperties: propertiesP]; + break; + case MAPISTORE_FAI_TABLE: + [MAPIStoreFAIMessage getAvailableProperties: propertiesP]; + break; + case MAPISTORE_RULE_TABLE: + [self errorWithFormat: @"%s: rules not handled yet", + __PRETTY_FUNCTION__]; + rc = MAPISTORE_ERROR; + break; + case MAPISTORE_ATTACHMENT_TABLE: + [self errorWithFormat: @"%s: attachments not handled yet", + __PRETTY_FUNCTION__]; + rc = MAPISTORE_ERROR; + break; + } + + return rc; +} + - (int) openMessage: (struct mapistore_message *) msg withMID: (uint64_t) mid inFID: (uint64_t) fid diff --git a/OpenChange/MAPIStoreSOGo.m b/OpenChange/MAPIStoreSOGo.m index 827049182..efd725645 100644 --- a/OpenChange/MAPIStoreSOGo.m +++ b/OpenChange/MAPIStoreSOGo.m @@ -459,6 +459,33 @@ sogo_op_get_table_property(void *private_data, return rc; } +static int +sogo_op_get_available_table_properties(void *private_data, + uint8_t type, + struct SPropTagArray **propertiesP) +{ + NSAutoreleasePool *pool; + sogo_context *cContext; + MAPIStoreContext *context; + int rc; + + DEBUG (5, ("[SOGo: %s:%d]\n", __FUNCTION__, __LINE__)); + + pool = [NSAutoreleasePool new]; + + cContext = private_data; + context = cContext->objcContext; + [context setupRequest]; + + rc = [context getAvailableProperties: propertiesP + ofTableType: type]; + + [context tearDownRequest]; + [pool release]; + + return rc; +} + static int sogo_op_openmessage(void *private_data, uint64_t fid, @@ -1213,6 +1240,7 @@ int mapistore_init_backend(void) backend.op_closedir = sogo_op_closedir; backend.op_readdir_count = sogo_op_readdir_count; backend.op_get_table_property = sogo_op_get_table_property; + backend.op_get_available_table_properties = sogo_op_get_available_table_properties; backend.op_get_folders_list = sogo_op_get_folders_list; backend.op_set_restrictions = sogo_op_set_restrictions; backend.op_set_sort_order = sogo_op_set_sort_order;