Revision 29cc4957
b/Classes/AddPhotoViewController.m | ||
---|---|---|
19 | 19 |
#import "FolderViewController.h" |
20 | 20 |
#import "NSObject+Conveniences.h" |
21 | 21 |
#import "APICallback.h" |
22 |
#import "ComputeModel.h" |
|
22 | 23 |
|
23 | 24 |
#define kName 0 |
24 | 25 |
|
... | ... | |
397 | 398 |
[activityIndicatorView removeFromSuperview]; |
398 | 399 |
object.data = nil; |
399 | 400 |
object.sharing = folder.sharing; |
401 |
object.lastModified = [ComputeModel dateFromRFC1123String:[request.responseHeaders objectForKey:@"Date"]]; |
|
400 | 402 |
BOOL currentFolderIsRoot = NO; |
401 | 403 |
if ([folderViewController.folder isEqual:container.rootFolder]) { |
402 | 404 |
currentFolderIsRoot = YES; |
b/Classes/ComputeModel.h | ||
---|---|---|
24 | 24 |
- (NSDate *)dateForKey:(NSString *)key inDict:(NSDictionary *)dict; |
25 | 25 |
|
26 | 26 |
+ (NSDate *)dateFromString:(NSString *)dateString; |
27 |
+ (NSDate *)dateFromRFC1123String:(NSString *)dateString; |
|
28 |
+ (NSString *)localDateDescriptionFromDate:(NSDate *)date; |
|
27 | 29 |
- (NSDate *)dateFromString:(NSString *)dateString; |
28 | 30 |
|
29 | 31 |
- (NSComparisonResult)compare:(ComputeModel *)aComputeModel; |
b/Classes/ComputeModel.m | ||
---|---|---|
59 | 59 |
#pragma mark - |
60 | 60 |
#pragma mark Date Parser |
61 | 61 |
|
62 |
+ (NSDate *)dateFromString:(NSString *)dateString { |
|
63 |
return nil; // temporarily removing date parsing for performance |
|
64 |
|
|
65 |
/* |
|
66 |
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; |
|
67 |
[dateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease]]; |
|
68 |
// example: 2009-11-04T19:46:20.192723 |
|
62 |
+ (NSDate *)dateFromString:(NSString *)dateString { |
|
63 |
// example: 2009-11-04T19:46:20.192723 |
|
69 | 64 |
// 2010-01-26T12:07:32-06:00 |
65 |
NSMutableDictionary *threadDict = [[NSThread currentThread] threadDictionary]; |
|
66 |
NSDateFormatter *dateFormatter = [threadDict objectForKey:@"iso8601DateFormatter"]; |
|
67 |
if (!dateFormatter) { |
|
68 |
dateFormatter = [[NSDateFormatter alloc] init]; |
|
69 |
[dateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease]]; |
|
70 |
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ"]; |
|
71 |
[threadDict setObject:dateFormatter forKey:@"iso8601DateFormatter"]; |
|
72 |
[dateFormatter release]; |
|
73 |
} |
|
74 |
|
|
75 |
return [dateFormatter dateFromString:[dateString stringByReplacingOccurrencesOfString:@":" |
|
76 |
withString:@"" |
|
77 |
options:NSBackwardsSearch |
|
78 |
range:NSMakeRange(([dateString length] - 3), 1)]]; |
|
79 |
} |
|
70 | 80 |
|
71 |
// this is nasty, but -06:00 is not a valid timezone format. converting to -0600 style |
|
72 |
dateString = [NSString stringWithFormat:@"%@%@", [dateString substringToIndex:22], [dateString substringFromIndex:23]]; |
|
73 |
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'H:mm:ssZ"]; |
|
81 |
+ (NSDate *)dateFromRFC1123String:(NSString *)dateString { |
|
82 |
NSMutableDictionary *threadDict = [[NSThread currentThread] threadDictionary]; |
|
83 |
NSDateFormatter *dateFormatter = [threadDict objectForKey:@"rfc1123DateFormatter"]; |
|
84 |
if (!dateFormatter) { |
|
85 |
dateFormatter = [[NSDateFormatter alloc] init]; |
|
86 |
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]]; |
|
87 |
[dateFormatter setDateFormat:@"eee, dd MMM yyyy HH:mm:ss 'GMT'"]; |
|
88 |
[threadDict setObject:dateFormatter forKey:@"rfc1123DateFormatter"]; |
|
89 |
[dateFormatter release]; |
|
90 |
} |
|
91 |
return [dateFormatter dateFromString:dateString]; |
|
92 |
} |
|
74 | 93 |
|
75 |
NSDate *date = [dateFormatter dateFromString:dateString]; |
|
76 |
[dateFormatter release]; |
|
77 |
|
|
78 |
return date; |
|
79 |
*/ |
|
94 |
+ (NSString *)localDateDescriptionFromDate:(NSDate *)date { |
|
95 |
NSMutableDictionary *threadDict = [[NSThread currentThread] threadDictionary]; |
|
96 |
NSDateFormatter *dateFormatterLocal = [threadDict objectForKey:@"dateFormatterLocal"]; |
|
97 |
if (!dateFormatterLocal) { |
|
98 |
dateFormatterLocal = [[NSDateFormatter alloc] init]; |
|
99 |
[dateFormatterLocal setTimeZone:[NSTimeZone localTimeZone]]; |
|
100 |
[dateFormatterLocal setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; |
|
101 |
[threadDict setObject:dateFormatterLocal forKey:@"dateFormatterLocal"]; |
|
102 |
[dateFormatterLocal release]; |
|
103 |
} |
|
104 |
return [dateFormatterLocal stringFromDate:date]; |
|
80 | 105 |
} |
81 | 106 |
|
82 | 107 |
- (NSDate *)dateFromString:(NSString *)dateString { |
b/Classes/FolderViewController.h | ||
---|---|---|
32 | 32 |
|
33 | 33 |
IBOutlet UITableView *tableView; |
34 | 34 |
IBOutlet UIBarButtonItem *homeButton; |
35 |
IBOutlet UIBarButtonItem *refreshButton; |
|
35 | 36 |
FolderDetailViewController *folderDetailVC; |
36 | 37 |
StorageObjectViewController *selectedObjectViewController; |
37 | 38 |
} |
... | ... | |
48 | 49 |
@property (nonatomic, assign) BOOL folderHasBeenRemoved; |
49 | 50 |
@property (nonatomic, assign) BOOL refreshWhenAppeared; |
50 | 51 |
@property (nonatomic, retain) IBOutlet UITableView *tableView; |
52 |
@property (nonatomic, retain) IBOutlet UIBarButtonItem *refreshButton; |
|
51 | 53 |
@property (nonatomic, assign) FolderDetailViewController *folderDetailVC; |
52 | 54 |
@property (nonatomic, assign) StorageObjectViewController *selectedObjectViewController; |
53 | 55 |
|
b/Classes/FolderViewController.m | ||
---|---|---|
28 | 28 |
#import "APICallback.h" |
29 | 29 |
#import "OpenStackAppDelegate.h" |
30 | 30 |
#import <MobileCoreServices/MobileCoreServices.h> |
31 |
#import "ComputeModel.h" |
|
31 | 32 |
|
32 | 33 |
|
33 | 34 |
@implementation FolderViewController |
34 | 35 |
|
35 |
@synthesize account, container, folder, containersViewController, selectedContainerIndexPath, contentsLoaded, parentFolderViewController, selectedFolderIndexPath, tableView, needsRefreshing, folderHasBeenRemoved, refreshWhenAppeared, folderDetailVC, selectedObjectViewController; |
|
36 |
@synthesize account, container, folder, containersViewController, selectedContainerIndexPath, contentsLoaded, parentFolderViewController, selectedFolderIndexPath, tableView, needsRefreshing, folderHasBeenRemoved, refreshWhenAppeared, folderDetailVC, selectedObjectViewController, refreshButton;
|
|
36 | 37 |
|
37 | 38 |
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { |
38 | 39 |
return (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) || (toInterfaceOrientation == UIInterfaceOrientationPortrait); |
... | ... | |
250 | 251 |
udic.UTI = (NSString *)uti; |
251 | 252 |
if ([udic.icons count] > 0) |
252 | 253 |
cell.imageView.image = [udic.icons objectAtIndex:0]; |
253 |
cell.detailTextLabel.text = [NSString stringWithFormat:@"%@, %@", [item humanizedBytes], [item contentType]]; |
|
254 |
if ([item lastModifiedString]) |
|
255 |
cell.detailTextLabel.text = [NSString stringWithFormat:@"%@, %@", [item humanizedBytes], [item lastModifiedString]]; |
|
256 |
else |
|
257 |
cell.detailTextLabel.text = [item humanizedBytes]; |
|
254 | 258 |
} |
255 | 259 |
|
256 | 260 |
return cell; |
... | ... | |
466 | 470 |
[deleteActionSheet release]; |
467 | 471 |
[parentFolderViewController release]; |
468 | 472 |
[selectedFolderIndexPath release]; |
473 |
[refreshButton release]; |
|
469 | 474 |
[super dealloc]; |
470 | 475 |
} |
471 | 476 |
|
b/Classes/FolderViewController.xib | ||
---|---|---|
1 | 1 |
<?xml version="1.0" encoding="UTF-8"?> |
2 | 2 |
<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.10"> |
3 | 3 |
<data> |
4 |
<int key="IBDocument.SystemTarget">1056</int>
|
|
5 |
<string key="IBDocument.SystemVersion">10K549</string>
|
|
6 |
<string key="IBDocument.InterfaceBuilderVersion">1306</string>
|
|
7 |
<string key="IBDocument.AppKitVersion">1038.36</string>
|
|
8 |
<string key="IBDocument.HIToolboxVersion">461.00</string>
|
|
4 |
<int key="IBDocument.SystemTarget">1296</int>
|
|
5 |
<string key="IBDocument.SystemVersion">11E53</string>
|
|
6 |
<string key="IBDocument.InterfaceBuilderVersion">2182</string>
|
|
7 |
<string key="IBDocument.AppKitVersion">1138.47</string>
|
|
8 |
<string key="IBDocument.HIToolboxVersion">569.00</string>
|
|
9 | 9 |
<object class="NSMutableDictionary" key="IBDocument.PluginVersions"> |
10 | 10 |
<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string> |
11 |
<string key="NS.object.0">301</string>
|
|
11 |
<string key="NS.object.0">1181</string>
|
|
12 | 12 |
</object> |
13 | 13 |
<object class="NSArray" key="IBDocument.IntegratedClassDependencies"> |
14 | 14 |
<bool key="EncodedWithXMLCoder">YES</bool> |
... | ... | |
23 | 23 |
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string> |
24 | 24 |
</object> |
25 | 25 |
<object class="NSMutableDictionary" key="IBDocument.Metadata"> |
26 |
<bool key="EncodedWithXMLCoder">YES</bool> |
|
27 |
<object class="NSArray" key="dict.sortedKeys" id="0"> |
|
28 |
<bool key="EncodedWithXMLCoder">YES</bool> |
|
29 |
</object> |
|
30 |
<reference key="dict.values" ref="0"/> |
|
26 |
<string key="NS.key.0">PluginDependencyRecalculationVersion</string> |
|
27 |
<integer value="1" key="NS.object.0"/> |
|
31 | 28 |
</object> |
32 | 29 |
<object class="NSMutableArray" key="IBDocument.RootObjects" id="1000"> |
33 | 30 |
<bool key="EncodedWithXMLCoder">YES</bool> |
... | ... | |
49 | 46 |
<int key="NSvFlags">266</int> |
50 | 47 |
<string key="NSFrame">{{0, 416}, {320, 44}}</string> |
51 | 48 |
<reference key="NSSuperview" ref="228054471"/> |
49 |
<reference key="NSWindow"/> |
|
52 | 50 |
<bool key="IBUIOpaque">NO</bool> |
53 | 51 |
<bool key="IBUIClearsContextBeforeDrawing">NO</bool> |
54 | 52 |
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string> |
... | ... | |
72 | 70 |
<int key="NSvFlags">274</int> |
73 | 71 |
<string key="NSFrameSize">{320, 416}</string> |
74 | 72 |
<reference key="NSSuperview" ref="228054471"/> |
73 |
<reference key="NSWindow"/> |
|
75 | 74 |
<reference key="NSNextKeyView" ref="599029925"/> |
76 | 75 |
<object class="NSColor" key="IBUIBackgroundColor"> |
77 | 76 |
<int key="NSColorSpace">3</int> |
... | ... | |
90 | 89 |
</object> |
91 | 90 |
<string key="NSFrameSize">{320, 460}</string> |
92 | 91 |
<reference key="NSSuperview"/> |
92 |
<reference key="NSWindow"/> |
|
93 | 93 |
<reference key="NSNextKeyView" ref="173989330"/> |
94 | 94 |
<object class="NSColor" key="IBUIBackgroundColor"> |
95 | 95 |
<int key="NSColorSpace">3</int> |
... | ... | |
122 | 122 |
</object> |
123 | 123 |
<object class="IBConnectionRecord"> |
124 | 124 |
<object class="IBCocoaTouchOutletConnection" key="connection"> |
125 |
<string key="label">tableView</string> |
|
126 |
<reference key="source" ref="372490531"/> |
|
127 |
<reference key="destination" ref="173989330"/> |
|
128 |
</object> |
|
129 |
<int key="connectionID">27</int> |
|
130 |
</object> |
|
131 |
<object class="IBConnectionRecord"> |
|
132 |
<object class="IBCocoaTouchOutletConnection" key="connection"> |
|
133 |
<string key="label">refreshButton</string> |
|
134 |
<reference key="source" ref="372490531"/> |
|
135 |
<reference key="destination" ref="187093173"/> |
|
136 |
</object> |
|
137 |
<int key="connectionID">28</int> |
|
138 |
</object> |
|
139 |
<object class="IBConnectionRecord"> |
|
140 |
<object class="IBCocoaTouchOutletConnection" key="connection"> |
|
125 | 141 |
<string key="label">dataSource</string> |
126 | 142 |
<reference key="source" ref="173989330"/> |
127 | 143 |
<reference key="destination" ref="372490531"/> |
... | ... | |
144 | 160 |
</object> |
145 | 161 |
<int key="connectionID">26</int> |
146 | 162 |
</object> |
147 |
<object class="IBConnectionRecord"> |
|
148 |
<object class="IBCocoaTouchOutletConnection" key="connection"> |
|
149 |
<string key="label">tableView</string> |
|
150 |
<reference key="source" ref="372490531"/> |
|
151 |
<reference key="destination" ref="173989330"/> |
|
152 |
</object> |
|
153 |
<int key="connectionID">27</int> |
|
154 |
</object> |
|
155 | 163 |
</object> |
156 | 164 |
<object class="IBMutableOrderedSet" key="objectRecords"> |
157 | 165 |
<object class="NSArray" key="orderedObjects"> |
158 | 166 |
<bool key="EncodedWithXMLCoder">YES</bool> |
159 | 167 |
<object class="IBObjectRecord"> |
160 | 168 |
<int key="objectID">0</int> |
161 |
<reference key="object" ref="0"/> |
|
169 |
<object class="NSArray" key="object" id="0"> |
|
170 |
<bool key="EncodedWithXMLCoder">YES</bool> |
|
171 |
</object> |
|
162 | 172 |
<reference key="children" ref="1000"/> |
163 | 173 |
<nil key="parent"/> |
164 | 174 |
</object> |
... | ... | |
222 | 232 |
<object class="NSArray" key="dict.sortedKeys"> |
223 | 233 |
<bool key="EncodedWithXMLCoder">YES</bool> |
224 | 234 |
<string>-1.CustomClassName</string> |
235 |
<string>-1.IBPluginDependency</string> |
|
225 | 236 |
<string>-2.CustomClassName</string> |
237 |
<string>-2.IBPluginDependency</string> |
|
226 | 238 |
<string>10.IBPluginDependency</string> |
227 | 239 |
<string>13.IBPluginDependency</string> |
240 |
<string>22.IBPluginDependency</string> |
|
241 |
<string>24.IBPluginDependency</string> |
|
228 | 242 |
<string>9.IBPluginDependency</string> |
229 | 243 |
</object> |
230 |
<object class="NSMutableArray" key="dict.values">
|
|
244 |
<object class="NSArray" key="dict.values"> |
|
231 | 245 |
<bool key="EncodedWithXMLCoder">YES</bool> |
232 | 246 |
<string>FolderViewController</string> |
247 |
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string> |
|
233 | 248 |
<string>UIResponder</string> |
234 | 249 |
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string> |
235 | 250 |
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string> |
236 | 251 |
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string> |
252 |
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string> |
|
253 |
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string> |
|
254 |
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string> |
|
237 | 255 |
</object> |
238 | 256 |
</object> |
239 | 257 |
<object class="NSMutableDictionary" key="unlocalizedProperties"> |
... | ... | |
248 | 266 |
<reference key="dict.values" ref="0"/> |
249 | 267 |
</object> |
250 | 268 |
<nil key="sourceID"/> |
251 |
<int key="maxID">27</int> |
|
269 |
<int key="maxID">28</int> |
|
270 |
</object> |
|
271 |
<object class="IBClassDescriber" key="IBDocument.Classes"> |
|
272 |
<object class="NSMutableArray" key="referencedPartialClassDescriptions"> |
|
273 |
<bool key="EncodedWithXMLCoder">YES</bool> |
|
274 |
<object class="IBPartialClassDescription"> |
|
275 |
<string key="className">FolderViewController</string> |
|
276 |
<string key="superclassName">OpenStackViewController</string> |
|
277 |
<object class="NSMutableDictionary" key="actions"> |
|
278 |
<bool key="EncodedWithXMLCoder">YES</bool> |
|
279 |
<object class="NSArray" key="dict.sortedKeys"> |
|
280 |
<bool key="EncodedWithXMLCoder">YES</bool> |
|
281 |
<string>homeButtonPressed:</string> |
|
282 |
<string>refreshButtonPressed:</string> |
|
283 |
</object> |
|
284 |
<object class="NSArray" key="dict.values"> |
|
285 |
<bool key="EncodedWithXMLCoder">YES</bool> |
|
286 |
<string>id</string> |
|
287 |
<string>id</string> |
|
288 |
</object> |
|
289 |
</object> |
|
290 |
<object class="NSMutableDictionary" key="actionInfosByName"> |
|
291 |
<bool key="EncodedWithXMLCoder">YES</bool> |
|
292 |
<object class="NSArray" key="dict.sortedKeys"> |
|
293 |
<bool key="EncodedWithXMLCoder">YES</bool> |
|
294 |
<string>homeButtonPressed:</string> |
|
295 |
<string>refreshButtonPressed:</string> |
|
296 |
</object> |
|
297 |
<object class="NSArray" key="dict.values"> |
|
298 |
<bool key="EncodedWithXMLCoder">YES</bool> |
|
299 |
<object class="IBActionInfo"> |
|
300 |
<string key="name">homeButtonPressed:</string> |
|
301 |
<string key="candidateClassName">id</string> |
|
302 |
</object> |
|
303 |
<object class="IBActionInfo"> |
|
304 |
<string key="name">refreshButtonPressed:</string> |
|
305 |
<string key="candidateClassName">id</string> |
|
306 |
</object> |
|
307 |
</object> |
|
308 |
</object> |
|
309 |
<object class="NSMutableDictionary" key="outlets"> |
|
310 |
<bool key="EncodedWithXMLCoder">YES</bool> |
|
311 |
<object class="NSArray" key="dict.sortedKeys"> |
|
312 |
<bool key="EncodedWithXMLCoder">YES</bool> |
|
313 |
<string>homeButton</string> |
|
314 |
<string>refreshButton</string> |
|
315 |
<string>tableView</string> |
|
316 |
</object> |
|
317 |
<object class="NSArray" key="dict.values"> |
|
318 |
<bool key="EncodedWithXMLCoder">YES</bool> |
|
319 |
<string>UIBarButtonItem</string> |
|
320 |
<string>UIBarButtonItem</string> |
|
321 |
<string>UITableView</string> |
|
322 |
</object> |
|
323 |
</object> |
|
324 |
<object class="NSMutableDictionary" key="toOneOutletInfosByName"> |
|
325 |
<bool key="EncodedWithXMLCoder">YES</bool> |
|
326 |
<object class="NSArray" key="dict.sortedKeys"> |
|
327 |
<bool key="EncodedWithXMLCoder">YES</bool> |
|
328 |
<string>homeButton</string> |
|
329 |
<string>refreshButton</string> |
|
330 |
<string>tableView</string> |
|
331 |
</object> |
|
332 |
<object class="NSArray" key="dict.values"> |
|
333 |
<bool key="EncodedWithXMLCoder">YES</bool> |
|
334 |
<object class="IBToOneOutletInfo"> |
|
335 |
<string key="name">homeButton</string> |
|
336 |
<string key="candidateClassName">UIBarButtonItem</string> |
|
337 |
</object> |
|
338 |
<object class="IBToOneOutletInfo"> |
|
339 |
<string key="name">refreshButton</string> |
|
340 |
<string key="candidateClassName">UIBarButtonItem</string> |
|
341 |
</object> |
|
342 |
<object class="IBToOneOutletInfo"> |
|
343 |
<string key="name">tableView</string> |
|
344 |
<string key="candidateClassName">UITableView</string> |
|
345 |
</object> |
|
346 |
</object> |
|
347 |
</object> |
|
348 |
<object class="IBClassDescriptionSource" key="sourceIdentifier"> |
|
349 |
<string key="majorKey">IBProjectSource</string> |
|
350 |
<string key="minorKey">./Classes/FolderViewController.h</string> |
|
351 |
</object> |
|
352 |
</object> |
|
353 |
<object class="IBPartialClassDescription"> |
|
354 |
<string key="className">OpenStackViewController</string> |
|
355 |
<string key="superclassName">UIViewController</string> |
|
356 |
<object class="NSMutableDictionary" key="outlets"> |
|
357 |
<string key="NS.key.0">toolbar</string> |
|
358 |
<string key="NS.object.0">UIToolbar</string> |
|
359 |
</object> |
|
360 |
<object class="NSMutableDictionary" key="toOneOutletInfosByName"> |
|
361 |
<string key="NS.key.0">toolbar</string> |
|
362 |
<object class="IBToOneOutletInfo" key="NS.object.0"> |
|
363 |
<string key="name">toolbar</string> |
|
364 |
<string key="candidateClassName">UIToolbar</string> |
|
365 |
</object> |
|
366 |
</object> |
|
367 |
<object class="IBClassDescriptionSource" key="sourceIdentifier"> |
|
368 |
<string key="majorKey">IBProjectSource</string> |
|
369 |
<string key="minorKey">./Classes/OpenStackViewController.h</string> |
|
370 |
</object> |
|
371 |
</object> |
|
372 |
</object> |
|
252 | 373 |
</object> |
253 |
<object class="IBClassDescriber" key="IBDocument.Classes"/> |
|
254 | 374 |
<int key="IBDocument.localizationMode">0</int> |
255 | 375 |
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string> |
376 |
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults"> |
|
377 |
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string> |
|
378 |
<real value="1296" key="NS.object.0"/> |
|
379 |
</object> |
|
256 | 380 |
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies"> |
257 | 381 |
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string> |
258 | 382 |
<integer value="3000" key="NS.object.0"/> |
259 | 383 |
</object> |
260 | 384 |
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool> |
261 | 385 |
<int key="IBDocument.defaultPropertyAccessControl">3</int> |
262 |
<string key="IBCocoaTouchPluginVersion">301</string>
|
|
386 |
<string key="IBCocoaTouchPluginVersion">1181</string>
|
|
263 | 387 |
</data> |
264 | 388 |
</archive> |
b/Classes/StorageObject.h | ||
---|---|---|
15 | 15 |
NSString *hash; |
16 | 16 |
NSUInteger bytes; |
17 | 17 |
NSString *contentType; |
18 |
NSString *iso8601DateString; |
|
18 | 19 |
NSDate *lastModified; |
20 |
NSString *lastModifiedString; |
|
19 | 21 |
NSData *data; |
20 | 22 |
NSString *publicURI; |
21 | 23 |
NSString *sharing; |
... | ... | |
31 | 33 |
@property (nonatomic, retain) NSData *data; |
32 | 34 |
@property (nonatomic, retain) NSString *publicURI; |
33 | 35 |
@property (nonatomic, retain) NSString *sharing; |
36 |
@property (nonatomic, retain) NSString *iso8601DateString; |
|
37 |
@property (nonatomic, retain) NSString *lastModifiedString; |
|
34 | 38 |
@property (nonatomic, retain) NSMutableDictionary *metadata; |
35 | 39 |
|
36 | 40 |
- (NSString *)humanizedBytes; |
b/Classes/StorageObject.m | ||
---|---|---|
13 | 13 |
|
14 | 14 |
@implementation StorageObject |
15 | 15 |
|
16 |
@synthesize name, fullPath, hash, bytes, contentType, lastModified, data, publicURI, sharing, metadata; |
|
16 |
@synthesize name, fullPath, hash, bytes, contentType, lastModified, data, publicURI, sharing, metadata, iso8601DateString, lastModifiedString;
|
|
17 | 17 |
|
18 | 18 |
#pragma mark - |
19 | 19 |
#pragma mark Serialization |
... | ... | |
61 | 61 |
object.hash = [dict objectForKey:@"x_object_hash"]; |
62 | 62 |
object.bytes = [[dict objectForKey:@"bytes"] intValue]; |
63 | 63 |
object.contentType = [dict objectForKey:@"content_type"]; |
64 |
object.lastModified = [ComputeModel dateFromString:[dict objectForKey:@"last_modified"]]; |
|
64 |
//object.lastModified = [ComputeModel dateFromString:[dict objectForKey:@"last_modified"]]; |
|
65 |
object.iso8601DateString = [dict objectForKey:@"last_modified"]; |
|
65 | 66 |
object.publicURI = [dict objectForKey:@"x_object_public"]; |
66 | 67 |
object.sharing = [dict objectForKey:@"x_object_sharing"]; |
67 | 68 |
object.metadata = nil; |
... | ... | |
123 | 124 |
} |
124 | 125 |
|
125 | 126 |
#pragma mark - |
127 |
#pragma mark Properties |
|
128 |
|
|
129 |
- (NSString *)lastModifiedString { |
|
130 |
if (!lastModifiedString) { |
|
131 |
if (!self.lastModified && [self.iso8601DateString length]) |
|
132 |
self.lastModified = [ComputeModel dateFromString:self.iso8601DateString]; |
|
133 |
if (self.lastModified) |
|
134 |
lastModifiedString = [[ComputeModel localDateDescriptionFromDate:self.lastModified] retain]; |
|
135 |
} |
|
136 |
return lastModifiedString; |
|
137 |
} |
|
138 |
|
|
139 |
#pragma mark - |
|
126 | 140 |
#pragma mark Memory Management |
127 | 141 |
|
128 | 142 |
-(void)dealloc { |
... | ... | |
133 | 147 |
[lastModified release]; |
134 | 148 |
[data release]; |
135 | 149 |
[metadata release]; |
150 |
[iso8601DateString release]; |
|
151 |
[lastModifiedString release]; |
|
136 | 152 |
[super dealloc]; |
137 | 153 |
} |
138 | 154 |
|
b/Classes/StorageObjectViewController.m | ||
---|---|---|
660 | 660 |
- (void)deleteObjectRow { |
661 | 661 |
[self.folder.objects removeObjectForKey:self.object.name]; |
662 | 662 |
[self.folderViewController.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:selectedIndexPath] withRowAnimation:UITableViewRowAnimationLeft]; |
663 |
self.folderViewController.refreshButton.enabled = YES; |
|
663 | 664 |
} |
664 | 665 |
|
665 | 666 |
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { |
... | ... | |
672 | 673 |
activityIndicatorView = [[ActivityIndicatorView alloc] initWithFrame:[ActivityIndicatorView frameForText:activityMessage] text:activityMessage]; |
673 | 674 |
[activityIndicatorView addToView:self.view]; |
674 | 675 |
|
675 |
|
|
676 |
self.folderViewController.refreshButton.enabled = NO; |
|
676 | 677 |
[[self.account.manager deleteObject:self.container object:self.object] |
677 | 678 |
success:^(OpenStackRequest *request) { |
678 | 679 |
[activityIndicatorView removeFromSuperview]; |
... | ... | |
682 | 683 |
if (account.shared) |
683 | 684 |
self.folderViewController.needsRefreshing = YES; |
684 | 685 |
} else if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { |
686 |
self.folderViewController.selectedObjectViewController = nil; |
|
685 | 687 |
if (!account.shared) |
686 | 688 |
[self.folderViewController setDetailViewController]; |
687 | 689 |
else |
b/Classes/UploadGenericFileViewController.m | ||
---|---|---|
20 | 20 |
#import "RSTextFieldCell.h" |
21 | 21 |
#import "NSObject+Conveniences.h" |
22 | 22 |
#import "APICallback.h" |
23 |
#import "ComputeModel.h" |
|
23 | 24 |
|
24 | 25 |
#define kName 0 |
25 | 26 |
#define kContentType 1 |
... | ... | |
259 | 260 |
[activityIndicatorView removeFromSuperview]; |
260 | 261 |
object.data = nil; |
261 | 262 |
object.sharing = folder.sharing; |
263 |
object.lastModified = [ComputeModel dateFromRFC1123String:[request.responseHeaders objectForKey:@"Date"]]; |
|
264 |
|
|
262 | 265 |
BOOL currentFolderIsRoot = NO; |
263 | 266 |
if ([folderViewController.folder isEqual:container.rootFolder]) { |
264 | 267 |
currentFolderIsRoot = YES; |
b/OpenStack-Info.plist | ||
---|---|---|
43 | 43 |
<key>CFBundlePackageType</key> |
44 | 44 |
<string>APPL</string> |
45 | 45 |
<key>CFBundleShortVersionString</key> |
46 |
<string>1.0.4</string>
|
|
46 |
<string>1.0.5</string>
|
|
47 | 47 |
<key>CFBundleSignature</key> |
48 | 48 |
<string>????</string> |
49 | 49 |
<key>CFBundleURLTypes</key> |
... | ... | |
58 | 58 |
</dict> |
59 | 59 |
</array> |
60 | 60 |
<key>CFBundleVersion</key> |
61 |
<string>20120529.0</string>
|
|
61 |
<string>20120531.0</string>
|
|
62 | 62 |
<key>LSRequiresIPhoneOS</key> |
63 | 63 |
<true/> |
64 | 64 |
<key>NSMainNibFile</key> |
Also available in: Unified diff