diff --git a/ChangeLog b/ChangeLog index 3be7dbf50..44db2e954 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2012-01-30 Wolfgang Sourdeau + + * OpenChange/MAPIStoreGCSBaseContext.m + (+listContextsForUser:inMemCtx:): centralized code for all GCS + classes. + 2012-01-29 Wolfgang Sourdeau * OpenChange/MAPIStoreMailContext.[hm]: removed diff --git a/OpenChange/MAPIStoreCalendarContext.m b/OpenChange/MAPIStoreCalendarContext.m index 7a6622b1d..9e02b19a4 100644 --- a/OpenChange/MAPIStoreCalendarContext.m +++ b/OpenChange/MAPIStoreCalendarContext.m @@ -46,22 +46,9 @@ static Class MAPIStoreCalendarFolderK; return @"calendar"; } -+ (struct mapistore_contexts_list *) listContextsForUser: (NSString *) userName - withTDBIndexing: (struct tdb_wrap *) indexingTdb - inMemCtx: (TALLOC_CTX *) memCtx ++ (enum mapistore_context_role) MAPIModuleRole { - struct mapistore_contexts_list *context; - - context = talloc_zero(memCtx, struct mapistore_contexts_list); - context->url = talloc_asprintf (context, "sogo://%s@calendar/personal", - [userName UTF8String]); - // context->name = "Agenda personnel"; - context->main_folder = true; - context->role = MAPISTORE_CALENDAR_ROLE; - context->tag = "tag"; - context->prev = context; - - return context; + return MAPISTORE_CALENDAR_ROLE; } - (Class) MAPIStoreFolderClass @@ -69,9 +56,4 @@ static Class MAPIStoreCalendarFolderK; return MAPIStoreCalendarFolderK; } -- (id) rootSOGoFolder -{ - return [userContext calendarRoot]; -} - @end diff --git a/OpenChange/MAPIStoreContactsContext.m b/OpenChange/MAPIStoreContactsContext.m index 7c4052055..831ca0538 100644 --- a/OpenChange/MAPIStoreContactsContext.m +++ b/OpenChange/MAPIStoreContactsContext.m @@ -46,22 +46,9 @@ static Class MAPIStoreContactsFolderK; return @"contacts"; } -+ (struct mapistore_contexts_list *) listContextsForUser: (NSString *) userName - withTDBIndexing: (struct tdb_wrap *) indexingTdb - inMemCtx: (TALLOC_CTX *) memCtx ++ (enum mapistore_context_role) MAPIModuleRole { - struct mapistore_contexts_list *context; - - context = talloc_zero(memCtx, struct mapistore_contexts_list); - context->url = talloc_asprintf (context, "sogo://%s@contacts/personal", - [userName UTF8String]); - // context->name = "Carnet d'adresses personnel"; - context->main_folder = true; - context->role = MAPISTORE_CONTACTS_ROLE; - context->tag = "tag"; - context->prev = context; - - return context; + return MAPISTORE_CONTACTS_ROLE; } - (Class) MAPIStoreFolderClass @@ -69,9 +56,4 @@ static Class MAPIStoreContactsFolderK; return MAPIStoreContactsFolderK; } -- (id) rootSOGoFolder -{ - return [userContext contactsRoot]; -} - @end diff --git a/OpenChange/MAPIStoreGCSBaseContext.m b/OpenChange/MAPIStoreGCSBaseContext.m index d3dd27376..2ccfca080 100644 --- a/OpenChange/MAPIStoreGCSBaseContext.m +++ b/OpenChange/MAPIStoreGCSBaseContext.m @@ -20,10 +20,22 @@ * Boston, MA 02111-1307, USA. */ +#import +#import #import +#import +#import + +#import "MAPIStoreUserContext.h" +#import "NSString+MAPIStore.h" + #import "MAPIStoreGCSBaseContext.h" +#undef DEBUG +#include +#include + @implementation MAPIStoreGCSBaseContext + (NSString *) MAPIModuleName @@ -31,4 +43,59 @@ return nil; } ++ (enum mapistore_context_role) MAPIModuleRole +{ + return -1; +} + ++ (struct mapistore_contexts_list *) listContextsForUser: (NSString *) userName + withTDBIndexing: (struct tdb_wrap *) indexingTdb + inMemCtx: (TALLOC_CTX *) memCtx +{ + struct mapistore_contexts_list *firstContext = NULL, *context; + NSString *moduleName, *baseUrl, *url, *nameInContainer; + NSArray *subfolders; + MAPIStoreUserContext *userContext; + SOGoParentFolder *parentFolder; + NSUInteger count, max; + SOGoGCSFolder *currentFolder; + + moduleName = [self MAPIModuleName]; + if (moduleName) + { + userContext = [MAPIStoreUserContext userContextWithUsername: userName + andTDBIndexing: indexingTdb]; + parentFolder = [[userContext rootFolders] objectForKey: [self MAPIModuleName]]; + baseUrl = [NSString stringWithFormat: @"sogo://%@@%@/", + userName, moduleName]; + + subfolders = [parentFolder subFolders]; + max = [subfolders count]; + for (count = 0; count < max; count++) + { + currentFolder = [subfolders objectAtIndex: count]; + if ([[currentFolder ownerInContext: nil] isEqualToString: userName]) + { + context = talloc_zero (memCtx, struct mapistore_contexts_list); + nameInContainer = [currentFolder nameInContainer]; + url = [NSString stringWithFormat: @"%@%@", baseUrl, nameInContainer]; + context->url = [url asUnicodeInMemCtx: context]; + context->name = [[currentFolder displayName] + asUnicodeInMemCtx: context]; + context->main_folder = [nameInContainer isEqualToString: @"personal"]; + context->role = [self MAPIModuleRole]; + context->tag = "tag"; + DLIST_ADD_END (firstContext, context, void); + } + } + } + + return firstContext; +} + +- (id) rootSOGoFolder +{ + return [[userContext rootFolders] objectForKey: [isa MAPIModuleName]]; +} + @end diff --git a/OpenChange/MAPIStoreTasksContext.m b/OpenChange/MAPIStoreTasksContext.m index c100cc3c2..cf95fb736 100644 --- a/OpenChange/MAPIStoreTasksContext.m +++ b/OpenChange/MAPIStoreTasksContext.m @@ -45,22 +45,9 @@ static Class MAPIStoreTasksFolderK; return @"tasks"; } -+ (struct mapistore_contexts_list *) listContextsForUser: (NSString *) userName - withTDBIndexing: (struct tdb_wrap *) indexingTdb - inMemCtx: (TALLOC_CTX *) memCtx ++ (enum mapistore_context_role) MAPIModuleRole { - struct mapistore_contexts_list *context; - - context = talloc_zero(memCtx, struct mapistore_contexts_list); - context->url = talloc_asprintf (context, "sogo://%s@tasks/personal", - [userName UTF8String]); - // context->name = "Tâches personnelles"; - context->main_folder = true; - context->role = MAPISTORE_TASKS_ROLE; - context->tag = "tag"; - context->prev = context; - - return context; + return MAPISTORE_TASKS_ROLE; } - (Class) MAPIStoreFolderClass @@ -68,9 +55,4 @@ static Class MAPIStoreTasksFolderK; return MAPIStoreTasksFolderK; } -- (id) rootSOGoFolder -{ - return [userContext calendarRoot]; -} - @end