9
9
import FilestackSDK
10
10
import UIKit
11
11
12
+ private struct URLSessionTaskTracker {
13
+ private var tasks : [ URLSessionTask ] = [ URLSessionTask] ( )
14
+ private let queue = DispatchQueue ( label: " com.filestack.URLSessionTaskTracker " )
15
+
16
+ mutating func add( _ task: URLSessionTask ) {
17
+ queue. sync { tasks. append ( task) }
18
+ }
19
+
20
+ mutating func remove( _ task: URLSessionTask ) {
21
+ queue. sync { tasks. removeAll { $0 == task } }
22
+ }
23
+
24
+ mutating func cancelPendingAndRemove( ) {
25
+ queue. sync {
26
+ for request in tasks {
27
+ request. cancel ( )
28
+ }
29
+
30
+ tasks. removeAll ( )
31
+ }
32
+ }
33
+ }
34
+
12
35
class CloudSourceTabBarController : UITabBarController , CloudSourceDataSource {
13
36
var client : Client !
14
37
var storeOptions : StorageOptions !
@@ -35,7 +58,7 @@ class CloudSourceTabBarController: UITabBarController, CloudSourceDataSource {
35
58
private let session = URLSession . filestackDefault
36
59
private var toggleViewTypeButton : UIBarButtonItem ?
37
60
private var currentRequest : Cancellable ?
38
- private var thumbnailTaskRequests : [ URLSessionDataTask ] = [ URLSessionDataTask ] ( )
61
+ private var thumbnailTasks = URLSessionTaskTracker ( )
39
62
private weak var uploadMonitorViewController : MonitorViewController ?
40
63
private var uploaderObserver : NSKeyValueObservation ?
41
64
@@ -210,9 +233,7 @@ class CloudSourceTabBarController: UITabBarController, CloudSourceDataSource {
210
233
211
234
task = URLSession . filestackDefault. dataTask ( with: urlRequest) { ( data, response, error) in
212
235
// Remove request from thumbnail requests
213
- if let idx = ( self . thumbnailTaskRequests. firstIndex { $0 == task } ) {
214
- self . thumbnailTaskRequests. remove ( at: idx)
215
- }
236
+ self . thumbnailTasks. remove ( task)
216
237
217
238
var image : UIImage !
218
239
@@ -234,7 +255,7 @@ class CloudSourceTabBarController: UITabBarController, CloudSourceDataSource {
234
255
task. resume ( )
235
256
236
257
// Add request to thumbnail requests.
237
- thumbnailTaskRequests . append ( task)
258
+ thumbnailTasks . add ( task)
238
259
}
239
260
240
261
func search( text: String , completionHandler: @escaping ( ( ) -> Void ) ) {
@@ -288,11 +309,7 @@ class CloudSourceTabBarController: UITabBarController, CloudSourceDataSource {
288
309
}
289
310
290
311
private func cancelPendingThumbnailRequests( ) {
291
- for request in thumbnailTaskRequests {
292
- request. cancel ( )
293
- }
294
-
295
- thumbnailTaskRequests. removeAll ( )
312
+ thumbnailTasks. cancelPendingAndRemove ( )
296
313
}
297
314
298
315
// MARK: - Actions
0 commit comments