<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Threads, tasks, and the Objective-C SDK in Dropbox API Support &amp; Feedback</title>
    <link>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/Threads-tasks-and-the-Objective-C-SDK/m-p/189665#M8124</link>
    <description>&lt;P&gt;I have been studying these API calls, and even with a custom queue, I don't see how to do what I want.&amp;nbsp; First of all, here is the pseudo-code for what I have implemented in Android (omitting all error-handling), and what I want to do in iOS.&amp;nbsp; It downloads all the files in Dropbox and runs in a single background thread - not the UI thread.&amp;nbsp; I have also omitted all interactions with the main UI thread:&lt;/P&gt;
&lt;P&gt;Code for thread:&lt;BR /&gt;&amp;nbsp; processWithRecursion(");&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//..start with the root of Dropbox&lt;BR /&gt;end of execution of thread.&lt;BR /&gt;&lt;BR /&gt;And here is the recursively-called function, processWithRecursion():&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; processWithRecursion( currentDirectory )&lt;BR /&gt;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; form list of currentDirectory&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for each element in that list, do:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(element is a directory)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create local destination directory of that name&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; processWithRecursion(currentDirectory + subdirectory name);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&amp;nbsp; //..element is a file&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create destination file and download from Dropbox to that file&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;As you can see, the recursive call nicely steps through all the files, including any nested subdirectories.&amp;nbsp; The call stack performs the function of keeping track of where we are in the search for files.&amp;nbsp; This could be performed by an elaborate state machine, but then I would have to create a separate push-down stack data structure to traverse the directory tree.&lt;/P&gt;
&lt;P&gt;This process is best implemented with API functions that block.&amp;nbsp; But it seems the API functions available to me do not block, so there is no easy way to execute a series of these API calls by simply writing them one after another in code.&amp;nbsp; For example, I would need to call list&lt;SPAN class="pl-c1"&gt;Folder:&lt;/SPAN&gt;searchPath to get the list of files in one directory, and then for each of the items returned in the list I would need to call&amp;nbsp;&lt;SPAN class="pl-c1"&gt;downloadData:file&lt;/SPAN&gt;Path to actually do the download.&amp;nbsp; But both of these API calls are implemented as non-blocking calls that return immediately, leaving the completion block to handle the completion of the action.&amp;nbsp; So I could not write listFolder:searchPath followed immediately by downloadData:filePath, because the downloadData: method would start executing before the searchPath: method was completed.&amp;nbsp; In fact, I couldn't even form a filePath parameter for downloadData: without examining the completion of searchPath:&lt;/P&gt;
&lt;P&gt;That was just for downloading one file.&amp;nbsp; When you throw in the need for traversing the entire directory tree with recursion, all without any UI input, I don't see a neat way of doing this.&lt;/P&gt;</description>
    <pubDate>Wed, 21 Sep 2016 10:05:42 GMT</pubDate>
    <dc:creator>Robert S.138</dc:creator>
    <dc:date>2016-09-21T10:05:42Z</dc:date>
    <item>
      <title>Threads, tasks, and the Objective-C SDK</title>
      <link>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/Threads-tasks-and-the-Objective-C-SDK/m-p/189662#M8121</link>
      <description>&lt;P&gt;Having completed an Android version of my app, I was hoping that the Objective-C version for iOS would be similar. &amp;nbsp;But looking at the DBRoulette example, there seems to be a big difference regarding threading. &amp;nbsp;Is it correct that all the code shown in the four .m source files runs in the UI thread? &amp;nbsp;This may be fine for transferring one file at a time, when the only thing the UI thread needs to do is respond when the background operation is done. &amp;nbsp;But in my app, I need to transfer an entire folder, and recursively, any subfolders. &amp;nbsp;In Android I did this in an Async Task, where my doInBackground method did all the heavy lifting, handling folder recursion, etc. &amp;nbsp;The UI thread got periodic postings of progress through the onProgressUpdate method. And the UI thread could cause an early termination of the Async Task the usual way.&lt;/P&gt;
&lt;P&gt;In the iOS version, I would like to use the same pattern, doing all the work in a worker thread. &amp;nbsp;But I don't see how to implement that pattern using the functions shown in the DBRoulette example. &amp;nbsp;Is there some other example that uses a worker thread to sequence through a tree of files and transfer them one at a time?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 29 May 2019 09:30:01 GMT</pubDate>
      <guid>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/Threads-tasks-and-the-Objective-C-SDK/m-p/189662#M8121</guid>
      <dc:creator>Robert S.138</dc:creator>
      <dc:date>2019-05-29T09:30:01Z</dc:date>
    </item>
    <item>
      <title>Re: Threads, tasks, and the Objective-C SDK</title>
      <link>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/Threads-tasks-and-the-Objective-C-SDK/m-p/189663#M8122</link>
      <description>&lt;P&gt;Thanks for reaching out. Are you looking to specify a custom&amp;nbsp;queue on a route-by-route basis?&lt;/P&gt;
&lt;P&gt;If you're looking to simply set a custom&amp;nbsp;queue for all API calls, you can do that by supplying a custom `DBTransportClient` with a custom `delegateQueue` when you setup your app. You can read about it more on the GitHub tutorial page &lt;A href="https://github.com/dropbox/dropbox-sdk-obj-c#customizing-network-calls" target="_blank" rel="nofollow noreferrer"&gt;here&lt;/A&gt;. Do this will mean that all response handler code is executed on a thread other than the main thread.&lt;/P&gt;
&lt;P&gt;If you want to specify a queue for reach route, however, the SDK doesn't currently offer that functionality. But we're thinking about implementing it. If you think being able to specify the queue/thread for each API call (in the response handler) would help your workflow a lot, we can try and get the new feature out quickly to you.&lt;/P&gt;</description>
      <pubDate>Sat, 17 Sep 2016 07:03:53 GMT</pubDate>
      <guid>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/Threads-tasks-and-the-Objective-C-SDK/m-p/189663#M8122</guid>
      <dc:creator>Stephen C.14</dc:creator>
      <dc:date>2016-09-17T07:03:53Z</dc:date>
    </item>
    <item>
      <title>Re: Threads, tasks, and the Objective-C SDK</title>
      <link>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/Threads-tasks-and-the-Objective-C-SDK/m-p/189664#M8123</link>
      <description>&lt;P&gt;What I need to do is copy an entire directory tree, one file at a time.&amp;nbsp; The easiest way to do that is to write a method that handles one folder, and then make that method call itself recursively when a subfolder is found.&amp;nbsp; But such code is not suitable for the UI thread, which must be event-driven and non-blocking.&amp;nbsp; If I were to do it using only UI code, I would have to implement a state machine, and recursion would be much harder.&amp;nbsp; But if I could call a blocking (but interruptable) API function for each file access, I could do the whole thing in one procedural thread.&lt;/P&gt;</description>
      <pubDate>Sun, 18 Sep 2016 10:28:41 GMT</pubDate>
      <guid>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/Threads-tasks-and-the-Objective-C-SDK/m-p/189664#M8123</guid>
      <dc:creator>Robert S.138</dc:creator>
      <dc:date>2016-09-18T10:28:41Z</dc:date>
    </item>
    <item>
      <title>Re: Threads, tasks, and the Objective-C SDK</title>
      <link>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/Threads-tasks-and-the-Objective-C-SDK/m-p/189665#M8124</link>
      <description>&lt;P&gt;I have been studying these API calls, and even with a custom queue, I don't see how to do what I want.&amp;nbsp; First of all, here is the pseudo-code for what I have implemented in Android (omitting all error-handling), and what I want to do in iOS.&amp;nbsp; It downloads all the files in Dropbox and runs in a single background thread - not the UI thread.&amp;nbsp; I have also omitted all interactions with the main UI thread:&lt;/P&gt;
&lt;P&gt;Code for thread:&lt;BR /&gt;&amp;nbsp; processWithRecursion(");&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//..start with the root of Dropbox&lt;BR /&gt;end of execution of thread.&lt;BR /&gt;&lt;BR /&gt;And here is the recursively-called function, processWithRecursion():&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; processWithRecursion( currentDirectory )&lt;BR /&gt;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; form list of currentDirectory&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for each element in that list, do:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(element is a directory)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create local destination directory of that name&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; processWithRecursion(currentDirectory + subdirectory name);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&amp;nbsp; //..element is a file&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create destination file and download from Dropbox to that file&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;As you can see, the recursive call nicely steps through all the files, including any nested subdirectories.&amp;nbsp; The call stack performs the function of keeping track of where we are in the search for files.&amp;nbsp; This could be performed by an elaborate state machine, but then I would have to create a separate push-down stack data structure to traverse the directory tree.&lt;/P&gt;
&lt;P&gt;This process is best implemented with API functions that block.&amp;nbsp; But it seems the API functions available to me do not block, so there is no easy way to execute a series of these API calls by simply writing them one after another in code.&amp;nbsp; For example, I would need to call list&lt;SPAN class="pl-c1"&gt;Folder:&lt;/SPAN&gt;searchPath to get the list of files in one directory, and then for each of the items returned in the list I would need to call&amp;nbsp;&lt;SPAN class="pl-c1"&gt;downloadData:file&lt;/SPAN&gt;Path to actually do the download.&amp;nbsp; But both of these API calls are implemented as non-blocking calls that return immediately, leaving the completion block to handle the completion of the action.&amp;nbsp; So I could not write listFolder:searchPath followed immediately by downloadData:filePath, because the downloadData: method would start executing before the searchPath: method was completed.&amp;nbsp; In fact, I couldn't even form a filePath parameter for downloadData: without examining the completion of searchPath:&lt;/P&gt;
&lt;P&gt;That was just for downloading one file.&amp;nbsp; When you throw in the need for traversing the entire directory tree with recursion, all without any UI input, I don't see a neat way of doing this.&lt;/P&gt;</description>
      <pubDate>Wed, 21 Sep 2016 10:05:42 GMT</pubDate>
      <guid>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/Threads-tasks-and-the-Objective-C-SDK/m-p/189665#M8124</guid>
      <dc:creator>Robert S.138</dc:creator>
      <dc:date>2016-09-21T10:05:42Z</dc:date>
    </item>
    <item>
      <title>Re: Threads, tasks, and the Objective-C SDK</title>
      <link>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/Threads-tasks-and-the-Objective-C-SDK/m-p/189666#M8125</link>
      <description>&lt;P&gt;OK, I figured out how to make the API calls blocking. &amp;nbsp;Here is my worker thread function, processWithRecursion (in pseudo-code):&lt;/P&gt;
&lt;PRE&gt;processWithRecursion( currentDirectory )&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; set waiting = YES;&amp;nbsp; //..a volatile, atomic variable&lt;BR /&gt;&amp;nbsp; call listFolder: currentDirectory, with completion block:&lt;BR /&gt;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp; &amp;nbsp; get list of entries;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; set waiting = NO;&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp; do forever&lt;BR /&gt;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp; &amp;nbsp; sleep 80 milliseconds&lt;BR /&gt;&amp;nbsp; &amp;nbsp; if( not waiting )&amp;nbsp; break;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; if( threadMustStop ) return;&amp;nbsp; //..set by "Cancel" button&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp; for each element in that list, do:&lt;BR /&gt;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp; &amp;nbsp; if(element is a directory)&lt;BR /&gt;&amp;nbsp; &amp;nbsp; {&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; create local destination directory of that name&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; processWithRecursion(currentDirectory + subdirectory name);&lt;BR /&gt;&amp;nbsp; &amp;nbsp; }&lt;BR /&gt;&amp;nbsp; &amp;nbsp; else&amp;nbsp; //..element is a file&lt;BR /&gt;&amp;nbsp; &amp;nbsp; {&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; set waiting = YES;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; call downloadData: elementPathName, with completion block&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; get the data downloaded and write to local file&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; set waiting = NO;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; do forever&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sleep 80 milliseconds&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if( not waiting )&amp;nbsp; break;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if( threadMustStop ) return;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;BR /&gt;&amp;nbsp; &amp;nbsp; }&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;Is this an advisable way to the SDK to download an entire directory?&lt;BR /&gt;&lt;BR /&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 21 Sep 2016 23:06:19 GMT</pubDate>
      <guid>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/Threads-tasks-and-the-Objective-C-SDK/m-p/189666#M8125</guid>
      <dc:creator>Robert S.138</dc:creator>
      <dc:date>2016-09-21T23:06:19Z</dc:date>
    </item>
    <item>
      <title>Re: Threads, tasks, and the Objective-C SDK</title>
      <link>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/Threads-tasks-and-the-Objective-C-SDK/m-p/189667#M8126</link>
      <description>&lt;P&gt;@Robert S: I wouldn't recommend using `sleep` like that. I'd instead maintain references to each task object and then `cancel` each task object when the user cancels. I took a bit of time and wrote up what a solution might look like. It took me longer than I thought, which might be an indication that the SDK needs richer functionality.&lt;/P&gt;
&lt;P&gt;Try this out and let me know how it works. I think it might be easier pulling the file directly: &lt;A href="https://www.dropbox.com/s/w9mt97seqz879rj/DownloadFolder.m?dl=1" target="_blank" rel="nofollow noreferrer"&gt;DownloadFolder.m&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;@interface MyClass&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lparen"&gt;(&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;)&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;@property&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lparen"&gt;(&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;atomic) DropboxClient * _Nullable client;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;@property&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lparen"&gt;(&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;atomic) NSOperationQueue * _Nullable responseQueue;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;@property&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lparen"&gt;(&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;atomic) NSFileManager * _Nullable fileManager;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;@property&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lparen"&gt;(&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;atomic) BOOL shouldContinue;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;@property&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lparen"&gt;(&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;atomic) NSLock *shouldContinueLock;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;@property&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lparen"&gt;(&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;atomic) NSMutableDictionary&amp;lt;NSString *, DBRpcTask *&amp;gt; *rpcTasks;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;@property&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lparen"&gt;(&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;atomic) NSMutableDictionary&amp;lt;NSString *, DBDownloadUrlTask *&amp;gt; *downloadUrlTasks;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;@property&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lparen"&gt;(&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;atomic) NSLock *tasksLock;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;@end&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&amp;nbsp;&lt;/CODE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;@implementation MyClass&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;-&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lparen"&gt;(&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;void)initAndLaunch {&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; NSLog(@"\n\n\nInitializing on: %@",&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;NSThread currentThread]);&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; _client =&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;DropboxClientsManager authorizedClient];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; _responseQueue =&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;NSOperationQueue new];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;_responseQueue setMaxConcurrentOperationCount:1];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; _fileManager =&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;NSFileManager defaultManager];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; _shouldContinue = YES;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; _shouldContinueLock =&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;NSLock new];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; _rpcTasks =&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;NSMutableDictionary new];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; _downloadUrlTasks =&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;NSMutableDictionary new];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; _tasksLock =&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;NSLock new];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; NSURL *outputUrl =&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;_fileManager URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; outputUrl =&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;outputUrl URLByAppendingPathComponent:[NSString stringWithFormat:@"%@.%@", @"MyOutputFolder",&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;NSUUID UUID].UUIDString]];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;self downloadFolder:@" outputUrl:outputUrl];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; // cancel the download after 5 seconds&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; double delayInSeconds = 5.0;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW,&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lparen"&gt;(&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;int64_t)(delayInSeconds * NSEC_PER_SEC));&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; dispatch_after(popTime, dispatch_get_main_queue(), ^(void){&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp;&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;self cancelDownload];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; });&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;}&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;-&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lparen"&gt;(&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;void)downloadFolder:(NSString *)inputPath outputUrl:(NSURL *)outputUrl {&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; NSLog(@"Downloading all files from: \"%@\" to \"%@\", inputPath, outputUrl);&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;_responseQueue addOperationWithBlock:^{&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp;&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;self downloadFolderHelper:inputPath outputUrl:outputUrl];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; }];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;}&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;-&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lparen"&gt;(&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;void)downloadFolderHelper:(NSString *)inputPath outputUrl:(NSURL *)outputUrl {&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; NSLog(@"Commencing folder download on: %@",&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;NSThread currentThread]);&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; NSString *listFolderTaskKey =&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;NSString stringWithFormat:@"ListFolderTask.%@",&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;NSUUID UUID].UUIDString];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;self.shouldContinueLock lock];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; if&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lparen"&gt;(&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;!_shouldContinue) {&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; NSLog(@"No longer continuing...");&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp;&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;self.shouldContinueLock unlock];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; return;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; }&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; DBRpcTask *listFolderTask =&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;self listFolder:inputPath outputUrl:outputUrl listFolderTaskKey:listFolderTaskKey];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;self.rpcTasks setObject:listFolderTask forKey:listFolderTaskKey];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;self.shouldContinueLock unlock];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;}&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;-(DBRpcTask *)listFolder:(NSString *)inputPath outputUrl:(NSURL *)outputUrl listFolderTaskKey:(NSString *)listFolderTaskKey {&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; DBRpcTask *listFolderTask =&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;[_client.filesRoutes listFolder:inputPath]&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp;response:_responseQueue response:^(DBFILESListFolderResult *listFolderResult, DBFILESListFolderError *routeError, DBError *error) {&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;NSLog(@"Handling list folder response on: %@",&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;NSThread currentThread]);&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lparen"&gt;(&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;listFolderResult) {&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NSArray&amp;lt;DBFILESMetadata *&amp;gt; *entries = listFolderResult.entries;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lparen"&gt;(&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;DBFILESMetadata *entry in entries) {&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lparen"&gt;(&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;[entry isKindOfClass:[DBFILESFileMetadata class]]) {&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DBFILESFileMetadata *fileMetadata =&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lparen"&gt;(&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;DBFILESFileMetadata *)entry;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NSString *filePath = fileMetadata.pathDisplay;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NSURL *fileOutputUrl =&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;outputUrl URLByAppendingPathComponent:fileMetadata.name];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NSString *fileOutputPath =&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;fileOutputUrl path];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NSLog(@"Downloading \"%@\" to \"%@\", filePath, fileOutputPath);&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NSString *downloadTaskKey =&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;NSString stringWithFormat:@"DownloadTask.%@",&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;NSUUID UUID].UUIDString];&lt;BR /&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw s-lbracket"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;self.shouldContinueLock lock];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lparen"&gt;(&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;!_shouldContinue) {&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NSLog(@"No longer continuing...");&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw s-lbracket"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;self.shouldContinueLock unlock];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DBDownloadUrlTask *downloadTask =&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;self downloadFile:filePath fileOutputUrl:fileOutputUrl downloadTaskKey:downloadTaskKey];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw s-lbracket"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;self.downloadUrlTasks setObject:downloadTask forKey:downloadTaskKey];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw s-lbracket"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;self.shouldContinueLock unlock];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&amp;nbsp;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else if&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lparen"&gt;(&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;[entry isKindOfClass:[DBFILESFolderMetadata class]]) {&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DBFILESFolderMetadata *folderMetadata =&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lparen"&gt;(&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;DBFILESFolderMetadata *)entry;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NSURL *directoryOutputUrl =&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;outputUrl URLByAppendingPathComponent:folderMetadata.pathDisplay];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NSString *directoryOutputPath =&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;directoryOutputUrl path];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lparen"&gt;(&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;![_fileManager fileExistsAtPath:directoryOutputPath]) {&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NSError *error;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw s-lbracket"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;_fileManager createDirectoryAtPath:directoryOutputPath withIntermediateDirectories:@(YES) attributes:nil error:&amp;amp;error];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lparen"&gt;(&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;error) {&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NSLog(@"Error creating directory: %@", error);&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw s-lbracket"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;self downloadFolderHelper:[NSString stringWithFormat:@"%@/%@", inputPath, folderMetadata.name] outputUrl:directoryOutputUrl];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else if&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lparen"&gt;(&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;[entry isKindOfClass:[DBFILESDeletedMetadata class]]) {&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;continue;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw s-lbracket"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;self.tasksLock lock];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw s-lbracket"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;_downloadUrlTasks removeObjectForKey:listFolderTaskKey];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw s-lbracket"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;self.tasksLock unlock];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;} else {&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NSLog(@"Error listing folder \"%@\":", inputPath);&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lparen"&gt;(&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;routeError) {&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NSLog(@"RouteError: %@", routeError);&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NSLog(@"Error: %@", error);&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp;}];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; return listFolderTask;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;}&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;-(DBDownloadUrlTask *)downloadFile:(NSString *)filePath fileOutputUrl:(NSURL *)fileOutputUrl downloadTaskKey:(NSString *)downloadTaskKey {&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; DBDownloadUrlTask *downloadTask =&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;[_client.filesRoutes downloadUrl:filePath overwrite:@(YES) destination:fileOutputUrl]&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp;response:_responseQueue response:^(DBFILESFileMetadata *downloadResult, DBFILESDownloadError *routeError, DBError *error, NSURL *destination) {&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;NSLog(@"Handling download response on: %@",&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;NSThread currentThread]);&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lparen"&gt;(&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;downloadResult) {&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NSLog(@"Successfully downloaded \"%@\" to \"%@\", downloadResult.pathDisplay,&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;destination path]);&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw s-lbracket"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;self.tasksLock lock];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw s-lbracket"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;self.downloadUrlTasks removeObjectForKey:downloadTaskKey];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw s-lbracket"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;self.tasksLock unlock];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;} else {&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NSLog(@"Error downloading \"%@\" to \"%@\", filePath,&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;fileOutputUrl path]);&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lparen"&gt;(&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;routeError) {&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NSLog(@"RouteError: %@", routeError);&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NSLog(@"Error: %@", error);&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp;}];&lt;BR /&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; return downloadTask;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;}&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;-(void)cancelDownload {&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;self.shouldContinueLock lock];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; self.shouldContinue = NO;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;self.shouldContinueLock unlock];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;self.tasksLock lock];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;self cancelAndClearTasks];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;self.tasksLock unlock];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;}&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&amp;nbsp;&lt;/CODE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;-&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lparen"&gt;(&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;void)cancelAndClearTasks {&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; for&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lparen"&gt;(&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;NSString *key in _rpcTasks) {&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; DBRpcTask *task = _rpcTasks[key];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp;&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;task cancel];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; NSLog(@"Canceled task: %@", @(task.task.taskIdentifier));&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; }&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; for&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lparen"&gt;(&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;NSString *key in _downloadUrlTasks) {&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; DBDownloadUrlTask *task = _downloadUrlTasks[key];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp;&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;task cancel];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; &amp;nbsp; NSLog(@"Canceled task: %@", @(task.task.taskIdentifier));&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp; }&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;_rpcTasks removeAllObjects];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw h-lbracket"&gt;[&lt;/SPAN&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;_downloadUrlTasks removeAllObjects];&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE class="listtype-code listindent1 list-code1 lang-objectivec"&gt;&lt;SPAN class=" author-d-16z86ztz122z98z81zz82zz85zunv3z82zpqfnlamz84zz88ztojz67z1z80zz89z00z68zjz67z7z89zz80z6hz71zhz66zz76zyz87zw"&gt;}&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 22 Sep 2016 07:45:00 GMT</pubDate>
      <guid>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/Threads-tasks-and-the-Objective-C-SDK/m-p/189667#M8126</guid>
      <dc:creator>Stephen C.14</dc:creator>
      <dc:date>2016-09-22T07:45:00Z</dc:date>
    </item>
    <item>
      <title>Re: Threads, tasks, and the Objective-C SDK</title>
      <link>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/Threads-tasks-and-the-Objective-C-SDK/m-p/189668#M8127</link>
      <description>&lt;P&gt;Thank you, Stephen, for all that work. &amp;nbsp;I will study this and incorporate as much of this into my design as I can understand. &amp;nbsp;There are a few simplifications I will make, though. &amp;nbsp;In my application the download only takes place when a certain view controller is active and the user is involved, if only as an observer. &amp;nbsp;Instead of a 5-second time-out on operations, there will be a "Cancel" button in the UI that the user can use to terminate anything that seems to be taking too long. &amp;nbsp;Also, I found that I don't really need a separate NSResponseQueue. &amp;nbsp;The main UI queue serves me just fine, and it makes it possible for me to access UI elements directly from within a response block.&lt;/P&gt;
