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 | |
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]; |
Lots of conflict markers showing in the diff.