Add UI for selective sync folders. Call next sync when an account has sync preference...
authorMiltiadis Vasilakis <mvasilak@gmail.com>
Fri, 9 Mar 2012 16:56:16 +0000 (18:56 +0200)
committerMiltiadis Vasilakis <mvasilak@gmail.com>
Fri, 9 Mar 2012 16:56:16 +0000 (18:56 +0200)
pithos-macos/PithosAccount.h
pithos-macos/PithosAccount.m
pithos-macos/PithosPreferencesController.h
pithos-macos/PithosPreferencesController.m
pithos-macos/PithosPreferencesController.xib
pithos-macos/PithosSyncDaemon.h
pithos-macos/PithosSyncDaemon.m
pithos-macos/pithos_macosAppDelegate.h

index c783f78..62ea5df 100644 (file)
 - (BOOL)urlIsValid:(NSString *)urlString;
 - (void)authenticateWithServerURL:(NSString *)aServerURL authUser:(NSString *)anAuthUser authToken:(NSString *)anAuthToken;
 - (void)loginWithServerURL:(NSString *)aServerURL;
-- (void)updateSyncWithSyncActive:(BOOL)aSyncActive syncDirectoryPath:(NSString *)aSyncDirectoryPath;
+- (void)updateSyncWithSyncActive:(BOOL)aSyncActive 
+               syncDirectoryPath:(NSString *)aSyncDirectoryPath 
+        syncContainersDictionary:(NSMutableDictionary *)aSyncContainersDictionary;
 
 @end
index a4f9ab8..28c06f7 100644 (file)
 }
 
 - (void)setSyncContainersDictionary:(NSMutableDictionary *)aSyncContainersDictionary {
-    if (![self.syncContainersDictionary isEqualTo:syncContainersDictionary]) {
+    if (aSyncContainersDictionary && ![self.syncContainersDictionary isEqualToDictionary:aSyncContainersDictionary]) {
         [syncContainersDictionary release];
         syncContainersDictionary = [aSyncContainersDictionary retain];
-        // XXX check for proper dictionary here
+        // XXX maybe check also here the validity of the dictionary? 
         
         @synchronized(self) {
             resetSyncDaemonLocalState = YES;
     [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:loginURL]];
 }
 
-- (void)updateSyncWithSyncActive:(BOOL)aSyncActive syncDirectoryPath:(NSString *)aSyncDirectoryPath {
+- (void)updateSyncWithSyncActive:(BOOL)aSyncActive 
+               syncDirectoryPath:(NSString *)aSyncDirectoryPath 
+        syncContainersDictionary:(NSMutableDictionary *)aSyncContainersDictionary {
+    self.syncContainersDictionary = aSyncContainersDictionary;
     self.syncDirectoryPath = aSyncDirectoryPath;
     self.syncActive = aSyncActive;
     if (syncDaemon) {
+        self.syncDaemon.containersDictionary = self.syncContainersDictionary;
         self.syncDaemon.directoryPath = self.syncDirectoryPath;
         if (self.syncActive)
             [self.syncDaemon startDaemon];
 
         self.syncActive = [decoder decodeBoolForKey:@"syncActive"];
         self.syncDirectoryPath = [decoder decodeObjectForKey:@"syncDirectoryPath"];
-        self.syncContainersDictionary = [decoder decodeObjectForKey:@"syncContainersDictionary"];
+        NSDictionary *immutableContainersDictionary = [decoder decodeObjectForKey:@"syncContainersDictionary"];
+        syncContainersDictionary = [[NSMutableDictionary alloc] initWithCapacity:[immutableContainersDictionary count]];
+        for (NSString *containerName in immutableContainersDictionary) {
+            [syncContainersDictionary setObject:[NSMutableArray arrayWithArray:[immutableContainersDictionary objectForKey:containerName]] 
+                                         forKey:containerName];
+        }
         self.syncLastCompleted = [decoder decodeObjectForKey:@"syncLastCompleted"];
         
         self.serverURL = [decoder decodeObjectForKey:@"serverURL"];
index 2a38814..6b20a7b 100644 (file)
@@ -38,7 +38,7 @@
 #import <Cocoa/Cocoa.h>
 @class PithosAccount;
 
-@interface PithosPreferencesController : NSWindowController <NSWindowDelegate> {
+@interface PithosPreferencesController : NSWindowController <NSWindowDelegate, NSOutlineViewDataSource> {
     PithosAccount *selectedPithosAccount;
     
     NSArrayController *accountsArrayController;
     
     BOOL syncActive;
     NSString *syncDirectoryPath;
+    NSMutableDictionary *syncContainersDictionary;
     BOOL syncApplyEnable;
     BOOL syncCancelEnable;
+    NSOutlineView *syncContainersOutlineView;
+    NSMutableDictionary *syncContainersRootFilesNodes;
     
     NSDictionaryController *groupsDictionaryController;
     NSDictionaryController *selectedGroupMembersDictionaryController;
 
 @property (nonatomic, assign) BOOL accountRemoveEnable;
 
-@property (nonatomic, retain) NSString *serverURL;
-@property (nonatomic, retain) NSString *authUser;
-@property (nonatomic, retain) NSString *authToken;
+@property (nonatomic, copy) NSString *serverURL;
+@property (nonatomic, copy) NSString *authUser;
+@property (nonatomic, copy) NSString *authToken;
 @property (nonatomic, assign) BOOL manual;
 @property (nonatomic, assign) BOOL loginEnable;
 @property (nonatomic, assign) BOOL loginCancelEnable;
 
 @property (nonatomic, assign) BOOL syncActive;
-@property (nonatomic, retain) NSString *syncDirectoryPath;
+@property (nonatomic, copy) NSString *syncDirectoryPath;
+@property (nonatomic, copy) NSMutableDictionary *syncContainersDictionary;
 @property (nonatomic, assign) BOOL syncApplyEnable;
 @property (nonatomic, assign) BOOL syncCancelEnable;
+@property (nonatomic, assign) IBOutlet NSOutlineView *syncContainersOutlineView;
+@property (nonatomic, retain) NSMutableDictionary *syncContainersRootFilesNodes;
 
 @property (nonatomic, assign) IBOutlet NSDictionaryController *groupsDictionaryController;
 @property (nonatomic, assign) IBOutlet NSDictionaryController *selectedGroupMembersDictionaryController;
@@ -90,6 +96,7 @@
 - (IBAction)loginCancel:(id)sender;
 - (IBAction)syncApply:(id)sender;
 - (IBAction)syncCancel:(id)sender;
+- (IBAction)syncRefresh:(id)sender;
 - (IBAction)groupsApply:(id)sender;
 - (IBAction)groupsRevert:(id)sender;
 
index 4cbf3ac..f80a0a4 100644 (file)
 #import "PithosPreferencesController.h"
 #import "PithosBrowserController.h"
 #import "PithosAccountNode.h"
+#import "PithosContainerNode.h"
+#import "PithosSubdirNode.h"
+#import "PithosObjectNode.h"
+#import "PithosEmptyNode.h"
 #import "PithosAccount.h"
 #import "pithos_macosAppDelegate.h"
 
+#import "ImageAndTextCell.h"
+@interface PithosPreferencesSyncOutlineViewCell : ImageAndTextCell {}
+@end
+
+@implementation PithosPreferencesSyncOutlineViewCell
+
+- (void)setObjectValue:(id)object {
+    if ([object isKindOfClass:[PithosNode class]]) {
+        PithosNode *node = (PithosNode *)object;
+        [self setStringValue:node.displayName];
+        [self setImage:node.icon];
+        [self setEditable:NO];
+    } else {
+        [super setObjectValue:object];
+    }
+}
+
+@end
+
 @implementation PithosPreferencesController
 @synthesize selectedPithosAccount;
 @synthesize accountsArrayController;
 @synthesize accountRemoveEnable;
 @synthesize serverURL, authUser, authToken, manual, loginEnable, loginCancelEnable;
+@synthesize syncActive, syncDirectoryPath, syncContainersDictionary, syncApplyEnable, syncCancelEnable, 
+            syncContainersOutlineView, syncContainersRootFilesNodes;
 @synthesize groupsDictionaryController, selectedGroupMembersDictionaryController;
-@synthesize syncActive, syncDirectoryPath, syncApplyEnable, syncCancelEnable;
 
 #pragma mark -
 #pragma mark Object Lifecycle
@@ -65,7 +89,9 @@
     
 //     // Select the first tab when the window is loaded for the first time.
 //     [[window valueForKeyPath:@"toolbar"] setSelectedItemIdentifier:@"0"];
-
+    
+    [[[syncContainersOutlineView tableColumns] objectAtIndex:1] setDataCell:[[[PithosPreferencesSyncOutlineViewCell alloc] init] autorelease]];
+    
     [groupsDictionaryController setInitialKey:@"group"];
     [groupsDictionaryController setInitialValue:@"user"];
     [selectedGroupMembersDictionaryController setInitialKey:@"user"];
     
     self.selectedPithosAccount = [[accountsArrayController selectedObjects] objectAtIndex:0];
     [accountsArrayController addObserver:self forKeyPath:@"selection" options:NSKeyValueObservingOptionNew context:NULL];
+    [[NSNotificationCenter defaultCenter] addObserver:self 
+                                             selector:@selector(selectedPithosAccountNodeChildrenUpdated:) 
+                                                 name:@"SelectedPithosAccountNodeChildrenUpdated" 
+                                               object:nil];
 }
 
 - (BOOL)windowShouldClose:(id)sender {
     }
 }
 
+- (void)selectedPithosAccountNodeChildrenUpdated:(NSNotification *)notification {
+    [syncContainersOutlineView reloadData];
+    [syncContainersOutlineView expandItem:nil expandChildren:YES];
+}
+
 #pragma mark -
 #pragma Update
 
                             ((selectedPithosAccount.syncActive != syncActive) || 
                              (![selectedPithosAccount.syncDirectoryPath isEqualToString:syncDirectoryPath] && 
                               (![[NSFileManager defaultManager] fileExistsAtPath:syncDirectoryPath isDirectory:&isDirectory] || 
-                               isDirectory))));
+                               isDirectory)) ||
+                             ![selectedPithosAccount.syncContainersDictionary isEqualToDictionary:syncContainersDictionary]));
     self.syncCancelEnable = (selectedPithosAccount.active && 
                              ((selectedPithosAccount.syncActive != syncActive) || 
-                              ![selectedPithosAccount.syncDirectoryPath isEqualToString:syncDirectoryPath]));
+                              ![selectedPithosAccount.syncDirectoryPath isEqualToString:syncDirectoryPath] ||
+                              ![selectedPithosAccount.syncContainersDictionary isEqualToDictionary:syncContainersDictionary]));
 }
 
 #pragma mark -
 
 - (void)setSelectedPithosAccount:(PithosAccount *)aSelectedPithosAccount {
     if (aSelectedPithosAccount && ![aSelectedPithosAccount isEqualTo:selectedPithosAccount]) {
+        selectedPithosAccount.accountNode.childrenUpdatedNotificationName = nil;
         [selectedPithosAccount release];
         selectedPithosAccount = [aSelectedPithosAccount retain];
+        selectedPithosAccount.accountNode.childrenUpdatedNotificationName = [NSString stringWithString:@"SelectedPithosAccountNodeChildrenUpdated"];
         
         [self updateAccounts];
         [self loginCancel:self];
     manual = aManual;
     [self updateLogin];
     if (!manual) {
-        self.authUser = [[selectedPithosAccount.authUser copy] autorelease];
-        self.authToken = [[selectedPithosAccount.authToken copy] autorelease];
+        self.authUser = selectedPithosAccount.authUser;
+        self.authToken = selectedPithosAccount.authToken;
     }
 }
 
     [self updateSync];
 }
 
