root / pithos-macos / PithosPreferencesController.m @ 3916144e
History | View | Annotate | Download (22.9 kB)
1 | 589a14ca | Miltiadis Vasilakis | // |
---|---|---|---|
2 | 589a14ca | Miltiadis Vasilakis | // PithosPreferencesController.m |
3 | 589a14ca | Miltiadis Vasilakis | // pithos-macos |
4 | 589a14ca | Miltiadis Vasilakis | // |
5 | d8426ffb | Miltiadis Vasilakis | // Copyright 2011-2012 GRNET S.A. All rights reserved. |
6 | 589a14ca | Miltiadis Vasilakis | // |
7 | 589a14ca | Miltiadis Vasilakis | // Redistribution and use in source and binary forms, with or |
8 | 589a14ca | Miltiadis Vasilakis | // without modification, are permitted provided that the following |
9 | 589a14ca | Miltiadis Vasilakis | // conditions are met: |
10 | 589a14ca | Miltiadis Vasilakis | // |
11 | 589a14ca | Miltiadis Vasilakis | // 1. Redistributions of source code must retain the above |
12 | 589a14ca | Miltiadis Vasilakis | // copyright notice, this list of conditions and the following |
13 | 589a14ca | Miltiadis Vasilakis | // disclaimer. |
14 | 589a14ca | Miltiadis Vasilakis | // |
15 | 589a14ca | Miltiadis Vasilakis | // 2. Redistributions in binary form must reproduce the above |
16 | 589a14ca | Miltiadis Vasilakis | // copyright notice, this list of conditions and the following |
17 | 589a14ca | Miltiadis Vasilakis | // disclaimer in the documentation and/or other materials |
18 | 589a14ca | Miltiadis Vasilakis | // provided with the distribution. |
19 | 589a14ca | Miltiadis Vasilakis | // |
20 | 589a14ca | Miltiadis Vasilakis | // THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS |
21 | 589a14ca | Miltiadis Vasilakis | // OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
22 | 589a14ca | Miltiadis Vasilakis | // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
23 | 589a14ca | Miltiadis Vasilakis | // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR |
24 | 589a14ca | Miltiadis Vasilakis | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
25 | 589a14ca | Miltiadis Vasilakis | // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
26 | 589a14ca | Miltiadis Vasilakis | // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF |
27 | 589a14ca | Miltiadis Vasilakis | // USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED |
28 | 589a14ca | Miltiadis Vasilakis | // AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
29 | 589a14ca | Miltiadis Vasilakis | // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
30 | 589a14ca | Miltiadis Vasilakis | // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
31 | 589a14ca | Miltiadis Vasilakis | // POSSIBILITY OF SUCH DAMAGE. |
32 | 589a14ca | Miltiadis Vasilakis | // |
33 | 589a14ca | Miltiadis Vasilakis | // The views and conclusions contained in the software and |
34 | 589a14ca | Miltiadis Vasilakis | // documentation are those of the authors and should not be |
35 | 589a14ca | Miltiadis Vasilakis | // interpreted as representing official policies, either expressed |
36 | 589a14ca | Miltiadis Vasilakis | // or implied, of GRNET S.A. |
37 | 589a14ca | Miltiadis Vasilakis | |
38 | 589a14ca | Miltiadis Vasilakis | #import "PithosPreferencesController.h" |
39 | 470e6f81 | Miltiadis Vasilakis | #import "PithosBrowserController.h" |
40 | 470e6f81 | Miltiadis Vasilakis | #import "PithosAccountNode.h" |
41 | ca913781 | Miltiadis Vasilakis | #import "PithosContainerNode.h" |
42 | ca913781 | Miltiadis Vasilakis | #import "PithosSubdirNode.h" |
43 | ca913781 | Miltiadis Vasilakis | #import "PithosObjectNode.h" |
44 | ca913781 | Miltiadis Vasilakis | #import "PithosEmptyNode.h" |
45 | d8426ffb | Miltiadis Vasilakis | #import "PithosAccount.h" |
46 | 589a14ca | Miltiadis Vasilakis | #import "pithos_macosAppDelegate.h" |
47 | 589a14ca | Miltiadis Vasilakis | |
48 | ca913781 | Miltiadis Vasilakis | #import "ImageAndTextCell.h" |
49 | ca913781 | Miltiadis Vasilakis | @interface PithosPreferencesSyncOutlineViewCell : ImageAndTextCell {} |
50 | ca913781 | Miltiadis Vasilakis | @end |
51 | ca913781 | Miltiadis Vasilakis | |
52 | ca913781 | Miltiadis Vasilakis | @implementation PithosPreferencesSyncOutlineViewCell |
53 | ca913781 | Miltiadis Vasilakis | |
54 | ca913781 | Miltiadis Vasilakis | - (void)setObjectValue:(id)object { |
55 | ca913781 | Miltiadis Vasilakis | if ([object isKindOfClass:[PithosNode class]]) { |
56 | ca913781 | Miltiadis Vasilakis | PithosNode *node = (PithosNode *)object; |
57 | ca913781 | Miltiadis Vasilakis | [self setStringValue:node.displayName]; |
58 | ca913781 | Miltiadis Vasilakis | [self setImage:node.icon]; |
59 | ca913781 | Miltiadis Vasilakis | [self setEditable:NO]; |
60 | ca913781 | Miltiadis Vasilakis | } else { |
61 | ca913781 | Miltiadis Vasilakis | [super setObjectValue:object]; |
62 | ca913781 | Miltiadis Vasilakis | } |
63 | ca913781 | Miltiadis Vasilakis | } |
64 | ca913781 | Miltiadis Vasilakis | |
65 | ca913781 | Miltiadis Vasilakis | @end |
66 | ca913781 | Miltiadis Vasilakis | |
67 | 589a14ca | Miltiadis Vasilakis | @implementation PithosPreferencesController |
68 | 904acde2 | Miltiadis Vasilakis | @synthesize selectedPithosAccount; |
69 | d8426ffb | Miltiadis Vasilakis | @synthesize accountsArrayController; |
70 | d8426ffb | Miltiadis Vasilakis | @synthesize accountRemoveEnable; |
71 | d8426ffb | Miltiadis Vasilakis | @synthesize serverURL, authUser, authToken, manual, loginEnable, loginCancelEnable; |
72 | ca913781 | Miltiadis Vasilakis | @synthesize syncActive, syncDirectoryPath, syncContainersDictionary, syncApplyEnable, syncCancelEnable, |
73 | ca913781 | Miltiadis Vasilakis | syncContainersOutlineView, syncContainersRootFilesNodes; |
74 | 470e6f81 | Miltiadis Vasilakis | @synthesize groupsDictionaryController, selectedGroupMembersDictionaryController; |
75 | 470e6f81 | Miltiadis Vasilakis | |
76 | 470e6f81 | Miltiadis Vasilakis | #pragma mark - |
77 | 470e6f81 | Miltiadis Vasilakis | #pragma mark Object Lifecycle |
78 | 589a14ca | Miltiadis Vasilakis | |
79 | 589a14ca | Miltiadis Vasilakis | - (id)init { |
80 | 589a14ca | Miltiadis Vasilakis | return [super initWithWindowNibName:@"PithosPreferencesController"]; |
81 | 589a14ca | Miltiadis Vasilakis | } |
82 | 589a14ca | Miltiadis Vasilakis | |
83 | 589a14ca | Miltiadis Vasilakis | - (void)windowDidLoad { |
84 | 589a14ca | Miltiadis Vasilakis | [super windowDidLoad]; |
85 | 589a14ca | Miltiadis Vasilakis | |
86 | 589a14ca | Miltiadis Vasilakis | NSWindow *window = [self window]; |
87 | 589a14ca | Miltiadis Vasilakis | [window setHidesOnDeactivate:NO]; |
88 | 589a14ca | Miltiadis Vasilakis | [window setExcludedFromWindowsMenu:YES]; |
89 | 589a14ca | Miltiadis Vasilakis | |
90 | d8426ffb | Miltiadis Vasilakis | // // Select the first tab when the window is loaded for the first time. |
91 | d8426ffb | Miltiadis Vasilakis | // [[window valueForKeyPath:@"toolbar"] setSelectedItemIdentifier:@"0"]; |
92 | ca913781 | Miltiadis Vasilakis | |
93 | ca913781 | Miltiadis Vasilakis | [[[syncContainersOutlineView tableColumns] objectAtIndex:1] setDataCell:[[[PithosPreferencesSyncOutlineViewCell alloc] init] autorelease]]; |
94 | ca913781 | Miltiadis Vasilakis | |
95 | 470e6f81 | Miltiadis Vasilakis | [groupsDictionaryController setInitialKey:@"group"]; |
96 | 470e6f81 | Miltiadis Vasilakis | [groupsDictionaryController setInitialValue:@"user"]; |
97 | 470e6f81 | Miltiadis Vasilakis | [selectedGroupMembersDictionaryController setInitialKey:@"user"]; |
98 | 470e6f81 | Miltiadis Vasilakis | [selectedGroupMembersDictionaryController setInitialValue:@""]; |
99 | 470e6f81 | Miltiadis Vasilakis | |
100 | 2d9996a2 | Miltiadis Vasilakis | [window setDelegate:self]; |
101 | d8426ffb | Miltiadis Vasilakis | |
102 | d8426ffb | Miltiadis Vasilakis | self.selectedPithosAccount = [[accountsArrayController selectedObjects] objectAtIndex:0]; |
103 | d8426ffb | Miltiadis Vasilakis | [accountsArrayController addObserver:self forKeyPath:@"selection" options:NSKeyValueObservingOptionNew context:NULL]; |
104 | ca913781 | Miltiadis Vasilakis | [[NSNotificationCenter defaultCenter] addObserver:self |
105 | ca913781 | Miltiadis Vasilakis | selector:@selector(selectedPithosAccountNodeChildrenUpdated:) |
106 | ca913781 | Miltiadis Vasilakis | name:@"SelectedPithosAccountNodeChildrenUpdated" |
107 | ca913781 | Miltiadis Vasilakis | object:nil]; |
108 | 589a14ca | Miltiadis Vasilakis | } |
109 | 589a14ca | Miltiadis Vasilakis | |
110 | d8426ffb | Miltiadis Vasilakis | - (BOOL)windowShouldClose:(id)sender { |
111 | d8426ffb | Miltiadis Vasilakis | return [(pithos_macosAppDelegate *)[[NSApplication sharedApplication] delegate] activated]; |
112 | 589a14ca | Miltiadis Vasilakis | } |
113 | 589a14ca | Miltiadis Vasilakis | |
114 | d8426ffb | Miltiadis Vasilakis | //- (void)windowWillClose:(NSNotification *)notification { |
115 | d8426ffb | Miltiadis Vasilakis | //} |
116 | d8426ffb | Miltiadis Vasilakis | |
117 | d8426ffb | Miltiadis Vasilakis | //- (IBAction)toolbarItemSelected:(id)sender { |
118 | d8426ffb | Miltiadis Vasilakis | //} |
119 | d8426ffb | Miltiadis Vasilakis | |
120 | d8426ffb | Miltiadis Vasilakis | #pragma mark - |
121 | d8426ffb | Miltiadis Vasilakis | #pragma Observers |
122 | d8426ffb | Miltiadis Vasilakis | |
123 | d8426ffb | Miltiadis Vasilakis | - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { |
124 | d8426ffb | Miltiadis Vasilakis | if ([object isEqualTo:accountsArrayController] && |
125 | d8426ffb | Miltiadis Vasilakis | [keyPath isEqualToString:@"selection"] && |
126 | d8426ffb | Miltiadis Vasilakis | [[accountsArrayController selectedObjects] count]) { |
127 | d8426ffb | Miltiadis Vasilakis | self.selectedPithosAccount = [[accountsArrayController selectedObjects] objectAtIndex:0]; |
128 | d8426ffb | Miltiadis Vasilakis | } |
129 | d8426ffb | Miltiadis Vasilakis | } |
130 | d8426ffb | Miltiadis Vasilakis | |
131 | ca913781 | Miltiadis Vasilakis | - (void)selectedPithosAccountNodeChildrenUpdated:(NSNotification *)notification { |
132 | ca913781 | Miltiadis Vasilakis | [syncContainersOutlineView reloadData]; |
133 | ca913781 | Miltiadis Vasilakis | [syncContainersOutlineView expandItem:nil expandChildren:YES]; |
134 | ca913781 | Miltiadis Vasilakis | } |
135 | ca913781 | Miltiadis Vasilakis | |
136 | d8426ffb | Miltiadis Vasilakis | #pragma mark - |
137 | d8426ffb | Miltiadis Vasilakis | #pragma Update |
138 | d8426ffb | Miltiadis Vasilakis | |
139 | d8426ffb | Miltiadis Vasilakis | - (void)updateAccounts { |
140 | d8426ffb | Miltiadis Vasilakis | pithos_macosAppDelegate *delegate = (pithos_macosAppDelegate *)[[NSApplication sharedApplication] delegate]; |
141 | d8426ffb | Miltiadis Vasilakis | self.accountRemoveEnable = (delegate.activated && ([delegate.pithosAccounts count] > 1)); |
142 | d8426ffb | Miltiadis Vasilakis | } |
143 | d8426ffb | Miltiadis Vasilakis | |
144 | d8426ffb | Miltiadis Vasilakis | - (void)updateLogin { |
145 | d8426ffb | Miltiadis Vasilakis | self.loginEnable = ([selectedPithosAccount urlIsValid:serverURL] && (!manual || ([authUser length] && [authToken length]))); |
146 | d8426ffb | Miltiadis Vasilakis | self.loginCancelEnable = (![selectedPithosAccount.serverURL isEqualToString:serverURL] || |
147 | d8426ffb | Miltiadis Vasilakis | (selectedPithosAccount.authUser && ![selectedPithosAccount.authUser isEqualToString:authUser]) || |
148 | d8426ffb | Miltiadis Vasilakis | (selectedPithosAccount.authToken && ![selectedPithosAccount.authToken isEqualToString:authToken])); |
149 | d8426ffb | Miltiadis Vasilakis | } |
150 | d8426ffb | Miltiadis Vasilakis | |
151 | d8426ffb | Miltiadis Vasilakis | - (void)updateSync { |
152 | d8426ffb | Miltiadis Vasilakis | BOOL isDirectory; |
153 | d8426ffb | Miltiadis Vasilakis | self.syncApplyEnable = (selectedPithosAccount.active && |
154 | d8426ffb | Miltiadis Vasilakis | ((selectedPithosAccount.syncActive != syncActive) || |
155 | d8426ffb | Miltiadis Vasilakis | (![selectedPithosAccount.syncDirectoryPath isEqualToString:syncDirectoryPath] && |
156 | d8426ffb | Miltiadis Vasilakis | (![[NSFileManager defaultManager] fileExistsAtPath:syncDirectoryPath isDirectory:&isDirectory] || |
157 | ca913781 | Miltiadis Vasilakis | isDirectory)) || |
158 | ca913781 | Miltiadis Vasilakis | ![selectedPithosAccount.syncContainersDictionary isEqualToDictionary:syncContainersDictionary])); |
159 | d8426ffb | Miltiadis Vasilakis | self.syncCancelEnable = (selectedPithosAccount.active && |
160 | d8426ffb | Miltiadis Vasilakis | ((selectedPithosAccount.syncActive != syncActive) || |
161 | ca913781 | Miltiadis Vasilakis | ![selectedPithosAccount.syncDirectoryPath isEqualToString:syncDirectoryPath] || |
162 | ca913781 | Miltiadis Vasilakis | ![selectedPithosAccount.syncContainersDictionary isEqualToDictionary:syncContainersDictionary])); |
163 | 589a14ca | Miltiadis Vasilakis | } |
164 | 589a14ca | Miltiadis Vasilakis | |
165 | 589a14ca | Miltiadis Vasilakis | #pragma mark - |
166 | dbfd951b | Miltiadis Vasilakis | #pragma Properties |
167 | 589a14ca | Miltiadis Vasilakis | |
168 | d8426ffb | Miltiadis Vasilakis | - (void)setSelectedPithosAccount:(PithosAccount *)aSelectedPithosAccount { |
169 | d8426ffb | Miltiadis Vasilakis | if (aSelectedPithosAccount && ![aSelectedPithosAccount isEqualTo:selectedPithosAccount]) { |
170 | ca913781 | Miltiadis Vasilakis | selectedPithosAccount.accountNode.childrenUpdatedNotificationName = nil; |
171 | d8426ffb | Miltiadis Vasilakis | [selectedPithosAccount release]; |
172 | d8426ffb | Miltiadis Vasilakis | selectedPithosAccount = [aSelectedPithosAccount retain]; |
173 | ca913781 | Miltiadis Vasilakis | selectedPithosAccount.accountNode.childrenUpdatedNotificationName = [NSString stringWithString:@"SelectedPithosAccountNodeChildrenUpdated"]; |
174 | d8426ffb | Miltiadis Vasilakis | |
175 | d8426ffb | Miltiadis Vasilakis | [self updateAccounts]; |
176 | d8426ffb | Miltiadis Vasilakis | [self loginCancel:self]; |
177 | d8426ffb | Miltiadis Vasilakis | [self syncCancel:self]; |
178 | d8426ffb | Miltiadis Vasilakis | [self groupsRevert:self]; |
179 | d8426ffb | Miltiadis Vasilakis | } |
180 | d8426ffb | Miltiadis Vasilakis | } |
181 | d8426ffb | Miltiadis Vasilakis | |
182 | d8426ffb | Miltiadis Vasilakis | #pragma Login Properties |
183 | d8426ffb | Miltiadis Vasilakis | |
184 | d8426ffb | Miltiadis Vasilakis | - (void)setServerURL:(NSString *)aServerURL { |
185 | d8426ffb | Miltiadis Vasilakis | [serverURL release]; |
186 | d8426ffb | Miltiadis Vasilakis | serverURL = [aServerURL copy]; |
187 | d8426ffb | Miltiadis Vasilakis | [self updateLogin]; |
188 | d8426ffb | Miltiadis Vasilakis | } |
189 | d8426ffb | Miltiadis Vasilakis | |
190 | d8426ffb | Miltiadis Vasilakis | - (void)setAuthUser:(NSString *)anAuthUser { |
191 | d8426ffb | Miltiadis Vasilakis | [authUser release]; |
192 | d8426ffb | Miltiadis Vasilakis | authUser = [anAuthUser copy]; |
193 | d8426ffb | Miltiadis Vasilakis | [self updateLogin]; |
194 | d8426ffb | Miltiadis Vasilakis | } |
195 | d8426ffb | Miltiadis Vasilakis | |
196 | d8426ffb | Miltiadis Vasilakis | - (void)setAuthToken:(NSString *)anAuthToken { |
197 | d8426ffb | Miltiadis Vasilakis | [authToken release]; |
198 | d8426ffb | Miltiadis Vasilakis | authToken = [anAuthToken copy]; |
199 | d8426ffb | Miltiadis Vasilakis | [self updateLogin]; |
200 | d8426ffb | Miltiadis Vasilakis | } |
201 | d8426ffb | Miltiadis Vasilakis | |
202 | dbfd951b | Miltiadis Vasilakis | - (void)setManual:(BOOL)aManual { |
203 | dbfd951b | Miltiadis Vasilakis | manual = aManual; |
204 | d8426ffb | Miltiadis Vasilakis | [self updateLogin]; |
205 | dbfd951b | Miltiadis Vasilakis | if (!manual) { |
206 | ca913781 | Miltiadis Vasilakis | self.authUser = selectedPithosAccount.authUser; |
207 | ca913781 | Miltiadis Vasilakis | self.authToken = selectedPithosAccount.authToken; |
208 | dbfd951b | Miltiadis Vasilakis | } |
209 | 74314fd6 | Miltiadis Vasilakis | } |
210 | 74314fd6 | Miltiadis Vasilakis | |
211 | d8426ffb | Miltiadis Vasilakis | #pragma Sync Properties |
212 | d8426ffb | Miltiadis Vasilakis | |
213 | d8426ffb | Miltiadis Vasilakis | - (void)setSyncActive:(BOOL)aSyncActive { |
214 | d8426ffb | Miltiadis Vasilakis | syncActive = aSyncActive; |
215 | d8426ffb | Miltiadis Vasilakis | [self updateSync]; |
216 | d8426ffb | Miltiadis Vasilakis | } |
217 | d8426ffb | Miltiadis Vasilakis | |
218 | d8426ffb | Miltiadis Vasilakis | - (void)setSyncDirectoryPath:(NSString *)aSyncDirectoryPath { |
219 | d8426ffb | Miltiadis Vasilakis | [syncDirectoryPath release]; |
220 | d8426ffb | Miltiadis Vasilakis | syncDirectoryPath = [aSyncDirectoryPath copy]; |
221 | d8426ffb | Miltiadis Vasilakis | [self updateSync]; |
222 | d8426ffb | Miltiadis Vasilakis | } |
223 | d8426ffb | Miltiadis Vasilakis | |
224 | ca913781 | Miltiadis Vasilakis | - (void)setSyncContainersDictionary:(NSMutableDictionary *)aSyncContainersDictionary { |
225 | ca913781 | Miltiadis Vasilakis | [syncContainersDictionary release]; |
226 | ca913781 | Miltiadis Vasilakis | syncContainersDictionary = [[NSMutableDictionary alloc] initWithCapacity:[aSyncContainersDictionary count]]; |
227 | ca913781 | Miltiadis Vasilakis | for (NSString *containerName in aSyncContainersDictionary) { |
228 | ca913781 | Miltiadis Vasilakis | [syncContainersDictionary setObject:[NSMutableArray arrayWithArray:[aSyncContainersDictionary objectForKey:containerName]] |
229 | ca913781 | Miltiadis Vasilakis | forKey:containerName]; |
230 | ca913781 | Miltiadis Vasilakis | } |
231 | ca913781 | Miltiadis Vasilakis | [self updateSync]; |
232 | ca913781 | Miltiadis Vasilakis | } |
233 | ca913781 | Miltiadis Vasilakis | |
234 | dbfd951b | Miltiadis Vasilakis | #pragma mark - |
235 | d8426ffb | Miltiadis Vasilakis | #pragma Actions |
236 | d8426ffb | Miltiadis Vasilakis | |
237 | d8426ffb | Miltiadis Vasilakis | - (IBAction)addAccount:(id)sender { |
238 | d8426ffb | Miltiadis Vasilakis | [accountsArrayController addObject:[PithosAccount pithosAccount]]; |
239 | d8426ffb | Miltiadis Vasilakis | [self updateAccounts]; |
240 | d8426ffb | Miltiadis Vasilakis | pithos_macosAppDelegate *delegate = (pithos_macosAppDelegate *)[[NSApplication sharedApplication] delegate]; |
241 | d8426ffb | Miltiadis Vasilakis | [delegate.pithosAccountsDictionary setObject:selectedPithosAccount forKey:selectedPithosAccount.name]; |
242 | d8426ffb | Miltiadis Vasilakis | [delegate savePithosAccounts:self]; |
243 | d8426ffb | Miltiadis Vasilakis | } |
244 | d8426ffb | Miltiadis Vasilakis | |
245 | d8426ffb | Miltiadis Vasilakis | - (IBAction)removeAccount:(id)sender { |
246 | d8426ffb | Miltiadis Vasilakis | [self updateAccounts]; |
247 | d8426ffb | Miltiadis Vasilakis | if (!accountRemoveEnable) |
248 | d8426ffb | Miltiadis Vasilakis | return; |
249 | d8426ffb | Miltiadis Vasilakis | PithosAccount *removedPithosAccount = [selectedPithosAccount retain]; |
250 | d8426ffb | Miltiadis Vasilakis | pithos_macosAppDelegate *delegate = (pithos_macosAppDelegate *)[[NSApplication sharedApplication] delegate]; |
251 | d8426ffb | Miltiadis Vasilakis | if ([delegate.currentPithosAccount isEqualTo:removedPithosAccount] && [delegate.pithosBrowserController operationsPending]) { |
252 | d8426ffb | Miltiadis Vasilakis | NSAlert *alert = [[[NSAlert alloc] init] autorelease]; |
253 | d8426ffb | Miltiadis Vasilakis | [alert setMessageText:@"Operations Pending"]; |
254 | d8426ffb | Miltiadis Vasilakis | [alert setInformativeText:@"There are pending operations in the browser, do you want to remove the account and cancel them?"]; |
255 | d8426ffb | Miltiadis Vasilakis | [alert addButtonWithTitle:@"OK"]; |
256 | d8426ffb | Miltiadis Vasilakis | [alert addButtonWithTitle:@"Cancel"]; |
257 | d8426ffb | Miltiadis Vasilakis | NSInteger choice = [alert runModal]; |
258 | d8426ffb | Miltiadis Vasilakis | if (choice == NSAlertSecondButtonReturn) { |
259 | d8426ffb | Miltiadis Vasilakis | [removedPithosAccount release]; |
260 | d8426ffb | Miltiadis Vasilakis | return; |
261 | d8426ffb | Miltiadis Vasilakis | } |
262 | d8426ffb | Miltiadis Vasilakis | } |
263 | d8426ffb | Miltiadis Vasilakis | [accountsArrayController removeObject:selectedPithosAccount]; |
264 | d8426ffb | Miltiadis Vasilakis | [delegate.pithosAccountsDictionary removeObjectForKey:removedPithosAccount.name]; |
265 | d8426ffb | Miltiadis Vasilakis | [delegate removedPithosAccount:removedPithosAccount]; |
266 | d8426ffb | Miltiadis Vasilakis | [delegate savePithosAccounts:self]; |
267 | d8426ffb | Miltiadis Vasilakis | [removedPithosAccount release]; |
268 | d8426ffb | Miltiadis Vasilakis | [self updateAccounts]; |
269 | d8426ffb | Miltiadis Vasilakis | } |
270 | d8426ffb | Miltiadis Vasilakis | |
271 | d8426ffb | Miltiadis Vasilakis | #pragma Login Actions |
272 | dbfd951b | Miltiadis Vasilakis | |
273 | d8426ffb | Miltiadis Vasilakis | - (IBAction)login:(id)sender { |
274 | d8426ffb | Miltiadis Vasilakis | if (!manual) { |
275 | d8426ffb | Miltiadis Vasilakis | [selectedPithosAccount loginWithServerURL:serverURL]; |
276 | dbfd951b | Miltiadis Vasilakis | } else { |
277 | d8426ffb | Miltiadis Vasilakis | [selectedPithosAccount authenticateWithServerURL:serverURL authUser:authUser authToken:authToken]; |
278 | d8426ffb | Miltiadis Vasilakis | self.manual = NO; |
279 | d8426ffb | Miltiadis Vasilakis | pithos_macosAppDelegate *delegate = (pithos_macosAppDelegate *)[[NSApplication sharedApplication] delegate]; |
280 | d8426ffb | Miltiadis Vasilakis | [delegate savePithosAccounts:self]; |
281 | d8426ffb | Miltiadis Vasilakis | if (!delegate.activated) { |
282 | d8426ffb | Miltiadis Vasilakis | delegate.activated = YES; |
283 | d8426ffb | Miltiadis Vasilakis | [delegate showPithosBrowser:self]; |
284 | d8426ffb | Miltiadis Vasilakis | } |
285 | d8426ffb | Miltiadis Vasilakis | if ([selectedPithosAccount isEqualTo:delegate.currentPithosAccount]) |
286 | d8426ffb | Miltiadis Vasilakis | delegate.pithosBrowserController.pithos = selectedPithosAccount.pithos; |
287 | dbfd951b | Miltiadis Vasilakis | } |
288 | 589a14ca | Miltiadis Vasilakis | } |
289 | 589a14ca | Miltiadis Vasilakis | |
290 | d8426ffb | Miltiadis Vasilakis | - (IBAction)loginCancel:(id)server { |
291 | ca913781 | Miltiadis Vasilakis | self.serverURL = selectedPithosAccount.serverURL; |
292 | ca913781 | Miltiadis Vasilakis | self.authUser = selectedPithosAccount.authUser; |
293 | ca913781 | Miltiadis Vasilakis | self.authToken = selectedPithosAccount.authToken; |
294 | d8426ffb | Miltiadis Vasilakis | } |
295 | d8426ffb | Miltiadis Vasilakis | |
296 | d8426ffb | Miltiadis Vasilakis | #pragma Sync Actions |
297 | d8426ffb | Miltiadis Vasilakis | |
298 | d8426ffb | Miltiadis Vasilakis | - (IBAction)syncApply:(id)sender { |
299 | ca913781 | Miltiadis Vasilakis | [selectedPithosAccount updateSyncWithSyncActive:syncActive |
300 | ca913781 | Miltiadis Vasilakis | syncDirectoryPath:syncDirectoryPath |
301 | ca913781 | Miltiadis Vasilakis | syncContainersDictionary:syncContainersDictionary]; |
302 | d8426ffb | Miltiadis Vasilakis | [self updateSync]; |
303 | d8426ffb | Miltiadis Vasilakis | pithos_macosAppDelegate *delegate = (pithos_macosAppDelegate *)[[NSApplication sharedApplication] delegate]; |
304 | d8426ffb | Miltiadis Vasilakis | [delegate savePithosAccounts:self]; |
305 | ca913781 | Miltiadis Vasilakis | [delegate sync]; |
306 | d8426ffb | Miltiadis Vasilakis | } |
307 | d8426ffb | Miltiadis Vasilakis | |
308 | d8426ffb | Miltiadis Vasilakis | - (IBAction)syncCancel:(id)sender { |
309 | d8426ffb | Miltiadis Vasilakis | self.syncActive = selectedPithosAccount.syncActive; |
310 | ca913781 | Miltiadis Vasilakis | self.syncDirectoryPath = selectedPithosAccount.syncDirectoryPath; |
311 | ca913781 | Miltiadis Vasilakis | self.syncContainersDictionary = selectedPithosAccount.syncContainersDictionary; |
312 | ca913781 | Miltiadis Vasilakis | self.syncContainersRootFilesNodes = [NSMutableDictionary dictionary]; |
313 | ca913781 | Miltiadis Vasilakis | [self selectedPithosAccountNodeChildrenUpdated:nil]; |
314 | ca913781 | Miltiadis Vasilakis | } |
315 | ca913781 | Miltiadis Vasilakis | |
316 | ca913781 | Miltiadis Vasilakis | - (IBAction)syncRefresh:(id)sender { |
317 | ca913781 | Miltiadis Vasilakis | selectedPithosAccount.accountNode.forcedRefresh = YES; |
318 | ca913781 | Miltiadis Vasilakis | [selectedPithosAccount.accountNode invalidateChildrenRecursive]; |
319 | ca913781 | Miltiadis Vasilakis | if (selectedPithosAccount.accountNode.children) { |
320 | ca913781 | Miltiadis Vasilakis | } |
321 | d8426ffb | Miltiadis Vasilakis | } |
322 | d8426ffb | Miltiadis Vasilakis | |
323 | 470e6f81 | Miltiadis Vasilakis | #pragma mark Groups Actions |
324 | 470e6f81 | Miltiadis Vasilakis | |
325 | d8426ffb | Miltiadis Vasilakis | - (IBAction)groupsApply:(id)sender { |
326 | 470e6f81 | Miltiadis Vasilakis | [[self window] makeFirstResponder:nil]; |
327 | d8426ffb | Miltiadis Vasilakis | if (selectedPithosAccount.active) |
328 | d8426ffb | Miltiadis Vasilakis | [selectedPithosAccount.accountNode applyInfo]; |
329 | d8426ffb | Miltiadis Vasilakis | } |
330 | d8426ffb | Miltiadis Vasilakis | |
331 | d8426ffb | Miltiadis Vasilakis | - (IBAction)groupsRevert:(id)sender { |
332 | d8426ffb | Miltiadis Vasilakis | if (selectedPithosAccount.active && selectedPithosAccount.accountNode) |
333 | d8426ffb | Miltiadis Vasilakis | [selectedPithosAccount.accountNode refreshInfo]; |
334 | 470e6f81 | Miltiadis Vasilakis | } |
335 | 470e6f81 | Miltiadis Vasilakis | |
336 | ca913781 | Miltiadis Vasilakis | #pragma mark - |
337 | ca913781 | Miltiadis Vasilakis | #pragma mark NSOutlineViewDataSource |
338 | ca913781 | Miltiadis Vasilakis | |
339 | ca913781 | Miltiadis Vasilakis | - (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item { |
340 | 3916144e | Miltiadis Vasilakis | if (!selectedPithosAccount.active) |
341 | 3916144e | Miltiadis Vasilakis | return 0; |
342 | ca913781 | Miltiadis Vasilakis | if (outlineView == syncContainersOutlineView) { |
343 | 3916144e | Miltiadis Vasilakis | if (item == nil) { |
344 | 3916144e | Miltiadis Vasilakis | if (selectedPithosAccount.accountNode.children) |
345 | 3916144e | Miltiadis Vasilakis | return selectedPithosAccount.accountNode.children.count; |
346 | 3916144e | Miltiadis Vasilakis | } else if ([item class] == [PithosContainerNode class]) { |
347 | ca913781 | Miltiadis Vasilakis | // We add 1 for the root files node |
348 | ca913781 | Miltiadis Vasilakis | NSInteger subdirCount = 1; |
349 | ca913781 | Miltiadis Vasilakis | for (PithosNode *node in [(PithosContainerNode *)item children]) { |
350 | ca913781 | Miltiadis Vasilakis | if ([node class] == [PithosSubdirNode class]) |
351 | ca913781 | Miltiadis Vasilakis | subdirCount++; |
352 | ca913781 | Miltiadis Vasilakis | } |
353 | ca913781 | Miltiadis Vasilakis | return subdirCount; |
354 | ca913781 | Miltiadis Vasilakis | } |
355 | ca913781 | Miltiadis Vasilakis | } |
356 | ca913781 | Miltiadis Vasilakis | return 0; |
357 | ca913781 | Miltiadis Vasilakis | } |
358 | ca913781 | Miltiadis Vasilakis | |
359 | ca913781 | Miltiadis Vasilakis | - (id)outlineView:(NSOutlineView *)outlineView child:(NSInteger)index ofItem:(id)item { |
360 | ca913781 | Miltiadis Vasilakis | if (outlineView == syncContainersOutlineView) { |
361 | ca913781 | Miltiadis Vasilakis | if (item == nil) |
362 | ca913781 | Miltiadis Vasilakis | return [selectedPithosAccount.accountNode.children objectAtIndex:index]; |
363 | ca913781 | Miltiadis Vasilakis | if ([item class] == [PithosContainerNode class]) { |
364 | ca913781 | Miltiadis Vasilakis | PithosContainerNode *containerNode = (PithosContainerNode *)item; |
365 | ca913781 | Miltiadis Vasilakis | NSInteger currentSubdirIndex = -1; |
366 | ca913781 | Miltiadis Vasilakis | for (PithosNode *node in containerNode.children) { |
367 | ca913781 | Miltiadis Vasilakis | if ([node class] == [PithosSubdirNode class]) { |
368 | ca913781 | Miltiadis Vasilakis | currentSubdirIndex++; |
369 | ca913781 | Miltiadis Vasilakis | if (currentSubdirIndex == index) |
370 | ca913781 | Miltiadis Vasilakis | return node; |
371 | ca913781 | Miltiadis Vasilakis | } |
372 | ca913781 | Miltiadis Vasilakis | } |
373 | ca913781 | Miltiadis Vasilakis | if (++currentSubdirIndex == index) { |
374 | ca913781 | Miltiadis Vasilakis | PithosEmptyNode *rootFilesNode = [syncContainersRootFilesNodes objectForKey:containerNode.displayName]; |
375 | ca913781 | Miltiadis Vasilakis | if (!rootFilesNode) { |
376 | ca913781 | Miltiadis Vasilakis | rootFilesNode = [[[PithosEmptyNode alloc] initWithDisplayName:@"<root files>" |
377 | ca913781 | Miltiadis Vasilakis | icon:[[NSWorkspace sharedWorkspace] iconForFileType:@""]] |
378 | ca913781 | Miltiadis Vasilakis | autorelease]; |
379 | ca913781 | Miltiadis Vasilakis | rootFilesNode.parent = containerNode; |
380 | ca913781 | Miltiadis Vasilakis | [syncContainersRootFilesNodes setObject:rootFilesNode forKey:containerNode.displayName]; |
381 | ca913781 | Miltiadis Vasilakis | } |
382 | ca913781 | Miltiadis Vasilakis | return rootFilesNode; |
383 | ca913781 | Miltiadis Vasilakis | } |
384 | ca913781 | Miltiadis Vasilakis | } |
385 | ca913781 | Miltiadis Vasilakis | } |
386 | ca913781 | Miltiadis Vasilakis | return nil; |
387 | ca913781 | Miltiadis Vasilakis | } |
388 | ca913781 | Miltiadis Vasilakis | |
389 | ca913781 | Miltiadis Vasilakis | - (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item { |
390 | ca913781 | Miltiadis Vasilakis | if (outlineView == syncContainersOutlineView) { |
391 | ca913781 | Miltiadis Vasilakis | if ([item class] == [PithosContainerNode class]) |
392 | ca913781 | Miltiadis Vasilakis | return YES; |
393 | ca913781 | Miltiadis Vasilakis | } |
394 | ca913781 | Miltiadis Vasilakis | return NO; |
395 | ca913781 | Miltiadis Vasilakis | } |
396 | ca913781 | Miltiadis Vasilakis | |
397 | ca913781 | Miltiadis Vasilakis | - (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item { |
398 | ca913781 | Miltiadis Vasilakis | if (outlineView == syncContainersOutlineView) { |
399 | ca913781 | Miltiadis Vasilakis | if ([[tableColumn identifier] isEqualToString:@"sync"]) { |
400 | ca913781 | Miltiadis Vasilakis | if ([item class] == [PithosContainerNode class]) { |
401 | ca913781 | Miltiadis Vasilakis | // A container is |
402 | ca913781 | Miltiadis Vasilakis | // off if not in dictionary |
403 | ca913781 | Miltiadis Vasilakis | // mixed if in dictionary with exclusions |
404 | ca913781 | Miltiadis Vasilakis | // on if in dictionary without exclusions |
405 | ca913781 | Miltiadis Vasilakis | PithosContainerNode *node = (PithosContainerNode *)item; |
406 | ca913781 | Miltiadis Vasilakis | NSMutableArray *containerExcludedDirectories = [syncContainersDictionary objectForKey:node.displayName]; |
407 | ca913781 | Miltiadis Vasilakis | if (containerExcludedDirectories) { |
408 | ca913781 | Miltiadis Vasilakis | if ([containerExcludedDirectories count]) |
409 | ca913781 | Miltiadis Vasilakis | return [NSNumber numberWithUnsignedInteger:NSMixedState]; |
410 | ca913781 | Miltiadis Vasilakis | else |
411 | ca913781 | Miltiadis Vasilakis | return [NSNumber numberWithUnsignedInteger:NSOnState]; |
412 | ca913781 | Miltiadis Vasilakis | } |
413 | ca913781 | Miltiadis Vasilakis | return [NSNumber numberWithUnsignedInteger:NSOffState]; |
414 | ca913781 | Miltiadis Vasilakis | } else if ([item class] == [PithosSubdirNode class]) { |
415 | ca913781 | Miltiadis Vasilakis | // Root files are off if parent container not in dictionary or if excluded |
416 | ca913781 | Miltiadis Vasilakis | // displayName should be localized and lowercased |
417 | ca913781 | Miltiadis Vasilakis | PithosSubdirNode *node = (PithosSubdirNode *)item; |
418 | ca913781 | Miltiadis Vasilakis | NSMutableArray *containerExcludedDirectories = [syncContainersDictionary objectForKey:node.parent.displayName]; |
419 | ca913781 | Miltiadis Vasilakis | NSString *directoryName = [[node.displayName lowercaseString] stringByReplacingOccurrencesOfString:@"/" withString:@":"]; |
420 | ca913781 | Miltiadis Vasilakis | if (!containerExcludedDirectories || [containerExcludedDirectories containsObject:directoryName]) |
421 | ca913781 | Miltiadis Vasilakis | return [NSNumber numberWithUnsignedInteger:NSOffState]; |
422 | ca913781 | Miltiadis Vasilakis | else |
423 | ca913781 | Miltiadis Vasilakis | return [NSNumber numberWithUnsignedInteger:NSOnState]; |
424 | ca913781 | Miltiadis Vasilakis | } else if ([item class] == [PithosEmptyNode class]) { |
425 | ca913781 | Miltiadis Vasilakis | // Root files are off if parent container not in dictionary or if excluded |
426 | ca913781 | Miltiadis Vasilakis | PithosEmptyNode *node = (PithosEmptyNode *)item; |
427 | ca913781 | Miltiadis Vasilakis | NSMutableArray *containerExcludedDirectories = [syncContainersDictionary objectForKey:node.parent.displayName]; |
428 | ca913781 | Miltiadis Vasilakis | if (!containerExcludedDirectories || [containerExcludedDirectories containsObject:@""]) |
429 | ca913781 | Miltiadis Vasilakis | return [NSNumber numberWithUnsignedInteger:NSOffState]; |
430 | ca913781 | Miltiadis Vasilakis | else |
431 | ca913781 | Miltiadis Vasilakis | return [NSNumber numberWithUnsignedInteger:NSOnState]; |
432 | ca913781 | Miltiadis Vasilakis | } |
433 | ca913781 | Miltiadis Vasilakis | return [NSNumber numberWithUnsignedInteger:NSOffState]; |
434 | ca913781 | Miltiadis Vasilakis | } else if ([[tableColumn identifier] isEqualToString:@"path"]) { |
435 | ca913781 | Miltiadis Vasilakis | return (PithosNode *)item; |
436 | ca913781 | Miltiadis Vasilakis | } |
437 | ca913781 | Miltiadis Vasilakis | } |
438 | ca913781 | Miltiadis Vasilakis | return nil; |
439 | ca913781 | Miltiadis Vasilakis | } |
440 | ca913781 | Miltiadis Vasilakis | |
441 | ca913781 | Miltiadis Vasilakis | - (void)outlineView:(NSOutlineView *)outlineView setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn byItem:(id)item { |
442 | ca913781 | Miltiadis Vasilakis | if (outlineView == syncContainersOutlineView) { |
443 | ca913781 | Miltiadis Vasilakis | if ([[tableColumn identifier] isEqualToString:@"sync"]) { |
444 | ca913781 | Miltiadis Vasilakis | NSCellStateValue newState = [object unsignedIntegerValue]; |
445 | ca913781 | Miltiadis Vasilakis | if ([item class] == [PithosContainerNode class]) { |
446 | ca913781 | Miltiadis Vasilakis | // If new state is |
447 | ca913781 | Miltiadis Vasilakis | // mixed/on include container with no excluded directories |
448 | ca913781 | Miltiadis Vasilakis | // off exclude container |
449 | ca913781 | Miltiadis Vasilakis | PithosContainerNode *node = (PithosContainerNode *)item; |
450 | ca913781 | Miltiadis Vasilakis | if ((newState == NSOnState) || (newState == NSMixedState)) { |
451 | ca913781 | Miltiadis Vasilakis | [syncContainersDictionary setObject:[NSMutableArray array] forKey:node.displayName]; |
452 | ca913781 | Miltiadis Vasilakis | } else { |
453 | ca913781 | Miltiadis Vasilakis | [syncContainersDictionary removeObjectForKey:node.displayName]; |
454 | ca913781 | Miltiadis Vasilakis | } |
455 | ca913781 | Miltiadis Vasilakis | [outlineView reloadItem:item reloadChildren:YES]; |
456 | ca913781 | Miltiadis Vasilakis | } else if ([item class] == [PithosSubdirNode class]) { |
457 | ca913781 | Miltiadis Vasilakis | // If new state is |
458 | ca913781 | Miltiadis Vasilakis | // mixed/on include directory (if container not included, include and exclude all others) |
459 | ca913781 | Miltiadis Vasilakis | // off exclude directory |
460 | ca913781 | Miltiadis Vasilakis | PithosSubdirNode *node = (PithosSubdirNode *)item; |
461 | ca913781 | Miltiadis Vasilakis | NSMutableArray *containerExcludedDirectories = [syncContainersDictionary objectForKey:node.parent.displayName]; |
462 | ca913781 | Miltiadis Vasilakis | NSString *directoryName = [[node.displayName lowercaseString] stringByReplacingOccurrencesOfString:@"/" withString:@":"]; |
463 | ca913781 | Miltiadis Vasilakis | if ((newState == NSOnState) || (newState == NSMixedState)) { |
464 | ca913781 | Miltiadis Vasilakis | if (containerExcludedDirectories) { |
465 | ca913781 | Miltiadis Vasilakis | [containerExcludedDirectories removeObject:directoryName]; |
466 | ca913781 | Miltiadis Vasilakis | } else { |
467 | ca913781 | Miltiadis Vasilakis | NSMutableArray *newContainerExcludeDirectories = [NSMutableArray arrayWithObject:@""]; |
468 | ca913781 | Miltiadis Vasilakis | for (PithosNode *siblingNode in node.parent.children) { |
469 | ca913781 | Miltiadis Vasilakis | if ([siblingNode class] == [PithosSubdirNode class]) { |
470 | ca913781 | Miltiadis Vasilakis | NSString *siblingDirectoryName = [[siblingNode.displayName lowercaseString] stringByReplacingOccurrencesOfString:@"/" withString:@":"]; |
471 | ca913781 | Miltiadis Vasilakis | if (![siblingDirectoryName isEqualToString:directoryName] && |
472 | ca913781 | Miltiadis Vasilakis | ![newContainerExcludeDirectories containsObject:siblingDirectoryName]) |
473 | ca913781 | Miltiadis Vasilakis | [newContainerExcludeDirectories addObject:siblingDirectoryName]; |
474 | ca913781 | Miltiadis Vasilakis | } |
475 | ca913781 | Miltiadis Vasilakis | } |
476 | ca913781 | Miltiadis Vasilakis | [syncContainersDictionary setObject:newContainerExcludeDirectories forKey:node.parent.displayName]; |
477 | ca913781 | Miltiadis Vasilakis | } |
478 | ca913781 | Miltiadis Vasilakis | } else if (![containerExcludedDirectories containsObject:directoryName]) { |
479 | ca913781 | Miltiadis Vasilakis | [containerExcludedDirectories addObject:directoryName]; |
480 | ca913781 | Miltiadis Vasilakis | } |
481 | ca913781 | Miltiadis Vasilakis | [outlineView reloadItem:[outlineView parentForItem:item]]; |
482 | ca913781 | Miltiadis Vasilakis | } else if ([item class] == [PithosEmptyNode class]) { |
483 | ca913781 | Miltiadis Vasilakis | // If new state is |
484 | ca913781 | Miltiadis Vasilakis | // mixed/on include root files (if container not included, include and exclude all others) |
485 | ca913781 | Miltiadis Vasilakis | // off exclude root files |
486 | ca913781 | Miltiadis Vasilakis | PithosEmptyNode *node = (PithosEmptyNode *)item; |
487 | ca913781 | Miltiadis Vasilakis | NSMutableArray *containerExcludedDirectories = [syncContainersDictionary objectForKey:node.parent.displayName]; |
488 | ca913781 | Miltiadis Vasilakis | if ((newState == NSOnState) || (newState == NSMixedState)) { |
489 | ca913781 | Miltiadis Vasilakis | if (containerExcludedDirectories) { |
490 | ca913781 | Miltiadis Vasilakis | [containerExcludedDirectories removeObject:@""]; |
491 | ca913781 | Miltiadis Vasilakis | } else { |
492 | ca913781 | Miltiadis Vasilakis | NSMutableArray *newContainerExcludeDirectories = [NSMutableArray array]; |
493 | ca913781 | Miltiadis Vasilakis | for (PithosNode *siblingNode in node.parent.children) { |
494 | ca913781 | Miltiadis Vasilakis | if ([siblingNode class] == [PithosSubdirNode class]) { |
495 | ca913781 | Miltiadis Vasilakis | NSString *siblingDirectoryName = [[siblingNode.displayName lowercaseString] stringByReplacingOccurrencesOfString:@"/" withString:@":"]; |
496 | ca913781 | Miltiadis Vasilakis | if (![newContainerExcludeDirectories containsObject:siblingDirectoryName]) |
497 | ca913781 | Miltiadis Vasilakis | [newContainerExcludeDirectories addObject:siblingDirectoryName]; |
498 | ca913781 | Miltiadis Vasilakis | } |
499 | ca913781 | Miltiadis Vasilakis | } |
500 | ca913781 | Miltiadis Vasilakis | [syncContainersDictionary setObject:newContainerExcludeDirectories forKey:node.parent.displayName]; |
501 | ca913781 | Miltiadis Vasilakis | } |
502 | ca913781 | Miltiadis Vasilakis | } else if (![containerExcludedDirectories containsObject:@""]) { |
503 | ca913781 | Miltiadis Vasilakis | [containerExcludedDirectories addObject:@""]; |
504 | ca913781 | Miltiadis Vasilakis | } |
505 | ca913781 | Miltiadis Vasilakis | [outlineView reloadItem:[outlineView parentForItem:item]]; |
506 | ca913781 | Miltiadis Vasilakis | } |
507 | ca913781 | Miltiadis Vasilakis | [self updateSync]; |
508 | ca913781 | Miltiadis Vasilakis | } |
509 | ca913781 | Miltiadis Vasilakis | } |
510 | ca913781 | Miltiadis Vasilakis | } |
511 | ca913781 | Miltiadis Vasilakis | |
512 | 589a14ca | Miltiadis Vasilakis | @end |