Merge lp:~mikemc/ubuntuone-ios-files/main-queue-callback-refactor into lp:ubuntuone-ios-files
- main-queue-callback-refactor
- Merge into trunk
Status: | Merged |
---|---|
Approved by: | Brian Curtin |
Approved revision: | 81 |
Merged at revision: | 85 |
Proposed branch: | lp:~mikemc/ubuntuone-ios-files/main-queue-callback-refactor |
Merge into: | lp:ubuntuone-ios-files |
Diff against target: |
563 lines (+126/-134) 8 files modified
Files/U1AutoUploadOperation.m (+9/-12) Files/U1AutoUploadsManager.m (+1/-1) Files/U1FileDetailsViewController.m (+12/-16) Files/U1FilesClient.h (+6/-6) Files/U1FilesClient.m (+24/-24) Files/U1FilesService.h (+11/-11) Files/U1FilesService.m (+54/-52) Files/U1UploadOperation.m (+9/-12) |
To merge this branch: | bzr merge lp:~mikemc/ubuntuone-ios-files/main-queue-callback-refactor |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Brian Curtin (community) | Approve | ||
dobey (community) | Approve | ||
Review via email: mp+157174@code.launchpad.net |
Commit message
- rename methods to clarify that a completionBlock param will be run on the main thread, and remove redundant dispatches
Description of the change
- refactor: make clearer what code is running on what queue
Rename several methods with completionBlock parameters to clarify that the passed-in block is going to be run on the main queue. In most cases, the block is passed along un-executed until it is finally run by U1FilesService -execute:
Also change behavior of uploadContentData to guarantee running its block arg on the main queue, and rename to reflect that.
This change makes it easier to audit calling code's use of NSManagedObjects (which have to be thread-confined) and any UI calls, which have to be on the main thread. As a result I've also removed some redundant dispatch blocks that were probably added because it wasn't clear earlier what was being run where.
- 79. By Mike McCracken
-
poke LP again
Brian Curtin (brian.curtin) wrote : | # |
Conflict markers remain
- 80. By Mike McCracken
-
merge with trunk
- 81. By Mike McCracken
-
merge with trunk
dobey (dobey) : | # |
Brian Curtin (brian.curtin) : | # |
Preview Diff
1 | === modified file 'Files/U1AutoUploadOperation.m' | |||
2 | --- Files/U1AutoUploadOperation.m 2013-03-29 22:44:58 +0000 | |||
3 | +++ Files/U1AutoUploadOperation.m 2013-04-04 21:20:29 +0000 | |||
4 | @@ -86,22 +86,19 @@ | |||
5 | 86 | 86 | ||
6 | 87 | [[U1FilesClient sharedFilesClient] uploadAssetURL:self.assetURL toFolder:folder withResourceName:self.filename withPriority:self.priority progressBlock:^(long long bytesUploaded, long long totalBytes) { | 87 | [[U1FilesClient sharedFilesClient] uploadAssetURL:self.assetURL toFolder:folder withResourceName:self.filename withPriority:self.priority progressBlock:^(long long bytesUploaded, long long totalBytes) { |
7 | 88 | 88 | ||
9 | 89 | } completionBlock:^(U1FileNode *fileNode, NSError *error) { | 89 | } completionBlockOnMainQueue:^(U1FileNode *fileNode, NSError *error) { |
10 | 90 | if (error != nil) | 90 | if (error != nil) |
11 | 91 | { | 91 | { |
12 | 92 | NSLog(@"U1AutoUploadOperation: auto-upload failed: %@", error); | 92 | NSLog(@"U1AutoUploadOperation: auto-upload failed: %@", error); |
13 | 93 | } | 93 | } |
25 | 94 | 94 | ||
26 | 95 | dispatch_async(dispatch_get_main_queue(), ^(void) { | 95 | asset.generation = asset.fileNode.generation; |
27 | 96 | 96 | NSError *err = NULL; | |
28 | 97 | asset.generation = asset.fileNode.generation; | 97 | BOOL success = [dataRepository save:&err]; |
29 | 98 | NSError *err = NULL; | 98 | if(!success){ |
30 | 99 | BOOL success = [dataRepository save:&err]; | 99 | CLS_LOG(@"U1AutoUploadOperation: failed to save to repository: %@", err); |
31 | 100 | if(!success){ | 100 | } |
32 | 101 | CLS_LOG(@"U1AutoUploadOperation: failed to save to repository: %@", err); | 101 | [self finishExecuting]; |
22 | 102 | } | ||
23 | 103 | [self finishExecuting]; | ||
24 | 104 | }); | ||
33 | 105 | }]; | 102 | }]; |
34 | 106 | 103 | ||
35 | 107 | }]; | 104 | }]; |
36 | 108 | 105 | ||
37 | === modified file 'Files/U1AutoUploadsManager.m' | |||
38 | --- Files/U1AutoUploadsManager.m 2013-04-03 23:07:08 +0000 | |||
39 | +++ Files/U1AutoUploadsManager.m 2013-04-04 21:20:29 +0000 | |||
40 | @@ -177,7 +177,7 @@ | |||
41 | 177 | creatingUploadVolume = YES; | 177 | creatingUploadVolume = YES; |
42 | 178 | 178 | ||
43 | 179 | [self.filesClient createVolumeAtPath:[self remoteUploadFolderPath] | 179 | [self.filesClient createVolumeAtPath:[self remoteUploadFolderPath] |
45 | 180 | completionBlock:^(U1Volume *volume, NSError *error) { | 180 | completionBlockOnMainQueue:^(U1Volume *volume, NSError *error) { |
46 | 181 | creatingUploadVolume = NO; | 181 | creatingUploadVolume = NO; |
47 | 182 | if (error == nil) | 182 | if (error == nil) |
48 | 183 | { | 183 | { |
49 | 184 | 184 | ||
50 | === modified file 'Files/U1FileDetailsViewController.m' | |||
51 | --- Files/U1FileDetailsViewController.m 2013-04-03 23:01:10 +0000 | |||
52 | +++ Files/U1FileDetailsViewController.m 2013-04-04 21:20:29 +0000 | |||
53 | @@ -229,12 +229,10 @@ | |||
54 | 229 | if (![sender isOn] && [self.node isPublicValue]) | 229 | if (![sender isOn] && [self.node isPublicValue]) |
55 | 230 | { | 230 | { |
56 | 231 | [self.publishStatusLabel setText:NSLocalizedString(@"Unpublishing file...", nil)]; | 231 | [self.publishStatusLabel setText:NSLocalizedString(@"Unpublishing file...", nil)]; |
63 | 232 | [self.filesClient unpublishNode:self.node completionBlock:^(U1FileNode *node, NSError *error) { | 232 | [self.filesClient unpublishNode:self.node completionBlockOnMainQueue:^(U1FileNode *node, NSError *error) { |
64 | 233 | dispatch_async(dispatch_get_main_queue(), ^(void) { | 233 | [sender setEnabled:YES]; |
65 | 234 | [sender setEnabled:YES]; | 234 | [self.publishStatusLabel setText:nil]; |
66 | 235 | [self.publishStatusLabel setText:nil]; | 235 | [self.actionsTableView deleteRowsAtIndexPaths:publishStatusIndexPath withRowAnimation:UITableViewRowAnimationFade]; |
61 | 236 | [self.actionsTableView deleteRowsAtIndexPaths:publishStatusIndexPath withRowAnimation:UITableViewRowAnimationFade]; | ||
62 | 237 | }); | ||
67 | 238 | }]; | 236 | }]; |
68 | 239 | } | 237 | } |
69 | 240 | else if ([sender isOn] && ![self.node isPublicValue]) | 238 | else if ([sender isOn] && ![self.node isPublicValue]) |
70 | @@ -243,14 +241,12 @@ | |||
71 | 243 | [self.publishStatusLabel setText:NSLocalizedString(@"Publishing file...", nil)]; | 241 | [self.publishStatusLabel setText:NSLocalizedString(@"Publishing file...", nil)]; |
72 | 244 | [self.actionsTableView insertRowsAtIndexPaths:publishStatusIndexPath withRowAnimation:UITableViewRowAnimationNone]; | 242 | [self.actionsTableView insertRowsAtIndexPaths:publishStatusIndexPath withRowAnimation:UITableViewRowAnimationNone]; |
73 | 245 | [self.actionsTableView endUpdates]; | 243 | [self.actionsTableView endUpdates]; |
82 | 246 | [self.filesClient publishNode:self.node completionBlock:^(U1FileNode *node, NSError *error) { | 244 | [self.filesClient publishNode:self.node completionBlockOnMainQueue:^(U1FileNode *node, NSError *error) { |
83 | 247 | dispatch_async(dispatch_get_main_queue(), ^(void) { | 245 | [sender setEnabled:YES]; |
84 | 248 | [sender setEnabled:YES]; | 246 | [self.actionsTableView beginUpdates]; |
85 | 249 | [self.actionsTableView beginUpdates]; | 247 | [self.publishStatusLabel setText:[self.node publicURLString]]; |
86 | 250 | [self.publishStatusLabel setText:[self.node publicURLString]]; | 248 | [self.actionsTableView reloadRowsAtIndexPaths:publishStatusIndexPath withRowAnimation:UITableViewRowAnimationNone]; |
87 | 251 | [self.actionsTableView reloadRowsAtIndexPaths:publishStatusIndexPath withRowAnimation:UITableViewRowAnimationNone]; | 249 | [self.actionsTableView endUpdates]; |
80 | 252 | [self.actionsTableView endUpdates]; | ||
81 | 253 | }); | ||
88 | 254 | }]; | 250 | }]; |
89 | 255 | } | 251 | } |
90 | 256 | } | 252 | } |
91 | @@ -394,11 +390,11 @@ | |||
92 | 394 | if (!newName) | 390 | if (!newName) |
93 | 395 | return; | 391 | return; |
94 | 396 | 392 | ||
96 | 397 | [[U1FilesClient sharedFilesClient] renameNode:self.node toName:newName completionBlock:^(U1Node *newNode, NSError *error) { | 393 | [[U1FilesClient sharedFilesClient] renameNode:self.node toName:newName completionBlockOnMainQueue:^(U1Node *newNode, NSError *error) { |
97 | 398 | 394 | ||
98 | 399 | if (!error) | 395 | if (!error) |
99 | 400 | { | 396 | { |
101 | 401 | self.title = [node.path lastPathComponent]; | 397 | self.title = [newNode.path lastPathComponent]; |
102 | 402 | UILabel *titleLabel = (UILabel*)[self.navigationItem titleView]; | 398 | UILabel *titleLabel = (UILabel*)[self.navigationItem titleView]; |
103 | 403 | [titleLabel setText:self.title]; | 399 | [titleLabel setText:self.title]; |
104 | 404 | [titleLabel sizeToFit]; | 400 | [titleLabel sizeToFit]; |
105 | 405 | 401 | ||
106 | === modified file 'Files/U1FilesClient.h' | |||
107 | --- Files/U1FilesClient.h 2012-08-07 14:18:15 +0000 | |||
108 | +++ Files/U1FilesClient.h 2013-04-04 21:20:29 +0000 | |||
109 | @@ -36,13 +36,13 @@ | |||
110 | 36 | - (id)volumesWithResultsBlock:(void(^)(U1Volume *rootVolume, NSFetchedResultsController *cloudFoldersResultsController, U1DataSourceType resultsDataSourceType))resultsBlock errorBlock:(void(^)(NSError *error))errorBlock; | 36 | - (id)volumesWithResultsBlock:(void(^)(U1Volume *rootVolume, NSFetchedResultsController *cloudFoldersResultsController, U1DataSourceType resultsDataSourceType))resultsBlock errorBlock:(void(^)(NSError *error))errorBlock; |
111 | 37 | - (id)fetchFolderWithResourcePath:(NSString*)nodePath resultsBlock:(void(^)(U1Node *node, NSFetchedResultsController *childrenResultsController, U1DataSourceType resultsDataSourceType))resultsBlock errorBlock:(void(^)(NSError *error))errorBlock; | 37 | - (id)fetchFolderWithResourcePath:(NSString*)nodePath resultsBlock:(void(^)(U1Node *node, NSFetchedResultsController *childrenResultsController, U1DataSourceType resultsDataSourceType))resultsBlock errorBlock:(void(^)(NSError *error))errorBlock; |
112 | 38 | - (id)fetchFileWithResourcePath:(NSString*)nodePath completionBlock:(void(^)(U1Node *node, NSError *error))completionBlock; | 38 | - (id)fetchFileWithResourcePath:(NSString*)nodePath completionBlock:(void(^)(U1Node *node, NSError *error))completionBlock; |
114 | 39 | - (id)renameNode:(U1Node*)node toName:(NSString*)newName completionBlock:(void(^)(U1Node *node, NSError *error))completionBlock; | 39 | - (id)renameNode:(U1Node*)node toName:(NSString*)newName completionBlockOnMainQueue:(void(^)(U1Node *node, NSError *error))completionBlock; |
115 | 40 | - (id)deleteNode:(U1Node*)node completionBlock:(void(^)(NSError *error))completionBlock; | 40 | - (id)deleteNode:(U1Node*)node completionBlock:(void(^)(NSError *error))completionBlock; |
121 | 41 | - (id)uploadAssetURL:(NSURL*)assetURL toFolder:(U1FolderNode*)folderNode withResourceName:(NSString*)resourceName withPriority:(NSOperationQueuePriority)priority progressBlock:(void(^)(long long bytesUploaded, long long totalBytes))progressBlock completionBlock:(void(^)(U1FileNode *updatedNode, NSError *error))completionBlock; | 41 | - (id)uploadAssetURL:(NSURL*)assetURL toFolder:(U1FolderNode*)folderNode withResourceName:(NSString*)resourceName withPriority:(NSOperationQueuePriority)priority progressBlock:(void(^)(long long bytesUploaded, long long totalBytes))progressBlock completionBlockOnMainQueue:(void(^)(U1FileNode *updatedNode, NSError *error))completionBlock; |
122 | 42 | - (id)publishNode:(U1FileNode*)node completionBlock:(void(^)(U1FileNode *node, NSError *error))completionBlock; | 42 | - (id)publishNode:(U1FileNode*)node completionBlockOnMainQueue:(void(^)(U1FileNode *node, NSError *error))completionBlock; |
123 | 43 | - (id)unpublishNode:(U1FileNode*)node completionBlock:(void(^)(U1FileNode *node, NSError *error))completionBlock; | 43 | - (id)unpublishNode:(U1FileNode*)node completionBlockOnMainQueue:(void(^)(U1FileNode *node, NSError *error))completionBlock; |
124 | 44 | - (id)createFolderNamed:(NSString*)name inFolder:(U1FolderNode*)folderNode completionBlock:(void(^)(U1FolderNode *newFolderNode, NSError *error))completionBlock; | 44 | - (id)createFolderNamed:(NSString*)name inFolder:(U1FolderNode*)folderNode completionBlockOnMainQueue:(void(^)(U1FolderNode *newFolderNode, NSError *error))completionBlock; |
125 | 45 | - (id)createVolumeAtPath:(NSString*)folderPath completionBlock:(void(^)(U1Volume *volume, NSError *error))completionBlock; | 45 | - (id)createVolumeAtPath:(NSString*)folderPath completionBlockOnMainQueue:(void(^)(U1Volume *volume, NSError *error))completionBlock; |
126 | 46 | - (BOOL)isNodeSavedLocally:(U1FileNode*)node; | 46 | - (BOOL)isNodeSavedLocally:(U1FileNode*)node; |
127 | 47 | - (U1LocalFileInfo*)localInfoForNode:(U1FileNode*)node; | 47 | - (U1LocalFileInfo*)localInfoForNode:(U1FileNode*)node; |
128 | 48 | - (U1LocalFileInfo*)downloadFileForNode:(U1FileNode*)node completionBlock:(void(^)(NSError *error))completionBlock; | 48 | - (U1LocalFileInfo*)downloadFileForNode:(U1FileNode*)node completionBlock:(void(^)(NSError *error))completionBlock; |
129 | 49 | 49 | ||
130 | === modified file 'Files/U1FilesClient.m' | |||
131 | --- Files/U1FilesClient.m 2013-03-29 22:44:58 +0000 | |||
132 | +++ Files/U1FilesClient.m 2013-04-04 21:20:29 +0000 | |||
133 | @@ -106,7 +106,7 @@ | |||
134 | 106 | 106 | ||
135 | 107 | - (id)accountInfoWithCompletionBlock:(void(^)(NSDictionary *accountInfo, NSError *error))completionBlock; | 107 | - (id)accountInfoWithCompletionBlock:(void(^)(NSDictionary *accountInfo, NSError *error))completionBlock; |
136 | 108 | { | 108 | { |
138 | 109 | return [self.filesService accountInfoWithCompletionBlock:completionBlock]; | 109 | return [self.filesService accountInfoWithCompletionBlockOnMainQueue:completionBlock]; |
139 | 110 | } | 110 | } |
140 | 111 | 111 | ||
141 | 112 | - (id)volumesWithResultsBlock:(void(^)(U1Volume *rootVolume, NSFetchedResultsController *cloudFoldersResultsController, U1DataSourceType resultsDataSourceType))resultsBlock errorBlock:(void(^)(NSError *error))errorBlock; | 112 | - (id)volumesWithResultsBlock:(void(^)(U1Volume *rootVolume, NSFetchedResultsController *cloudFoldersResultsController, U1DataSourceType resultsDataSourceType))resultsBlock errorBlock:(void(^)(NSError *error))errorBlock; |
142 | @@ -142,7 +142,7 @@ | |||
143 | 142 | 142 | ||
144 | 143 | resultsBlock(rootVolume, cloudFoldersResultsController, U1DataSourceLocal); | 143 | resultsBlock(rootVolume, cloudFoldersResultsController, U1DataSourceLocal); |
145 | 144 | 144 | ||
147 | 145 | [self.filesService volumeInfoWithCompletionBlock:^(NSArray *volumeInfos, NSError *error) { | 145 | [self.filesService volumeInfoWithCompletionBlockOnMainQueue:^(NSArray *volumeInfos, NSError *error) { |
148 | 146 | 146 | ||
149 | 147 | [self.dataRepository dispatchBlockWithMainContext:^(NSManagedObjectContext *context) { | 147 | [self.dataRepository dispatchBlockWithMainContext:^(NSManagedObjectContext *context) { |
150 | 148 | 148 | ||
151 | @@ -236,11 +236,11 @@ | |||
152 | 236 | 236 | ||
153 | 237 | resultsBlock(node, resultsController, U1DataSourceLocal); | 237 | resultsBlock(node, resultsController, U1DataSourceLocal); |
154 | 238 | 238 | ||
156 | 239 | [self.filesService infoForNodeAtResourcePath:node.resourcePath includeChildren:YES completionBlock:^(NSDictionary *nodeInfo, NSError *error) { | 239 | [self.filesService infoForNodeAtResourcePath:node.resourcePath includeChildren:YES completionBlockOnMainQueue:^(NSDictionary *nodeInfo, NSError *error) { |
157 | 240 | 240 | ||
158 | 241 | if (error) | 241 | if (error) |
159 | 242 | { | 242 | { |
161 | 243 | CLS_LOG(@"error from call to filesService infoForNodeAtResourcePath:..."); | 243 | CLS_LOG(@"error from call to filesService infoForNodeAtResourcePath:. %@", error); |
162 | 244 | errorBlock(error); | 244 | errorBlock(error); |
163 | 245 | return; | 245 | return; |
164 | 246 | } | 246 | } |
165 | @@ -334,7 +334,7 @@ | |||
166 | 334 | } | 334 | } |
167 | 335 | 335 | ||
168 | 336 | 336 | ||
170 | 337 | [self.filesService infoForNodeAtResourcePath:node.resourcePath includeChildren:NO completionBlock:^(NSDictionary *nodeInfo, NSError *error) { | 337 | [self.filesService infoForNodeAtResourcePath:node.resourcePath includeChildren:NO completionBlockOnMainQueue:^(NSDictionary *nodeInfo, NSError *error) { |
171 | 338 | if (error == nil) | 338 | if (error == nil) |
172 | 339 | { | 339 | { |
173 | 340 | [node updatePropertiesFromJSONDictionary:nodeInfo]; | 340 | [node updatePropertiesFromJSONDictionary:nodeInfo]; |
174 | @@ -350,14 +350,14 @@ | |||
175 | 350 | return nil; | 350 | return nil; |
176 | 351 | } | 351 | } |
177 | 352 | 352 | ||
179 | 353 | - (id)renameNode:(U1Node*)node toName:(NSString*)newName completionBlock:(void(^)(U1Node *node, NSError *error))completionBlock; | 353 | - (id)renameNode:(U1Node*)node toName:(NSString*)newName completionBlockOnMainQueue:(void(^)(U1Node *node, NSError *error))completionBlock; |
180 | 354 | { | 354 | { |
181 | 355 | NSParameterAssert(node != nil); | 355 | NSParameterAssert(node != nil); |
182 | 356 | NSParameterAssert(newName != nil); | 356 | NSParameterAssert(newName != nil); |
183 | 357 | NSParameterAssert(completionBlock != NULL); | 357 | NSParameterAssert(completionBlock != NULL); |
184 | 358 | 358 | ||
185 | 359 | NSString *newPath = [[node.path stringByDeletingLastPathComponent] stringByAppendingPathComponent:newName]; | 359 | NSString *newPath = [[node.path stringByDeletingLastPathComponent] stringByAppendingPathComponent:newName]; |
187 | 360 | return [self.filesService moveNodeAtResourcePath:node.resourcePath toPath:newPath withCompletionBlock:^(NSDictionary *nodeInfo, NSError *error) { | 360 | return [self.filesService moveNodeAtResourcePath:node.resourcePath toPath:newPath withCompletionBlockOnMainQueue:^(NSDictionary *nodeInfo, NSError *error) { |
188 | 361 | if (!error) | 361 | if (!error) |
189 | 362 | { | 362 | { |
190 | 363 | [node updatePropertiesFromJSONDictionary:nodeInfo]; | 363 | [node updatePropertiesFromJSONDictionary:nodeInfo]; |
191 | @@ -368,7 +368,7 @@ | |||
192 | 368 | 368 | ||
193 | 369 | - (id)deleteNode:(U1Node*)node completionBlock:(void(^)(NSError *error))completionBlock; | 369 | - (id)deleteNode:(U1Node*)node completionBlock:(void(^)(NSError *error))completionBlock; |
194 | 370 | { | 370 | { |
196 | 371 | return [self.filesService deleteNodeAtResourcePath:node.resourcePath completionBlock:^(NSError *error) { | 371 | return [self.filesService deleteNodeAtResourcePath:node.resourcePath completionBlockOnMainQueue:^(NSError *error) { |
197 | 372 | if (!error) | 372 | if (!error) |
198 | 373 | { | 373 | { |
199 | 374 | [self.dataRepository dispatchBlockWithMainContext:^(NSManagedObjectContext *context) { | 374 | [self.dataRepository dispatchBlockWithMainContext:^(NSManagedObjectContext *context) { |
200 | @@ -380,10 +380,10 @@ | |||
201 | 380 | }]; | 380 | }]; |
202 | 381 | } | 381 | } |
203 | 382 | 382 | ||
205 | 383 | - (id)uploadAssetURL:(NSURL*)assetURL toFolder:(U1FolderNode *)folderNode withResourceName:(NSString *)resourceName withPriority:(NSOperationQueuePriority)priority progressBlock:(void (^)(long long, long long))progressBlock completionBlock:(void (^)(U1FileNode *, NSError *))completionBlock; | 383 | - (id)uploadAssetURL:(NSURL*)assetURL toFolder:(U1FolderNode *)folderNode withResourceName:(NSString *)resourceName withPriority:(NSOperationQueuePriority)priority progressBlock:(void (^)(long long, long long))progressBlock completionBlockOnMainQueue:(void (^)(U1FileNode *, NSError *))completionBlock; |
206 | 384 | { | 384 | { |
207 | 385 | NSString *resourcePath = [folderNode.resourcePath stringByAppendingPathComponent:resourceName]; | 385 | NSString *resourcePath = [folderNode.resourcePath stringByAppendingPathComponent:resourceName]; |
209 | 386 | U1FileNode *node = (id)[self.dataRepository nodeWithResourcePath:resourcePath]; | 386 | U1FileNode *node = (id)[self.dataRepository nodeWithResourcePath:resourcePath]; // node will be from main context , on main Q |
210 | 387 | if (!node) | 387 | if (!node) |
211 | 388 | { | 388 | { |
212 | 389 | [self.dataRepository dispatchBlockWithMainContext:^(NSManagedObjectContext *context) { | 389 | [self.dataRepository dispatchBlockWithMainContext:^(NSManagedObjectContext *context) { |
213 | @@ -442,17 +442,17 @@ | |||
214 | 442 | return operation; | 442 | return operation; |
215 | 443 | } | 443 | } |
216 | 444 | 444 | ||
228 | 445 | - (id)publishNode:(U1FileNode*)node completionBlock:(void(^)(U1FileNode *node, NSError *error))completionBlock; | 445 | - (id)publishNode:(U1FileNode*)node completionBlockOnMainQueue:(void(^)(U1FileNode *node, NSError *error))completionBlock; |
229 | 446 | { | 446 | { |
230 | 447 | return [self.filesService publishNode:node completionBlock:completionBlock]; | 447 | return [self.filesService publishNode:node completionBlockOnMainQueue:completionBlock]; |
231 | 448 | } | 448 | } |
232 | 449 | 449 | ||
233 | 450 | - (id)unpublishNode:(U1FileNode*)node completionBlock:(void(^)(U1FileNode *node, NSError *error))completionBlock; | 450 | - (id)unpublishNode:(U1FileNode*)node completionBlockOnMainQueue:(void(^)(U1FileNode *node, NSError *error))completionBlock; |
234 | 451 | { | 451 | { |
235 | 452 | return [self.filesService unpublishNode:node completionBlock:completionBlock]; | 452 | return [self.filesService unpublishNode:node completionBlockOnMainQueue:completionBlock]; |
236 | 453 | } | 453 | } |
237 | 454 | 454 | ||
238 | 455 | - (id)createFolderNamed:(NSString*)name inFolder:(U1FolderNode*)folderNode completionBlock:(void(^)(U1FolderNode *newFolderNode, NSError *error))completionBlock; | 455 | - (id)createFolderNamed:(NSString*)name inFolder:(U1FolderNode*)folderNode completionBlockOnMainQueue:(void(^)(U1FolderNode *newFolderNode, NSError *error))completionBlock; |
239 | 456 | { | 456 | { |
240 | 457 | NSString *resourcePath = folderNode.resourcePath; | 457 | NSString *resourcePath = folderNode.resourcePath; |
241 | 458 | resourcePath = [resourcePath stringByAppendingPathComponent:name]; | 458 | resourcePath = [resourcePath stringByAppendingPathComponent:name]; |
242 | @@ -471,7 +471,7 @@ | |||
243 | 471 | node = (id)[self.dataRepository nodeWithResourcePath:resourcePath]; | 471 | node = (id)[self.dataRepository nodeWithResourcePath:resourcePath]; |
244 | 472 | } | 472 | } |
245 | 473 | 473 | ||
247 | 474 | return [self.filesService createFolderAtPath:resourcePath completionBlock:^(NSDictionary *nodeInfo, NSError *error) { | 474 | return [self.filesService createFolderAtPath:resourcePath completionBlockOnMainQueue:^(NSDictionary *nodeInfo, NSError *error) { |
248 | 475 | if (!error) | 475 | if (!error) |
249 | 476 | { | 476 | { |
250 | 477 | [node updatePropertiesFromJSONDictionary:nodeInfo]; | 477 | [node updatePropertiesFromJSONDictionary:nodeInfo]; |
251 | @@ -480,9 +480,9 @@ | |||
252 | 480 | }]; | 480 | }]; |
253 | 481 | } | 481 | } |
254 | 482 | 482 | ||
256 | 483 | - (id)createVolumeAtPath:(NSString*)folderPath completionBlock:(void(^)(U1Volume *volume, NSError *error))completionBlock; | 483 | - (id)createVolumeAtPath:(NSString*)folderPath completionBlockOnMainQueue:(void(^)(U1Volume *volume, NSError *error))completionBlock; |
257 | 484 | { | 484 | { |
259 | 485 | return [self.filesService createVolumeAtPath:folderPath completionBlock:^(NSDictionary *volumeInfo, NSError *error) { | 485 | return [self.filesService createVolumeAtPath:folderPath completionBlockOnMainQueue:^(NSDictionary *volumeInfo, NSError *error) { |
260 | 486 | [self.dataRepository dispatchBlockWithMainContext:^(NSManagedObjectContext *context) { | 486 | [self.dataRepository dispatchBlockWithMainContext:^(NSManagedObjectContext *context) { |
261 | 487 | U1Volume *volume = [U1Volume insertInManagedObjectContext:context]; | 487 | U1Volume *volume = [U1Volume insertInManagedObjectContext:context]; |
262 | 488 | if (!error) | 488 | if (!error) |
263 | 489 | 489 | ||
264 | === modified file 'Files/U1FilesService.h' | |||
265 | --- Files/U1FilesService.h 2012-08-07 14:19:47 +0000 | |||
266 | +++ Files/U1FilesService.h 2013-04-04 21:20:29 +0000 | |||
267 | @@ -28,17 +28,17 @@ | |||
268 | 28 | 28 | ||
269 | 29 | + (U1FilesService *)sharedFilesService; | 29 | + (U1FilesService *)sharedFilesService; |
270 | 30 | 30 | ||
275 | 31 | - (id)accountInfoWithCompletionBlock:(void(^)(NSDictionary *accountInfo, NSError *error))completionBlock; | 31 | - (id)accountInfoWithCompletionBlockOnMainQueue:(void(^)(NSDictionary *accountInfo, NSError *error))completionBlock; |
276 | 32 | - (id)volumeInfoWithCompletionBlock:(void(^)(NSArray *volumeInfos, NSError *error))completionBlock; | 32 | - (id)volumeInfoWithCompletionBlockOnMainQueue:(void(^)(NSArray *volumeInfos, NSError *error))completionBlock; |
277 | 33 | - (id)infoForNodeAtResourcePath:(NSString*)resourcePath includeChildren:(BOOL)includeChildren completionBlock:(void(^)(NSDictionary *node, NSError *error))completionBlock; | 33 | - (id)infoForNodeAtResourcePath:(NSString*)resourcePath includeChildren:(BOOL)includeChildren completionBlockOnMainQueue:(void(^)(NSDictionary *node, NSError *error))completionBlock; |
278 | 34 | - (id)infoForNode:(U1Node*)node includeChildren:(BOOL)includeChildren completionBlock:(void(^)(NSDictionary *node, NSError *error))completionBlock; | 34 | - (id)infoForNode:(U1Node*)node includeChildren:(BOOL)includeChildren completionBlockOnMainQueue:(void(^)(NSDictionary *node, NSError *error))completionBlock; |
279 | 35 | - (id)contentForNode:(U1FileNode*)node progressBlock:(void(^)(long long bytesReceived, long long bytesExpected))progressBlock completionBlock:(void(^)(NSURL *contentURL))completionBlock; | 35 | - (id)contentForNode:(U1FileNode*)node progressBlock:(void(^)(long long bytesReceived, long long bytesExpected))progressBlock completionBlock:(void(^)(NSURL *contentURL))completionBlock; |
287 | 36 | - (id)uploadContentData:(id<U1UploadDataProvider>)contentData forNode:(U1FileNode*)node progressBlock:(void(^)(long long bytesUploaded, long long totalBytes))progressBlock completionBlock:(void(^)(NSDictionary *updatedNodeInfo, NSError *error))completionBlock; | 36 | - (id)uploadContentData:(id<U1UploadDataProvider>)contentData forNode:(U1FileNode*)node progressBlock:(void(^)(long long bytesUploaded, long long totalBytes))progressBlock completionBlockOnMainQueue:(void(^)(NSDictionary *updatedNodeInfo, NSError *error))completionBlock; |
288 | 37 | - (id)moveNodeAtResourcePath:(NSString*)resourcePath toPath:(NSString*)newPath withCompletionBlock:(void(^)(NSDictionary *nodeInfo, NSError *error))completionBlock; | 37 | - (id)moveNodeAtResourcePath:(NSString*)resourcePath toPath:(NSString*)newPath withCompletionBlockOnMainQueue:(void(^)(NSDictionary *nodeInfo, NSError *error))completionBlock; |
289 | 38 | - (id)deleteNodeAtResourcePath:(NSString*)resourcePath completionBlock:(void(^)(NSError *error))completionBlock; | 38 | - (id)deleteNodeAtResourcePath:(NSString*)resourcePath completionBlockOnMainQueue:(void(^)(NSError *error))completionBlock; |
290 | 39 | - (id)publishNode:(U1FileNode*)node completionBlock:(void(^)(U1FileNode *node, NSError *error))completionBlock; | 39 | - (id)publishNode:(U1FileNode*)node completionBlockOnMainQueue:(void(^)(U1FileNode *node, NSError *error))completionBlock; |
291 | 40 | - (id)unpublishNode:(U1FileNode*)node completionBlock:(void(^)(U1FileNode *node, NSError *error))completionBlock; | 40 | - (id)unpublishNode:(U1FileNode*)node completionBlockOnMainQueue:(void(^)(U1FileNode *node, NSError *error))completionBlock; |
292 | 41 | - (id)createFolderAtPath:(NSString*)folderPath completionBlock:(void(^)(NSDictionary *nodeInfo, NSError *error))completionBlock; | 41 | - (id)createFolderAtPath:(NSString*)folderPath completionBlockOnMainQueue:(void(^)(NSDictionary *nodeInfo, NSError *error))completionBlock; |
293 | 42 | - (id)createVolumeAtPath:(NSString*)folderPath completionBlock:(void(^)(NSDictionary *volumeInfo, NSError *error))completionBlock; | 42 | - (id)createVolumeAtPath:(NSString*)folderPath completionBlockOnMainQueue:(void(^)(NSDictionary *volumeInfo, NSError *error))completionBlock; |
294 | 43 | 43 | ||
295 | 44 | @end | 44 | @end |
296 | 45 | 45 | ||
297 | === modified file 'Files/U1FilesService.m' | |||
298 | --- Files/U1FilesService.m 2013-04-04 19:10:31 +0000 | |||
299 | +++ Files/U1FilesService.m 2013-04-04 21:20:29 +0000 | |||
300 | @@ -37,8 +37,8 @@ | |||
301 | 37 | - (NSURL*)URLForVolumeWithPath:(NSString*)volumePath; | 37 | - (NSURL*)URLForVolumeWithPath:(NSString*)volumePath; |
302 | 38 | - (NSURL*)URLForNode:(NSString*)nodePath includeChildren:(BOOL)includeChildren; | 38 | - (NSURL*)URLForNode:(NSString*)nodePath includeChildren:(BOOL)includeChildren; |
303 | 39 | - (NSURL*)contentURLForNode:(NSString*)nodePath; | 39 | - (NSURL*)contentURLForNode:(NSString*)nodePath; |
306 | 40 | - (id)execute:(NSString*)method toURL:(NSURL*)url requestBody:(NSString*)body parseResponseBody:(BOOL)parseResponseBody completionBlock:(void(^)(id results, NSError *error))completionBlock; | 40 | - (id)execute:(NSString*)method toURL:(NSURL*)url requestBody:(NSString*)body parseResponseBody:(BOOL)parseResponseBody completionBlockOnMainQueue:(void(^)(id results, NSError *error))completionBlock; |
307 | 41 | - (id)execute:(NSString*)method toURL:(NSURL*)url requestBody:(id)bodyData contentType:(NSString*)contentType contentLength:(NSUInteger)contentLength parseResponseBody:(BOOL)parseResponseBody completionBlock:(void(^)(id results, NSError *error))completionBlock; | 41 | - (id)execute:(NSString*)method toURL:(NSURL*)url requestBody:(id)bodyData contentType:(NSString*)contentType contentLength:(NSUInteger)contentLength parseResponseBody:(BOOL)parseResponseBody completionBlockOnMainQueue:(void(^)(id results, NSError *error))completionBlock; |
308 | 42 | 42 | ||
309 | 43 | @end | 43 | @end |
310 | 44 | 44 | ||
311 | @@ -81,38 +81,38 @@ | |||
312 | 81 | [super dealloc]; | 81 | [super dealloc]; |
313 | 82 | } | 82 | } |
314 | 83 | 83 | ||
316 | 84 | - (id)accountInfoWithCompletionBlock:(void(^)(NSDictionary *accountInfo, NSError *error))completionBlock; | 84 | - (id)accountInfoWithCompletionBlockOnMainQueue:(void(^)(NSDictionary *accountInfo, NSError *error))completionBlock; |
317 | 85 | { | 85 | { |
318 | 86 | NSMutableString *urlString = [NSMutableString stringWithString:U1FilesServiceAPIBase]; | 86 | NSMutableString *urlString = [NSMutableString stringWithString:U1FilesServiceAPIBase]; |
319 | 87 | [urlString appendString:U1FilesServiceAPIPath]; | 87 | [urlString appendString:U1FilesServiceAPIPath]; |
320 | 88 | [urlString appendString:U1FilesServiceAPIVersion1]; | 88 | [urlString appendString:U1FilesServiceAPIVersion1]; |
321 | 89 | NSURL *rootURL = [NSURL URLWithString:urlString]; | 89 | NSURL *rootURL = [NSURL URLWithString:urlString]; |
323 | 90 | return [self execute:@"GET" toURL:rootURL requestBody:nil parseResponseBody:YES completionBlock:^(id results, NSError *error) { | 90 | return [self execute:@"GET" toURL:rootURL requestBody:nil parseResponseBody:YES completionBlockOnMainQueue:^(id results, NSError *error) { |
324 | 91 | completionBlock(results, error); | 91 | completionBlock(results, error); |
325 | 92 | }]; | 92 | }]; |
326 | 93 | } | 93 | } |
327 | 94 | 94 | ||
329 | 95 | - (id)volumeInfoWithCompletionBlock:(void(^)(NSArray *volumeInfos, NSError *error))completionBlock; | 95 | - (id)volumeInfoWithCompletionBlockOnMainQueue:(void(^)(NSArray *volumeInfos, NSError *error))completionBlock; |
330 | 96 | { | 96 | { |
331 | 97 | NSURL *volumesURL = [self URLForNode:@"/volumes" includeChildren:NO]; | 97 | NSURL *volumesURL = [self URLForNode:@"/volumes" includeChildren:NO]; |
333 | 98 | return [self execute:@"GET" toURL:volumesURL requestBody:nil parseResponseBody:YES completionBlock:^(id results, NSError *error) { | 98 | return [self execute:@"GET" toURL:volumesURL requestBody:nil parseResponseBody:YES completionBlockOnMainQueue:^(id results, NSError *error) { |
334 | 99 | completionBlock(results, error); | 99 | completionBlock(results, error); |
335 | 100 | }]; | 100 | }]; |
336 | 101 | } | 101 | } |
337 | 102 | 102 | ||
339 | 103 | - (id)infoForNodeAtResourcePath:(NSString*)resourcePath includeChildren:(BOOL)includeChildren completionBlock:(void(^)(NSDictionary *node, NSError *error))completionBlock; | 103 | - (id)infoForNodeAtResourcePath:(NSString*)resourcePath includeChildren:(BOOL)includeChildren completionBlockOnMainQueue:(void(^)(NSDictionary *node, NSError *error))completionBlock; |
340 | 104 | { | 104 | { |
341 | 105 | NSURL *nodeURL = [self URLForNode:resourcePath includeChildren:includeChildren]; | 105 | NSURL *nodeURL = [self URLForNode:resourcePath includeChildren:includeChildren]; |
342 | 106 | 106 | ||
344 | 107 | return [self execute:@"GET" toURL:nodeURL requestBody:nil parseResponseBody:YES completionBlock:^(id result, NSError *error) { | 107 | return [self execute:@"GET" toURL:nodeURL requestBody:nil parseResponseBody:YES completionBlockOnMainQueue:^(id result, NSError *error) { |
345 | 108 | 108 | ||
346 | 109 | completionBlock(result, error); | 109 | completionBlock(result, error); |
347 | 110 | }]; | 110 | }]; |
348 | 111 | } | 111 | } |
349 | 112 | 112 | ||
351 | 113 | - (id)infoForNode:(U1Node*)node includeChildren:(BOOL)includeChildren completionBlock:(void(^)(NSDictionary *node, NSError *error))completionBlock; | 113 | - (id)infoForNode:(U1Node*)node includeChildren:(BOOL)includeChildren completionBlockOnMainQueue:(void(^)(NSDictionary *node, NSError *error))completionBlock; |
352 | 114 | { | 114 | { |
354 | 115 | return [self infoForNodeAtResourcePath:node.resourcePath includeChildren:includeChildren completionBlock:completionBlock]; | 115 | return [self infoForNodeAtResourcePath:node.resourcePath includeChildren:includeChildren completionBlockOnMainQueue:completionBlock]; |
355 | 116 | } | 116 | } |
356 | 117 | 117 | ||
357 | 118 | - (id)contentForNode:(U1FileNode*)node progressBlock:(void(^)(long long bytesReceived, long long bytesExpected))progressBlock completionBlock:(void(^)(NSURL *contentURL))completionBlock; | 118 | - (id)contentForNode:(U1FileNode*)node progressBlock:(void(^)(long long bytesReceived, long long bytesExpected))progressBlock completionBlock:(void(^)(NSURL *contentURL))completionBlock; |
358 | @@ -170,7 +170,7 @@ | |||
359 | 170 | return nil; | 170 | return nil; |
360 | 171 | } | 171 | } |
361 | 172 | 172 | ||
363 | 173 | - (id)uploadContentData:(id<U1UploadDataProvider>)contentData forNode:(U1FileNode*)node progressBlock:(void(^)(long long bytesUploaded, long long totalBytes))progressBlock completionBlock:(void(^)(NSDictionary *updatedNodeInfo, NSError *error))completionBlock; | 173 | - (id)uploadContentData:(id<U1UploadDataProvider>)contentData forNode:(U1FileNode*)node progressBlock:(void(^)(long long bytesUploaded, long long totalBytes))progressBlock completionBlockOnMainQueue:(void(^)(NSDictionary *updatedNodeInfo, NSError *error))completionBlock; |
364 | 174 | { | 174 | { |
365 | 175 | NSString *resourcePath = node.resourcePath; | 175 | NSString *resourcePath = node.resourcePath; |
366 | 176 | NSURL *requestURL = [contentData isMagic] ? [self URLForNode:resourcePath includeChildren:NO] : [self contentURLForNode:resourcePath]; | 176 | NSURL *requestURL = [contentData isMagic] ? [self URLForNode:resourcePath includeChildren:NO] : [self contentURLForNode:resourcePath]; |
367 | @@ -179,14 +179,16 @@ | |||
368 | 179 | 179 | ||
369 | 180 | if (error) | 180 | if (error) |
370 | 181 | { | 181 | { |
372 | 182 | completionBlock(nil, error); | 182 | dispatch_async(dispatch_get_main_queue(), ^{ |
373 | 183 | completionBlock(nil, error); | ||
374 | 184 | }); | ||
375 | 183 | return; | 185 | return; |
376 | 184 | } | 186 | } |
377 | 185 | 187 | ||
378 | 186 | U1ReportingInputStream *stream = [U1ReportingInputStream inputStreamWithSourceStream:dataStream]; | 188 | U1ReportingInputStream *stream = [U1ReportingInputStream inputStreamWithSourceStream:dataStream]; |
379 | 187 | stream.progressBlock = progressBlock; | 189 | stream.progressBlock = progressBlock; |
380 | 188 | stream.dataLength = length; | 190 | stream.dataLength = length; |
382 | 189 | [self execute:@"PUT" toURL:requestURL requestBody:stream contentType:mimeType contentLength:length parseResponseBody:YES completionBlock:^(id results, NSError *error) { | 191 | [self execute:@"PUT" toURL:requestURL requestBody:stream contentType:mimeType contentLength:length parseResponseBody:YES completionBlockOnMainQueue:^(id results, NSError *error) { |
383 | 190 | completionBlock(results, error); | 192 | completionBlock(results, error); |
384 | 191 | }]; | 193 | }]; |
385 | 192 | }]; | 194 | }]; |
386 | @@ -194,7 +196,7 @@ | |||
387 | 194 | return nil; | 196 | return nil; |
388 | 195 | } | 197 | } |
389 | 196 | 198 | ||
391 | 197 | - (id)moveNodeAtResourcePath:(NSString*)resourcePath toPath:(NSString*)newPath withCompletionBlock:(void(^)(NSDictionary *nodeInfo, NSError *error))completionBlock; | 199 | - (id)moveNodeAtResourcePath:(NSString*)resourcePath toPath:(NSString*)newPath withCompletionBlockOnMainQueue:(void(^)(NSDictionary *nodeInfo, NSError *error))completionBlock; |
392 | 198 | { | 200 | { |
393 | 199 | NSParameterAssert(resourcePath != nil); | 201 | NSParameterAssert(resourcePath != nil); |
394 | 200 | NSParameterAssert(newPath != nil); | 202 | NSParameterAssert(newPath != nil); |
395 | @@ -202,65 +204,65 @@ | |||
396 | 202 | 204 | ||
397 | 203 | NSURL *nodeURL = [self URLForNode:resourcePath includeChildren:NO]; | 205 | NSURL *nodeURL = [self URLForNode:resourcePath includeChildren:NO]; |
398 | 204 | NSString *body = [NSString stringWithFormat:@"{\"path\": \"%@\"}", newPath]; | 206 | NSString *body = [NSString stringWithFormat:@"{\"path\": \"%@\"}", newPath]; |
400 | 205 | return [self execute:@"PUT" toURL:nodeURL requestBody:body parseResponseBody:YES completionBlock:^(id results, NSError *error) { | 207 | return [self execute:@"PUT" toURL:nodeURL requestBody:body parseResponseBody:YES completionBlockOnMainQueue:^(id results, NSError *error) { |
401 | 206 | completionBlock(results, error); | 208 | completionBlock(results, error); |
402 | 207 | }]; | 209 | }]; |
403 | 208 | } | 210 | } |
404 | 209 | 211 | ||
406 | 210 | - (id)deleteNodeAtResourcePath:(NSString*)resourcePath completionBlock:(void(^)(NSError *error))completionBlock; | 212 | - (id)deleteNodeAtResourcePath:(NSString*)resourcePath completionBlockOnMainQueue:(void(^)(NSError *error))completionBlock; |
407 | 211 | { | 213 | { |
408 | 212 | NSURL *nodeURL = [self URLForNode:resourcePath includeChildren:NO]; | 214 | NSURL *nodeURL = [self URLForNode:resourcePath includeChildren:NO]; |
410 | 213 | return [self execute:@"DELETE" toURL:nodeURL requestBody:nil parseResponseBody:NO completionBlock:^(id result, NSError *error) { | 215 | return [self execute:@"DELETE" toURL:nodeURL requestBody:nil parseResponseBody:NO completionBlockOnMainQueue:^(id result, NSError *error) { |
411 | 214 | completionBlock(error); | 216 | completionBlock(error); |
412 | 215 | }]; | 217 | }]; |
413 | 216 | } | 218 | } |
414 | 217 | 219 | ||
444 | 218 | - (id)publishNode:(U1FileNode*)node completionBlock:(void(^)(U1FileNode *node, NSError *error))completionBlock; | 220 | - (id)publishNode:(U1FileNode*)node completionBlockOnMainQueue:(void(^)(U1FileNode *node, NSError *error))completionBlock; |
445 | 219 | { | 221 | { |
446 | 220 | NSString *nodePath = node.resourcePath; | 222 | NSString *nodePath = node.resourcePath; |
447 | 221 | NSURL *nodeURL = [self URLForNode:(NSString*)nodePath includeChildren:NO]; | 223 | NSURL *nodeURL = [self URLForNode:(NSString*)nodePath includeChildren:NO]; |
448 | 222 | return [self execute:@"PUT" toURL:nodeURL requestBody:@"{\"is_public\": true}" parseResponseBody:YES completionBlock:^(id result, NSError *error) { | 224 | return [self execute:@"PUT" toURL:nodeURL requestBody:@"{\"is_public\": true}" parseResponseBody:YES completionBlockOnMainQueue:^(id result, NSError *error) { |
449 | 223 | 225 | ||
450 | 224 | if (!error) | 226 | if (!error) |
451 | 225 | { | 227 | { |
452 | 226 | [node updatePropertiesFromJSONDictionary:result]; | 228 | [node updatePropertiesFromJSONDictionary:result]; |
453 | 227 | } | 229 | } |
454 | 228 | completionBlock(node, error); | 230 | completionBlock(node, error); |
455 | 229 | }]; | 231 | }]; |
456 | 230 | } | 232 | } |
457 | 231 | 233 | ||
458 | 232 | - (id)unpublishNode:(U1FileNode*)node completionBlock:(void(^)(U1FileNode *node, NSError *error))completionBlock; | 234 | - (id)unpublishNode:(U1FileNode*)node completionBlockOnMainQueue:(void(^)(U1FileNode *node, NSError *error))completionBlock; |
459 | 233 | { | 235 | { |
460 | 234 | NSString *nodePath = node.resourcePath; | 236 | NSString *nodePath = node.resourcePath; |
461 | 235 | NSURL *nodeURL = [self URLForNode:(NSString*)nodePath includeChildren:NO]; | 237 | NSURL *nodeURL = [self URLForNode:(NSString*)nodePath includeChildren:NO]; |
462 | 236 | return [self execute:@"PUT" toURL:nodeURL requestBody:@"{\"is_public\": false}" parseResponseBody:YES completionBlock:^(id result, NSError *error) { | 238 | return [self execute:@"PUT" toURL:nodeURL requestBody:@"{\"is_public\": false}" parseResponseBody:YES completionBlockOnMainQueue:^(id result, NSError *error) { |
463 | 237 | 239 | ||
464 | 238 | if (!error) | 240 | if (!error) |
465 | 239 | { | 241 | { |
466 | 240 | [node updatePropertiesFromJSONDictionary:result]; | 242 | [node updatePropertiesFromJSONDictionary:result]; |
467 | 241 | } | 243 | } |
468 | 242 | completionBlock(node, error); | 244 | completionBlock(node, error); |
469 | 243 | }]; | 245 | }]; |
470 | 244 | } | 246 | } |
471 | 245 | 247 | ||
472 | 246 | - (id)createFolderAtPath:(NSString*)folderPath completionBlock:(void(^)(NSDictionary *nodeInfo, NSError *error))completionBlock; | 248 | - (id)createFolderAtPath:(NSString*)folderPath completionBlockOnMainQueue:(void(^)(NSDictionary *nodeInfo, NSError *error))completionBlock; |
473 | 247 | { | 249 | { |
474 | 248 | NSParameterAssert(folderPath != nil); | 250 | NSParameterAssert(folderPath != nil); |
475 | 249 | NSParameterAssert(completionBlock != NULL); | 251 | NSParameterAssert(completionBlock != NULL); |
476 | 250 | 252 | ||
477 | 251 | NSURL *nodeURL = [self URLForNode:folderPath includeChildren:NO]; | 253 | NSURL *nodeURL = [self URLForNode:folderPath includeChildren:NO]; |
479 | 252 | return [self execute:@"PUT" toURL:nodeURL requestBody:@"{\"kind\": \"directory\"}" parseResponseBody:YES completionBlock:^(id results, NSError *error) { | 254 | return [self execute:@"PUT" toURL:nodeURL requestBody:@"{\"kind\": \"directory\"}" parseResponseBody:YES completionBlockOnMainQueue:^(id results, NSError *error) { |
480 | 253 | completionBlock(results, error); | 255 | completionBlock(results, error); |
481 | 254 | }]; | 256 | }]; |
482 | 255 | } | 257 | } |
483 | 256 | 258 | ||
485 | 257 | - (id)createVolumeAtPath:(NSString*)volumePath completionBlock:(void(^)(NSDictionary *volumeInfo, NSError *error))completionBlock; | 259 | - (id)createVolumeAtPath:(NSString*)volumePath completionBlockOnMainQueue:(void(^)(NSDictionary *volumeInfo, NSError *error))completionBlock; |
486 | 258 | { | 260 | { |
487 | 259 | NSParameterAssert(volumePath != nil); | 261 | NSParameterAssert(volumePath != nil); |
488 | 260 | NSParameterAssert(completionBlock != NULL); | 262 | NSParameterAssert(completionBlock != NULL); |
489 | 261 | 263 | ||
490 | 262 | NSURL *volumeURL = [self URLForVolumeWithPath:volumePath]; | 264 | NSURL *volumeURL = [self URLForVolumeWithPath:volumePath]; |
492 | 263 | return [self execute:@"PUT" toURL:volumeURL requestBody:@"" parseResponseBody:YES completionBlock:^(id results, NSError *error) { | 265 | return [self execute:@"PUT" toURL:volumeURL requestBody:@"" parseResponseBody:YES completionBlockOnMainQueue:^(id results, NSError *error) { |
493 | 264 | completionBlock(results, error); | 266 | completionBlock(results, error); |
494 | 265 | }]; | 267 | }]; |
495 | 266 | } | 268 | } |
496 | @@ -301,13 +303,13 @@ | |||
497 | 301 | return [NSURL URLWithString:finalString]; | 303 | return [NSURL URLWithString:finalString]; |
498 | 302 | } | 304 | } |
499 | 303 | 305 | ||
501 | 304 | - (id)execute:(NSString*)method toURL:(NSURL*)url requestBody:(NSString*)body parseResponseBody:(BOOL)parseResponseBody completionBlock:(void(^)(id results, NSError *error))completionBlock; | 306 | - (id)execute:(NSString*)method toURL:(NSURL*)url requestBody:(NSString*)body parseResponseBody:(BOOL)parseResponseBody completionBlockOnMainQueue:(void(^)(id results, NSError *error))completionBlock; |
502 | 305 | { | 307 | { |
503 | 306 | NSData *bodyData = [body dataUsingEncoding:NSUTF8StringEncoding]; | 308 | NSData *bodyData = [body dataUsingEncoding:NSUTF8StringEncoding]; |
505 | 307 | return [self execute:method toURL:url requestBody:bodyData contentType:@"application/json" contentLength:[bodyData length] parseResponseBody:parseResponseBody completionBlock:completionBlock]; | 309 | return [self execute:method toURL:url requestBody:bodyData contentType:@"application/json" contentLength:[bodyData length] parseResponseBody:parseResponseBody completionBlockOnMainQueue:completionBlock]; |
506 | 308 | } | 310 | } |
507 | 309 | 311 | ||
509 | 310 | - (id)execute:(NSString*)method toURL:(NSURL*)url requestBody:(id)bodyData contentType:(NSString*)contentType contentLength:(NSUInteger)contentLength parseResponseBody:(BOOL)parseResponseBody completionBlock:(void(^)(id results, NSError *error))completionBlock; | 312 | - (id)execute:(NSString*)method toURL:(NSURL*)url requestBody:(id)bodyData contentType:(NSString*)contentType contentLength:(NSUInteger)contentLength parseResponseBody:(BOOL)parseResponseBody completionBlockOnMainQueue:(void(^)(id results, NSError *error))completionBlock; |
510 | 311 | { | 313 | { |
511 | 312 | 314 | ||
512 | 313 | OAToken *token = [[U1AccountManager sharedAccountManager] oauthToken]; | 315 | OAToken *token = [[U1AccountManager sharedAccountManager] oauthToken]; |
513 | 314 | 316 | ||
514 | === modified file 'Files/U1UploadOperation.m' | |||
515 | --- Files/U1UploadOperation.m 2013-04-03 22:52:01 +0000 | |||
516 | +++ Files/U1UploadOperation.m 2013-04-04 21:20:29 +0000 | |||
517 | @@ -96,7 +96,7 @@ | |||
518 | 96 | [filesService uploadContentData:dataProvider | 96 | [filesService uploadContentData:dataProvider |
519 | 97 | forNode:self.fileNode | 97 | forNode:self.fileNode |
520 | 98 | progressBlock:^(long long uploaded, long long totalLength) {} | 98 | progressBlock:^(long long uploaded, long long totalLength) {} |
522 | 99 | completionBlock:^(NSDictionary *updatedNodeInfo, NSError *magicUploadError) { | 99 | completionBlockOnMainQueue:^(NSDictionary *updatedNodeInfo, NSError *magicUploadError) { |
523 | 100 | 100 | ||
524 | 101 | if (magicUploadError != nil) | 101 | if (magicUploadError != nil) |
525 | 102 | { | 102 | { |
526 | @@ -134,17 +134,16 @@ | |||
527 | 134 | 134 | ||
528 | 135 | if (self.progressBlock) | 135 | if (self.progressBlock) |
529 | 136 | self.progressBlock(uploaded, totalLength); | 136 | self.progressBlock(uploaded, totalLength); |
531 | 137 | } completionBlock:^(NSDictionary *updatedNodeInfo, NSError *regularUploadError) { | 137 | |
532 | 138 | } completionBlockOnMainQueue:^(NSDictionary *updatedNodeInfo, NSError *regularUploadError) { | ||
533 | 138 | if (regularUploadError != nil) | 139 | if (regularUploadError != nil) |
534 | 139 | { | 140 | { |
535 | 140 | self.error = regularUploadError; | 141 | self.error = regularUploadError; |
536 | 141 | } | 142 | } |
537 | 142 | 143 | ||
543 | 143 | dispatch_async(dispatch_get_main_queue(), ^{ | 144 | [self.fileInfo setUploadPercentage:1.0]; |
544 | 144 | [self.fileInfo setUploadPercentage:1.0]; | 145 | [self.fileInfo setUploading:NO]; |
545 | 145 | [self.fileInfo setUploading:NO]; | 146 | [self.fileInfo setUploaded:YES]; |
541 | 146 | [self.fileInfo setUploaded:YES]; | ||
542 | 147 | }); | ||
546 | 148 | 147 | ||
547 | 149 | [self.fileNode updatePropertiesFromJSONDictionary:updatedNodeInfo]; | 148 | [self.fileNode updatePropertiesFromJSONDictionary:updatedNodeInfo]; |
548 | 150 | [self finishExecuting]; | 149 | [self finishExecuting]; |
549 | @@ -153,11 +152,9 @@ | |||
550 | 153 | } | 152 | } |
551 | 154 | else | 153 | else |
552 | 155 | { | 154 | { |
558 | 156 | dispatch_async(dispatch_get_main_queue(), ^{ | 155 | [self.fileInfo setUploadPercentage:1.0]; |
559 | 157 | [self.fileInfo setUploadPercentage:1.0]; | 156 | [self.fileInfo setUploading:NO]; |
560 | 158 | [self.fileInfo setUploading:NO]; | 157 | [self.fileInfo setUploaded:YES]; |
556 | 159 | [self.fileInfo setUploaded:YES]; | ||
557 | 160 | }); | ||
561 | 161 | 158 | ||
562 | 162 | [self.fileNode updatePropertiesFromJSONDictionary:updatedNodeInfo]; | 159 | [self.fileNode updatePropertiesFromJSONDictionary:updatedNodeInfo]; |
563 | 163 | [self finishExecuting]; | 160 | [self finishExecuting]; |
Lots of conflict markers showing in the diff.