+- (void)setSyncContainersDictionary:(NSMutableDictionary *)aSyncContainersDictionary {
+    [syncContainersDictionary release];
+    syncContainersDictionary = [[NSMutableDictionary alloc] initWithCapacity:[aSyncContainersDictionary count]];
+    for (NSString *containerName in aSyncContainersDictionary) {
+        [syncContainersDictionary setObject:[NSMutableArray arrayWithArray:[aSyncContainersDictionary objectForKey:containerName]] 
+                                                                    forKey:containerName];
+    }
+    [self updateSync];
+}
+
 #pragma mark -
 #pragma Actions
 
 }
 
 - (IBAction)loginCancel:(id)server {
-    self.serverURL = [[selectedPithosAccount.serverURL copy] autorelease];
-    self.authUser = [[selectedPithosAccount.authUser copy] autorelease];
-    self.authToken = [[selectedPithosAccount.authToken copy] autorelease];
+    self.serverURL = selectedPithosAccount.serverURL;
+    self.authUser = selectedPithosAccount.authUser;
+    self.authToken = selectedPithosAccount.authToken;
 }
 
 #pragma Sync Actions
 
 - (IBAction)syncApply:(id)sender {
-    [selectedPithosAccount updateSyncWithSyncActive:syncActive syncDirectoryPath:syncDirectoryPath];
+    [selectedPithosAccount updateSyncWithSyncActive:syncActive 
+                                  syncDirectoryPath:syncDirectoryPath 
+                           syncContainersDictionary:syncContainersDictionary];
     [self updateSync];
     pithos_macosAppDelegate *delegate = (pithos_macosAppDelegate *)[[NSApplication sharedApplication] delegate];
     [delegate savePithosAccounts:self];
+    [delegate sync];
 }
 
 - (IBAction)syncCancel:(id)sender {
     self.syncActive = selectedPithosAccount.syncActive;
-    self.syncDirectoryPath = [[selectedPithosAccount.syncDirectoryPath copy] autorelease];
+    self.syncDirectoryPath = selectedPithosAccount.syncDirectoryPath;
+    self.syncContainersDictionary = selectedPithosAccount.syncContainersDictionary;
+    self.syncContainersRootFilesNodes = [NSMutableDictionary dictionary];
+    [self selectedPithosAccountNodeChildrenUpdated:nil];
+}
+
+- (IBAction)syncRefresh:(id)sender {
+    selectedPithosAccount.accountNode.forcedRefresh = YES;
+    [selectedPithosAccount.accountNode invalidateChildrenRecursive];
+    if (selectedPithosAccount.accountNode.children) {
+    }
 }
 
 #pragma mark Groups Actions
         [selectedPithosAccount.accountNode refreshInfo];
 }
 
