Revision f474d3f4 Classes/Folder.m
b/Classes/Folder.m | ||
---|---|---|
15 | 15 |
|
16 | 16 |
@synthesize folderObject, parent, objects, folders, objectsAndFoldersCount; |
17 | 17 |
@synthesize name, sharing, contentType, lastModifiedString, metadata; |
18 |
@synthesize sortedContentsByName, sortedContentsByDate; |
|
18 | 19 |
|
19 | 20 |
#pragma mark - Object lifecycle |
20 | 21 |
|
... | ... | |
40 | 41 |
return [[[self alloc] init] autorelease]; |
41 | 42 |
} |
42 | 43 |
|
43 |
- (NSComparisonResult)compare:(Folder *)aFolder { |
|
44 |
return [self.name caseInsensitiveCompare:aFolder.name]; |
|
44 |
- (NSComparisonResult)compareByName:(id)item { |
|
45 |
return [self.name caseInsensitiveCompare:[item name]]; |
|
46 |
} |
|
47 |
|
|
48 |
- (NSComparisonResult)compareByDate:(id)item { |
|
49 |
return [self.lastModifiedString caseInsensitiveCompare:[item lastModifiedString]]; |
|
45 | 50 |
} |
46 | 51 |
|
47 | 52 |
#pragma mark - Serialization |
... | ... | |
64 | 69 |
[parent release]; |
65 | 70 |
[folders release]; |
66 | 71 |
[objects release]; |
67 |
[sortedContents release]; |
|
72 |
[sortedContentsByName release]; |
|
73 |
[sortedContentsByDate release]; |
|
68 | 74 |
[super dealloc]; |
69 | 75 |
} |
70 | 76 |
|
... | ... | |
170 | 176 |
} |
171 | 177 |
|
172 | 178 |
objects = [files retain]; |
173 |
[sortedContents release]; |
|
174 |
sortedContents = nil; |
|
179 |
[sortedContentsByName release]; |
|
180 |
sortedContentsByName = nil; |
|
181 |
[sortedContentsByDate release]; |
|
182 |
sortedContentsByDate = nil; |
|
183 |
} |
|
184 |
} |
|
185 |
|
|
186 |
- (NSArray *)sortedContentsByName { |
|
187 |
if (!sortedContentsByName) { |
|
188 |
NSMutableArray *contents = [[NSMutableArray alloc] initWithArray:[self.folders allValues]]; |
|
189 |
[contents addObjectsFromArray:[self.objects allValues]]; |
|
190 |
sortedContentsByName = [[NSArray alloc] initWithArray:[contents sortedArrayUsingSelector:@selector(compareByName:)]]; |
|
175 | 191 |
} |
192 |
return sortedContentsByName; |
|
176 | 193 |
} |
177 | 194 |
|
178 |
- (NSArray *)sortedContents { |
|
179 |
if (!sortedContents) { |
|
195 |
- (NSArray *)sortedContentsByDate {
|
|
196 |
if (!sortedContentsByDate) {
|
|
180 | 197 |
NSMutableArray *contents = [[NSMutableArray alloc] initWithArray:[self.folders allValues]]; |
181 | 198 |
[contents addObjectsFromArray:[self.objects allValues]]; |
182 |
sortedContents = [[NSArray alloc] initWithArray:[contents sortedArrayUsingSelector:@selector(compare:)]];
|
|
199 |
sortedContentsByDate = [[NSArray alloc] initWithArray:[contents sortedArrayUsingSelector:@selector(compareByDate:)]];
|
|
183 | 200 |
} |
184 |
return sortedContents; |
|
201 |
return sortedContentsByDate;
|
|
185 | 202 |
} |
186 | 203 |
|
187 | 204 |
- (NSUInteger)objectsAndFoldersCount { |
... | ... | |
190 | 207 |
|
191 | 208 |
#pragma mark - Actions |
192 | 209 |
|
193 |
- (NSArray *)sortedContentsUsingFilter:(NSString *)filter andScope:(NSString *)scope { |
|
194 |
if (!filter || !filter.length) |
|
195 |
return self.sortedContents; |
|
196 |
return [self.sortedContents objectsAtIndexes: |
|
197 |
[[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, self.sortedContents.count)] indexesPassingTest:^(NSUInteger idx, BOOL *stop) { |
|
198 |
id item = [self.sortedContents objectAtIndex:idx]; |
|
210 |
- (NSArray *)sortedContentsUsingFilter:(NSString *)filter scope:(NSString *)scope |
|
211 |
sortType:(NSString *)sortType sortDirection:(NSString *)sortDirection { |
|
212 |
NSArray *sortedContents = nil; |
|
213 |
if ([sortType isEqualToString:@"date"]) { |
|
214 |
sortedContents = self.sortedContentsByDate; |
|
215 |
} else { |
|
216 |
sortedContents = self.sortedContentsByName; |
|
217 |
} |
|
218 |
if ([sortDirection isEqualToString:@"Z-A"]) { |
|
219 |
sortedContents = [[sortedContents reverseObjectEnumerator] allObjects]; |
|
220 |
} |
|
221 |
if (!filter || !filter.length) { |
|
222 |
return sortedContents; |
|
223 |
} |
|
224 |
return [sortedContents objectsAtIndexes: |
|
225 |
[[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, sortedContents.count)] indexesPassingTest:^(NSUInteger idx, BOOL *stop) { |
|
226 |
id item = [sortedContents objectAtIndex:idx]; |
|
199 | 227 |
if ([scope isEqualToString:@"name"] || [scope isEqualToString:@"all"]) { |
200 | 228 |
NSString *itemName = [item name]; |
201 | 229 |
if (itemName) { |
... | ... | |
228 | 256 |
}]]; |
229 | 257 |
} |
230 | 258 |
|
231 |
- (NSArray *)sortedContentsWithNameThatStartsWith:(NSString *)filter { |
|
232 |
if (!filter || !filter.length) |
|
233 |
return self.sortedContents; |
|
234 |
return [self.sortedContents objectsAtIndexes: |
|
235 |
[[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, self.sortedContents.count)] indexesPassingTest:^(NSUInteger idx, BOOL *stop) { |
|
236 |
BOOL hasPrefix = [(NSString *)[[self.sortedContents objectAtIndex:idx] name] hasPrefix:filter]; |
|
237 |
if (hasPrefix) |
|
238 |
return YES; |
|
239 |
NSComparisonResult comparisonResult = [(NSString *)[[self.sortedContents objectAtIndex:idx] name] compare:filter]; |
|
240 |
if (comparisonResult == NSOrderedDescending) |
|
241 |
*stop = YES; |
|
242 |
return NO; |
|
243 |
}]]; |
|
244 |
} |
|
245 |
|
|
246 | 259 |
- (NSString *)fullPath { |
247 | 260 |
if (self.parent) { |
248 | 261 |
return [[self.parent fullPath] stringByAppendingFormat:@"/%@", self.name]; |
... | ... | |
255 | 268 |
|
256 | 269 |
- (void)addFolder:(Folder *)aFolder { |
257 | 270 |
[self.folders setObject:aFolder forKey:aFolder.name]; |
258 |
[sortedContents release]; |
|
259 |
sortedContents = nil; |
|
271 |
[sortedContentsByName release]; |
|
272 |
sortedContentsByName = nil; |
|
273 |
[sortedContentsByDate release]; |
|
274 |
sortedContentsByDate = nil; |
|
260 | 275 |
} |
261 | 276 |
|
262 | 277 |
- (void)addObject:(StorageObject *)anObject { |
263 | 278 |
[self.objects setObject:anObject forKey:anObject.name]; |
264 |
[sortedContents release]; |
|
265 |
sortedContents = nil; |
|
279 |
[sortedContentsByName release]; |
|
280 |
sortedContentsByName = nil; |
|
281 |
[sortedContentsByDate release]; |
|
282 |
sortedContentsByDate = nil; |
|
266 | 283 |
} |
267 | 284 |
|
268 | 285 |
- (void)removeFolder:(Folder *)aFolder { |
269 | 286 |
if ([self.folders objectForKey:aFolder.name]) { |
270 | 287 |
[self.folders removeObjectForKey:aFolder.name]; |
271 |
[sortedContents release]; |
|
272 |
sortedContents = nil; |
|
288 |
[sortedContentsByName release]; |
|
289 |
sortedContentsByName = nil; |
|
290 |
[sortedContentsByDate release]; |
|
291 |
sortedContentsByDate = nil; |
|
273 | 292 |
} |
274 | 293 |
} |
275 | 294 |
|
276 | 295 |
- (void)removeObject:(StorageObject *)anObject { |
277 | 296 |
if ([self.objects objectForKey:anObject.name]) { |
278 | 297 |
[self.objects removeObjectForKey:anObject.name]; |
279 |
[sortedContents release]; |
|
280 |
sortedContents = nil; |
|
298 |
[sortedContentsByName release]; |
|
299 |
sortedContentsByName = nil; |
|
300 |
[sortedContentsByDate release]; |
|
301 |
sortedContentsByDate = nil; |
|
281 | 302 |
} |
282 | 303 |
} |
283 | 304 |
|
Also available in: Unified diff