mirror of
https://github.com/maxgoedjen/secretive.git
synced 2024-11-25 06:57:07 +00:00
Combine stuff
This commit is contained in:
parent
2f3f5681e7
commit
286e2dc558
@ -1,4 +1,5 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
|
import Combine
|
||||||
|
|
||||||
public class AnySecretStore: SecretStore {
|
public class AnySecretStore: SecretStore {
|
||||||
|
|
||||||
@ -8,6 +9,7 @@ public class AnySecretStore: SecretStore {
|
|||||||
fileprivate let _name: () -> String
|
fileprivate let _name: () -> String
|
||||||
fileprivate let _secrets: () -> [AnySecret]
|
fileprivate let _secrets: () -> [AnySecret]
|
||||||
fileprivate let _sign: (Data, AnySecret) throws -> Data
|
fileprivate let _sign: (Data, AnySecret) throws -> Data
|
||||||
|
fileprivate var sink: AnyCancellable?
|
||||||
|
|
||||||
public init<SecretStoreType>(_ secretStore: SecretStoreType) where SecretStoreType: SecretStore {
|
public init<SecretStoreType>(_ secretStore: SecretStoreType) where SecretStoreType: SecretStore {
|
||||||
base = secretStore
|
base = secretStore
|
||||||
@ -16,6 +18,9 @@ public class AnySecretStore: SecretStore {
|
|||||||
_id = { secretStore.id }
|
_id = { secretStore.id }
|
||||||
_secrets = { secretStore.secrets.map { AnySecret($0) } }
|
_secrets = { secretStore.secrets.map { AnySecret($0) } }
|
||||||
_sign = { try secretStore.sign(data: $0, with: $1 as! SecretStoreType.SecretType) }
|
_sign = { try secretStore.sign(data: $0, with: $1 as! SecretStoreType.SecretType) }
|
||||||
|
sink = secretStore.objectWillChange.sink { _ in
|
||||||
|
self.objectWillChange.send()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public var isAvailable: Bool {
|
public var isAvailable: Bool {
|
||||||
|
@ -5,18 +5,27 @@ public class SecretStoreList: ObservableObject {
|
|||||||
|
|
||||||
@Published public var stores: [AnySecretStore] = []
|
@Published public var stores: [AnySecretStore] = []
|
||||||
@Published public var modifiableStore: AnySecretStoreModifiable?
|
@Published public var modifiableStore: AnySecretStoreModifiable?
|
||||||
|
fileprivate var sinks: [AnyCancellable] = []
|
||||||
|
|
||||||
public init() {
|
public init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public func add<SecretStoreType: SecretStore>(store: SecretStoreType) {
|
public func add<SecretStoreType: SecretStore>(store: SecretStoreType) {
|
||||||
stores.append(AnySecretStore(store))
|
addInternal(store: AnySecretStore(store))
|
||||||
}
|
}
|
||||||
|
|
||||||
public func add<SecretStoreType: SecretStoreModifiable>(store: SecretStoreType) {
|
public func add<SecretStoreType: SecretStoreModifiable>(store: SecretStoreType) {
|
||||||
let modifiable = AnySecretStoreModifiable(modifiable: store)
|
let modifiable = AnySecretStoreModifiable(modifiable: store)
|
||||||
modifiableStore = modifiable
|
modifiableStore = modifiable
|
||||||
stores.append(modifiable)
|
addInternal(store: modifiable)
|
||||||
|
}
|
||||||
|
|
||||||
|
public func addInternal(store: AnySecretStore) {
|
||||||
|
stores.append(store)
|
||||||
|
let sink = store.objectWillChange.sink {
|
||||||
|
self.objectWillChange.send()
|
||||||
|
}
|
||||||
|
sinks.append(sink)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user