Add UI for selective sync folders. Call next sync when an account has sync preference...
[pithos-macos] / pithos-macos / PithosSyncDaemon.m
index e1a74f0..5cf5606 100644 (file)
@@ -73,7 +73,7 @@
 @end
 
 @implementation PithosSyncDaemon
-@synthesize directoryPath, pithosAccount, containersDictionary, pithos;
+@synthesize directoryPath, containersDictionary, pithos;
 @synthesize pithosContainers;
 @synthesize lastCompletedSync, remoteObjects, previousRemoteObjects, storedLocalObjectStates, currentLocalObjectStates;
 @synthesize pithosStateFilePath, tempDownloadsDirPath, tempTrashDirPath;
 
 - (id)initWithDirectoryPath:(NSString *)aDirectoryPath 
               pithosAccount:(PithosAccount *)aPithosAccount 
-       containersDictionary:(NSMutableDictionary *)aContainersDictionary 
+       containersDictionary:(NSDictionary *)aContainersDictionary 
             resetLocalState:(BOOL)resetLocalState {
     if ((self = [super init])) {
         directoryPath = [aDirectoryPath copy];
         pithosAccount = [aPithosAccount retain];
-        containersDictionary = [aContainersDictionary retain];
+        containersDictionary = [aContainersDictionary copy];
         self.pithos = pithosAccount.pithos;
         
         containersCount = [containersDictionary count];
         self.pithosContainers = [NSMutableArray arrayWithCapacity:containersCount];
-        for (NSString *containerName in [containersDictionary allKeys]) {
+        for (NSString *containerName in containersDictionary) {
             ASIPithosContainer *pithosContainer = [ASIPithosContainer container];
             pithosContainer.name = containerName;
             [pithosContainers addObject:pithosContainer];
         // Remove containers that don't interest us anymore and save
         if (!storedLocalObjectStates)
             [self loadLocalState];
-        for (NSString *containerName in [storedLocalObjectStates allKeys]) {
+        for (NSString *containerName in storedLocalObjectStates) {
             if (![containersDictionary objectForKey:containerName]) {
                 [storedLocalObjectStates removeObjectForKey:containerName];
                 if (self.tempDownloadsDirPath) {
     if (aContainersDictionary && ![aContainersDictionary isEqualToDictionary:containersDictionary]) {
         [self resetDaemon];
         [containersDictionary release];
-        containersDictionary = [aContainersDictionary retain];
+        containersDictionary = [aContainersDictionary copy];
         containersCount = [containersDictionary count];
         self.pithosContainers = [NSMutableArray arrayWithCapacity:containersCount];
-        for (NSString *containerName in [containersDictionary allKeys]) {
+        for (NSString *containerName in aContainersDictionary) {
             ASIPithosContainer *pithosContainer = [ASIPithosContainer container];
             pithosContainer.name = containerName;
             [pithosContainers addObject:pithosContainer];
         }
         [self resetLocalStateWithAll:NO];
-    }    
+    }
 }
 
 - (void)setPithos:(ASIPithos *)aPithos {
     NSFileManager *fileManager = [NSFileManager defaultManager];
     BOOL isDirectory;
     NSError *error = nil;
-    for (NSString *localFilePath in [currentLocalObjectStates allKeys]) {
+    for (NSString *localFilePath in currentLocalObjectStates) {
         localState = [currentLocalObjectStates objectForKey:localFilePath];
         if (!localState.isDirectory && [hash isEqualToString:localState.hash] && 
             [fileManager fileExistsAtPath:localFilePath isDirectory:&isDirectory] && !isDirectory) {
         self.currentLocalObjectStates = [NSMutableDictionary dictionary];
         for (ASIPithosContainer *pithosContainer in pithosContainers) {
             NSString *containerDirectoryPath = [directoryPath stringByAppendingPathComponent:pithosContainer.name];
-            NSMutableArray *containerExcludedDirectories = [containersDictionary objectForKey:pithosContainer.name];
+            NSArray *containerExcludedDirectories = [containersDictionary objectForKey:pithosContainer.name];
             BOOL containerExludeRootFiles = [containerExcludedDirectories containsObject:@""];
             NSMutableDictionary *containerStoredLocalObjectStates = [storedLocalObjectStates objectForKey:pithosContainer.name];
             NSDirectoryEnumerator *dirEnumerator = [fileManager enumeratorAtPath:containerDirectoryPath];
 
         // Add an empty stored state for legal new remote objects since last sync
         for (ASIPithosContainer *pithosContainer in pithosContainers) {
-            NSMutableArray *containerExcludedDirectories = [containersDictionary objectForKey:pithosContainer.name];
+            NSArray *containerExcludedDirectories = [containersDictionary objectForKey:pithosContainer.name];
             BOOL containerExludeRootFiles = [containerExcludedDirectories containsObject:@""];
             NSMutableDictionary *containerStoredLocalObjectStates = [storedLocalObjectStates objectForKey:pithosContainer.name];
             NSMutableDictionary *containerRemoteObjects = [remoteObjects objectForKey:pithosContainer.name];
         // These should be identified and skipped
         for (ASIPithosContainer *pithosContainer in pithosContainers) {
             NSString *containerDirectoryPath = [directoryPath stringByAppendingPathComponent:pithosContainer.name];
-            NSMutableArray *containerExcludedDirectories = [containersDictionary objectForKey:pithosContainer.name];
+            NSArray *containerExcludedDirectories = [containersDictionary objectForKey:pithosContainer.name];
             BOOL containerExludeRootFiles = [containerExcludedDirectories containsObject:@""];
             NSMutableDictionary *containerStoredLocalObjectStates = [storedLocalObjectStates objectForKey:pithosContainer.name];
             NSMutableDictionary *containerRemoteObjects = [remoteObjects objectForKey:pithosContainer.name];