Statistics
| Branch: | Tag: | Revision:

root / Classes / Folder.m @ f474d3f4

History | View | Annotate | Download (10.2 kB)

1 700184fb Miltiadis Vasilakis
//
2 700184fb Miltiadis Vasilakis
//  Folder.m
3 700184fb Miltiadis Vasilakis
//  OpenStack
4 700184fb Miltiadis Vasilakis
//
5 700184fb Miltiadis Vasilakis
//  Created by Mike Mayo on 12/7/10.
6 700184fb Miltiadis Vasilakis
//  The OpenStack project is provided under the Apache 2.0 license.
7 700184fb Miltiadis Vasilakis
//
8 700184fb Miltiadis Vasilakis
9 700184fb Miltiadis Vasilakis
#import "Folder.h"
10 700184fb Miltiadis Vasilakis
#import "StorageObject.h"
11 700184fb Miltiadis Vasilakis
#import "NSObject+NSCoding.h"
12 45f2fce6 Miltiadis Vasilakis
#import "PithosUtilities.h"
13 700184fb Miltiadis Vasilakis
14 700184fb Miltiadis Vasilakis
@implementation Folder
15 700184fb Miltiadis Vasilakis
16 2106f96c Miltiadis Vasilakis
@synthesize folderObject, parent, objects, folders, objectsAndFoldersCount;
17 2106f96c Miltiadis Vasilakis
@synthesize name, sharing, contentType, lastModifiedString, metadata;
18 f474d3f4 Miltiadis Vasilakis
@synthesize sortedContentsByName, sortedContentsByDate;
19 700184fb Miltiadis Vasilakis
20 98344a26 Miltiadis Vasilakis
#pragma mark - Object lifecycle
21 700184fb Miltiadis Vasilakis
22 2106f96c Miltiadis Vasilakis
- (id)initWithObject:(StorageObject *)anObject {
23 98344a26 Miltiadis Vasilakis
    if ((self = [super init])) {
24 2106f96c Miltiadis Vasilakis
        self.folderObject = anObject;
25 2106f96c Miltiadis Vasilakis
        self.objects = [NSMutableDictionary dictionary];
26 2106f96c Miltiadis Vasilakis
        self.folders = [NSMutableDictionary dictionary];
27 700184fb Miltiadis Vasilakis
    }
28 700184fb Miltiadis Vasilakis
    return self;
29 700184fb Miltiadis Vasilakis
}
30 700184fb Miltiadis Vasilakis
31 2106f96c Miltiadis Vasilakis
- (id)init {
32 2106f96c Miltiadis Vasilakis
    StorageObject *anObject = [[[StorageObject alloc] init] autorelease];
33 2106f96c Miltiadis Vasilakis
    return [self initWithObject:anObject];
34 2106f96c Miltiadis Vasilakis
}
35 2106f96c Miltiadis Vasilakis
36 2106f96c Miltiadis Vasilakis
+ (id)folderWithObject:(StorageObject *)anObject {
37 2106f96c Miltiadis Vasilakis
    return [[[self alloc] initWithObject:anObject] autorelease];
38 2106f96c Miltiadis Vasilakis
}
39 2106f96c Miltiadis Vasilakis
40 98344a26 Miltiadis Vasilakis
+ (id)folder {
41 98344a26 Miltiadis Vasilakis
    return [[[self alloc] init] autorelease];
42 98344a26 Miltiadis Vasilakis
}
43 98344a26 Miltiadis Vasilakis
44 f474d3f4 Miltiadis Vasilakis
- (NSComparisonResult)compareByName:(id)item {
45 f474d3f4 Miltiadis Vasilakis
    return [self.name caseInsensitiveCompare:[item name]];
46 f474d3f4 Miltiadis Vasilakis
}
47 f474d3f4 Miltiadis Vasilakis
48 f474d3f4 Miltiadis Vasilakis
- (NSComparisonResult)compareByDate:(id)item {
49 f474d3f4 Miltiadis Vasilakis
    return [self.lastModifiedString caseInsensitiveCompare:[item lastModifiedString]];
50 700184fb Miltiadis Vasilakis
}
51 700184fb Miltiadis Vasilakis
52 98344a26 Miltiadis Vasilakis
#pragma mark - Serialization
53 98344a26 Miltiadis Vasilakis
54 700184fb Miltiadis Vasilakis
- (id)initWithCoder:(NSCoder *)coder {
55 98344a26 Miltiadis Vasilakis
    if ((self = [super init])) {
56 700184fb Miltiadis Vasilakis
        [self autoDecode:coder];
57 700184fb Miltiadis Vasilakis
    }
58 700184fb Miltiadis Vasilakis
    return self;
59 700184fb Miltiadis Vasilakis
}
60 700184fb Miltiadis Vasilakis
61 98344a26 Miltiadis Vasilakis
- (void)encodeWithCoder:(NSCoder *)coder {
62 98344a26 Miltiadis Vasilakis
    [self autoEncodeWithCoder:coder];
63 98344a26 Miltiadis Vasilakis
}
64 98344a26 Miltiadis Vasilakis
65 98344a26 Miltiadis Vasilakis
#pragma mark - Memory management
66 98344a26 Miltiadis Vasilakis
67 98344a26 Miltiadis Vasilakis
-(void)dealloc {
68 2106f96c Miltiadis Vasilakis
    [folderObject release];
69 98344a26 Miltiadis Vasilakis
	[parent release];
70 98344a26 Miltiadis Vasilakis
	[folders release];
71 98344a26 Miltiadis Vasilakis
	[objects release];
72 f474d3f4 Miltiadis Vasilakis
    [sortedContentsByName release];
73 f474d3f4 Miltiadis Vasilakis
    [sortedContentsByDate release];
74 98344a26 Miltiadis Vasilakis
	[super dealloc];
75 98344a26 Miltiadis Vasilakis
}
76 98344a26 Miltiadis Vasilakis
77 98344a26 Miltiadis Vasilakis
#pragma mark - Properties
78 700184fb Miltiadis Vasilakis
79 2106f96c Miltiadis Vasilakis
- (void)setName:(NSString *)aName {
80 2106f96c Miltiadis Vasilakis
    self.folderObject.name = aName;
81 2106f96c Miltiadis Vasilakis
}
82 2106f96c Miltiadis Vasilakis
83 2106f96c Miltiadis Vasilakis
- (NSString *)name {
84 2106f96c Miltiadis Vasilakis
    return self.folderObject.name;
85 2106f96c Miltiadis Vasilakis
}
86 2106f96c Miltiadis Vasilakis
87 2106f96c Miltiadis Vasilakis
- (void)setSharing:(NSString *)aSharing {
88 2106f96c Miltiadis Vasilakis
    self.folderObject.sharing = aSharing;
89 2106f96c Miltiadis Vasilakis
}
90 2106f96c Miltiadis Vasilakis
91 2106f96c Miltiadis Vasilakis
- (NSString *)sharing {
92 2106f96c Miltiadis Vasilakis
    return self.folderObject.sharing;
93 2106f96c Miltiadis Vasilakis
}
94 2106f96c Miltiadis Vasilakis
95 2106f96c Miltiadis Vasilakis
- (void)setContentType:(NSString *)aContentType {
96 2106f96c Miltiadis Vasilakis
    self.folderObject.contentType = aContentType;
97 2106f96c Miltiadis Vasilakis
}
98 2106f96c Miltiadis Vasilakis
99 2106f96c Miltiadis Vasilakis
- (NSString *)contentType {
100 2106f96c Miltiadis Vasilakis
    return self.folderObject.contentType;
101 2106f96c Miltiadis Vasilakis
}
102 2106f96c Miltiadis Vasilakis
103 2106f96c Miltiadis Vasilakis
- (void)setMetadata:(NSMutableDictionary *)aMetadata {
104 2106f96c Miltiadis Vasilakis
    self.folderObject.metadata = aMetadata;
105 2106f96c Miltiadis Vasilakis
}
106 2106f96c Miltiadis Vasilakis
107 2106f96c Miltiadis Vasilakis
- (NSMutableDictionary *)metadata {
108 2106f96c Miltiadis Vasilakis
    return self.folderObject.metadata;
109 2106f96c Miltiadis Vasilakis
}
110 2106f96c Miltiadis Vasilakis
111 2106f96c Miltiadis Vasilakis
- (void)setLastModifiedString:(NSString *)aLastModifiedString {
112 2106f96c Miltiadis Vasilakis
    self.folderObject.lastModifiedString = aLastModifiedString;
113 2106f96c Miltiadis Vasilakis
}
114 2106f96c Miltiadis Vasilakis
115 2106f96c Miltiadis Vasilakis
- (NSString *)lastModifiedString {
116 2106f96c Miltiadis Vasilakis
    return self.folderObject.lastModifiedString;
117 2106f96c Miltiadis Vasilakis
}
118 2106f96c Miltiadis Vasilakis
119 700184fb Miltiadis Vasilakis
- (void)setObjects:(NSMutableDictionary *)objs {
120 98344a26 Miltiadis Vasilakis
    if (![objects isEqualToDictionary:objs]) {
121 e06c24cf Miltiadis Vasilakis
        [objects release];
122 98344a26 Miltiadis Vasilakis
        NSMutableDictionary *folderedFiles = [NSMutableDictionary dictionary];
123 98344a26 Miltiadis Vasilakis
        NSMutableDictionary *files = [NSMutableDictionary dictionary];
124 98344a26 Miltiadis Vasilakis
        self.folders = [[NSMutableDictionary alloc] init];
125 700184fb Miltiadis Vasilakis
126 700184fb Miltiadis Vasilakis
        for (NSString *key in objs) {
127 700184fb Miltiadis Vasilakis
            StorageObject *object = [objs objectForKey:key];
128 45f2fce6 Miltiadis Vasilakis
            BOOL objectHasTrailingSlash = NO;
129 45f2fce6 Miltiadis Vasilakis
            if ([object.name hasSuffix:@"/"]) {
130 45f2fce6 Miltiadis Vasilakis
                objectHasTrailingSlash = YES;
131 45f2fce6 Miltiadis Vasilakis
                object.name = [object.name substringToIndex:(object.name.length - 1)];
132 45f2fce6 Miltiadis Vasilakis
            }
133 45f2fce6 Miltiadis Vasilakis
134 98344a26 Miltiadis Vasilakis
            NSRange slashRange = [object.name rangeOfString:@"/"];
135 98344a26 Miltiadis Vasilakis
            if (slashRange.location != NSNotFound) {
136 700184fb Miltiadis Vasilakis
                // build up the folder structure
137 98344a26 Miltiadis Vasilakis
                NSString *folderName = [object.name substringToIndex:slashRange.location];
138 98344a26 Miltiadis Vasilakis
                object.name = [object.name substringFromIndex:(slashRange.location + 1)];
139 45f2fce6 Miltiadis Vasilakis
                if (objectHasTrailingSlash)
140 45f2fce6 Miltiadis Vasilakis
                    object.name = [object.name stringByAppendingString:@"/"];
141 700184fb Miltiadis Vasilakis
                
142 700184fb Miltiadis Vasilakis
                if (![folderedFiles objectForKey:folderName]) {
143 e06c24cf Miltiadis Vasilakis
                    [folderedFiles setObject:[NSMutableDictionary dictionary] forKey:folderName];
144 700184fb Miltiadis Vasilakis
                }
145 700184fb Miltiadis Vasilakis
                
146 45f2fce6 Miltiadis Vasilakis
                NSMutableDictionary *folderFiles = [folderedFiles objectForKey:folderName];
147 45f2fce6 Miltiadis Vasilakis
                [folderFiles setObject:object forKey:object.name]; 
148 45f2fce6 Miltiadis Vasilakis
            } else if ([PithosUtilities isContentTypeDirectory:object.contentType]) {
149 2106f96c Miltiadis Vasilakis
                Folder *folder = [Folder folderWithObject:object];
150 45f2fce6 Miltiadis Vasilakis
                if (objectHasTrailingSlash)
151 2106f96c Miltiadis Vasilakis
                    folder.name = [folder.name stringByAppendingString:@"/"];
152 700184fb Miltiadis Vasilakis
                folder.parent = self;
153 700184fb Miltiadis Vasilakis
                [self.folders setObject:folder forKey:folder.name];
154 700184fb Miltiadis Vasilakis
            } else {
155 45f2fce6 Miltiadis Vasilakis
                // put the files in this folder 
156 45f2fce6 Miltiadis Vasilakis
                if (objectHasTrailingSlash)
157 45f2fce6 Miltiadis Vasilakis
                    object.name = [object.name stringByAppendingString:@"/"];
158 700184fb Miltiadis Vasilakis
                [files setObject:object forKey:object.name];
159 700184fb Miltiadis Vasilakis
            }
160 700184fb Miltiadis Vasilakis
        }
161 700184fb Miltiadis Vasilakis
        
162 700184fb Miltiadis Vasilakis
        // take the foldered files and recursively build the rest of the folder structure
163 98344a26 Miltiadis Vasilakis
        for (NSString *folderName in [folderedFiles allKeys]) {
164 2106f96c Miltiadis Vasilakis
            Folder *folder;
165 38d59b6c Miltiadis Vasilakis
            StorageObject *object = [objs objectForKey:folderName];
166 98344a26 Miltiadis Vasilakis
            if (object && [PithosUtilities isContentTypeDirectory:object.contentType]) {
167 2106f96c Miltiadis Vasilakis
                folder = [Folder folderWithObject:object];
168 2989bee3 Miltiadis Vasilakis
            } else {
169 2106f96c Miltiadis Vasilakis
                folder = [Folder folder];
170 2106f96c Miltiadis Vasilakis
                folder.name = folderName;
171 2989bee3 Miltiadis Vasilakis
                folder.metadata = [NSMutableDictionary dictionary];
172 45f2fce6 Miltiadis Vasilakis
            }
173 2106f96c Miltiadis Vasilakis
            folder.parent = self;
174 2106f96c Miltiadis Vasilakis
            folder.objects = [folderedFiles objectForKey:folderName];
175 700184fb Miltiadis Vasilakis
            [self.folders setObject:folder forKey:folder.name];
176 700184fb Miltiadis Vasilakis
        }
177 700184fb Miltiadis Vasilakis
        
178 98344a26 Miltiadis Vasilakis
        objects = [files retain];
179 f474d3f4 Miltiadis Vasilakis
        [sortedContentsByName release];
180 f474d3f4 Miltiadis Vasilakis
        sortedContentsByName = nil;
181 f474d3f4 Miltiadis Vasilakis
        [sortedContentsByDate release];
182 f474d3f4 Miltiadis Vasilakis
        sortedContentsByDate = nil;
183 f474d3f4 Miltiadis Vasilakis
    }
184 f474d3f4 Miltiadis Vasilakis
}
185 f474d3f4 Miltiadis Vasilakis
186 f474d3f4 Miltiadis Vasilakis
- (NSArray *)sortedContentsByName {
187 f474d3f4 Miltiadis Vasilakis
    if (!sortedContentsByName) {
188 f474d3f4 Miltiadis Vasilakis
        NSMutableArray *contents = [[NSMutableArray alloc] initWithArray:[self.folders allValues]];
189 f474d3f4 Miltiadis Vasilakis
        [contents addObjectsFromArray:[self.objects allValues]];
190 f474d3f4 Miltiadis Vasilakis
        sortedContentsByName = [[NSArray alloc] initWithArray:[contents sortedArrayUsingSelector:@selector(compareByName:)]];
191 700184fb Miltiadis Vasilakis
    }
192 f474d3f4 Miltiadis Vasilakis
    return sortedContentsByName;
193 700184fb Miltiadis Vasilakis
}
194 700184fb Miltiadis Vasilakis
195 f474d3f4 Miltiadis Vasilakis
- (NSArray *)sortedContentsByDate {
196 f474d3f4 Miltiadis Vasilakis
    if (!sortedContentsByDate) {
197 98344a26 Miltiadis Vasilakis
        NSMutableArray *contents = [[NSMutableArray alloc] initWithArray:[self.folders allValues]];
198 98344a26 Miltiadis Vasilakis
        [contents addObjectsFromArray:[self.objects allValues]];
199 f474d3f4 Miltiadis Vasilakis
        sortedContentsByDate = [[NSArray alloc] initWithArray:[contents sortedArrayUsingSelector:@selector(compareByDate:)]];
200 700184fb Miltiadis Vasilakis
    }
201 f474d3f4 Miltiadis Vasilakis
    return sortedContentsByDate;
202 700184fb Miltiadis Vasilakis
}
203 700184fb Miltiadis Vasilakis
204 a20544e8 Miltiadis Vasilakis
- (NSUInteger)objectsAndFoldersCount {
205 a20544e8 Miltiadis Vasilakis
    return (self.objects.count + self.folders.count);
206 a20544e8 Miltiadis Vasilakis
}
207 a20544e8 Miltiadis Vasilakis
208 98344a26 Miltiadis Vasilakis
#pragma mark - Actions
209 700184fb Miltiadis Vasilakis
210 f474d3f4 Miltiadis Vasilakis
- (NSArray *)sortedContentsUsingFilter:(NSString *)filter scope:(NSString *)scope
211 f474d3f4 Miltiadis Vasilakis
                              sortType:(NSString *)sortType sortDirection:(NSString *)sortDirection {
212 f474d3f4 Miltiadis Vasilakis
    NSArray *sortedContents = nil;
213 f474d3f4 Miltiadis Vasilakis
    if ([sortType isEqualToString:@"date"]) {
214 f474d3f4 Miltiadis Vasilakis
        sortedContents = self.sortedContentsByDate;
215 f474d3f4 Miltiadis Vasilakis
    } else {
216 f474d3f4 Miltiadis Vasilakis
        sortedContents = self.sortedContentsByName;
217 f474d3f4 Miltiadis Vasilakis
    }
218 f474d3f4 Miltiadis Vasilakis
    if ([sortDirection isEqualToString:@"Z-A"]) {
219 f474d3f4 Miltiadis Vasilakis
        sortedContents = [[sortedContents reverseObjectEnumerator] allObjects];
220 f474d3f4 Miltiadis Vasilakis
    }
221 f474d3f4 Miltiadis Vasilakis
    if (!filter || !filter.length) {
222 f474d3f4 Miltiadis Vasilakis
        return sortedContents;
223 f474d3f4 Miltiadis Vasilakis
    }
224 f474d3f4 Miltiadis Vasilakis
    return [sortedContents objectsAtIndexes:
225 f474d3f4 Miltiadis Vasilakis
            [[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, sortedContents.count)] indexesPassingTest:^(NSUInteger idx, BOOL *stop) {
226 f474d3f4 Miltiadis Vasilakis
        id item = [sortedContents objectAtIndex:idx];
227 2106f96c Miltiadis Vasilakis
        if ([scope isEqualToString:@"name"] || [scope isEqualToString:@"all"]) {
228 2106f96c Miltiadis Vasilakis
            NSString *itemName = [item name];
229 2106f96c Miltiadis Vasilakis
            if (itemName) {
230 2106f96c Miltiadis Vasilakis
                NSUInteger nameLocation = [itemName rangeOfString:filter
231 2106f96c Miltiadis Vasilakis
                                                          options:NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch].location;
232 2106f96c Miltiadis Vasilakis
                if (nameLocation != NSNotFound)
233 2106f96c Miltiadis Vasilakis
                    return YES;
234 2106f96c Miltiadis Vasilakis
            }
235 2106f96c Miltiadis Vasilakis
        }
236 2106f96c Miltiadis Vasilakis
        if ([scope isEqualToString:@"date"] || [scope isEqualToString:@"all"]) {
237 2106f96c Miltiadis Vasilakis
            NSString *itemDate = [item lastModifiedString];
238 2106f96c Miltiadis Vasilakis
            if (itemDate) {
239 2106f96c Miltiadis Vasilakis
                NSUInteger dateLocation = [itemDate rangeOfString:filter
240 2106f96c Miltiadis Vasilakis
                                                          options:NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch].location;
241 2106f96c Miltiadis Vasilakis
                if (dateLocation != NSNotFound)
242 2106f96c Miltiadis Vasilakis
                    return YES;
243 2106f96c Miltiadis Vasilakis
            }
244 2106f96c Miltiadis Vasilakis
        }
245 2106f96c Miltiadis Vasilakis
        if ([scope isEqualToString:@"type"] || [scope isEqualToString:@"all"]) {
246 2106f96c Miltiadis Vasilakis
            NSString *itemType = [item contentType];
247 2106f96c Miltiadis Vasilakis
            if (itemType) {
248 2106f96c Miltiadis Vasilakis
                NSUInteger typeLocation = [itemType rangeOfString:filter
249 2106f96c Miltiadis Vasilakis
                                                          options:NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch].location;
250 2106f96c Miltiadis Vasilakis
                if (typeLocation != NSNotFound)
251 2106f96c Miltiadis Vasilakis
                    return YES;
252 2106f96c Miltiadis Vasilakis
            }
253 2106f96c Miltiadis Vasilakis
        }
254 2106f96c Miltiadis Vasilakis
        // Consider searching additional metadata when the scope is all
255 2106f96c Miltiadis Vasilakis
        return NO;
256 2106f96c Miltiadis Vasilakis
    }]];
