WalletModel.swift (1746B)
1 // 2 // WalletModel.swift 3 // damus 4 // 5 // Created by William Casarin on 2023-05-09. 6 // 7 8 import Foundation 9 10 enum WalletConnectState { 11 case new(WalletConnectURL) 12 case existing(WalletConnectURL) 13 case none 14 } 15 16 class WalletModel: ObservableObject { 17 var settings: UserSettingsStore 18 private(set) var previous_state: WalletConnectState 19 var initial_percent: Int 20 21 @Published private(set) var connect_state: WalletConnectState 22 23 init(state: WalletConnectState, settings: UserSettingsStore) { 24 self.connect_state = state 25 self.previous_state = .none 26 self.settings = settings 27 self.initial_percent = settings.donation_percent 28 } 29 30 init(settings: UserSettingsStore) { 31 self.settings = settings 32 if let str = settings.nostr_wallet_connect, 33 let nwc = WalletConnectURL(str: str) { 34 self.previous_state = .existing(nwc) 35 self.connect_state = .existing(nwc) 36 } else { 37 self.previous_state = .none 38 self.connect_state = .none 39 } 40 self.initial_percent = settings.donation_percent 41 } 42 43 func cancel() { 44 self.connect_state = previous_state 45 self.objectWillChange.send() 46 } 47 48 func disconnect() { 49 self.settings.nostr_wallet_connect = nil 50 self.connect_state = .none 51 self.previous_state = .none 52 } 53 54 func new(_ nwc: WalletConnectURL) { 55 self.connect_state = .new(nwc) 56 } 57 58 func connect(_ nwc: WalletConnectURL) { 59 self.settings.nostr_wallet_connect = nwc.to_url().absoluteString 60 notify(.attached_wallet(nwc)) 61 self.connect_state = .existing(nwc) 62 self.previous_state = .existing(nwc) 63 } 64 }