From bf3e4fe3f3acd078634f3841fac5332a03574a19 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Tue, 7 Jun 2011 00:02:54 +0000 Subject: [PATCH] Monotone-Parent: 8ec67206fe2e60d10c9dd420d14aeb136a46afc8 Monotone-Revision: d3347c857a352227561f6e22c205b089a223ee88 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2011-06-07T00:02:54 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 2 ++ OpenChange/MAPIStoreContext.h | 2 ++ OpenChange/MAPIStoreContext.m | 31 +++++++++++++++++++++++++++++++ OpenChange/MAPIStoreSOGo.m | 28 ++++++++++++++++++++++++++++ 4 files changed, 63 insertions(+) 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;