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