Browse Source

added urlSession extension to run synchronous data tasks - used in DC_EVENT_HTTP_POST-event callback

Bastian van de Wetering 6 years ago
parent
commit
89dbd5185b
1 changed files with 23 additions and 0 deletions
  1. 23 0
      deltachat-ios/Extensions/Extensions.swift

+ 23 - 0
deltachat-ios/Extensions/Extensions.swift

@@ -55,3 +55,26 @@ extension CharacterSet {
 		return allowed
 	}()
 }
+
+extension URLSession {
+	func synchronousDataTask(with url: URL) -> (Data?, URLResponse?, Error?) {
+		var data: Data?
+		var response: URLResponse?
+		var error: Error?
+
+		let semaphore = DispatchSemaphore(value: 0)
+
+		let dataTask = self.dataTask(with: url) {
+			data = $0
+			response = $1
+			error = $2
+
+			semaphore.signal()
+		}
+		dataTask.resume()
+
+		_ = semaphore.wait(timeout: .distantFuture)
+
+		return (data, response, error)
+	}
+}