aboutsummaryrefslogtreecommitdiff
path: root/foray/ForayNetworkManager.swift
diff options
context:
space:
mode:
Diffstat (limited to 'foray/ForayNetworkManager.swift')
-rw-r--r--foray/ForayNetworkManager.swift51
1 files changed, 0 insertions, 51 deletions
diff --git a/foray/ForayNetworkManager.swift b/foray/ForayNetworkManager.swift
deleted file mode 100644
index 53e9554..0000000
--- a/foray/ForayNetworkManager.swift
+++ /dev/null
@@ -1,51 +0,0 @@
-//
-// ForayNetworkManager.swift
-// foray
-//
-// Created by Nicholas Tay on 20/3/2022.
-//
-
-import Foundation
-
-class ForayNetworkManager {
- static let shared = ForayNetworkManager()
-
- var basicUsername: String? = nil
- var basicPassword: String? = nil
-
- // Reuse JSON decoder, allows for customisation of things like date decode if required
- var jsonDecoder: JSONDecoder = {
- let jd = JSONDecoder()
- // Defaults to year-month-date format
- jd.dateDecodingStrategy = .custom({ (decoder) -> Date in
- let container = try decoder.singleValueContainer()
- let dateStr = try container.decode(String.self)
-
- let dateFormat = DateFormatter()
- dateFormat.dateFormat = "yyyy-MM-dd"
-
- return dateFormat.date(from: dateStr)!
- })
- return jd
- }()
-
- 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
-
- // 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()
- }
- }
-}