Fix gif download cancellation.

// FREEBIE
pull/1/head
Matthew Chen 8 years ago
parent 789cea118d
commit c50ccf3eed

@ -130,20 +130,33 @@ extension URLSessionTask {
return nil return nil
} }
var hasRequestCompleted = false
let assetRequest = GiphyAssetRequest(rendition:rendition, let assetRequest = GiphyAssetRequest(rendition:rendition,
success : { asset in success : { asset in
DispatchQueue.main.async { DispatchQueue.main.async {
// Ensure we call success or failure exactly once.
guard !hasRequestCompleted else {
return
}
hasRequestCompleted = true
self.assetMap[rendition.url] = asset self.assetMap[rendition.url] = asset
success(asset)
self.isDownloading = false self.isDownloading = false
self.downloadIfNecessary() self.downloadIfNecessary()
success(asset)
} }
}, },
failure : { failure : {
DispatchQueue.main.async { DispatchQueue.main.async {
failure() // Ensure we call success or failure exactly once.
guard !hasRequestCompleted else {
return
}
hasRequestCompleted = true
self.isDownloading = false self.isDownloading = false
self.downloadIfNecessary() self.downloadIfNecessary()
failure()
} }
}) })
assetRequestQueue.append(assetRequest) assetRequestQueue.append(assetRequest)
@ -207,6 +220,7 @@ extension URLSessionTask {
let assetRequest = task.assetRequest let assetRequest = task.assetRequest
guard !assetRequest.wasCancelled else { guard !assetRequest.wasCancelled else {
task.cancel() task.cancel()
assetRequest.failure()
return return
} }
if let error = error { if let error = error {
@ -252,6 +266,7 @@ extension URLSessionTask {
let assetRequest = downloadTask.assetRequest let assetRequest = downloadTask.assetRequest
guard !assetRequest.wasCancelled else { guard !assetRequest.wasCancelled else {
downloadTask.cancel() downloadTask.cancel()
assetRequest.failure()
return return
} }
@ -272,6 +287,7 @@ extension URLSessionTask {
let assetRequest = downloadTask.assetRequest let assetRequest = downloadTask.assetRequest
guard !assetRequest.wasCancelled else { guard !assetRequest.wasCancelled else {
downloadTask.cancel() downloadTask.cancel()
assetRequest.failure()
return return
} }
} }
@ -280,6 +296,7 @@ extension URLSessionTask {
let assetRequest = downloadTask.assetRequest let assetRequest = downloadTask.assetRequest
guard !assetRequest.wasCancelled else { guard !assetRequest.wasCancelled else {
downloadTask.cancel() downloadTask.cancel()
assetRequest.failure()
return return
} }
} }

Loading…
Cancel
Save