mirror of
https://github.com/inverse-inc/sogo.git
synced 2026-04-04 12:58:50 +00:00
Monotone-Parent: 4138731669f6496c58a7c665ee66513f2b2304ab
Monotone-Revision: 5c85a1a1d9228ad7653497f882f4fccc69f1d924 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2011-08-10T18:32:53 Monotone-Branch: ca.inverse.sogo
This commit is contained in:
@@ -38,8 +38,15 @@
|
||||
#include <tdb.h>
|
||||
#include <tdb_wrap.h>
|
||||
|
||||
static NSMutableDictionary *mappingRegistry = nil;
|
||||
|
||||
@implementation MAPIStoreMapping
|
||||
|
||||
+ (void) initialize
|
||||
{
|
||||
mappingRegistry = [NSMutableDictionary new];
|
||||
}
|
||||
|
||||
static int
|
||||
MAPIStoreMappingTDBTraverse (TDB_CONTEXT *ctx, TDB_DATA data1, TDB_DATA data2,
|
||||
void *data)
|
||||
@@ -67,14 +74,20 @@ MAPIStoreMappingTDBTraverse (TDB_CONTEXT *ctx, TDB_DATA data1, TDB_DATA data2,
|
||||
return 0;
|
||||
}
|
||||
|
||||
+ (id) mappingWithIndexing: (struct tdb_wrap *) indexing
|
||||
+ (id) mappingForUsername: (NSString *) username
|
||||
withIndexing: (struct tdb_wrap *) indexing
|
||||
{
|
||||
id newMapping;
|
||||
id mapping;
|
||||
|
||||
newMapping = [[self alloc] initWithIndexing: indexing];
|
||||
[newMapping autorelease];
|
||||
mapping = [mappingRegistry objectForKey: username];
|
||||
if (!mapping)
|
||||
{
|
||||
mapping = [[self alloc] initForUsername: username
|
||||
withIndexing: indexing];
|
||||
[mapping autorelease];
|
||||
}
|
||||
|
||||
return newMapping;
|
||||
return mapping;
|
||||
}
|
||||
|
||||
- (id) init
|
||||
@@ -84,12 +97,34 @@ MAPIStoreMappingTDBTraverse (TDB_CONTEXT *ctx, TDB_DATA data1, TDB_DATA data2,
|
||||
mapping = [NSMutableDictionary new];
|
||||
reverseMapping = [NSMutableDictionary new];
|
||||
indexing = NULL;
|
||||
useCount = 0;
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (id) initWithIndexing: (struct tdb_wrap *) newIndexing
|
||||
- (void) increaseUseCount
|
||||
{
|
||||
if (useCount == 0)
|
||||
{
|
||||
[mappingRegistry setObject: self forKey: username];
|
||||
[self logWithFormat: @"mapping registered (%@)", username];
|
||||
}
|
||||
useCount++;
|
||||
}
|
||||
|
||||
- (void) decreaseUseCount
|
||||
{
|
||||
useCount--;
|
||||
if (useCount == 0)
|
||||
{
|
||||
[mappingRegistry removeObjectForKey: username];
|
||||
[self logWithFormat: @"mapping deregistered (%@)", username];
|
||||
}
|
||||
}
|
||||
|
||||
- (id) initForUsername: (NSString *) newUsername
|
||||
withIndexing: (struct tdb_wrap *) newIndexing
|
||||
{
|
||||
NSNumber *idNbr;
|
||||
NSString *uri;
|
||||
@@ -98,6 +133,7 @@ MAPIStoreMappingTDBTraverse (TDB_CONTEXT *ctx, TDB_DATA data1, TDB_DATA data2,
|
||||
|
||||
if ((self = [self init]))
|
||||
{
|
||||
ASSIGN (username, newUsername);
|
||||
indexing = newIndexing;
|
||||
tdb_traverse_read (indexing->tdb, MAPIStoreMappingTDBTraverse, mapping);
|
||||
keys = [mapping allKeys];
|
||||
@@ -116,6 +152,7 @@ MAPIStoreMappingTDBTraverse (TDB_CONTEXT *ctx, TDB_DATA data1, TDB_DATA data2,
|
||||
|
||||
- (void) dealloc
|
||||
{
|
||||
[username release];
|
||||
[mapping release];
|
||||
[reverseMapping release];
|
||||
[super dealloc];
|
||||
|
||||
Reference in New Issue
Block a user