damus

nostr ios client
git clone git://jb55.com/damus
Log | Files | Refs | README | LICENSE

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 }