257 2106f96c Miltiadis Vasilakis
}
258 2106f96c Miltiadis Vasilakis
259 700184fb Miltiadis Vasilakis
- (NSString *)fullPath {
260 98344a26 Miltiadis Vasilakis
    if (self.parent) {
261 98344a26 Miltiadis Vasilakis
        return [[self.parent fullPath] stringByAppendingFormat:@"/%@", self.name];
262 98344a26 Miltiadis Vasilakis
    } else if (self.name) {
263 98344a26 Miltiadis Vasilakis
        return self.name;
264 98344a26 Miltiadis Vasilakis
    } else {
265 98344a26 Miltiadis Vasilakis
        return @"";
266 700184fb Miltiadis Vasilakis
    }
267 700184fb Miltiadis Vasilakis
}
268 700184fb Miltiadis Vasilakis
269 a20544e8 Miltiadis Vasilakis
- (void)addFolder:(Folder *)aFolder {
270 a20544e8 Miltiadis Vasilakis
    [self.folders setObject:aFolder forKey:aFolder.name];
271 f474d3f4 Miltiadis Vasilakis
    [sortedContentsByName release];
272 f474d3f4 Miltiadis Vasilakis
    sortedContentsByName = nil;
273 f474d3f4 Miltiadis Vasilakis
    [sortedContentsByDate release];
274 f474d3f4 Miltiadis Vasilakis
    sortedContentsByDate = nil;
275 a20544e8 Miltiadis Vasilakis
}
276 a20544e8 Miltiadis Vasilakis
277 a20544e8 Miltiadis Vasilakis
- (void)addObject:(StorageObject *)anObject {
278 a20544e8 Miltiadis Vasilakis
    [self.objects setObject:anObject forKey:anObject.name];
279 f474d3f4 Miltiadis Vasilakis
    [sortedContentsByName release];
280 f474d3f4 Miltiadis Vasilakis
    sortedContentsByName = nil;
281 f474d3f4 Miltiadis Vasilakis
    [sortedContentsByDate release];
282 f474d3f4 Miltiadis Vasilakis
    sortedContentsByDate = nil;
283 a20544e8 Miltiadis Vasilakis
}
284 a20544e8 Miltiadis Vasilakis
285 a20544e8 Miltiadis Vasilakis
- (void)removeFolder:(Folder *)aFolder {
286 a20544e8 Miltiadis Vasilakis
    if ([self.folders objectForKey:aFolder.name]) {
287 a20544e8 Miltiadis Vasilakis
        [self.folders removeObjectForKey:aFolder.name];
288 f474d3f4 Miltiadis Vasilakis
        [sortedContentsByName release];
289 f474d3f4 Miltiadis Vasilakis
        sortedContentsByName = nil;
290 f474d3f4 Miltiadis Vasilakis
        [sortedContentsByDate release];
291 f474d3f4 Miltiadis Vasilakis
        sortedContentsByDate = nil;
292 a20544e8 Miltiadis Vasilakis
    }
293 a20544e8 Miltiadis Vasilakis
}
294 a20544e8 Miltiadis Vasilakis
295 a20544e8 Miltiadis Vasilakis
- (void)removeObject:(StorageObject *)anObject {
296 a20544e8 Miltiadis Vasilakis
    if ([self.objects objectForKey:anObject.name]) {
297 a20544e8 Miltiadis Vasilakis
        [self.objects removeObjectForKey:anObject.name];
298 f474d3f4 Miltiadis Vasilakis
        [sortedContentsByName release];
299 f474d3f4 Miltiadis Vasilakis
        sortedContentsByName = nil;
300 f474d3f4 Miltiadis Vasilakis
        [sortedContentsByDate release];
301 f474d3f4 Miltiadis Vasilakis
        sortedContentsByDate = nil;
302 a20544e8 Miltiadis Vasilakis
    }
303 a20544e8 Miltiadis Vasilakis
}
304 a20544e8 Miltiadis Vasilakis
305 700184fb Miltiadis Vasilakis
@end