diff --git a/ChangeLog b/ChangeLog index bee14c483..2f19f0495 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ 2011-02-06 Wolfgang Sourdeau + * OpenChange/MAPIStoreMessageTable.m (-setSortOrder:): implemented + stub method. + + * OpenChange/MAPIStoreContext.m + (-setSortOrder:withFID:andTableType:getTableStatus:): implemented + backend method for sorting messages. + * OpenChange/SOGoMAPIFSMessage.m (-MAPISave): restored old way of decoding the property dictionary from the property list as the "new method" was working around that was solved elsewhere and was diff --git a/OpenChange/MAPIStoreContext.h b/OpenChange/MAPIStoreContext.h index 13eb25f67..cbaf4a276 100644 --- a/OpenChange/MAPIStoreContext.h +++ b/OpenChange/MAPIStoreContext.h @@ -94,6 +94,9 @@ withFID: (uint64_t) fid andTableType: (uint8_t) tableType getTableStatus: (uint8_t *) tableStatus; +- (int) setSortOrder: (const struct SSortOrderSet *) set + withFID: (uint64_t) fid andTableType: (uint8_t) type + getTableStatus: (uint8_t *) tableStatus; - (enum MAPISTATUS) getTableProperty: (void **) data withTag: (enum MAPITAGS) proptag diff --git a/OpenChange/MAPIStoreContext.m b/OpenChange/MAPIStoreContext.m index 1e45f143b..96e3184c0 100644 --- a/OpenChange/MAPIStoreContext.m +++ b/OpenChange/MAPIStoreContext.m @@ -674,6 +674,18 @@ _prepareContextClass (struct mapistore_context *newMemCtx, return MAPISTORE_SUCCESS; } +- (int) setSortOrder: (const struct SSortOrderSet *) set + withFID: (uint64_t) fid andTableType: (uint8_t) type + getTableStatus: (uint8_t *) tableStatus +{ + MAPIStoreMessageTable *table; + + table = (MAPIStoreMessageTable *) [self _tableForFID: fid andTableType: type]; + [table setSortOrder: set]; + + return MAPISTORE_SUCCESS; +} + - (enum MAPISTATUS) getTableProperty: (void **) data withTag: (enum MAPITAGS) propTag atPosition: (uint32_t) pos diff --git a/OpenChange/MAPIStoreMessageTable.h b/OpenChange/MAPIStoreMessageTable.h index 6ba737949..7c3935bba 100644 --- a/OpenChange/MAPIStoreMessageTable.h +++ b/OpenChange/MAPIStoreMessageTable.h @@ -26,6 +26,9 @@ #import "MAPIStoreTable.h" @interface MAPIStoreMessageTable : MAPIStoreTable + +- (void) setSortOrder: (const struct SSortOrderSet *) set; + @end #endif /* MAPISTOREMESSAGETABLE_H */ diff --git a/OpenChange/MAPIStoreMessageTable.m b/OpenChange/MAPIStoreMessageTable.m index c0beca286..b85a202d4 100644 --- a/OpenChange/MAPIStoreMessageTable.m +++ b/OpenChange/MAPIStoreMessageTable.m @@ -20,6 +20,8 @@ * Boston, MA 02111-1307, USA. */ +#import + #import #import @@ -210,4 +212,9 @@ static MAPIStoreMapping *mapping; return rc; } +- (void) setSortOrder: (const struct SSortOrderSet *) set +{ + [self logWithFormat: @"unimplemented method: %@", NSStringFromSelector (_cmd)]; +} + @end diff --git a/OpenChange/MAPIStoreSOGo.m b/OpenChange/MAPIStoreSOGo.m index da5237f90..d16a219d8 100644 --- a/OpenChange/MAPIStoreSOGo.m +++ b/OpenChange/MAPIStoreSOGo.m @@ -799,6 +799,39 @@ sogo_op_set_restrictions (void *private_data, uint64_t fid, uint8_t type, return rc; } +static int +sogo_op_set_sort_order (void *private_data, uint64_t fid, uint8_t type, + struct SSortOrderSet *set, uint8_t *tableStatus) +{ + 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; + if (context) + { + [context setupRequest]; + rc = [context setSortOrder: set + withFID: fid andTableType: type + getTableStatus: tableStatus]; + [context tearDownRequest]; + [pool release]; + } + else + { + NSLog (@" UNEXPECTED WEIRDNESS: RECEIVED NO CONTEXT"); + rc = MAPI_E_NOT_FOUND; + } + + return rc; +} + /** \details Entry point for mapistore SOGO backend @@ -839,6 +872,7 @@ int mapistore_init_backend(void) backend.op_get_table_property = sogo_op_get_table_property; 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; backend.op_openmessage = sogo_op_openmessage; backend.op_createmessage = sogo_op_createmessage; backend.op_modifyrecipients = sogo_op_modifyrecipients;