diff options
| -rw-r--r-- | ios/MullvadVPN/Operations/AnyOperationObserver.swift | 6 | ||||
| -rw-r--r-- | ios/MullvadVPN/Operations/AsyncOperation.swift | 1 | ||||
| -rw-r--r-- | ios/MullvadVPN/Operations/OperationBlockObserver.swift | 17 |
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 { |