+#pragma mark -
+#pragma mark NSOutlineViewDataSource
+
+- (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item {
+    if (outlineView == syncContainersOutlineView) {
+        if (item == nil)
+            return selectedPithosAccount.accountNode.children.count;
+        if ([item class] == [PithosContainerNode class]) {
+            // We add 1 for the root files node
+            NSInteger subdirCount = 1;
+            for (PithosNode *node in [(PithosContainerNode *)item children]) {
+                if ([node class] == [PithosSubdirNode class])
+                    subdirCount++;
+            }
+            return subdirCount;
+        }
+    }
+    return 0;
+}
+
+- (id)outlineView:(NSOutlineView *)outlineView child:(NSInteger)index ofItem:(id)item {
+    if (outlineView == syncContainersOutlineView) {
+        if (item == nil)
+            return [selectedPithosAccount.accountNode.children objectAtIndex:index];
+        if ([item class] == [PithosContainerNode class]) {
+            PithosContainerNode *containerNode = (PithosContainerNode *)item;
+            NSInteger currentSubdirIndex = -1;
+            for (PithosNode *node in containerNode.children) {
+                if ([node class] == [PithosSubdirNode class]) {
+                    currentSubdirIndex++;
+                    if (currentSubdirIndex == index)
+                        return node;
+                }
+            }
+            if (++currentSubdirIndex == index) {
+                PithosEmptyNode *rootFilesNode = [syncContainersRootFilesNodes objectForKey:containerNode.displayName];
+                if (!rootFilesNode) {
+                    rootFilesNode = [[[PithosEmptyNode alloc] initWithDisplayName:@"<root files>" 
+                                                                             icon:[[NSWorkspace sharedWorkspace] iconForFileType:@""]] 
+                                     autorelease];
+                    rootFilesNode.parent = containerNode;
+                    [syncContainersRootFilesNodes setObject:rootFilesNode forKey:containerNode.displayName];
+                }
+                return rootFilesNode;
+            }
+        }
+    }
+    return nil;
+}
+
+- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item {
+    if (outlineView == syncContainersOutlineView) {
+        if ([item class] == [PithosContainerNode class])
+            return YES;
+    }
+    return NO;
+}
+
+- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item {
+    if (outlineView == syncContainersOutlineView) {
+        if ([[tableColumn identifier] isEqualToString:@"sync"]) {
+            if ([item class] == [PithosContainerNode class]) {
+                // A container is 
+                // off if not in dictionary
+                // mixed if in dictionary with exclusions
+                // on if in dictionary without exclusions
+                PithosContainerNode *node = (PithosContainerNode *)item;
+                NSMutableArray *containerExcludedDirectories = [syncContainersDictionary objectForKey:node.displayName];
+                if (containerExcludedDirectories) {
+                    if ([containerExcludedDirectories count])
+                        return [NSNumber numberWithUnsignedInteger:NSMixedState];
+                    else
+                        return [NSNumber numberWithUnsignedInteger:NSOnState];
+                }
+                return [NSNumber numberWithUnsignedInteger:NSOffState];
+            } else if ([item class] == [PithosSubdirNode class]) {
+                // Root files are off if parent container not in dictionary or if excluded
+                // displayName should be localized and lowercased
+                PithosSubdirNode *node = (PithosSubdirNode *)item;
+                NSMutableArray *containerExcludedDirectories = [syncContainersDictionary objectForKey:node.parent.displayName];
+                NSString *directoryName = [[node.displayName lowercaseString] stringByReplacingOccurrencesOfString:@"/" withString:@":"];
+                if (!containerExcludedDirectories || [containerExcludedDirectories containsObject:directoryName])
+                    return [NSNumber numberWithUnsignedInteger:NSOffState];
+                else
+                    return [NSNumber numberWithUnsignedInteger:NSOnState];
+            } else if ([item class] == [PithosEmptyNode class]) {
+                // Root files are off if parent container not in dictionary or if excluded
+                PithosEmptyNode *node = (PithosEmptyNode *)item;
+                NSMutableArray *containerExcludedDirectories = [syncContainersDictionary objectForKey:node.parent.displayName];
+                if (!containerExcludedDirectories || [containerExcludedDirectories containsObject:@""])
+                    return [NSNumber numberWithUnsignedInteger:NSOffState];
+                else
+                    return [NSNumber numberWithUnsignedInteger:NSOnState];
+            }
+            return [NSNumber numberWithUnsignedInteger:NSOffState];
+        } else if ([[tableColumn identifier] isEqualToString:@"path"]) {
+            return (PithosNode *)item;
+        }
+    }
+    return nil;
+}
+
+- (void)outlineView:(NSOutlineView *)outlineView setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn byItem:(id)item {
+    if (outlineView == syncContainersOutlineView) {
+        if ([[tableColumn identifier] isEqualToString:@"sync"]) {
+            NSCellStateValue newState = [object unsignedIntegerValue];
+            if ([item class] == [PithosContainerNode class]) {
+                // If new state is
+                // mixed/on include container with no excluded directories
+                // off exclude container
+                PithosContainerNode *node = (PithosContainerNode *)item;
+                if ((newState == NSOnState) || (newState == NSMixedState)) {
+                    [syncContainersDictionary setObject:[NSMutableArray array] forKey:node.displayName];
+                } else {
+                    [syncContainersDictionary removeObjectForKey:node.displayName];
+                }
+                [outlineView reloadItem:item reloadChildren:YES];
+            } else if ([item class] == [PithosSubdirNode class]) {
+                // If new state is
+                // mixed/on include directory (if container not included, include and exclude all others)
+                // off exclude directory
+                PithosSubdirNode *node = (PithosSubdirNode *)item;
+                NSMutableArray *containerExcludedDirectories = [syncContainersDictionary objectForKey:node.parent.displayName];
+                NSString *directoryName = [[node.displayName lowercaseString] stringByReplacingOccurrencesOfString:@"/" withString:@":"];
+                if ((newState == NSOnState) || (newState == NSMixedState)) {
+                    if (containerExcludedDirectories) {
+                        [containerExcludedDirectories removeObject:directoryName];
+                    } else {
+                        NSMutableArray *newContainerExcludeDirectories = [NSMutableArray arrayWithObject:@""];
+                        for (PithosNode *siblingNode in node.parent.children) {
+                            if ([siblingNode class] == [PithosSubdirNode class]) {
+                                NSString *siblingDirectoryName = [[siblingNode.displayName lowercaseString] stringByReplacingOccurrencesOfString:@"/" withString:@":"];
+                                if (![siblingDirectoryName isEqualToString:directoryName] && 
+                                    ![newContainerExcludeDirectories containsObject:siblingDirectoryName])
+                                    [newContainerExcludeDirectories addObject:siblingDirectoryName];
+                            }
+                        }
+                        [syncContainersDictionary setObject:newContainerExcludeDirectories forKey:node.parent.displayName];
+                    }
+                } else if (![containerExcludedDirectories containsObject:directoryName]) {
+                    [containerExcludedDirectories addObject:directoryName];
+                }
+                [outlineView reloadItem:[outlineView parentForItem:item]];
+            } else if ([item class] == [PithosEmptyNode class]) {
+                // If new state is
+                // mixed/on include root files (if container not included, include and exclude all others)
+                // off exclude root files
+                PithosEmptyNode *node = (PithosEmptyNode *)item;
+                NSMutableArray *containerExcludedDirectories = [syncContainersDictionary objectForKey:node.parent.displayName];
+                if ((newState == NSOnState) || (newState == NSMixedState)) {
+                    if (containerExcludedDirectories) {
+                        [containerExcludedDirectories removeObject:@""];
+                    } else {
+                        NSMutableArray *newContainerExcludeDirectories = [NSMutableArray array];
+                        for (PithosNode *siblingNode in node.parent.children) {
+                            if ([siblingNode class] == [PithosSubdirNode class]) {
+                                NSString *siblingDirectoryName = [[siblingNode.displayName lowercaseString] stringByReplacingOccurrencesOfString:@"/" withString:@":"];
+                                if (![newContainerExcludeDirectories containsObject:siblingDirectoryName])
+                                    [newContainerExcludeDirectories addObject:siblingDirectoryName];
+                            }
+                        }
+                        [syncContainersDictionary setObject:newContainerExcludeDirectories forKey:node.parent.displayName];
+                    }
+                } else if (![containerExcludedDirectories containsObject:@""]) {
+                    [containerExcludedDirectories addObject:@""];
+                }
+                [outlineView reloadItem:[outlineView parentForItem:item]];
+            }
+            [self updateSync];
+        }
+    }
+}
+
 @end
index 48f9634..59c744b 100644 (file)
@@ -3,34 +3,35 @@
        <data>
                <int key="IBDocument.SystemTarget">1070</int>
                <string key="IBDocument.SystemVersion">11D50b</string>
-               <string key="IBDocument.InterfaceBuilderVersion">2177</string>
+               <string key="IBDocument.InterfaceBuilderVersion">2182</string>
                <string key="IBDocument.AppKitVersion">1138.32</string>
                <string key="IBDocument.HIToolboxVersion">568.00</string>
                <object class="NSMutableDictionary" key="IBDocument.PluginVersions">
                        <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
-                       <string key="NS.object.0">2177</string>
+                       <string key="NS.object.0">2182</string>
                </object>
                <object class="NSArray" key="IBDocument.IntegratedClassDependencies">
                        <bool key="EncodedWithXMLCoder">YES</bool>
-                       <string>NSDictionaryController</string>
-                       <string>NSScroller</string>
-                       <string>NSTableHeaderView</string>
+                       <string>NSTabView</string>
                        <string>NSButton</string>
+                       <string>NSCustomObject</string>
                        <string>NSArrayController</string>
-                       <string>NSScrollView</string>
+                       <string>NSTableView</string>
+                       <string>NSTextField</string>
+                       <string>NSWindowTemplate</string>
                        <string>NSTextFieldCell</string>
                        <string>NSButtonCell</string>
+                       <string>NSTableColumn</string>
                        <string>NSBox</string>
-                       <string>NSPathCell</string>
-                       <string>NSTableView</string>
-                       <string>NSTabView</string>
-                       <string>NSPathControl</string>
-                       <string>NSCustomObject</string>
-                       <string>NSTabViewItem</string>
                        <string>NSView</string>
-                       <string>NSWindowTemplate</string>
-                       <string>NSTableColumn</string>
-                       <string>NSTextField</string>
+                       <string>NSOutlineView</string>
+                       <string>NSDictionaryController</string>
+                       <string>NSScrollView</string>
+                       <string>NSTabViewItem</string>
+                       <string>NSPathControl</string>
+                       <string>NSScroller</string>
+                       <string>NSTableHeaderView</string>
+                       <string>NSPathCell</string>
                </object>
                <object class="NSArray" key="IBDocument.PluginDependencies">
                        <bool key="EncodedWithXMLCoder">YES</bool>
@@ -54,7 +55,7 @@
                        <object class="NSWindowTemplate" id="183740387">
                                <int key="NSWindowStyleMask">11</int>
                                <int key="NSWindowBacking">2</int>
-                               <string key="NSWindowRect">{{403, 468}, {425, 262}}</string>
+                               <string key="NSWindowRect">{{403, 468}, {425, 300}}</string>
                                <int key="NSWTFlags">1954022400</int>
                                <string key="NSWindowTitle">Pithos+ Preferences</string>
                                <string key="NSWindowClass">NSWindow</string>
@@ -79,9 +80,8 @@
                                                                                <object class="NSTableView" id="260212452">
                                                                                        <reference key="NSNextResponder" ref="475745140"/>
                                                                                        <int key="NSvFlags">256</int>
-                                                                                       <string key="NSFrameSize">{118, 177}</string>
+                                                                                       <string key="NSFrameSize">{118, 215}</string>
                                                                                        <reference key="NSSuperview" ref="475745140"/>
-                                                                                       <reference key="NSWindow"/>
                                                                                        <reference key="NSNextKeyView" ref="366650902"/>
                                                                                        <string key="NSReuseIdentifierKey">_NS:1828</string>
                                                                                        <bool key="NSEnabled">YES</bool>
@@ -90,7 +90,6 @@
                                                                                                <int key="NSvFlags">256</int>
                                                                                                <string key="NSFrameSize">{118, 17}</string>
                                                                                                <reference key="NSSuperview" ref="316124907"/>
-                                                                                               <reference key="NSWindow"/>
                                                                                                <reference key="NSNextKeyView" ref="475745140"/>
                                                                                                <string key="NSReuseIdentifierKey">_NS:1830</string>
                                                                                                <reference key="NSTableView" ref="260212452"/>
                                                                                        <int key="NSTableViewGroupRowStyle">1</int>
                                                                                </object>
                                                                        </object>
-                                                                       <string key="NSFrame">{{1, 17}, {118, 177}}</string>
+                                                                       <string key="NSFrame">{{1, 17}, {118, 215}}</string>
                                                                        <reference key="NSSuperview" ref="419137310"/>
-                                                                       <reference key="NSWindow"/>
                                                                        <reference key="NSNextKeyView" ref="260212452"/>
                                                                        <string key="NSReuseIdentifierKey">_NS:1826</string>
                                                                        <reference key="NSDocView" ref="260212452"/>
                                                                        <int key="NSvFlags">-2147483392</int>
                                                                        <string key="NSFrame">{{224, 17}, {15, 102}}</string>
                                                                        <reference key="NSSuperview" ref="419137310"/>
-                                                                       <reference key="NSWindow"/>
                                                                        <reference key="NSNextKeyView" ref="287845150"/>
                                                                        <string key="NSReuseIdentifierKey">_NS:1845</string>
                                                                        <reference key="NSTarget" ref="419137310"/>
                                                                        <int key="NSvFlags">-2147483392</int>
                                                                        <string key="NSFrame">{{1, 48.325627356767654}, {82.028970718383789, 15}}</string>
                                                                        <reference key="NSSuperview" ref="419137310"/>
-                                                                       <reference key="NSWindow"/>
                                                                        <reference key="NSNextKeyView" ref="310368570"/>
                                                                        <string key="NSReuseIdentifierKey">_NS:1847</string>
                                                                        <int key="NSsFlags">1</int>
                                                                        </object>
                                                                        <string key="NSFrame">{{1, 0}, {118, 17}}</string>
                                                                        <reference key="NSSuperview" ref="419137310"/>
-                                                                       <reference key="NSWindow"/>
                                                                        <reference key="NSNextKeyView" ref="152792208"/>
                                                                        <string key="NSReuseIdentifierKey">_NS:1831</string>
                                                                        <reference key="NSDocView" ref="152792208"/>
                                                                        <int key="NScvFlags">4</int>
                                                                </object>
                                                        </object>
-                                                       <string key="NSFrame">{{20, 47}, {120, 195}}</string>
+                                                       <string key="NSFrame">{{20, 47}, {120, 233}}</string>
                                                        <reference key="NSSuperview" ref="369507901"/>
-                                                       <reference key="NSWindow"/>
                                                        <reference key="NSNextKeyView" ref="316124907"/>
                                                        <string key="NSReuseIdentifierKey">_NS:1824</string>
                                                        <int key="NSsFlags">133682</int>
                                                <object class="NSTabView" id="247568729">
                                                        <reference key="NSNextResponder" ref="369507901"/>
                                                        <int key="NSvFlags">18</int>
-                                                       <string key="NSFrame">{{147, 37}, {265, 211}}</string>
+                                                       <string key="NSFrame">{{147, 37}, {265, 249}}</string>
                                                        <reference key="NSSuperview" ref="369507901"/>
-                                                       <reference key="NSWindow"/>
                                                        <reference key="NSNextKeyView" ref="646624756"/>
                                                        <string key="NSReuseIdentifierKey">_NS:608</string>
                                                        <object class="NSMutableArray" key="NSTabViewItems">
                                                                                        <object class="NSTextField" id="1055886655">
                                                                                                <reference key="NSNextResponder" ref="646624756"/>
                                                                                                <int key="NSvFlags">268</int>
-                                                                                               <string key="NSFrame">{{14, 145}, {41, 14}}</string>
+                                                                                               <string key="NSFrame">{{14, 183}, {41, 14}}</string>
                                                                                                <reference key="NSSuperview" ref="646624756"/>
-                                                                                               <reference key="NSWindow"/>
                                                                                                <reference key="NSNextKeyView" ref="96425952"/>
                                                                                                <bool key="NSEnabled">YES</bool>
                                                                                                <object class="NSTextFieldCell" key="NSCell" id="9695847">
                                                                                        <object class="NSTextField" id="96425952">
                                                                                                <reference key="NSNextResponder" ref="646624756"/>
                                                                                                <int key="NSvFlags">266</int>
-                                                                                               <string key="NSFrame">{{60, 143}, {168, 19}}</string>
+                                                                                               <string key="NSFrame">{{60, 181}, {168, 19}}</string>
                                                                                                <reference key="NSSuperview" ref="646624756"/>
-                                                                                               <reference key="NSWindow"/>
                                                                                                <reference key="NSNextKeyView" ref="571994001"/>
                                                                                                <bool key="NSEnabled">YES</bool>
                                                                                                <object class="NSTextFieldCell" key="NSCell" id="34677607">
                                                                                        <object class="NSTextField" id="287579732">
                                                                                                <reference key="NSNextResponder" ref="646624756"/>
                                                                                                <int key="NSvFlags">266</int>
-                                                                                               <string key="NSFrame">{{60, 85}, {168, 19}}</string>
+                                                                                               <string key="NSFrame">{{60, 123}, {168, 19}}</string>
                                                                                                <reference key="NSSuperview" ref="646624756"/>
-                                                                                               <reference key="NSWindow"/>
                                                                                                <reference key="NSNextKeyView" ref="1017221490"/>
                                                                                                <bool key="NSEnabled">YES</bool>
                                                                                                <object class="NSTextFieldCell" key="NSCell" id="1001750419">
                                                                                        <object class="NSTextField" id="773004803">
                                                                                                <reference key="NSNextResponder" ref="646624756"/>
                                                                                                <int key="NSvFlags">266</int>
-                                                                                               <string key="NSFrame">{{60, 58}, {168, 19}}</string>
+                                                                                               <string key="NSFrame">{{60, 96}, {168, 19}}</string>
                                                                                                <reference key="NSSuperview" ref="646624756"/>
-                                                                                               <reference key="NSWindow"/>
                                                                                                <reference key="NSNextKeyView" ref="666198740"/>
                                                                                                <bool key="NSEnabled">YES</bool>
                                                                                                <object class="NSTextFieldCell" key="NSCell" id="350801514">
                                                                                        <object class="NSTextField" id="507142965">
                                                                                                <reference key="NSNextResponder" ref="646624756"/>
                                                                                                <int key="NSvFlags">268</int>
-                                                                                               <string key="NSFrame">{{14, 87}, {41, 14}}</string>
+                                                                                               <string key="NSFrame">{{14, 125}, {41, 14}}</string>
                                                                                                <reference key="NSSuperview" ref="646624756"/>
-                                                                                               <reference key="NSWindow"/>
                                                                                                <reference key="NSNextKeyView" ref="287579732"/>
                                                                                                <bool key="NSEnabled">YES</bool>
                                                                                                <object class="NSTextFieldCell" key="NSCell" id="993321662">
                                                                                        <object class="NSTextField" id="1017221490">
                                                                                                <reference key="NSNextResponder" ref="646624756"/>
                                                                                                <int key="NSvFlags">268</int>
-                                                                                               <string key="NSFrame">{{14, 60}, {41, 14}}</string>
+                                                                                               <string key="NSFrame">{{14, 98}, {41, 14}}</string>
                                                                                                <reference key="NSSuperview" ref="646624756"/>
-                                                                                               <reference key="NSWindow"/>
                                                                                                <reference key="NSNextKeyView" ref="773004803"/>
                                                                                                <bool key="NSEnabled">YES</bool>
                                                                                                <object class="NSTextFieldCell" key="NSCell" id="1037784646">
                                                                                        <object class="NSTextField" id="992895966">
                                                                                                <reference key="NSNextResponder" ref="646624756"/>
                                                                                                <int key="NSvFlags">268</int>
-                                                                                               <string key="NSFrame">{{14, 112}, {86, 14}}</string>
+                                                                                               <string key="NSFrame">{{14, 150}, {86, 14}}</string>
                                                                                                <reference key="NSSuperview" ref="646624756"/>
-                                                                                               <reference key="NSWindow"/>
                                                                                                <reference key="NSNextKeyView" ref="507142965"/>
                                                                                                <bool key="NSEnabled">YES</bool>
                                                                                                <object class="NSTextFieldCell" key="NSCell" id="784421446">
                                                                                        <object class="NSBox" id="571994001">
                                                                                                <reference key="NSNextResponder" ref="646624756"/>
                                                                                                <int key="NSvFlags">-2147483634</int>
-                                                                                               <string key="NSFrame">{{-3, 132}, {251, 5}}</string>
+                                                                                               <string key="NSFrame">{{-3, 170}, {251, 5}}</string>
                                                                                                <reference key="NSSuperview" ref="646624756"/>
-                                                                                               <reference key="NSWindow"/>
                                                                                                <reference key="NSNextKeyView" ref="992895966"/>
                                                                                                <string key="NSOffsets">{0, 0}</string>
                                                                                                <object class="NSTextFieldCell" key="NSTitleCell">
                                                                                        <object class="NSButton" id="666198740">
                                                                                                <reference key="NSNextResponder" ref="646624756"/>
                                                                                                <int key="NSvFlags">268</int>
-                                                                                               <string key="NSFrame">{{57, 34}, {63, 18}}</string>
+                                                                                               <string key="NSFrame">{{57, 72}, {63, 18}}</string>
                                                                                                <reference key="NSSuperview" ref="646624756"/>
-                                                                                               <reference key="NSWindow"/>
                                                                                                <reference key="NSNextKeyView" ref="764785507"/>
                                                                                                <bool key="NSEnabled">YES</bool>
                                                                                                <object class="NSButtonCell" key="NSCell" id="269907300">
                                                                                                <int key="NSvFlags">289</int>
                                                                                                <string key="NSFrame">{{161, 4}, {72, 28}}</string>
                                                                                                <reference key="NSSuperview" ref="646624756"/>
-                                                                                               <reference key="NSWindow"/>
                                                                                                <reference key="NSNextKeyView"/>
                                                                                                <bool key="NSEnabled">YES</bool>
                                                                                                <object class="NSButtonCell" key="NSCell" id="950873176">
                                                                                                <int key="NSvFlags">289</int>
                                                                                                <string key="NSFrame">{{91, 4}, {72, 28}}</string>
                                                                                                <reference key="NSSuperview" ref="646624756"/>
-                                                                                               <reference key="NSWindow"/>
                                                                                                <reference key="NSNextKeyView" ref="750494034"/>
                                                                                                <bool key="NSEnabled">YES</bool>
                                                                                                <object class="NSButtonCell" key="NSCell" id="327493266">
                                                                                                </object>
                                                                                        </object>
                                                                                </object>
-                                                                               <string key="NSFrame">{{10, 33}, {245, 165}}</string>
+                                                                               <string key="NSFrame">{{10, 33}, {245, 203}}</string>
                                                                                <reference key="NSSuperview" ref="247568729"/>
-                                                                               <reference key="NSWindow"/>
                                                                                <reference key="NSNextKeyView" ref="1055886655"/>
                                                                                <string key="NSReuseIdentifierKey">_NS:610</string>
                                                                        </object>
                                                                                                                <string>NSFilenamesPboardType</string>
                                                                                                        </object>
                                                                                                </object>
-                                                                                               <string key="NSFrame">{{62, 141}, {169, 22}}</string>
+                                                                                               <string key="NSFrame">{{62, 179}, {169, 22}}</string>
                                                                                                <reference key="NSSuperview" ref="689284120"/>
                                                                                                <reference key="NSNextKeyView" ref="893175748"/>
                                                                                                <bool key="NSEnabled">YES</bool>
                                                                                        <object class="NSTextField" id="245911804">
                                                                                                <reference key="NSNextResponder" ref="689284120"/>
                                                                                                <int key="NSvFlags">268</int>
-                                                                                               <string key="NSFrame">{{14, 145}, {46, 14}}</string>
+                                                                                               <string key="NSFrame">{{14, 183}, {46, 14}}</string>
                                                                                                <reference key="NSSuperview" ref="689284120"/>
                                                                                                <reference key="NSNextKeyView" ref="312807152"/>
                                                                                                <bool key="NSEnabled">YES</bool>
                                                                                                <int key="NSvFlags">289</int>
                                                                                                <string key="NSFrame">{{161, 4}, {72, 28}}</string>
                                                                                                <reference key="NSSuperview" ref="689284120"/>
+                                                                                               <reference key="NSNextKeyView"/>
                                                                                                <bool key="NSEnabled">YES</bool>
                                                                                                <object class="NSButtonCell" key="NSCell" id="592322209">
                                                                                                        <int key="NSCellFlags">-2080244224</int>
                                                                                                        <int key="NSPeriodicInterval">75</int>
                                                                                                </object>
                                                                                        </object>
+                                                                                       <object class="NSButton" id="851499930">
+                                                                                               <reference key="NSNextResponder" ref="689284120"/>
+                                                                                               <int key="NSvFlags">292</int>
+                                                                                               <string key="NSFrame">{{12, 4}, {72, 28}}</string>
+                                                                                               <reference key="NSSuperview" ref="689284120"/>
+                                                                                               <reference key="NSNextKeyView" ref="915820146"/>
+                                                                                               <bool key="NSEnabled">YES</bool>
+                                                                                               <object class="NSButtonCell" key="NSCell" id="624846101">
+                                                                                                       <int key="NSCellFlags">-2080244224</int>
+                                                                                                       <int key="NSCellFlags2">134348800</int>
+                                                                                                       <string key="NSContents">Refresh</string>
+                                                                                                       <reference key="NSSupport" ref="26"/>
+                                                                                                       <reference key="NSControlView" ref="851499930"/>
+                                                                                                       <int key="NSButtonFlags">-2034876161</int>
+                                                                                                       <int key="NSButtonFlags2">129</int>
+                                                                                                       <reference key="NSAlternateImage" ref="553785584"/>
+                                                                                                       <string key="NSAlternateContents"/>
+                                                                                                       <string type="base64-UTF8" key="NSKeyEquivalent">Gw</string>
+                                                                                                       <int key="NSPeriodicDelay">400</int>
+                                                                                                       <int key="NSPeriodicInterval">75</int>
+                                                                                               </object>
+                                                                                       </object>
                                                                                        <object class="NSButton" id="893175748">
                                                                                                <reference key="NSNextResponder" ref="689284120"/>
                                                                                                <int key="NSvFlags">268</int>
-                                                                                               <string key="NSFrame">{{26, 121}, {63, 18}}</string>
+                                                                                               <string key="NSFrame">{{26, 159}, {63, 18}}</string>
                                                                                                <reference key="NSSuperview" ref="689284120"/>
-                                                                                               <reference key="NSNextKeyView" ref="915820146"/>
+                                                                                               <reference key="NSNextKeyView" ref="15195179"/>
                                                                                                <bool key="NSEnabled">YES</bool>
                                                                                                <object class="NSButtonCell" key="NSCell" id="768549799">
                                                                                                        <int key="NSCellFlags">67239424</int>
                                                                                                        <int key="NSPeriodicInterval">25</int>
                                                                                                </object>
                                                                                        </object>
+                                                                                       <object class="NSScrollView" id="15195179">
+                                                                                               <reference key="NSNextResponder" ref="689284120"/>
+                                                                                               <int key="NSvFlags">4370</int>
+                                                                                               <object class="NSMutableArray" key="NSSubviews">
+                                                                                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                                                                                                       <object class="NSClipView" id="490888020">
+                                                                                                               <reference key="NSNextResponder" ref="15195179"/>
+                                                                                                               <int key="NSvFlags">2304</int>
+                                                                                                               <object class="NSMutableArray" key="NSSubviews">
+                                                                                                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                                                                                                                       <object class="NSOutlineView" id="352868425">
+                                                                                                                               <reference key="NSNextResponder" ref="490888020"/>
+                                                                                                                               <int key="NSvFlags">256</int>
+                                                                                                                               <string key="NSFrameSize">{209, 95}</string>
+                                                                                                                               <reference key="NSSuperview" ref="490888020"/>
+                                                                                                                               <reference key="NSNextKeyView" ref="140942393"/>
+                                                                                                                               <string key="NSReuseIdentifierKey">_NS:13</string>
+                                                                                                                               <bool key="NSEnabled">YES</bool>
+                                                                                                                               <object class="NSTableHeaderView" key="NSHeaderView" id="1047592526">
+                                                                                                                                       <reference key="NSNextResponder" ref="677192773"/>
+                                                                                                                                       <int key="NSvFlags">256</int>
+                                                                                                                                       <string key="NSFrameSize">{209, 17}</string>
+                                                                                                                                       <reference key="NSSuperview" ref="677192773"/>
+                                                                                                                                       <reference key="NSNextKeyView" ref="490888020"/>
+                                                                                                                                       <string key="NSReuseIdentifierKey">_NS:16</string>
+                                                                                                                                       <reference key="NSTableView" ref="352868425"/>
+                                                                                                                               </object>
+                                                                                                                               <object class="_NSCornerView" key="NSCornerView">
+                                                                                                                                       <nil key="NSNextResponder"/>
+                                                                                                                                       <int key="NSvFlags">-2147483392</int>
+                                                                                                                                       <string key="NSFrame">{{224, 0}, {16, 17}}</string>
+                                                                                                                                       <reference key="NSNextKeyView" ref="490888020"/>
+                                                                                                                                       <string key="NSReuseIdentifierKey">_NS:18</string>
+                                                                                                                               </object>
+                                                                                                                               <object class="NSMutableArray" key="NSTableColumns">
+                                                                                                                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                                                                                                                                       <object class="NSTableColumn" id="149907432">
+                                                                                                                                               <string key="NSIdentifier">sync</string>
+                                                                                                                                               <double key="NSWidth">32</double>
+                                                                                                                                               <double key="NSMinWidth">32</double>
+                                                                                                                                               <double key="NSMaxWidth">32</double>
+                                                                                                                                               <object class="NSTableHeaderCell" key="NSHeaderCell">
+                                                                                                                                                       <int key="NSCellFlags">75628096</int>
+                                                                                                                                                       <int key="NSCellFlags2">2048</int>
+                                                                                                                                                       <string key="NSContents">Sync</string>
+                                                                                                                                                       <reference key="NSSupport" ref="26"/>
+                                                                                                                                                       <object class="NSColor" key="NSBackgroundColor" id="1006217784">
+                                                                                                                                                               <int key="NSColorSpace">3</int>
+                                                                                                                                                               <bytes key="NSWhite">MC4zMzMzMzI5ODU2AA</bytes>
+                                                                                                                                                       </object>
+                                                                                                                                                       <reference key="NSTextColor" ref="60462442"/>
+                                                                                                                                               </object>
+                                                                                                                                               <object class="NSButtonCell" key="NSDataCell" id="591829656">
+                                                                                                                                                       <int key="NSCellFlags">67239424</int>
+                                                                                                                                                       <int key="NSCellFlags2">151126016</int>
+                                                                                                                                                       <string key="NSContents"/>
+                                                                                                                                                       <reference key="NSSupport" ref="26"/>
+                                                                                                                                                       <string key="NSCellIdentifier">_NS:9</string>
+                                                                                                                                                       <reference key="NSControlView" ref="352868425"/>
+                                                                                                                                                       <int key="NSButtonFlags">1212436991</int>
+                                                                                                                                                       <int key="NSButtonFlags2">2</int>
+                                                                                                                                                       <reference key="NSNormalImage" ref="342586661"/>
+                                                                                                                                                       <reference key="NSAlternateImage" ref="996787193"/>
+                                                                                                                                                       <string key="NSAlternateContents"/>
+                                                                                                                                                       <string key="NSKeyEquivalent"/>
+                                                                                                                                                       <int key="NSPeriodicDelay">200</int>
+                                                                                                                                                       <int key="NSPeriodicInterval">25</int>
+                                                                                                                                               </object>
+                                                                                                                                               <int key="NSResizingMask">3</int>
+                                                                                                                                               <bool key="NSIsResizeable">YES</bool>
+                                                                                                                                               <bool key="NSIsEditable">YES</bool>
+                                                                                                                                               <reference key="NSTableView" ref="352868425"/>
+                                                                                                                                       </object>
+                                                                                                                                       <object class="NSTableColumn" id="1063953843">
+                                                                                                                                               <string key="NSIdentifier">path</string>
+                                                                                                                                               <double key="NSWidth">171</double>
+                                                                                                                                               <double key="NSMinWidth">42</double>
+                                                                                                                                               <double key="NSMaxWidth">1000</double>
+                                                                                                                                               <object class="NSTableHeaderCell" key="NSHeaderCell">
+                                                                                                                                                       <int key="NSCellFlags">75628096</int>
+                                                                                                                                                       <int key="NSCellFlags2">2048</int>
+                                                                                                                                                       <string key="NSContents">Path</string>
+                                                                                                                                                       <reference key="NSSupport" ref="26"/>
+                                                                                                                                                       <reference key="NSBackgroundColor" ref="1006217784"/>
+                                                                                                                                                       <reference key="NSTextColor" ref="60462442"/>
+                                                                                                                                               </object>
+                                                                                                                                               <object class="NSTextFieldCell" key="NSDataCell" id="501188417">
+                                                                                                                                                       <int key="NSCellFlags">337772096</int>
+                                                                                                                                                       <int key="NSCellFlags2">133120</int>
+                                                                                                                                                       <string key="NSContents">Text Cell</string>
+                                                                                                                                                       <reference key="NSSupport" ref="26"/>
+                                                                                                                                                       <reference key="NSControlView" ref="352868425"/>
+                                                                                                                                                       <reference key="NSBackgroundColor" ref="512560731"/>
+                                                                                                                                                       <reference key="NSTextColor" ref="44104873"/>
+                                                                                                                                               </object>
+                                                                                                                                               <int key="NSResizingMask">3</int>
+                                                                                                                                               <bool key="NSIsResizeable">YES</bool>
+                                                                                                                                               <reference key="NSTableView" ref="352868425"/>
+                                                                                                                                       </object>
+                                                                                                                               </object>
+                                                                                                                               <double key="NSIntercellSpacingWidth">3</double>
+                                                                                                                               <double key="NSIntercellSpacingHeight">2</double>
+                                                                                                                               <reference key="NSBackgroundColor" ref="712919987"/>
+                                                                                                                               <reference key="NSGridColor" ref="1055172989"/>
+                                                                                                                               <double key="NSRowHeight">17</double>
+                                                                                                                               <int key="NSTvFlags">314572800</int>
+                                                                                                                               <reference key="NSDelegate"/>
+                                                                                                                               <reference key="NSDataSource"/>
+                                                                                                                               <int key="NSColumnAutoresizingStyle">4</int>
+                                                                                                                               <int key="NSDraggingSourceMaskForLocal">15</int>
+                                                                                                                               <int key="NSDraggingSourceMaskForNonLocal">0</int>
+                                                                                                                               <bool key="NSAllowsTypeSelect">YES</bool>
+                                                                                                                               <int key="NSTableViewDraggingDestinationStyle">0</int>
+                                                                                                                               <int key="NSTableViewGroupRowStyle">1</int>
+                                                                                                                               <bool key="NSOutlineViewAutoresizesOutlineColumnKey">NO</bool>
+                                                                                                                               <reference key="NSOutlineViewOutlineTableColumnKey" ref="1063953843"/>
+                                                                                                                       </object>
+                                                                                                               </object>
+                                                                                                               <string key="NSFrame">{{1, 17}, {209, 95}}</string>
+                                                                                                               <reference key="NSSuperview" ref="15195179"/>
+                                                                                                               <reference key="NSNextKeyView" ref="352868425"/>
+                                                                                                               <string key="NSReuseIdentifierKey">_NS:11</string>
+                                                                                                               <reference key="NSDocView" ref="352868425"/>
+                                                                                                               <reference key="NSBGColor" ref="512560731"/>
+                                                                                                               <int key="NScvFlags">4</int>
+                                                                                                       </object>
+                                                                                                       <object class="NSScroller" id="140942393">
+                                                                                                               <reference key="NSNextResponder" ref="15195179"/>
+                                                                                                               <int key="NSvFlags">-2147483392</int>
+                                                                                                               <string key="NSFrame">{{205, 17}, {15, 13}}</string>
+                                                                                                               <reference key="NSSuperview" ref="15195179"/>
+                                                                                                               <reference key="NSNextKeyView" ref="850863399"/>
+                                                                                                               <string key="NSReuseIdentifierKey">_NS:58</string>
+                                                                                                               <reference key="NSTarget" ref="15195179"/>
+                                                                                                               <string key="NSAction">_doScroller:</string>
+                                                                                                               <double key="NSPercent">0.68421052631578949</double>
+                                                                                                       </object>
+                                                                                                       <object class="NSScroller" id="850863399">
+                                                                                                               <reference key="NSNextResponder" ref="15195179"/>
+                                                                                                               <int key="NSvFlags">-2147483392</int>
+                                                                                                               <string key="NSFrame">{{1, 34}, {78, 15}}</string>
+                                                                                                               <reference key="NSSuperview" ref="15195179"/>
+                                                                                                               <reference key="NSNextKeyView" ref="851499930"/>
+                                                                                                               <string key="NSReuseIdentifierKey">_NS:60</string>
+                                                                                                               <int key="NSsFlags">1</int>
+                                                                                                               <reference key="NSTarget" ref="15195179"/>
+                                                                                                               <string key="NSAction">_doScroller:</string>
+                                                                                                               <double key="NSPercent">0.97499999999999998</double>
+                                                                                                       </object>
+                                                                                                       <object class="NSClipView" id="677192773">
+                                                                                                               <reference key="NSNextResponder" ref="15195179"/>
+                                                                                                               <int key="NSvFlags">2304</int>
+                                                                                                               <object class="NSMutableArray" key="NSSubviews">
+                                                                                                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                                                                                                                       <reference ref="1047592526"/>
+                                                                                                               </object>
+                                                                                                               <string key="NSFrame">{{1, 0}, {209, 17}}</string>
+                                                                                                               <reference key="NSSuperview" ref="15195179"/>
+                                                                                                               <reference key="NSNextKeyView" ref="1047592526"/>
+                                                                                                               <string key="NSReuseIdentifierKey">_NS:15</string>
+                                                                                                               <reference key="NSDocView" ref="1047592526"/>
+                                                                                                               <reference key="NSBGColor" ref="512560731"/>
+                                                                                                               <int key="NScvFlags">4</int>
+                                                                                                       </object>
+                                                                                               </object>
+                                                                                               <string key="NSFrame">{{17, 40}, {211, 113}}</string>
+                                                                                               <reference key="NSSuperview" ref="689284120"/>
+                                                                                               <reference key="NSNextKeyView" ref="677192773"/>
+                                                                                               <string key="NSReuseIdentifierKey">_NS:9</string>
+                                                                                               <int key="NSsFlags">133682</int>
+                                                                                               <reference key="NSVScroller" ref="140942393"/>
+                                                                                               <reference key="NSHScroller" ref="850863399"/>
+                                                                                               <reference key="NSContentView" ref="490888020"/>
+                                                                                               <reference key="NSHeaderClipView" ref="677192773"/>
+                                                                                               <bytes key="NSScrollAmts">QSAAAEEgAABBmAAAQZgAAA</bytes>
+                                                                                       </object>
                                                                                </object>
-                                                                               <string key="NSFrame">{{10, 33}, {245, 165}}</string>
+                                                                               <string key="NSFrame">{{10, 33}, {245, 203}}</string>
                                                                                <reference key="NSNextKeyView" ref="245911804"/>
                                                                                <string key="NSReuseIdentifierKey">_NS:620</string>
                                                                        </object>
                                                                                                                        <object class="NSTableView" id="199904301">
                                                                                                                                <reference key="NSNextResponder" ref="748581994"/>
                                                                                                                                <int key="NSvFlags">4352</int>
-                                                                                                                               <string key="NSFrameSize">{103, 78}</string>
+                                                                                                                               <string key="NSFrameSize">{103, 116}</string>
                                                                                                                                <reference key="NSSuperview" ref="748581994"/>
                                                                                                                                <reference key="NSNextKeyView" ref="613407224"/>
                                                                                                                                <bool key="NSEnabled">YES</bool>
                                                                                                                                <int key="NSTableViewGroupRowStyle">1</int>
                                                                                                                        </object>
                                                                                                                </object>
-                                                                                                               <string key="NSFrame">{{1, 17}, {103, 78}}</string>
+                                                                                                               <string key="NSFrame">{{1, 17}, {103, 116}}</string>
                                                                                                                <reference key="NSSuperview" ref="427907042"/>
                                                                                                                <reference key="NSNextKeyView" ref="199904301"/>
                                                                                                                <reference key="NSDocView" ref="199904301"/>
                                                                                                                <int key="NScvFlags">4</int>
                                                                                                        </object>
                                                                                                </object>
-                                                                                               <string key="NSFrame">{{17, 66}, {105, 96}}</string>
+                                                                                               <string key="NSFrame">{{17, 66}, {105, 134}}</string>
                                                                                                <reference key="NSSuperview" ref="635100516"/>
                                                                                                <reference key="NSNextKeyView" ref="881351662"/>
                                                                                                <int key="NSsFlags">133682</int>
                                                                                                                        <object class="NSTableView" id="801276999">
                                                                                                                                <reference key="NSNextResponder" ref="441382477"/>
                                                                                                                                <int key="NSvFlags">4352</int>
-                                                                                                                               <string key="NSFrameSize">{103, 78}</string>
+                                                                                                                               <string key="NSFrameSize">{103, 116}</string>
                                                                                                                                <reference key="NSSuperview" ref="441382477"/>
                                                                                                                                <reference key="NSNextKeyView" ref="79495429"/>
                                                                                                                                <bool key="NSEnabled">YES</bool>
                                                                                                                                <int key="NSTableViewGroupRowStyle">1</int>
                                                                                                                        </object>
                                                                                                                </object>
-                                                                                                               <string key="NSFrame">{{1, 17}, {103, 78}}</string>
+                                                                                                               <string key="NSFrame">{{1, 17}, {103, 116}}</string>
                                                                                                                <reference key="NSSuperview" ref="377785255"/>
                                                                                                                <reference key="NSNextKeyView" ref="801276999"/>
                                                                                                                <reference key="NSDocView" ref="801276999"/>
                                                                                                                <int key="NScvFlags">4</int>
                                                                                                        </object>
                                                                                                </object>
-                                                                                               <string key="NSFrame">{{123, 66}, {105, 96}}</string>
+                                                                                               <string key="NSFrame">{{123, 66}, {105, 134}}</string>
                                                                                                <reference key="NSSuperview" ref="635100516"/>
                                                                                                <reference key="NSNextKeyView" ref="176697034"/>
                                                                                                <int key="NSsFlags">133682</int>
                                                                                                <int key="NSvFlags">289</int>
                                                                                                <string key="NSFrame">{{161, 4}, {72, 28}}</string>
                                                                                                <reference key="NSSuperview" ref="635100516"/>
-                                                                                               <reference key="NSNextKeyView" ref="247568729"/>
+                                                                                               <reference key="NSNextKeyView"/>
                                                                                                <bool key="NSEnabled">YES</bool>
                                                                                                <object class="NSButtonCell" key="NSCell" id="683879656">
                                                                                                        <int key="NSCellFlags">-2080244224</int>
                                                                                                </object>
                                                                                        </object>
                                                                                </object>
-                                                                               <string key="NSFrame">{{10, 33}, {245, 165}}</string>
+                                                                               <string key="NSFrame">{{10, 33}, {245, 203}}</string>
                                                                                <reference key="NSNextKeyView" ref="427907042"/>
                                                                        </object>
                                                                        <string key="NSLabel">Groups</string>
                                                        <int key="NSvFlags">292</int>
                                                        <string key="NSFrame">{{20, 19}, {20, 20}}</string>
                                                        <reference key="NSSuperview" ref="369507901"/>
-                                                       <reference key="NSWindow"/>
                                                        <reference key="NSNextKeyView" ref="862152318"/>
                                                        <string key="NSReuseIdentifierKey">_NS:2510</string>
                                                        <bool key="NSEnabled">YES</bool>
                                                        <int key="NSvFlags">292</int>
                                                        <string key="NSFrame">{{39, 19}, {20, 20}}</string>
                                                        <reference key="NSSuperview" ref="369507901"/>
-                                                       <reference key="NSWindow"/>
                                                        <reference key="NSNextKeyView" ref="247568729"/>
                                                        <string key="NSReuseIdentifierKey">_NS:2510</string>
                                                        <bool key="NSEnabled">YES</bool>
                                                        </object>
                                                </object>
                                        </object>
-                                       <string key="NSFrameSize">{425, 262}</string>
+                                       <string key="NSFrameSize">{425, 300}</string>
                                        <reference key="NSSuperview"/>
-                                       <reference key="NSWindow"/>
                                        <reference key="NSNextKeyView" ref="419137310"/>
                                </object>
                                <string key="NSScreenRect">{{0, 0}, {1280, 778}}</string>
                                        <int key="connectionID">865</int>
                                </object>
                                <object class="IBConnectionRecord">
+                                       <object class="IBOutletConnection" key="connection">
+                                               <string key="label">syncContainersOutlineView</string>
+                                               <reference key="source" ref="1001"/>
+                                               <reference key="destination" ref="352868425"/>
+                                       </object>
+                                       <int key="connectionID">876</int>
+                               </object>
+                               <object class="IBConnectionRecord">
+                                       <object class="IBActionConnection" key="connection">
+                                               <string key="label">syncRefresh:</string>
+                                               <reference key="source" ref="1001"/>
+                                               <reference key="destination" ref="851499930"/>
+                                       </object>
+                                       <int key="connectionID">886</int>
+                               </object>
+                               <object class="IBConnectionRecord">
                                        <object class="IBActionConnection" key="connection">
                                                <string key="label">add:</string>
                                                <reference key="source" ref="980977849"/>
                                        </object>
                                        <int key="connectionID">828</int>
                                </object>
+                               <object class="IBConnectionRecord">
+                                       <object class="IBOutletConnection" key="connection">
+                                               <string key="label">dataSource</string>
+                                               <reference key="source" ref="352868425"/>
+                                               <reference key="destination" ref="1001"/>
+                                       </object>
+                                       <int key="connectionID">875</int>
+                               </object>
+                               <object class="IBConnectionRecord">
+                                       <object class="IBBindingConnection" key="connection">
+                                               <string key="label">enabled: selection.active</string>
+                                               <reference key="source" ref="352868425"/>
+                                               <reference key="destination" ref="994230656"/>
+                                               <object class="NSNibBindingConnector" key="connector">
+                                                       <reference key="NSSource" ref="352868425"/>
+                                                       <reference key="NSDestination" ref="994230656"/>
+                                                       <string key="NSLabel">enabled: selection.active</string>
+                                                       <string key="NSBinding">enabled</string>
+                                                       <string key="NSKeyPath">selection.active</string>
+                                                       <int key="NSNibBindingConnectorVersion">2</int>
+                                               </object>
+                                       </object>
+                                       <int key="connectionID">879</int>
+                               </object>
+                               <object class="IBConnectionRecord">
+                                       <object class="IBBindingConnection" key="connection">
+                                               <string key="label">enabled: selection.active</string>
+                                               <reference key="source" ref="851499930"/>
+                                               <reference key="destination" ref="994230656"/>
+                                               <object class="NSNibBindingConnector" key="connector">
+                                                       <reference key="NSSource" ref="851499930"/>
+                                                       <reference key="NSDestination" ref="994230656"/>
+                                                       <string key="NSLabel">enabled: selection.active</string>
+                                                       <string key="NSBinding">enabled</string>
+                                                       <string key="NSKeyPath">selection.active</string>
+                                                       <int key="NSNibBindingConnectorVersion">2</int>
+                                               </object>
+                                       </object>
+                                       <int key="connectionID">885</int>
+                               </object>
                        </object>
                        <object class="IBMutableOrderedSet" key="objectRecords">
                                <object class="NSArray" key="orderedObjects">
                                                        <reference ref="430121568"/>
                                                        <reference ref="915820146"/>
                                                        <reference ref="893175748"/>
+                                                       <reference ref="15195179"/>
+                                                       <reference ref="851499930"/>
                                                </object>
                                                <reference key="parent" ref="775611844"/>
                                        </object>
                                                <reference key="object" ref="683879656"/>
                                                <reference key="parent" ref="466584774"/>
                                        </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">866</int>
+                                               <reference key="object" ref="15195179"/>
+                                               <object class="NSMutableArray" key="children">
+                                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                                                       <reference ref="140942393"/>
+                                                       <reference ref="1047592526"/>
+                                                       <reference ref="850863399"/>
+                                                       <reference ref="352868425"/>
+                                               </object>
+                                               <reference key="parent" ref="689284120"/>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">867</int>
+                                               <reference key="object" ref="140942393"/>
+                                               <reference key="parent" ref="15195179"/>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">868</int>
+                                               <reference key="object" ref="1047592526"/>
+                                               <reference key="parent" ref="15195179"/>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">869</int>
+                                               <reference key="object" ref="850863399"/>
+                                               <reference key="parent" ref="15195179"/>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">870</int>
+                                               <reference key="object" ref="352868425"/>
+                                               <object class="NSMutableArray" key="children">
+                                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                                                       <reference ref="149907432"/>
+                                                       <reference ref="1063953843"/>
+                                               </object>
+                                               <reference key="parent" ref="15195179"/>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">871</int>
+                                               <reference key="object" ref="149907432"/>
+                                               <object class="NSMutableArray" key="children">
+                                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                                                       <reference ref="591829656"/>
+                                               </object>
+                                               <reference key="parent" ref="352868425"/>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">872</int>
+                                               <reference key="object" ref="1063953843"/>
+                                               <object class="NSMutableArray" key="children">
+                                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                                                       <reference ref="501188417"/>
+                                               </object>
+                                               <reference key="parent" ref="352868425"/>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">873</int>
+                                               <reference key="object" ref="501188417"/>
+                                               <reference key="parent" ref="1063953843"/>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">874</int>
+                                               <reference key="object" ref="591829656"/>
+                                               <reference key="parent" ref="149907432"/>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">880</int>
+                                               <reference key="object" ref="851499930"/>
+                                               <object class="NSMutableArray" key="children">
+                                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                                                       <reference ref="624846101"/>
+                                               </object>
+                                               <reference key="parent" ref="689284120"/>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">881</int>
+                                               <reference key="object" ref="624846101"/>
+                                               <reference key="parent" ref="851499930"/>
+                                       </object>
                                </object>
                        </object>
                        <object class="NSMutableDictionary" key="flattenedProperties">
                                        <string>769.IBPluginDependency</string>
                                        <string>770.IBPluginDependency</string>
                                        <string>771.IBPluginDependency</string>
+                                       <string>866.IBPluginDependency</string>
+                                       <string>867.IBPluginDependency</string>
+                                       <string>868.IBPluginDependency</string>
+                                       <string>869.IBPluginDependency</string>
+                                       <string>870.IBPluginDependency</string>
+                                       <string>871.IBPluginDependency</string>
+                                       <string>872.IBPluginDependency</string>
+                                       <string>873.IBPluginDependency</string>
+                                       <string>874.IBPluginDependency</string>
+                                       <string>880.IBPluginDependency</string>
+                                       <string>881.IBPluginDependency</string>
                                </object>
                                <object class="NSArray" key="dict.values">
                                        <bool key="EncodedWithXMLCoder">YES</bool>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
                                </object>
                        </object>
                        <object class="NSMutableDictionary" key="unlocalizedProperties">
                                <reference key="dict.values" ref="0"/>
                        </object>
                        <nil key="sourceID"/>
-                       <int key="maxID">865</int>
-               </object>
-               <object class="IBClassDescriber" key="IBDocument.Classes">
-                       <object class="NSMutableArray" key="referencedPartialClassDescriptions">
-                               <bool key="EncodedWithXMLCoder">YES</bool>
-                               <object class="IBPartialClassDescription">
-                                       <string key="className">GroupAndGroupMemberFormatter</string>
-                                       <string key="superclassName">NSFormatter</string>
-                                       <object class="IBClassDescriptionSource" key="sourceIdentifier">
-                                               <string key="majorKey">IBProjectSource</string>
-                                               <string key="minorKey">./Classes/GroupAndGroupMemberFormatter.h</string>
-                                       </object>
-                               </object>
-                               <object class="IBPartialClassDescription">
-                                       <string key="className">NonEmptyStringFormatter</string>
-                                       <string key="superclassName">NSFormatter</string>
-                                       <object class="IBClassDescriptionSource" key="sourceIdentifier">
-                                               <string key="majorKey">IBProjectSource</string>
-                                               <string key="minorKey">./Classes/NonEmptyStringFormatter.h</string>
-                                       </object>
-                               </object>
-                               <object class="IBPartialClassDescription">
-                                       <string key="className">PithosBrowserController</string>
-                                       <string key="superclassName">NSWindowController</string>
-                                       <object class="NSMutableDictionary" key="actions">
-                                               <bool key="EncodedWithXMLCoder">YES</bool>
-                                               <object class="NSArray" key="dict.sortedKeys">
-                                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                                       <string>forceRefresh:</string>
-                                                       <string>refresh:</string>
-                                               </object>
-                                               <object class="NSArray" key="dict.values">
-                                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                                       <string>id</string>
-                                                       <string>id</string>
-                                               </object>
-                                       </object>
-                                       <object class="NSMutableDictionary" key="actionInfosByName">
-                                               <bool key="EncodedWithXMLCoder">YES</bool>
-                                               <object class="NSArray" key="dict.sortedKeys">
-                                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                                       <string>forceRefresh:</string>
-                                                       <string>refresh:</string>
-                                               </object>
-                                               <object class="NSArray" key="dict.values">
-                                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                                       <object class="IBActionInfo">
-                                                               <string key="name">forceRefresh:</string>
-                                                               <string key="candidateClassName">id</string>
-                                                       </object>
-                                                       <object class="IBActionInfo">
-                                                               <string key="name">refresh:</string>
-                                                               <string key="candidateClassName">id</string>
-                                                       </object>
-                                               </object>
-                                       </object>
-                                       <object class="NSMutableDictionary" key="outlets">
-                                               <bool key="EncodedWithXMLCoder">YES</bool>
-                                               <object class="NSArray" key="dict.sortedKeys">
-                                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                                       <string>activityProgressIndicator</string>
-                                                       <string>activityTextField</string>
-                                                       <string>browser</string>
-                                                       <string>browserMenu</string>
-                                                       <string>horizontalSplitView</string>
-                                                       <string>leftBottomView</string>
-                                                       <string>leftTopView</string>
-                                                       <string>outlineView</string>
-                                                       <string>outlineViewMenu</string>
-                                                       <string>verticalSplitView</string>
-                                               </object>
-                                               <object class="NSArray" key="dict.values">
-                                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                                       <string>NSProgressIndicator</string>
-                                                       <string>NSTextField</string>
-                                                       <string>NSBrowser</string>
-                                                       <string>NSMenu</string>
-                                                       <string>NSSplitView</string>
-                                                       <string>NSView</string>
-                                                       <string>NSView</string>
-                                                       <string>NSOutlineView</string>
-                                                       <string>NSMenu</string>
-                                                       <string>NSSplitView</string>
-                                               </object>
-                                       </object>
-                                       <object class="NSMutableDictionary" key="toOneOutletInfosByName">
-                                               <bool key="EncodedWithXMLCoder">YES</bool>
-                                               <object class="NSArray" key="dict.sortedKeys">
-                                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                                       <string>activityProgressIndicator</string>
-                                                       <string>activityTextField</string>
-                                                       <string>browser</string>
-                                                       <string>browserMenu</string>
-                                                       <string>horizontalSplitView</string>
-                                                       <string>leftBottomView</string>
-                                                       <string>leftTopView</string>
-                                                       <string>outlineView</string>
-                                                       <string>outlineViewMenu</string>
-                                                       <string>verticalSplitView</string>
-                                               </object>
-                                               <object class="NSArray" key="dict.values">
-                                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                                       <object class="IBToOneOutletInfo">
-                                                               <string key="name">activityProgressIndicator</string>
-                                                               <string key="candidateClassName">NSProgressIndicator</string>
-                                                       </object>
-                                                       <object class="IBToOneOutletInfo">
-                                                               <string key="name">activityTextField</string>
-                                                               <string key="candidateClassName">NSTextField</string>
-                                                       </object>
-                                                       <object class="IBToOneOutletInfo">
-                                                               <string key="name">browser</string>
-                                                               <string key="candidateClassName">NSBrowser</string>
-                                                       </object>
-                                                       <object class="IBToOneOutletInfo">
-                                                               <string key="name">browserMenu</string>
-                                                               <string key="candidateClassName">NSMenu</string>
-                                                       </object>
-                                                       <object class="IBToOneOutletInfo">
-                                                               <string key="name">horizontalSplitView</string>
-                                                               <string key="candidateClassName">NSSplitView</string>
-                                                       </object>
-                                                       <object class="IBToOneOutletInfo">
-                                                               <string key="name">leftBottomView</string>
-                                                               <string key="candidateClassName">NSView</string>
-                                                       </object>
-                                                       <object class="IBToOneOutletInfo">
-                                                               <string key="name">leftTopView</string>
-                                                               <string key="candidateClassName">NSView</string>
-                                                       </object>
-                                                       <object class="IBToOneOutletInfo">
-                                                               <string key="name">outlineView</string>
-                                                               <string key="candidateClassName">NSOutlineView</string>
-                                                       </object>
-                                                       <object class="IBToOneOutletInfo">
-                                                               <string key="name">outlineViewMenu</string>
-                                                               <string key="candidateClassName">NSMenu</string>
-                                                       </object>
-                                                       <object class="IBToOneOutletInfo">
-                                                               <string key="name">verticalSplitView</string>
-                                                               <string key="candidateClassName">NSSplitView</string>
-                                                       </object>
-                                               </object>
-                                       </object>
-                                       <object class="IBClassDescriptionSource" key="sourceIdentifier">
-                                               <string key="majorKey">IBProjectSource</string>
-                                               <string key="minorKey">./Classes/PithosBrowserController.h</string>
-                                       </object>
-                               </object>
-                               <object class="IBPartialClassDescription">
-                                       <string key="className">PithosPreferencesController</string>
-                                       <string key="superclassName">NSWindowController</string>
-                                       <object class="NSMutableDictionary" key="actions">
-                                               <bool key="EncodedWithXMLCoder">YES</bool>
-                                               <object class="NSArray" key="dict.sortedKeys">
-                                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                                       <string>addAccount:</string>
-                                                       <string>groupsApply:</string>
-                                                       <string>groupsRevert:</string>
-                                                       <string>login:</string>
-                                                       <string>loginCancel:</string>
-                                                       <string>removeAccount:</string>
-                                                       <string>syncApply:</string>
-                                                       <string>syncCancel:</string>
-                                               </object>
-                                               <object class="NSArray" key="dict.values">
-                                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                                       <string>id</string>
-                                                       <string>id</string>
-                                                       <string>id</string>
-                                                       <string>id</string>
-                                                       <string>id</string>
-                                                       <string>id</string>
-                                                       <string>id</string>
-                                                       <string>id</string>
-                                               </object>
-                                       </object>
-                                       <object class="NSMutableDictionary" key="actionInfosByName">
-                                               <bool key="EncodedWithXMLCoder">YES</bool>
-                                               <object class="NSArray" key="dict.sortedKeys">
-                                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                                       <string>addAccount:</string>
-                                                       <string>groupsApply:</string>
-                                                       <string>groupsRevert:</string>
-                                                       <string>login:</string>
-                                                       <string>loginCancel:</string>
-                                                       <string>removeAccount:</string>
-                                                       <string>syncApply:</string>
-                                                       <string>syncCancel:</string>
-                                               </object>
-                                               <object class="NSArray" key="dict.values">
-                                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                                       <object class="IBActionInfo">
-                                                               <string key="name">addAccount:</string>
-                                                               <string key="candidateClassName">id</string>
-                                                       </object>
-                                                       <object class="IBActionInfo">
-                                                               <string key="name">groupsApply:</string>
-                                                               <string key="candidateClassName">id</string>
-                                                       </object>
-                                                       <object class="IBActionInfo">
-                                                               <string key="name">groupsRevert:</string>
-                                                               <string key="candidateClassName">id</string>
-                                                       </object>
-                                                       <object class="IBActionInfo">
-                                                               <string key="name">login:</string>
-                                                               <string key="candidateClassName">id</string>
-                                                       </object>
-                                                       <object class="IBActionInfo">
-                                                               <string key="name">loginCancel:</string>
-                                                               <string key="candidateClassName">id</string>
-                                                       </object>
-                                                       <object class="IBActionInfo">
-                                                               <string key="name">removeAccount:</string>
-                                                               <string key="candidateClassName">id</string>
-                                                       </object>
-                                                       <object class="IBActionInfo">
-                                                               <string key="name">syncApply:</string>
-                                                               <string key="candidateClassName">id</string>
-                                                       </object>
-                                                       <object class="IBActionInfo">
-                                                               <string key="name">syncCancel:</string>
-                                                               <string key="candidateClassName">id</string>
-                                                       </object>
-                                               </object>
-                                       </object>
-                                       <object class="NSMutableDictionary" key="outlets">
-                                               <bool key="EncodedWithXMLCoder">YES</bool>
-                                               <object class="NSArray" key="dict.sortedKeys">
-                                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                                       <string>accountsArrayController</string>
-                                                       <string>groupsDictionaryController</string>
-                                                       <string>pithosBrowserController</string>
-                                                       <string>selectedGroupMembersDictionaryController</string>
-                                               </object>
-                                               <object class="NSArray" key="dict.values">
-                                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                                       <string>NSArrayController</string>
-                                                       <string>NSDictionaryController</string>
-                                                       <string>PithosBrowserController</string>
-                                                       <string>NSDictionaryController</string>
-                                               </object>
-                                       </object>
-                                       <object class="NSMutableDictionary" key="toOneOutletInfosByName">
-                                               <bool key="EncodedWithXMLCoder">YES</bool>
-                                               <object class="NSArray" key="dict.sortedKeys">
-                                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                                       <string>accountsArrayController</string>
-                                                       <string>groupsDictionaryController</string>
-                                                       <string>pithosBrowserController</string>
-                                                       <string>selectedGroupMembersDictionaryController</string>
-                                               </object>
-                                               <object class="NSArray" key="dict.values">
-                                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                                       <object class="IBToOneOutletInfo">
-                                                               <string key="name">accountsArrayController</string>
-                                                               <string key="candidateClassName">NSArrayController</string>
-                                                       </object>
-                                                       <object class="IBToOneOutletInfo">
-                                                               <string key="name">groupsDictionaryController</string>
-                                                               <string key="candidateClassName">NSDictionaryController</string>
-                                                       </object>
-                                                       <object class="IBToOneOutletInfo">
-                                                               <string key="name">pithosBrowserController</string>
-                                                               <string key="candidateClassName">PithosBrowserController</string>
-                                                       </object>
-                                                       <object class="IBToOneOutletInfo">
-                                                               <string key="name">selectedGroupMembersDictionaryController</string>
-                                                               <string key="candidateClassName">NSDictionaryController</string>
-                                                       </object>
-                                               </object>
-                                       </object>
-                                       <object class="IBClassDescriptionSource" key="sourceIdentifier">
-                                               <string key="majorKey">IBProjectSource</string>
-                                               <string key="minorKey">./Classes/PithosPreferencesController.h</string>
-                                       </object>
-                               </object>
-                       </object>
+                       <int key="maxID">886</int>
                </object>
+               <object class="IBClassDescriber" key="IBDocument.Classes"/>
                <int key="IBDocument.localizationMode">0</int>
                <string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
                <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
index 3d009a0..53c7bb6 100644 (file)
@@ -76,7 +76,6 @@
 }
 
 @property (nonatomic, retain) NSString *directoryPath;
-@property (nonatomic, retain) PithosAccount *pithosAccount;
 @property (nonatomic, retain) NSDictionary *containersDictionary;
 @property (nonatomic, retain) ASIPithos *pithos;
 
 // and any trailing '/' should be replaced by ':'
 - (id)initWithDirectoryPath:(NSString *)aDirectoryPath 
               pithosAccount:(PithosAccount *)aPithosAccount 
-       containersDictionary:(NSMutableDictionary *)aContainersDictionary 
+       containersDictionary:(NSDictionary *)aContainersDictionary 
             resetLocalState:(BOOL)resetLocalState;
 
 - (void)resetDaemon;
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];
index 0be5aea..0657126 100644 (file)
@@ -78,6 +78,7 @@
 - (void)handleAppleEvent:(NSAppleEventDescriptor *)event withReplyEvent: (NSAppleEventDescriptor *)replyEvent;
 - (IBAction)showPithosBrowser:(id)sender;
 - (IBAction)showPithosPreferences:(id)sender;
+- (void)sync;
 - (void)savePithosAccounts:(id)sender;
 - (void)removedPithosAccount:(PithosAccount *)removedPithosAccount;