From f2b4e2f2fa0a25066829aeca50c26c3af2fee166 Mon Sep 17 00:00:00 2001
From: tobias <thinkdifferent055@gmail.com>
Date: Sat, 9 Apr 2022 00:09:19 +0200
Subject: [PATCH] Provide optional timeout per request

---
 AppleLibs/Network/Requests/DataManager.swift    | 2 +-
 AppleLibs/Network/Requests/Request.swift        | 5 ++++-
 AppleLibs/Network/Requests/RequestBuilder.swift | 8 +++++++-
 3 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/AppleLibs/Network/Requests/DataManager.swift b/AppleLibs/Network/Requests/DataManager.swift
index a8827ad..b01a8b7 100644
--- a/AppleLibs/Network/Requests/DataManager.swift
+++ b/AppleLibs/Network/Requests/DataManager.swift
@@ -138,7 +138,7 @@ open class DataManager: NSObject, URLSessionDelegate
                 req.setValue("application/json", forHTTPHeaderField: "Accept")
             }
 
-            req.timeoutInterval = self.timeout
+            req.timeoutInterval = request.timeout ?? self.timeout
             
             if let authentication = request.authentication {
                 if let headerKey = authentication.headerKey, let headerValue = authentication.headerValue {
diff --git a/AppleLibs/Network/Requests/Request.swift b/AppleLibs/Network/Requests/Request.swift
index adc8fb5..3fd6091 100644
--- a/AppleLibs/Network/Requests/Request.swift
+++ b/AppleLibs/Network/Requests/Request.swift
@@ -70,8 +70,10 @@ public class Request: CustomStringConvertible
     public var payload: Data?
 
     public var contentType: String?
+    
+    public var timeout: TimeInterval?
 
-    public init(url: String, method: RequestMethod, authentication: Authentication?, parameters: [String: String] = [:], payload: Data? = nil, contentType: String?) {
+    public init(url: String, method: RequestMethod, authentication: Authentication?, parameters: [String: String] = [:], payload: Data? = nil, contentType: String?, timeout: TimeInterval?) {
         self.url = url
         self.method = method
         self.authentication = authentication
@@ -82,6 +84,7 @@ public class Request: CustomStringConvertible
         } else {
             self.contentType = nil
         }
+        self.timeout = timeout
     }
 
     public func constructUrl() -> URL? {
diff --git a/AppleLibs/Network/Requests/RequestBuilder.swift b/AppleLibs/Network/Requests/RequestBuilder.swift
index 00b2e2d..90e1acd 100644
--- a/AppleLibs/Network/Requests/RequestBuilder.swift
+++ b/AppleLibs/Network/Requests/RequestBuilder.swift
@@ -20,6 +20,7 @@ public class RequestBuilder
     private var parameters: [String: String] = [:]
     private var payload: Data?
     private var contentType: String?
+    private var timeout: TimeInterval?
 
     public func url(_ url: String) -> RequestBuilder {
         self.url = url
@@ -58,7 +59,12 @@ public class RequestBuilder
         return self
     }
 
+    public func timeout(timeout: TimeInterval) -> RequestBuilder {
+        self.timeout = timeout
+        return self
+    }
+    
     public func build() -> Request {
-        Request(url: url, method: method, authentication: authentication, parameters: parameters, payload: payload, contentType: contentType)
+        Request(url: url, method: method, authentication: authentication, parameters: parameters, payload: payload, contentType: contentType, timeout: timeout)
     }
 }
-- 
GitLab