Merge lp:~mikemc/ubuntuone-ios-files/main-queue-callback-refactor into lp:ubuntuone-ios-files

Proposed by Mike McCracken
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
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:toURL:requestBody... etc

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.

To post a comment you must log in.
Revision history for this message
dobey (dobey) wrote :

Lots of conflict markers showing in the diff.

review: Needs Fixing
79. By Mike McCracken

poke LP again

Revision history for this message
Brian Curtin (brian.curtin) wrote :

Conflict markers remain

review: Needs Fixing
80. By Mike McCracken

merge with trunk

81. By Mike McCracken

merge with trunk

Revision history for this message
dobey (dobey) :
review: Approve
Revision history for this message
Brian Curtin (brian.curtin) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
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
6 [[U1FilesClient sharedFilesClient] uploadAssetURL:self.assetURL toFolder:folder withResourceName:self.filename withPriority:self.priority progressBlock:^(long long bytesUploaded, long long totalBytes) {
7
8- } completionBlock:^(U1FileNode *fileNode, NSError *error) {
9+ } completionBlockOnMainQueue:^(U1FileNode *fileNode, NSError *error) {
10 if (error != nil)
11 {
12 NSLog(@"U1AutoUploadOperation: auto-upload failed: %@", error);
13 }
14-
15- dispatch_async(dispatch_get_main_queue(), ^(void) {
16-
17- asset.generation = asset.fileNode.generation;
18- NSError *err = NULL;
19- BOOL success = [dataRepository save:&err];
20- if(!success){
21- CLS_LOG(@"U1AutoUploadOperation: failed to save to repository: %@", err);
22- }
23- [self finishExecuting];
24- });
25+
26+ asset.generation = asset.fileNode.generation;
27+ NSError *err = NULL;
28+ BOOL success = [dataRepository save:&err];
29+ if(!success){
30+ CLS_LOG(@"U1AutoUploadOperation: failed to save to repository: %@", err);
31+ }
32+ [self finishExecuting];
33 }];
34
35 }];
36
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 creatingUploadVolume = YES;
42
43 [self.filesClient createVolumeAtPath:[self remoteUploadFolderPath]
44- completionBlock:^(U1Volume *volume, NSError *error) {
45+ completionBlockOnMainQueue:^(U1Volume *volume, NSError *error) {
46 creatingUploadVolume = NO;
47 if (error == nil)
48 {
49
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 if (![sender isOn] && [self.node isPublicValue])
55 {
56 [self.publishStatusLabel setText:NSLocalizedString(@"Unpublishing file...", nil)];
57- [self.filesClient unpublishNode:self.node completionBlock:^(U1FileNode *node, NSError *error) {
58- dispatch_async(dispatch_get_main_queue(), ^(void) {
59- [sender setEnabled:YES];
60- [self.publishStatusLabel setText:nil];
61- [self.actionsTableView deleteRowsAtIndexPaths:publishStatusIndexPath withRowAnimation:UITableViewRowAnimationFade];
62- });
63+ [self.filesClient unpublishNode:self.node completionBlockOnMainQueue:^(U1FileNode *node, NSError *error) {
64+ [sender setEnabled:YES];
65+ [self.publishStatusLabel setText:nil];
66+ [self.actionsTableView deleteRowsAtIndexPaths:publishStatusIndexPath withRowAnimation:UITableViewRowAnimationFade];
67 }];
68 }
69 else if ([sender isOn] && ![self.node isPublicValue])
70@@ -243,14 +241,12 @@
71 [self.publishStatusLabel setText:NSLocalizedString(@"Publishing file...", nil)];
72 [self.actionsTableView insertRowsAtIndexPaths:publishStatusIndexPath withRowAnimation:UITableViewRowAnimationNone];
73 [self.actionsTableView endUpdates];
74- [self.filesClient publishNode:self.node completionBlock:^(U1FileNode *node, NSError *error) {
75- dispatch_async(dispatch_get_main_queue(), ^(void) {
76- [sender setEnabled:YES];
77- [self.actionsTableView beginUpdates];
78- [self.publishStatusLabel setText:[self.node publicURLString]];
79- [self.actionsTableView reloadRowsAtIndexPaths:publishStatusIndexPath withRowAnimation:UITableViewRowAnimationNone];
80- [self.actionsTableView endUpdates];
81- });
82+ [self.filesClient publishNode:self.node completionBlockOnMainQueue:^(U1FileNode *node, NSError *error) {
83+ [sender setEnabled:YES];
84+ [self.actionsTableView beginUpdates];
85+ [self.publishStatusLabel setText:[self.node publicURLString]];
86+ [self.actionsTableView reloadRowsAtIndexPaths:publishStatusIndexPath withRowAnimation:UITableViewRowAnimationNone];
87+ [self.actionsTableView endUpdates];
88 }];
89 }
90 }
91@@ -394,11 +390,11 @@
92 if (!newName)
93 return;
94
95- [[U1FilesClient sharedFilesClient] renameNode:self.node toName:newName completionBlock:^(U1Node *newNode, NSError *error) {
96+ [[U1FilesClient sharedFilesClient] renameNode:self.node toName:newName completionBlockOnMainQueue:^(U1Node *newNode, NSError *error) {
97
98 if (!error)
99 {
100- self.title = [node.path lastPathComponent];
101+ self.title = [newNode.path lastPathComponent];
102 UILabel *titleLabel = (UILabel*)[self.navigationItem titleView];
103 [titleLabel setText:self.title];
104 [titleLabel sizeToFit];
105
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 - (id)volumesWithResultsBlock:(void(^)(U1Volume *rootVolume, NSFetchedResultsController *cloudFoldersResultsController, U1DataSourceType resultsDataSourceType))resultsBlock errorBlock:(void(^)(NSError *error))errorBlock;
111 - (id)fetchFolderWithResourcePath:(NSString*)nodePath resultsBlock:(void(^)(U1Node *node, NSFetchedResultsController *childrenResultsController, U1DataSourceType resultsDataSourceType))resultsBlock errorBlock:(void(^)(NSError *error))errorBlock;
112 - (id)fetchFileWithResourcePath:(NSString*)nodePath completionBlock:(void(^)(U1Node *node, NSError *error))completionBlock;
113-- (id)renameNode:(U1Node*)node toName:(NSString*)newName completionBlock:(void(^)(U1Node *node, NSError *error))completionBlock;
114+- (id)renameNode:(U1Node*)node toName:(NSString*)newName completionBlockOnMainQueue:(void(^)(U1Node *node, NSError *error))completionBlock;
115 - (id)deleteNode:(U1Node*)node completionBlock:(void(^)(NSError *error))completionBlock;
116-- (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;
117-- (id)publishNode:(U1FileNode*)node completionBlock:(void(^)(U1FileNode *node, NSError *error))completionBlock;
118-- (id)unpublishNode:(U1FileNode*)node completionBlock:(void(^)(U1FileNode *node, NSError *error))completionBlock;
119-- (id)createFolderNamed:(NSString*)name inFolder:(U1FolderNode*)folderNode completionBlock:(void(^)(U1FolderNode *newFolderNode, NSError *error))completionBlock;
120-- (id)createVolumeAtPath:(NSString*)folderPath completionBlock:(void(^)(U1Volume *volume, NSError *error))completionBlock;
121+- (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+- (id)publishNode:(U1FileNode*)node completionBlockOnMainQueue:(void(^)(U1FileNode *node, NSError *error))completionBlock;
123+- (id)unpublishNode:(U1FileNode*)node completionBlockOnMainQueue:(void(^)(U1FileNode *node, NSError *error))completionBlock;
124+- (id)createFolderNamed:(NSString*)name inFolder:(U1FolderNode*)folderNode completionBlockOnMainQueue:(void(^)(U1FolderNode *newFolderNode, NSError *error))completionBlock;
125+- (id)createVolumeAtPath:(NSString*)folderPath completionBlockOnMainQueue:(void(^)(U1Volume *volume, NSError *error))completionBlock;
126 - (BOOL)isNodeSavedLocally:(U1FileNode*)node;
127 - (U1LocalFileInfo*)localInfoForNode:(U1FileNode*)node;
128 - (U1LocalFileInfo*)downloadFileForNode:(U1FileNode*)node completionBlock:(void(^)(NSError *error))completionBlock;
129
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
135 - (id)accountInfoWithCompletionBlock:(void(^)(NSDictionary *accountInfo, NSError *error))completionBlock;
136 {
137- return [self.filesService accountInfoWithCompletionBlock:completionBlock];
138+ return [self.filesService accountInfoWithCompletionBlockOnMainQueue:completionBlock];
139 }
140
141 - (id)volumesWithResultsBlock:(void(^)(U1Volume *rootVolume, NSFetchedResultsController *cloudFoldersResultsController, U1DataSourceType resultsDataSourceType))resultsBlock errorBlock:(void(^)(NSError *error))errorBlock;
142@@ -142,7 +142,7 @@
143
144 resultsBlock(rootVolume, cloudFoldersResultsController, U1DataSourceLocal);
145
146- [self.filesService volumeInfoWithCompletionBlock:^(NSArray *volumeInfos, NSError *error) {
147+ [self.filesService volumeInfoWithCompletionBlockOnMainQueue:^(NSArray *volumeInfos, NSError *error) {
148
149 [self.dataRepository dispatchBlockWithMainContext:^(NSManagedObjectContext *context) {
150
151@@ -236,11 +236,11 @@
152
153 resultsBlock(node, resultsController, U1DataSourceLocal);
154
155- [self.filesService infoForNodeAtResourcePath:node.resourcePath includeChildren:YES completionBlock:^(NSDictionary *nodeInfo, NSError *error) {
156+ [self.filesService infoForNodeAtResourcePath:node.resourcePath includeChildren:YES completionBlockOnMainQueue:^(NSDictionary *nodeInfo, NSError *error) {
157
158 if (error)
159 {
160- CLS_LOG(@"error from call to filesService infoForNodeAtResourcePath:...");
161+ CLS_LOG(@"error from call to filesService infoForNodeAtResourcePath:. %@", error);
162 errorBlock(error);
163 return;
164 }
165@@ -334,7 +334,7 @@
166 }
167
168
169- [self.filesService infoForNodeAtResourcePath:node.resourcePath includeChildren:NO completionBlock:^(NSDictionary *nodeInfo, NSError *error) {
170+ [self.filesService infoForNodeAtResourcePath:node.resourcePath includeChildren:NO completionBlockOnMainQueue:^(NSDictionary *nodeInfo, NSError *error) {
171 if (error == nil)
172 {
173 [node updatePropertiesFromJSONDictionary:nodeInfo];
174@@ -350,14 +350,14 @@
175 return nil;
176 }
177
178-- (id)renameNode:(U1Node*)node toName:(NSString*)newName completionBlock:(void(^)(U1Node *node, NSError *error))completionBlock;
179+- (id)renameNode:(U1Node*)node toName:(NSString*)newName completionBlockOnMainQueue:(void(^)(U1Node *node, NSError *error))completionBlock;
180 {
181 NSParameterAssert(node != nil);
182 NSParameterAssert(newName != nil);
183 NSParameterAssert(completionBlock != NULL);
184
185 NSString *newPath = [[node.path stringByDeletingLastPathComponent] stringByAppendingPathComponent:newName];
186- return [self.filesService moveNodeAtResourcePath:node.resourcePath toPath:newPath withCompletionBlock:^(NSDictionary *nodeInfo, NSError *error) {
187+ return [self.filesService moveNodeAtResourcePath:node.resourcePath toPath:newPath withCompletionBlockOnMainQueue:^(NSDictionary *nodeInfo, NSError *error) {
188 if (!error)
189 {
190 [node updatePropertiesFromJSONDictionary:nodeInfo];
191@@ -368,7 +368,7 @@
192
193 - (id)deleteNode:(U1Node*)node completionBlock:(void(^)(NSError *error))completionBlock;
194 {
195- return [self.filesService deleteNodeAtResourcePath:node.resourcePath completionBlock:^(NSError *error) {
196+ return [self.filesService deleteNodeAtResourcePath:node.resourcePath completionBlockOnMainQueue:^(NSError *error) {
197 if (!error)
198 {
199 [self.dataRepository dispatchBlockWithMainContext:^(NSManagedObjectContext *context) {
200@@ -380,10 +380,10 @@
201 }];
202 }
203
204-- (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;
205+- (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 {
207 NSString *resourcePath = [folderNode.resourcePath stringByAppendingPathComponent:resourceName];
208- U1FileNode *node = (id)[self.dataRepository nodeWithResourcePath:resourcePath];
209+ U1FileNode *node = (id)[self.dataRepository nodeWithResourcePath:resourcePath]; // node will be from main context , on main Q
210 if (!node)
211 {
212 [self.dataRepository dispatchBlockWithMainContext:^(NSManagedObjectContext *context) {
213@@ -442,17 +442,17 @@
214 return operation;
215 }
216
217-- (id)publishNode:(U1FileNode*)node completionBlock:(void(^)(U1FileNode *node, NSError *error))completionBlock;
218-{
219- return [self.filesService publishNode:node completionBlock:completionBlock];
220-}
221-
222-- (id)unpublishNode:(U1FileNode*)node completionBlock:(void(^)(U1FileNode *node, NSError *error))completionBlock;
223-{
224- return [self.filesService unpublishNode:node completionBlock:completionBlock];
225-}
226-
227-- (id)createFolderNamed:(NSString*)name inFolder:(U1FolderNode*)folderNode completionBlock:(void(^)(U1FolderNode *newFolderNode, NSError *error))completionBlock;
228+- (id)publishNode:(U1FileNode*)node completionBlockOnMainQueue:(void(^)(U1FileNode *node, NSError *error))completionBlock;
229+{
230+ return [self.filesService publishNode:node completionBlockOnMainQueue:completionBlock];
231+}
232+
233+- (id)unpublishNode:(U1FileNode*)node completionBlockOnMainQueue:(void(^)(U1FileNode *node, NSError *error))completionBlock;
234+{
235+ return [self.filesService unpublishNode:node completionBlockOnMainQueue:completionBlock];
236+}
237+
238+- (id)createFolderNamed:(NSString*)name inFolder:(U1FolderNode*)folderNode completionBlockOnMainQueue:(void(^)(U1FolderNode *newFolderNode, NSError *error))completionBlock;
239 {
240 NSString *resourcePath = folderNode.resourcePath;
241 resourcePath = [resourcePath stringByAppendingPathComponent:name];
242@@ -471,7 +471,7 @@
243 node = (id)[self.dataRepository nodeWithResourcePath:resourcePath];
244 }
245
246- return [self.filesService createFolderAtPath:resourcePath completionBlock:^(NSDictionary *nodeInfo, NSError *error) {
247+ return [self.filesService createFolderAtPath:resourcePath completionBlockOnMainQueue:^(NSDictionary *nodeInfo, NSError *error) {
248 if (!error)
249 {
250 [node updatePropertiesFromJSONDictionary:nodeInfo];
251@@ -480,9 +480,9 @@
252 }];
253 }
254
255-- (id)createVolumeAtPath:(NSString*)folderPath completionBlock:(void(^)(U1Volume *volume, NSError *error))completionBlock;
256+- (id)createVolumeAtPath:(NSString*)folderPath completionBlockOnMainQueue:(void(^)(U1Volume *volume, NSError *error))completionBlock;
257 {
258- return [self.filesService createVolumeAtPath:folderPath completionBlock:^(NSDictionary *volumeInfo, NSError *error) {
259+ return [self.filesService createVolumeAtPath:folderPath completionBlockOnMainQueue:^(NSDictionary *volumeInfo, NSError *error) {
260 [self.dataRepository dispatchBlockWithMainContext:^(NSManagedObjectContext *context) {
261 U1Volume *volume = [U1Volume insertInManagedObjectContext:context];
262 if (!error)
263
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
269 + (U1FilesService *)sharedFilesService;
270
271-- (id)accountInfoWithCompletionBlock:(void(^)(NSDictionary *accountInfo, NSError *error))completionBlock;
272-- (id)volumeInfoWithCompletionBlock:(void(^)(NSArray *volumeInfos, NSError *error))completionBlock;
273-- (id)infoForNodeAtResourcePath:(NSString*)resourcePath includeChildren:(BOOL)includeChildren completionBlock:(void(^)(NSDictionary *node, NSError *error))completionBlock;
274-- (id)infoForNode:(U1Node*)node includeChildren:(BOOL)includeChildren completionBlock:(void(^)(NSDictionary *node, NSError *error))completionBlock;
275+- (id)accountInfoWithCompletionBlockOnMainQueue:(void(^)(NSDictionary *accountInfo, NSError *error))completionBlock;
276+- (id)volumeInfoWithCompletionBlockOnMainQueue:(void(^)(NSArray *volumeInfos, NSError *error))completionBlock;
277+- (id)infoForNodeAtResourcePath:(NSString*)resourcePath includeChildren:(BOOL)includeChildren completionBlockOnMainQueue:(void(^)(NSDictionary *node, NSError *error))completionBlock;
278+- (id)infoForNode:(U1Node*)node includeChildren:(BOOL)includeChildren completionBlockOnMainQueue:(void(^)(NSDictionary *node, NSError *error))completionBlock;
279 - (id)contentForNode:(U1FileNode*)node progressBlock:(void(^)(long long bytesReceived, long long bytesExpected))progressBlock completionBlock:(void(^)(NSURL *contentURL))completionBlock;
280-- (id)uploadContentData:(id<U1UploadDataProvider>)contentData forNode:(U1FileNode*)node progressBlock:(void(^)(long long bytesUploaded, long long totalBytes))progressBlock completionBlock:(void(^)(NSDictionary *updatedNodeInfo, NSError *error))completionBlock;
281-- (id)moveNodeAtResourcePath:(NSString*)resourcePath toPath:(NSString*)newPath withCompletionBlock:(void(^)(NSDictionary *nodeInfo, NSError *error))completionBlock;
282-- (id)deleteNodeAtResourcePath:(NSString*)resourcePath completionBlock:(void(^)(NSError *error))completionBlock;
283-- (id)publishNode:(U1FileNode*)node completionBlock:(void(^)(U1FileNode *node, NSError *error))completionBlock;
284-- (id)unpublishNode:(U1FileNode*)node completionBlock:(void(^)(U1FileNode *node, NSError *error))completionBlock;
285-- (id)createFolderAtPath:(NSString*)folderPath completionBlock:(void(^)(NSDictionary *nodeInfo, NSError *error))completionBlock;
286-- (id)createVolumeAtPath:(NSString*)folderPath completionBlock:(void(^)(NSDictionary *volumeInfo, NSError *error))completionBlock;
287+- (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+- (id)moveNodeAtResourcePath:(NSString*)resourcePath toPath:(NSString*)newPath withCompletionBlockOnMainQueue:(void(^)(NSDictionary *nodeInfo, NSError *error))completionBlock;
289+- (id)deleteNodeAtResourcePath:(NSString*)resourcePath completionBlockOnMainQueue:(void(^)(NSError *error))completionBlock;
290+- (id)publishNode:(U1FileNode*)node completionBlockOnMainQueue:(void(^)(U1FileNode *node, NSError *error))completionBlock;
291+- (id)unpublishNode:(U1FileNode*)node completionBlockOnMainQueue:(void(^)(U1FileNode *node, NSError *error))completionBlock;
292+- (id)createFolderAtPath:(NSString*)folderPath completionBlockOnMainQueue:(void(^)(NSDictionary *nodeInfo, NSError *error))completionBlock;
293+- (id)createVolumeAtPath:(NSString*)folderPath completionBlockOnMainQueue:(void(^)(NSDictionary *volumeInfo, NSError *error))completionBlock;
294
295 @end
296
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 - (NSURL*)URLForVolumeWithPath:(NSString*)volumePath;
302 - (NSURL*)URLForNode:(NSString*)nodePath includeChildren:(BOOL)includeChildren;
303 - (NSURL*)contentURLForNode:(NSString*)nodePath;
304-- (id)execute:(NSString*)method toURL:(NSURL*)url requestBody:(NSString*)body parseResponseBody:(BOOL)parseResponseBody completionBlock:(void(^)(id results, NSError *error))completionBlock;
305-- (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;
306+- (id)execute:(NSString*)method toURL:(NSURL*)url requestBody:(NSString*)body parseResponseBody:(BOOL)parseResponseBody completionBlockOnMainQueue:(void(^)(id results, NSError *error))completionBlock;
307+- (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
309 @end
310
311@@ -81,38 +81,38 @@
312 [super dealloc];
313 }
314
315-- (id)accountInfoWithCompletionBlock:(void(^)(NSDictionary *accountInfo, NSError *error))completionBlock;
316+- (id)accountInfoWithCompletionBlockOnMainQueue:(void(^)(NSDictionary *accountInfo, NSError *error))completionBlock;
317 {
318 NSMutableString *urlString = [NSMutableString stringWithString:U1FilesServiceAPIBase];
319 [urlString appendString:U1FilesServiceAPIPath];
320 [urlString appendString:U1FilesServiceAPIVersion1];
321 NSURL *rootURL = [NSURL URLWithString:urlString];
322- return [self execute:@"GET" toURL:rootURL requestBody:nil parseResponseBody:YES completionBlock:^(id results, NSError *error) {
323+ return [self execute:@"GET" toURL:rootURL requestBody:nil parseResponseBody:YES completionBlockOnMainQueue:^(id results, NSError *error) {
324 completionBlock(results, error);
325 }];
326 }
327
328-- (id)volumeInfoWithCompletionBlock:(void(^)(NSArray *volumeInfos, NSError *error))completionBlock;
329+- (id)volumeInfoWithCompletionBlockOnMainQueue:(void(^)(NSArray *volumeInfos, NSError *error))completionBlock;
330 {
331 NSURL *volumesURL = [self URLForNode:@"/volumes" includeChildren:NO];
332- return [self execute:@"GET" toURL:volumesURL requestBody:nil parseResponseBody:YES completionBlock:^(id results, NSError *error) {
333+ return [self execute:@"GET" toURL:volumesURL requestBody:nil parseResponseBody:YES completionBlockOnMainQueue:^(id results, NSError *error) {
334 completionBlock(results, error);
335 }];
336 }
337
338-- (id)infoForNodeAtResourcePath:(NSString*)resourcePath includeChildren:(BOOL)includeChildren completionBlock:(void(^)(NSDictionary *node, NSError *error))completionBlock;
339+- (id)infoForNodeAtResourcePath:(NSString*)resourcePath includeChildren:(BOOL)includeChildren completionBlockOnMainQueue:(void(^)(NSDictionary *node, NSError *error))completionBlock;
340 {
341 NSURL *nodeURL = [self URLForNode:resourcePath includeChildren:includeChildren];
342
343- return [self execute:@"GET" toURL:nodeURL requestBody:nil parseResponseBody:YES completionBlock:^(id result, NSError *error) {
344+ return [self execute:@"GET" toURL:nodeURL requestBody:nil parseResponseBody:YES completionBlockOnMainQueue:^(id result, NSError *error) {
345
346 completionBlock(result, error);
347 }];
348 }
349
350-- (id)infoForNode:(U1Node*)node includeChildren:(BOOL)includeChildren completionBlock:(void(^)(NSDictionary *node, NSError *error))completionBlock;
351+- (id)infoForNode:(U1Node*)node includeChildren:(BOOL)includeChildren completionBlockOnMainQueue:(void(^)(NSDictionary *node, NSError *error))completionBlock;
352 {
353- return [self infoForNodeAtResourcePath:node.resourcePath includeChildren:includeChildren completionBlock:completionBlock];
354+ return [self infoForNodeAtResourcePath:node.resourcePath includeChildren:includeChildren completionBlockOnMainQueue:completionBlock];
355 }
356
357 - (id)contentForNode:(U1FileNode*)node progressBlock:(void(^)(long long bytesReceived, long long bytesExpected))progressBlock completionBlock:(void(^)(NSURL *contentURL))completionBlock;
358@@ -170,7 +170,7 @@
359 return nil;
360 }
361
362-- (id)uploadContentData:(id<U1UploadDataProvider>)contentData forNode:(U1FileNode*)node progressBlock:(void(^)(long long bytesUploaded, long long totalBytes))progressBlock completionBlock:(void(^)(NSDictionary *updatedNodeInfo, NSError *error))completionBlock;
363+- (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 {
365 NSString *resourcePath = node.resourcePath;
366 NSURL *requestURL = [contentData isMagic] ? [self URLForNode:resourcePath includeChildren:NO] : [self contentURLForNode:resourcePath];
367@@ -179,14 +179,16 @@
368
369 if (error)
370 {
371- completionBlock(nil, error);
372+ dispatch_async(dispatch_get_main_queue(), ^{
373+ completionBlock(nil, error);
374+ });
375 return;
376 }
377
378 U1ReportingInputStream *stream = [U1ReportingInputStream inputStreamWithSourceStream:dataStream];
379 stream.progressBlock = progressBlock;
380 stream.dataLength = length;
381- [self execute:@"PUT" toURL:requestURL requestBody:stream contentType:mimeType contentLength:length parseResponseBody:YES completionBlock:^(id results, NSError *error) {
382+ [self execute:@"PUT" toURL:requestURL requestBody:stream contentType:mimeType contentLength:length parseResponseBody:YES completionBlockOnMainQueue:^(id results, NSError *error) {
383 completionBlock(results, error);
384 }];
385 }];
386@@ -194,7 +196,7 @@
387 return nil;
388 }
389
390-- (id)moveNodeAtResourcePath:(NSString*)resourcePath toPath:(NSString*)newPath withCompletionBlock:(void(^)(NSDictionary *nodeInfo, NSError *error))completionBlock;
391+- (id)moveNodeAtResourcePath:(NSString*)resourcePath toPath:(NSString*)newPath withCompletionBlockOnMainQueue:(void(^)(NSDictionary *nodeInfo, NSError *error))completionBlock;
392 {
393 NSParameterAssert(resourcePath != nil);
394 NSParameterAssert(newPath != nil);
395@@ -202,65 +204,65 @@
396
397 NSURL *nodeURL = [self URLForNode:resourcePath includeChildren:NO];
398 NSString *body = [NSString stringWithFormat:@"{\"path\": \"%@\"}", newPath];
399- return [self execute:@"PUT" toURL:nodeURL requestBody:body parseResponseBody:YES completionBlock:^(id results, NSError *error) {
400+ return [self execute:@"PUT" toURL:nodeURL requestBody:body parseResponseBody:YES completionBlockOnMainQueue:^(id results, NSError *error) {
401 completionBlock(results, error);
402 }];
403 }
404
405-- (id)deleteNodeAtResourcePath:(NSString*)resourcePath completionBlock:(void(^)(NSError *error))completionBlock;
406+- (id)deleteNodeAtResourcePath:(NSString*)resourcePath completionBlockOnMainQueue:(void(^)(NSError *error))completionBlock;
407 {
408 NSURL *nodeURL = [self URLForNode:resourcePath includeChildren:NO];
409- return [self execute:@"DELETE" toURL:nodeURL requestBody:nil parseResponseBody:NO completionBlock:^(id result, NSError *error) {
410+ return [self execute:@"DELETE" toURL:nodeURL requestBody:nil parseResponseBody:NO completionBlockOnMainQueue:^(id result, NSError *error) {
411 completionBlock(error);
412 }];
413 }
414
415-- (id)publishNode:(U1FileNode*)node completionBlock:(void(^)(U1FileNode *node, NSError *error))completionBlock;
416-{
417- NSString *nodePath = node.resourcePath;
418- NSURL *nodeURL = [self URLForNode:(NSString*)nodePath includeChildren:NO];
419- return [self execute:@"PUT" toURL:nodeURL requestBody:@"{\"is_public\": true}" parseResponseBody:YES completionBlock:^(id result, NSError *error) {
420-
421- if (!error)
422- {
423- [node updatePropertiesFromJSONDictionary:result];
424- }
425- completionBlock(node, error);
426- }];
427-}
428-
429-- (id)unpublishNode:(U1FileNode*)node completionBlock:(void(^)(U1FileNode *node, NSError *error))completionBlock;
430-{
431- NSString *nodePath = node.resourcePath;
432- NSURL *nodeURL = [self URLForNode:(NSString*)nodePath includeChildren:NO];
433- return [self execute:@"PUT" toURL:nodeURL requestBody:@"{\"is_public\": false}" parseResponseBody:YES completionBlock:^(id result, NSError *error) {
434-
435- if (!error)
436- {
437- [node updatePropertiesFromJSONDictionary:result];
438- }
439- completionBlock(node, error);
440- }];
441-}
442-
443-- (id)createFolderAtPath:(NSString*)folderPath completionBlock:(void(^)(NSDictionary *nodeInfo, NSError *error))completionBlock;
444+- (id)publishNode:(U1FileNode*)node completionBlockOnMainQueue:(void(^)(U1FileNode *node, NSError *error))completionBlock;
445+{
446+ NSString *nodePath = node.resourcePath;
447+ NSURL *nodeURL = [self URLForNode:(NSString*)nodePath includeChildren:NO];
448+ return [self execute:@"PUT" toURL:nodeURL requestBody:@"{\"is_public\": true}" parseResponseBody:YES completionBlockOnMainQueue:^(id result, NSError *error) {
449+
450+ if (!error)
451+ {
452+ [node updatePropertiesFromJSONDictionary:result];
453+ }
454+ completionBlock(node, error);
455+ }];
456+}
457+
458+- (id)unpublishNode:(U1FileNode*)node completionBlockOnMainQueue:(void(^)(U1FileNode *node, NSError *error))completionBlock;
459+{
460+ NSString *nodePath = node.resourcePath;
461+ NSURL *nodeURL = [self URLForNode:(NSString*)nodePath includeChildren:NO];
462+ return [self execute:@"PUT" toURL:nodeURL requestBody:@"{\"is_public\": false}" parseResponseBody:YES completionBlockOnMainQueue:^(id result, NSError *error) {
463+
464+ if (!error)
465+ {
466+ [node updatePropertiesFromJSONDictionary:result];
467+ }
468+ completionBlock(node, error);
469+ }];
470+}
471+
472+- (id)createFolderAtPath:(NSString*)folderPath completionBlockOnMainQueue:(void(^)(NSDictionary *nodeInfo, NSError *error))completionBlock;
473 {
474 NSParameterAssert(folderPath != nil);
475 NSParameterAssert(completionBlock != NULL);
476
477 NSURL *nodeURL = [self URLForNode:folderPath includeChildren:NO];
478- return [self execute:@"PUT" toURL:nodeURL requestBody:@"{\"kind\": \"directory\"}" parseResponseBody:YES completionBlock:^(id results, NSError *error) {
479+ return [self execute:@"PUT" toURL:nodeURL requestBody:@"{\"kind\": \"directory\"}" parseResponseBody:YES completionBlockOnMainQueue:^(id results, NSError *error) {
480 completionBlock(results, error);
481 }];
482 }
483
484-- (id)createVolumeAtPath:(NSString*)volumePath completionBlock:(void(^)(NSDictionary *volumeInfo, NSError *error))completionBlock;
485+- (id)createVolumeAtPath:(NSString*)volumePath completionBlockOnMainQueue:(void(^)(NSDictionary *volumeInfo, NSError *error))completionBlock;
486 {
487 NSParameterAssert(volumePath != nil);
488 NSParameterAssert(completionBlock != NULL);
489
490 NSURL *volumeURL = [self URLForVolumeWithPath:volumePath];
491- return [self execute:@"PUT" toURL:volumeURL requestBody:@"" parseResponseBody:YES completionBlock:^(id results, NSError *error) {
492+ return [self execute:@"PUT" toURL:volumeURL requestBody:@"" parseResponseBody:YES completionBlockOnMainQueue:^(id results, NSError *error) {
493 completionBlock(results, error);
494 }];
495 }
496@@ -301,13 +303,13 @@
497 return [NSURL URLWithString:finalString];
498 }
499
500-- (id)execute:(NSString*)method toURL:(NSURL*)url requestBody:(NSString*)body parseResponseBody:(BOOL)parseResponseBody completionBlock:(void(^)(id results, NSError *error))completionBlock;
501+- (id)execute:(NSString*)method toURL:(NSURL*)url requestBody:(NSString*)body parseResponseBody:(BOOL)parseResponseBody completionBlockOnMainQueue:(void(^)(id results, NSError *error))completionBlock;
502 {
503 NSData *bodyData = [body dataUsingEncoding:NSUTF8StringEncoding];
504- return [self execute:method toURL:url requestBody:bodyData contentType:@"application/json" contentLength:[bodyData length] parseResponseBody:parseResponseBody completionBlock:completionBlock];
505+ return [self execute:method toURL:url requestBody:bodyData contentType:@"application/json" contentLength:[bodyData length] parseResponseBody:parseResponseBody completionBlockOnMainQueue:completionBlock];
506 }
507
508-- (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;
509+- (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 {
511
512 OAToken *token = [[U1AccountManager sharedAccountManager] oauthToken];
513
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 [filesService uploadContentData:dataProvider
519 forNode:self.fileNode
520 progressBlock:^(long long uploaded, long long totalLength) {}
521- completionBlock:^(NSDictionary *updatedNodeInfo, NSError *magicUploadError) {
522+ completionBlockOnMainQueue:^(NSDictionary *updatedNodeInfo, NSError *magicUploadError) {
523
524 if (magicUploadError != nil)
525 {
526@@ -134,17 +134,16 @@
527
528 if (self.progressBlock)
529 self.progressBlock(uploaded, totalLength);
530- } completionBlock:^(NSDictionary *updatedNodeInfo, NSError *regularUploadError) {
531+
532+ } completionBlockOnMainQueue:^(NSDictionary *updatedNodeInfo, NSError *regularUploadError) {
533 if (regularUploadError != nil)
534 {
535 self.error = regularUploadError;
536 }
537
538- dispatch_async(dispatch_get_main_queue(), ^{
539- [self.fileInfo setUploadPercentage:1.0];
540- [self.fileInfo setUploading:NO];
541- [self.fileInfo setUploaded:YES];
542- });
543+ [self.fileInfo setUploadPercentage:1.0];
544+ [self.fileInfo setUploading:NO];
545+ [self.fileInfo setUploaded:YES];
546
547 [self.fileNode updatePropertiesFromJSONDictionary:updatedNodeInfo];
548 [self finishExecuting];
549@@ -153,11 +152,9 @@
550 }
551 else
552 {
553- dispatch_async(dispatch_get_main_queue(), ^{
554- [self.fileInfo setUploadPercentage:1.0];
555- [self.fileInfo setUploading:NO];
556- [self.fileInfo setUploaded:YES];
557- });
558+ [self.fileInfo setUploadPercentage:1.0];
559+ [self.fileInfo setUploading:NO];
560+ [self.fileInfo setUploaded:YES];
561
562 [self.fileNode updatePropertiesFromJSONDictionary:updatedNodeInfo];
563 [self finishExecuting];

Subscribers

People subscribed via source and target branches