&lt;P&gt;I am a little curious why you found it necessary to put locks around accesses to boolean flags that are only set by one thread. &amp;nbsp;I think you need to have both threads modifying the variable to need a lock.&lt;/P&gt;</description>
      <pubDate>Fri, 23 Sep 2016 02:35:53 GMT</pubDate>
      <guid>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/Threads-tasks-and-the-Objective-C-SDK/m-p/189668#M8127</guid>
      <dc:creator>Robert S.138</dc:creator>
      <dc:date>2016-09-23T02:35:53Z</dc:date>
    </item>
    <item>
      <title>Re: Threads, tasks, and the Objective-C SDK</title>
      <link>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/Threads-tasks-and-the-Objective-C-SDK/m-p/189669#M8128</link>
      <description>&lt;P&gt;No worries! Hopefully it will be of some help.&amp;nbsp;I would just make sure that you weigh whether it's important to track the response `DBTask` objects that you receive back, so that if you're downloading a lot of files from a folder, you have a way of canceling them all at once (if you feel like that's important).&lt;/P&gt;
&lt;P&gt;As far as the lock around the boolean, I did that to make sure that the following were one atomic transaction: 1. check if should continue 2. create a download request 3. store the download task object for later use (to cancel). Otherwise, if the cancel function was called, a request might be made but not stored in the task data structure, and therefore would not be cancelled when iterated through. Does that make sense? Probably could have used an `NSOperationQueue` rather than a lock.&lt;/P&gt;
&lt;P&gt;Let me know if you run into any issues down the road. And please, if you have any additional feedback for the SDK, do let me know!&lt;/P&gt;</description>
      <pubDate>Fri, 23 Sep 2016 08:41:38 GMT</pubDate>
      <guid>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/Threads-tasks-and-the-Objective-C-SDK/m-p/189669#M8128</guid>
      <dc:creator>Stephen C.14</dc:creator>
      <dc:date>2016-09-23T08:41:38Z</dc:date>
    </item>
    <item>
      <title>Re: Threads, tasks, and the Objective-C SDK</title>
      <link>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/Threads-tasks-and-the-Objective-C-SDK/m-p/189670#M8129</link>
      <description>&lt;P&gt;Stephen,&lt;/P&gt;
&lt;P&gt;Having worked a little more with the SDK and gotten more familiar with it, I don't think it needs to be changed. &amp;nbsp;Having API that block carries its own problems of interruptibility, etc. &amp;nbsp;It is only a couple of lines of code to add a custom wait for completion.&lt;/P&gt;
&lt;P&gt;As far as the locked flags, I see why your implementation needs them. But mine is simpler. &amp;nbsp;I only have one single task that performs all the downloads sequentially. &amp;nbsp;I realize this probably means lower performance, but I think it is worth it for the simplicity. &amp;nbsp;Each download can potentially create an error requiring user response to "Skip or Abort". &amp;nbsp;The most logical thing for the user to expect if he Aborts is that none of the files after that file have been transferred. &amp;nbsp;But if there are simultaneous downloads, there may be several successful downloads that occur after the one that had an error, and by the time the user decides to Abort, those downloads have already completed. &amp;nbsp;So with only one task that is manually started, there is no question about which tasks need to be cancelled.&lt;/P&gt;</description>
      <pubDate>Fri, 23 Sep 2016 23:19:04 GMT</pubDate>
      <guid>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/Threads-tasks-and-the-Objective-C-SDK/m-p/189670#M8129</guid>
      <dc:creator>Robert S.138</dc:creator>
      <dc:date>2016-09-23T23:19:04Z</dc:date>
    </item>
    <item>
      <title>Re: Threads, tasks, and the Objective-C SDK</title>
      <link>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/Threads-tasks-and-the-Objective-C-SDK/m-p/189671#M8130</link>
      <description>&lt;P&gt;@Robert S.: That makes sense! There&amp;nbsp;certainly is a balance to be struck between simplicity of the code and performance. Good luck with your implementation, and please reach out if you run into anything else or have any more general feedback about the SDK.&lt;/P&gt;</description>
      <pubDate>Sun, 25 Sep 2016 00:57:02 GMT</pubDate>
      <guid>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/Threads-tasks-and-the-Objective-C-SDK/m-p/189671#M8130</guid>
      <dc:creator>Stephen C.14</dc:creator>
      <dc:date>2016-09-25T00:57:02Z</dc:date>
    </item>
  </channel>
</rss>

