// // WalletModel.swift // damus // // Created by William Casarin on 2023-05-09. // import Foundation enum WalletConnectState { case new(WalletConnectURL) case existing(WalletConnectURL) case none } class WalletModel: ObservableObject { var settings: UserSettingsStore private(set) var previous_state: WalletConnectState var initial_percent: Int @Published private(set) var connect_state: WalletConnectState init(state: WalletConnectState, settings: UserSettingsStore) { self.connect_state = state self.previous_state = .none self.settings = settings self.initial_percent = settings.donation_percent } init(settings: UserSettingsStore) { self.settings = settings if let str = settings.nostr_wallet_connect, let nwc = WalletConnectURL(str: str) { self.previous_state = .existing(nwc) self.connect_state = .existing(nwc) } else { self.previous_state = .none self.connect_state = .none } self.initial_percent = settings.donation_percent } func cancel() { self.connect_state = previous_state self.objectWillChange.send() } func disconnect() { self.settings.nostr_wallet_connect = nil self.connect_state = .none self.previous_state = .none } func new(_ nwc: WalletConnectURL) { self.connect_state = .new(nwc) } func connect(_ nwc: WalletConnectURL) { self.settings.nostr_wallet_connect = nwc.to_url().absoluteString notify(.attached_wallet(nwc)) self.connect_state = .existing(nwc) self.previous_state = .existing(nwc) } }