| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- import Combine
- import SwiftUI
- extension NightscoutConfig {
- class ViewModel<Provider>: BaseViewModel<Provider>, ObservableObject where Provider: NightscoutConfigProvider {
- @Injected() var keychain: Keychain!
- @Published var url = ""
- @Published var secret = ""
- @Published var message = ""
- @Published var connecting = false
- override func subscribe() {
- url = keychain.getValue(String.self, forKey: Config.urlKey) ?? ""
- secret = keychain.getValue(String.self, forKey: Config.secretKey) ?? ""
- }
- func connect() {
- guard let url = URL(string: url) else {
- message = "Invalid URL"
- return
- }
- connecting = true
- message = ""
- provider.checkConnection(url: url, secret: secret)
- .receive(on: DispatchQueue.main)
- .sink { completion in
- switch completion {
- case .finished: break
- case let .failure(error):
- self.message = "Error: \(error.localizedDescription)"
- }
- self.connecting = false
- } receiveValue: {
- self.message = "Connected!"
- self.keychain.setValue(self.url, forKey: Config.urlKey)
- self.keychain.setValue(self.secret, forKey: Config.secretKey)
- }
- .store(in: &lifetime)
- }
- func delete() {
- keychain.removeObject(forKey: Config.urlKey)
- keychain.removeObject(forKey: Config.secretKey)
- url = ""
- secret = ""
- }
- }
- }
|