diff options
author | Nicholas Tay <nick@windblume.net> | 2022-03-25 09:52:06 +1100 |
---|---|---|
committer | Nicholas Tay <nick@windblume.net> | 2022-03-25 09:52:06 +1100 |
commit | 07a6eb8325d3b67d998003d3fe5ab34e1a72f106 (patch) | |
tree | d0399896aa38f7deffe5e011e6dd4bf881b25b99 /foray/ForayNetworkManager.swift | |
parent | fe60f99848498a932d9113f8e516700a836dd1cd (diff) | |
download | forayios-07a6eb8325d3b67d998003d3fe5ab34e1a72f106.tar.gz forayios-07a6eb8325d3b67d998003d3fe5ab34e1a72f106.tar.bz2 forayios-07a6eb8325d3b67d998003d3fe5ab34e1a72f106.zip |
getData -> fetch, try threading, move logic around
Diffstat (limited to 'foray/ForayNetworkManager.swift')
-rw-r--r-- | foray/ForayNetworkManager.swift | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/foray/ForayNetworkManager.swift b/foray/ForayNetworkManager.swift index ab1e2b5..53e9554 100644 --- a/foray/ForayNetworkManager.swift +++ b/foray/ForayNetworkManager.swift @@ -29,22 +29,23 @@ class ForayNetworkManager { return jd }() - func get<T: Decodable>(url: String, - onComplete: @escaping ([T]) -> ()) { - var request = URLRequest(url: URL(string: url)!) - request.cachePolicy = .reloadRevalidatingCacheData // Needed otherwise default caching policy seems not to check properly - - // Basic auth if required - if (basicUsername != nil && basicPassword != nil) { - let authData = (basicUsername! + ":" + basicPassword!).data(using: .utf8)!.base64EncodedString() - request.addValue("Basic \(authData)", forHTTPHeaderField: "Authorization") - } - - URLSession.shared.dataTask(with: request, completionHandler: { data, response, error -> Void in - let items = try! self.jsonDecoder.decode([T].self, from: data!) + func fetch<T: Decodable>(url: String, + receiver: @escaping (T) -> ()) { + // Fetch on a background thread + DispatchQueue.global(qos: .background).async { + var request = URLRequest(url: URL(string: url)!) + request.cachePolicy = .reloadRevalidatingCacheData // Needed otherwise default caching policy seems not to check properly - // Possibly passing back to UI, need to do it on the main thread (I think due to async?) - DispatchQueue.main.async { onComplete(items) } - }).resume() + // Basic auth if required + if (self.basicUsername != nil && self.basicPassword != nil) { + let authData = (self.basicUsername! + ":" + self.basicPassword!).data(using: .utf8)!.base64EncodedString() + request.addValue("Basic \(authData)", forHTTPHeaderField: "Authorization") + } + + URLSession.shared.dataTask(with: request, completionHandler: { data, response, error -> Void in + let items = try! self.jsonDecoder.decode(T.self, from: data!) + receiver(items) + }).resume() + } } } |