summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAndrej Mihajlov <and@mullvad.net>2020-07-15 17:48:52 +0200
committerAndrej Mihajlov <and@mullvad.net>2020-07-15 18:12:28 +0200
commit4509e845c9d05d66f68cb9d108aecd67db6c2b26 (patch)
tree2af8bdc50515999966f935dc90d5b5a7994fcdcf
parentf9c7474c4c6271a7f11f4234349e2fb74dbed02c (diff)
downloadmullvadvpn-4509e845c9d05d66f68cb9d108aecd67db6c2b26.tar.xz
mullvadvpn-4509e845c9d05d66f68cb9d108aecd67db6c2b26.zip
Remove unused Combine subclasses
-rw-r--r--ios/MullvadVPN.xcodeproj/project.pbxproj22
-rw-r--r--ios/MullvadVPN/AutoDisposableSink.swift67
-rw-r--r--ios/MullvadVPN/CancellableDelayPublisher.swift32
-rw-r--r--ios/MullvadVPN/MutuallyExclusive.swift125
-rw-r--r--ios/MullvadVPN/ReplaceNilWithError.swift24
5 files changed, 0 insertions, 270 deletions
diff --git a/ios/MullvadVPN.xcodeproj/project.pbxproj b/ios/MullvadVPN.xcodeproj/project.pbxproj
index 01c0f46d7f..7dfa57ccb2 100644
--- a/ios/MullvadVPN.xcodeproj/project.pbxproj
+++ b/ios/MullvadVPN.xcodeproj/project.pbxproj
@@ -42,8 +42,6 @@
581CBCE62296B97300727D7F /* ViewControllerIdentifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 581CBCE52296B97300727D7F /* ViewControllerIdentifier.swift */; };
581CBCEC2298041B00727D7F /* SettingsAppVersionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 581CBCEB2298041B00727D7F /* SettingsAppVersionCell.swift */; };
581CBCEE229826FD00727D7F /* StaticTableViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 581CBCED229826FD00727D7F /* StaticTableViewDataSource.swift */; };
- 582650862384116F00FA7A86 /* ReplaceNilWithError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 582650832384102800FA7A86 /* ReplaceNilWithError.swift */; };
- 582650872384117900FA7A86 /* ReplaceNilWithError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 582650832384102800FA7A86 /* ReplaceNilWithError.swift */; };
582AE3102440A6CA00E6733A /* AccountTokenInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 582AE30F2440A6CA00E6733A /* AccountTokenInput.swift */; };
582AE3122440CA0D00E6733A /* AccountTokenInputTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 582AE3112440CA0D00E6733A /* AccountTokenInputTests.swift */; };
582AE3132440CA2700E6733A /* AccountTokenInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 582AE30F2440A6CA00E6733A /* AccountTokenInput.swift */; };
@@ -57,11 +55,8 @@
5840250422B11AB700E4CFEC /* MullvadEndpoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5840250322B11AB700E4CFEC /* MullvadEndpoint.swift */; };
5840250522B11AB700E4CFEC /* MullvadEndpoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5840250322B11AB700E4CFEC /* MullvadEndpoint.swift */; };
5845F838236C466400B2D93C /* TunnelControlViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5845F837236C466400B2D93C /* TunnelControlViewController.swift */; };
- 5845F83A236C6A7200B2D93C /* AutoDisposableSink.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5845F839236C6A7200B2D93C /* AutoDisposableSink.swift */; };
- 5845F83C236C72E300B2D93C /* AutoDisposableSink.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5845F839236C6A7200B2D93C /* AutoDisposableSink.swift */; };
5845F842236CBACD00B2D93C /* PacketTunnelIpc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5845F841236CBACD00B2D93C /* PacketTunnelIpc.swift */; };
5845F843236CBDAB00B2D93C /* PacketTunnelIpc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5845F841236CBACD00B2D93C /* PacketTunnelIpc.swift */; };
- 584E96BA240D791E00D3334F /* CancellableDelayPublisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 584E96B9240D791E00D3334F /* CancellableDelayPublisher.swift */; };
584E96BC240FD4DA00D3334F /* Location.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58A1AA8623F43901009F7EA6 /* Location.swift */; };
584E96BD240FD4DA00D3334F /* Location.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58A1AA8623F43901009F7EA6 /* Location.swift */; };
584E96BE240FD4DB00D3334F /* Location.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58A1AA8623F43901009F7EA6 /* Location.swift */; };
@@ -94,8 +89,6 @@
5888AD83227B11080051EB06 /* SelectLocationCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5888AD82227B11080051EB06 /* SelectLocationCell.swift */; };
5888AD87227B17950051EB06 /* SelectLocationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5888AD86227B17950051EB06 /* SelectLocationController.swift */; };
5888AD89227B18C40051EB06 /* RelayList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5888AD88227B18C40051EB06 /* RelayList.swift */; };
- 588AE72F2362001F009F9F2E /* MutuallyExclusive.swift in Sources */ = {isa = PBXBuildFile; fileRef = 588AE72E2362001F009F9F2E /* MutuallyExclusive.swift */; };
- 588AE730236200E2009F9F2E /* MutuallyExclusive.swift in Sources */ = {isa = PBXBuildFile; fileRef = 588AE72E2362001F009F9F2E /* MutuallyExclusive.swift */; };
588D2FE3248AC27F00E313F7 /* AsyncOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58E973DD24850EB600096F90 /* AsyncOperation.swift */; };
58906DE02445C7A5002F0673 /* NEProviderStopReason+Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58906DDF2445C7A5002F0673 /* NEProviderStopReason+Debug.swift */; };
5896AE7E246ACE65005B36CB /* KeychainAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58FAEDEB245059F000CB0F5B /* KeychainAttributes.swift */; };
@@ -257,7 +250,6 @@
581CBCE52296B97300727D7F /* ViewControllerIdentifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewControllerIdentifier.swift; sourceTree = "<group>"; };
581CBCEB2298041B00727D7F /* SettingsAppVersionCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsAppVersionCell.swift; sourceTree = "<group>"; };
581CBCED229826FD00727D7F /* StaticTableViewDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StaticTableViewDataSource.swift; sourceTree = "<group>"; };
- 582650832384102800FA7A86 /* ReplaceNilWithError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReplaceNilWithError.swift; sourceTree = "<group>"; };
582AE30F2440A6CA00E6733A /* AccountTokenInput.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountTokenInput.swift; sourceTree = "<group>"; };
582AE3112440CA0D00E6733A /* AccountTokenInputTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountTokenInputTests.swift; sourceTree = "<group>"; };
582BB1AE229566420055B6EF /* SettingsCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsCell.swift; sourceTree = "<group>"; };
@@ -268,10 +260,8 @@
5840250022B1124600E4CFEC /* IpAddress+Codable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "IpAddress+Codable.swift"; sourceTree = "<group>"; };
5840250322B11AB700E4CFEC /* MullvadEndpoint.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MullvadEndpoint.swift; sourceTree = "<group>"; };
5845F837236C466400B2D93C /* TunnelControlViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TunnelControlViewController.swift; sourceTree = "<group>"; };
- 5845F839236C6A7200B2D93C /* AutoDisposableSink.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoDisposableSink.swift; sourceTree = "<group>"; };
5845F841236CBACD00B2D93C /* PacketTunnelIpc.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PacketTunnelIpc.swift; sourceTree = "<group>"; };
584B26F3237434D00073B10E /* RelaySelectorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelaySelectorTests.swift; sourceTree = "<group>"; };
- 584E96B9240D791E00D3334F /* CancellableDelayPublisher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CancellableDelayPublisher.swift; sourceTree = "<group>"; };
58561C98239A5D1500BD6B5E /* IPEndpoint.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IPEndpoint.swift; sourceTree = "<group>"; };
5860F1C123A785C600CEA666 /* WireguardDevice.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WireguardDevice.swift; sourceTree = "<group>"; };
5860F1C323A8D25F00CEA666 /* WireguardConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WireguardConfiguration.swift; sourceTree = "<group>"; };
@@ -297,7 +287,6 @@
5888AD82227B11080051EB06 /* SelectLocationCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectLocationCell.swift; sourceTree = "<group>"; };
5888AD86227B17950051EB06 /* SelectLocationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectLocationController.swift; sourceTree = "<group>"; };
5888AD88227B18C40051EB06 /* RelayList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayList.swift; sourceTree = "<group>"; };
- 588AE72E2362001F009F9F2E /* MutuallyExclusive.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MutuallyExclusive.swift; sourceTree = "<group>"; };
58906DDF2445C7A5002F0673 /* NEProviderStopReason+Debug.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NEProviderStopReason+Debug.swift"; sourceTree = "<group>"; };
5894E725236B2801008A2793 /* SwiftUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftUI.framework; path = System/Library/Frameworks/SwiftUI.framework; sourceTree = SDKROOT; };
5896AE83246D5889005B36CB /* CustomDateComponentsFormatting.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomDateComponentsFormatting.swift; sourceTree = "<group>"; };
@@ -496,11 +485,9 @@
58DF28A42417CB4B00E836B0 /* AppStorePaymentManager.swift */,
58FD5BE624192A2B00112C88 /* AppStoreReceipt.swift */,
58CE5E6A224146210008646E /* Assets.xcassets */,
- 5845F839236C6A7200B2D93C /* AutoDisposableSink.swift */,
588534BD246193C00018B744 /* AutomaticKeyRotationManager.swift */,
589AB4F6227B64450039131E /* BasicTableViewCell.swift */,
58EC4E6B23915325003F5C5B /* Bundle+MullvadVersion.swift */,
- 584E96B9240D791E00D3334F /* CancellableDelayPublisher.swift */,
58F840B12464491D0044E708 /* ChainedError.swift */,
58A1AA8B23F5584B009F7EA6 /* ConnectionPanelView.swift */,
58CCA00F224249A1004F3011 /* ConnectViewController.swift */,
@@ -534,7 +521,6 @@
58ADDB3D227B1CD900FAFEA7 /* MullvadRpc.swift */,
58FBDAAA22A52DC500EB69A3 /* MullvadVPN-Bridging-Header.h */,
5866F39B2243B82D00168AE5 /* MullvadVPN.entitlements */,
- 588AE72E2362001F009F9F2E /* MutuallyExclusive.swift */,
58906DDF2445C7A5002F0673 /* NEProviderStopReason+Debug.swift */,
5811DE4F239014550011EB53 /* NEVPNStatus+Debug.swift */,
58CC40EE24A601900019D96E /* ObserverList.swift */,
@@ -546,7 +532,6 @@
5888AD88227B18C40051EB06 /* RelayList.swift */,
58781CD422AFBA39009B9D8E /* RelaySelector.swift */,
5888AD7E2279B6BF0051EB06 /* RelayStatusIndicatorView.swift */,
- 582650832384102800FA7A86 /* ReplaceNilWithError.swift */,
587425C02299833500CA2045 /* RootContainerViewController.swift */,
5867A51B2248F26A005513C0 /* SegueIdentifier.swift */,
5888AD82227B11080051EB06 /* SelectLocationCell.swift */,
@@ -925,7 +910,6 @@
5888AD87227B17950051EB06 /* SelectLocationController.swift in Sources */,
580EE20424B321EC00F9D8A1 /* OperationObserver.swift in Sources */,
58F19E35228C15BA00C7710B /* SpinnerActivityIndicatorView.swift in Sources */,
- 584E96BA240D791E00D3334F /* CancellableDelayPublisher.swift in Sources */,
58A99ED3240014A0006599E9 /* ConsentViewController.swift in Sources */,
58FAEE0124533A9C00CB0F5B /* KeychainClass.swift in Sources */,
5845F838236C466400B2D93C /* TunnelControlViewController.swift in Sources */,
@@ -934,7 +918,6 @@
587CBFE322807F530028DED3 /* UIColor+Helpers.swift in Sources */,
581CBCEC2298041B00727D7F /* SettingsAppVersionCell.swift in Sources */,
58FAEDFD24533A5500CB0F5B /* KeychainMatchLimit.swift in Sources */,
- 5845F83A236C6A7200B2D93C /* AutoDisposableSink.swift in Sources */,
5840250422B11AB700E4CFEC /* MullvadEndpoint.swift in Sources */,
58CC40EF24A601900019D96E /* ObserverList.swift in Sources */,
58CCA01822426713004F3011 /* AccountViewController.swift in Sources */,
@@ -952,7 +935,6 @@
580EE22124B3240100F9D8A1 /* TransformOperationObserver.swift in Sources */,
582BB1AF229566420055B6EF /* SettingsCell.swift in Sources */,
5873884D239E6D7E00E96C4E /* EmbeddedViewContainerView.swift in Sources */,
- 582650862384116F00FA7A86 /* ReplaceNilWithError.swift in Sources */,
58F3C0A4249CB069003E76BE /* HeaderBarView.swift in Sources */,
58B9EB132488ED2100095626 /* AlertPresenter.swift in Sources */,
587A01FC23F1F0BE00B68763 /* SimulatorTunnelProviderHost.swift in Sources */,
@@ -984,7 +966,6 @@
587425C12299833500CA2045 /* RootContainerViewController.swift in Sources */,
580EE20124B321D500F9D8A1 /* OperationProtocol.swift in Sources */,
5896AE84246D5889005B36CB /* CustomDateComponentsFormatting.swift in Sources */,
- 588AE72F2362001F009F9F2E /* MutuallyExclusive.swift in Sources */,
5888AD89227B18C40051EB06 /* RelayList.swift in Sources */,
580EE21824B3235100F9D8A1 /* AnyOperationObserver.swift in Sources */,
587AD7C623421D7000E93A53 /* TunnelSettings.swift in Sources */,
@@ -1003,7 +984,6 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 5845F83C236C72E300B2D93C /* AutoDisposableSink.swift in Sources */,
5860F1C423A8D25F00CEA666 /* WireguardConfiguration.swift in Sources */,
58F3C09D249B99DD003E76BE /* Curve25519.swift in Sources */,
580EE21F24B3237F00F9D8A1 /* OutputOperation.swift in Sources */,
@@ -1012,7 +992,6 @@
58FAEE0324533ABE00CB0F5B /* KeychainReturn.swift in Sources */,
58BFA5CD22A7CE1F00A6173D /* ApplicationConfiguration.swift in Sources */,
58BFA5C222A7C92900A6173D /* JsonRpc.swift in Sources */,
- 588AE730236200E2009F9F2E /* MutuallyExclusive.swift in Sources */,
580EE20724B3222400F9D8A1 /* ExclusivityController.swift in Sources */,
58F840B02464382C0044E708 /* KeychainItemRevision.swift in Sources */,
58C6B35122BB7CFD003C19AD /* IPAddressRange.swift in Sources */,
@@ -1041,7 +1020,6 @@
58AEEF6C2344A49D00C9BBD5 /* TunnelSettingsManager.swift in Sources */,
58C6B35F22BBBFE3003C19AD /* Data+HexCoding.swift in Sources */,
5840250522B11AB700E4CFEC /* MullvadEndpoint.swift in Sources */,
- 582650872384117900FA7A86 /* ReplaceNilWithError.swift in Sources */,
58BFA5C722A7C97F00A6173D /* RelayCache.swift in Sources */,
58BFA5C022A7C8A900A6173D /* MullvadRpc.swift in Sources */,
580EE21024B322E700F9D8A1 /* TransformOperation.swift in Sources */,
diff --git a/ios/MullvadVPN/AutoDisposableSink.swift b/ios/MullvadVPN/AutoDisposableSink.swift
deleted file mode 100644
index 548e343053..0000000000
--- a/ios/MullvadVPN/AutoDisposableSink.swift
+++ /dev/null
@@ -1,67 +0,0 @@
-//
-// AutoDisposableSink.swift
-// MullvadVPN
-//
-// Created by pronebird on 01/11/2019.
-// Copyright © 2019 Mullvad VPN AB. All rights reserved.
-//
-
-import Combine
-import Foundation
-
-/// A thread safe storage for a set of `AnyCancellable` objects
-final class CancellableSet {
- private let lock = NSLock()
- private var storage = Set<AnyCancellable>()
-
- func append(_ cancellable: AnyCancellable) {
- lock.lock()
- storage.insert(cancellable)
- lock.unlock()
- }
-
- func remove(_ cancellable: AnyCancellable) {
- lock.lock()
- storage.remove(cancellable)
- lock.unlock()
- }
-}
-
-extension Publisher {
-
- /// Make a `Publishers.Sink` subscriber and put it in the given `CancellableSet`, automatically
- /// remove it upon completion.
- func autoDisposableSink(cancellableSet: CancellableSet, receiveCompletion: @escaping ((Subscribers.Completion<Self.Failure>) -> Void), receiveValue: @escaping ((Self.Output) -> Void)) -> Void {
- var sharedCancellable: AnyCancellable?
-
- let disposeSubscriber = {
- if let sharedCancellable = sharedCancellable {
- cancellableSet.remove(sharedCancellable)
- }
- }
-
- let cancellable = handleEvents(receiveCancel: {
- disposeSubscriber()
- }).sink(receiveCompletion: { (completion) in
- receiveCompletion(completion)
-
- disposeSubscriber()
- }, receiveValue: receiveValue)
-
- sharedCancellable = cancellable
- cancellableSet.append(cancellable)
- }
-
-}
-
-extension Publisher where Output == Void, Failure: Error {
-
- func sink(receiveCompletion: @escaping ((Subscribers.Completion<Failure>) -> Void)) -> AnyCancellable {
- return sink(receiveCompletion: receiveCompletion, receiveValue: { _ in })
- }
-
- func autoDisposableSink(cancellableSet: CancellableSet, receiveCompletion: @escaping ((Subscribers.Completion<Failure>) -> Void)) -> Void {
- return autoDisposableSink(cancellableSet: cancellableSet, receiveCompletion: receiveCompletion, receiveValue: { _ in })
- }
-
-}
diff --git a/ios/MullvadVPN/CancellableDelayPublisher.swift b/ios/MullvadVPN/CancellableDelayPublisher.swift
deleted file mode 100644
index c177bd4251..0000000000
--- a/ios/MullvadVPN/CancellableDelayPublisher.swift
+++ /dev/null
@@ -1,32 +0,0 @@
-//
-// CancellableDelayPublisher.swift
-// MullvadVPN
-//
-// Created by pronebird on 02/03/2020.
-// Copyright © 2020 Mullvad VPN AB. All rights reserved.
-//
-
-import Foundation
-import Combine
-
-extension Publisher {
-
- /// This is a `delay` operator implementation that respects cancellation
- func cancellableDelay<S>(for delay: S.SchedulerTimeType.Stride, scheduler: S)
- -> Publishers.FlatMap<PassthroughSubject<Self.Output, Self.Failure>, Self>
- where S: Scheduler
- {
- return self.flatMap { (value) -> PassthroughSubject<Output, Failure> in
- let subject = PassthroughSubject<Output, Failure>()
- let date = scheduler.now.advanced(by: delay)
-
- // `PassthroughSubject` does not emit values, nor completion after cancellation
- scheduler.schedule(after: date) {
- subject.send(value)
- subject.send(completion: .finished)
- }
-
- return subject
- }
- }
-}
diff --git a/ios/MullvadVPN/MutuallyExclusive.swift b/ios/MullvadVPN/MutuallyExclusive.swift
deleted file mode 100644
index fc0bd254c5..0000000000
--- a/ios/MullvadVPN/MutuallyExclusive.swift
+++ /dev/null
@@ -1,125 +0,0 @@
-//
-// MutuallyExclusive.swift
-// MullvadVPN
-//
-// Created by pronebird on 24/10/2019.
-// Copyright © 2019 Mullvad VPN AB. All rights reserved.
-//
-
-import Combine
-import Foundation
-
-extension Publishers {
-
- /// A publisher that blocks the given DispatchQueue until the produced publisher reported the
- /// completion.
- final class MutuallyExclusive<PublisherType, Context>: Publisher
- where
- PublisherType: Publisher,
- Context: Scheduler
- {
- typealias MakePublisherBlock = () -> PublisherType
-
- typealias Output = PublisherType.Output
- typealias Failure = PublisherType.Failure
-
- private let exclusivityQueue: Context
- private let executionQueue: Context
-
- private let createPublisher: MakePublisherBlock
-
- init(exclusivityQueue: Context, executionQueue: Context, createPublisher: @escaping MakePublisherBlock) {
- self.exclusivityQueue = exclusivityQueue
- self.executionQueue = executionQueue
- self.createPublisher = createPublisher
- }
-
- func receive<S>(subscriber: S) where S : Subscriber, S.Failure == Failure, S.Input == Output {
- let subscription = MutuallyExclusive.Subscription(
- subscriber: subscriber,
- createPublisher: createPublisher,
- exclusivityQueue: exclusivityQueue,
- executionQueue: executionQueue)
-
- subscriber.receive(subscription: subscription)
- }
- }
-}
-
-private extension Publishers.MutuallyExclusive {
-
- /// A subscription used by `MutuallyExclusive` publisher
- final class Subscription<SubscriberType, PublisherType, Context>: Combine.Subscription
- where
- SubscriberType: Subscriber, PublisherType: Publisher,
- PublisherType.Output == SubscriberType.Input,
- PublisherType.Failure == SubscriberType.Failure,
- Context: Scheduler
- {
- typealias MakePublisherBlock = () -> PublisherType
-
- private let subscriber: SubscriberType
- private var innerSubscriber: AnyCancellable?
- private let createPublisher: MakePublisherBlock
-
- private let exclusivityQueue: Context
- private let executionQueue: Context
- private let sema = DispatchSemaphore(value: 0)
-
- private let cancelLock = NSLock()
- private var isCancelled = false
-
- init(subscriber: SubscriberType,
- createPublisher: @escaping MakePublisherBlock,
- exclusivityQueue: Context,
- executionQueue: Context)
- {
- self.subscriber = subscriber
- self.createPublisher = createPublisher
- self.exclusivityQueue = exclusivityQueue
- self.executionQueue = executionQueue
- }
-
- func request(_ demand: Subscribers.Demand) {
- self.exclusivityQueue.schedule {
- self.executionQueue.schedule {
- self.cancelLock.withCriticalBlock {
- guard !self.isCancelled else { return }
-
- self.innerSubscriber = self.createPublisher()
- .sink(receiveCompletion: { [weak self] (completion) in
- guard let self = self else { return }
-
- self.subscriber.receive(completion: completion)
- self.signalSemaphore()
- }, receiveValue: { [weak self] (output) in
- _ = self?.subscriber.receive(output)
- })
- }
- }
- self.sema.wait()
- }
- }
-
- func cancel() {
- cancelLock.withCriticalBlock {
- guard !isCancelled else { return }
-
- isCancelled = true
-
- innerSubscriber?.cancel()
- innerSubscriber = nil
-
- signalSemaphore()
- }
- }
-
- private func signalSemaphore() {
- _ = sema.signal()
- }
-
- }
-
-}
-
-typealias MutuallyExclusive = Publishers.MutuallyExclusive
diff --git a/ios/MullvadVPN/ReplaceNilWithError.swift b/ios/MullvadVPN/ReplaceNilWithError.swift
deleted file mode 100644
index f25a8ff7bc..0000000000
--- a/ios/MullvadVPN/ReplaceNilWithError.swift
+++ /dev/null
@@ -1,24 +0,0 @@
-//
-// ReplaceNilWithError.swift
-// MullvadVPN
-//
-// Created by pronebird on 19/11/2019.
-// Copyright © 2019 Mullvad VPN AB. All rights reserved.
-//
-
-import Combine
-import Foundation
-
-extension Publisher {
-
- /// Replace nil elements with the provided error
- func replaceNil<T>(with error: Failure) -> Publishers.FlatMap<Result<T, Failure>.Publisher, Self>
- where Output == T?, Failure: Error {
- return flatMap { (output: T?) -> Result<T, Failure>.Publisher in
- let result: Result<T, Failure> = output.flatMap { .success($0) } ?? .failure(error)
-
- return result.publisher
- }
- }
-
-}