summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--ios/MullvadVPN/Operations/AnyOperationObserver.swift6
-rw-r--r--ios/MullvadVPN/Operations/AsyncOperation.swift1
-rw-r--r--ios/MullvadVPN/Operations/OperationBlockObserver.swift17
3 files changed, 22 insertions, 2 deletions
diff --git a/ios/MullvadVPN/Operations/AnyOperationObserver.swift b/ios/MullvadVPN/Operations/AnyOperationObserver.swift
index 72f98a92f9..9c394f8b5a 100644
--- a/ios/MullvadVPN/Operations/AnyOperationObserver.swift
+++ b/ios/MullvadVPN/Operations/AnyOperationObserver.swift
@@ -10,6 +10,10 @@ import Foundation
class AnyOperationObserver<OperationType: OperationProtocol>: OperationBlockObserver<OperationType> {
init<T: OperationObserver>(_ observer: T) where T.OperationType == OperationType {
- super.init(willFinish: observer.operationWillFinish, didFinish: observer.operationDidFinish)
+ super.init(
+ willExecute: observer.operationWillExecute,
+ willFinish: observer.operationWillFinish,
+ didFinish: observer.operationDidFinish
+ )
}
}
diff --git a/ios/MullvadVPN/Operations/AsyncOperation.swift b/ios/MullvadVPN/Operations/AsyncOperation.swift
index a369229083..44e8e791f3 100644
--- a/ios/MullvadVPN/Operations/AsyncOperation.swift
+++ b/ios/MullvadVPN/Operations/AsyncOperation.swift
@@ -47,6 +47,7 @@ class AsyncOperation: Operation, OperationProtocol {
if self.isCancelled {
self.finish()
} else {
+ self.observers.forEach { $0.operationWillExecute(self) }
self.setExecuting(true)
self.main()
}
diff --git a/ios/MullvadVPN/Operations/OperationBlockObserver.swift b/ios/MullvadVPN/Operations/OperationBlockObserver.swift
index eccb7f63ab..1ba2f1ae50 100644
--- a/ios/MullvadVPN/Operations/OperationBlockObserver.swift
+++ b/ios/MullvadVPN/Operations/OperationBlockObserver.swift
@@ -9,17 +9,32 @@
import Foundation
class OperationBlockObserver<OperationType: OperationProtocol>: OperationObserver {
+ private var willExecute: ((OperationType) -> Void)?
private var willFinish: ((OperationType) -> Void)?
private var didFinish: ((OperationType) -> Void)?
let queue: DispatchQueue?
- init(queue: DispatchQueue? = nil, willFinish: ((OperationType) -> Void)? = nil, didFinish: ((OperationType) -> Void)? = nil) {
+ init(
+ queue: DispatchQueue? = nil,
+ willExecute: ((OperationType) -> Void)? = nil,
+ willFinish: ((OperationType) -> Void)? = nil,
+ didFinish: ((OperationType) -> Void)? = nil
+ ) {
self.queue = queue
+ self.willExecute = willExecute
self.willFinish = willFinish
self.didFinish = didFinish
}
+ func operationWillExecute(_ operation: OperationType) {
+ if let willExecute = willExecute {
+ scheduleEvent {
+ willExecute(operation)
+ }
+ }
+ }
+
func operationWillFinish(_ operation: OperationType) {
if let willFinish = self.willFinish {
scheduleEvent {