Browse Source

finish updates to wallet selector improvements

post-button-style
Benjamin Hakes 2 years ago
parent
commit
429a765d42
No known key found for this signature in database GPG Key ID: 303A85CC0ACDB796
  1. 20
      damus.xcodeproj/project.pbxproj
  2. 8
      damus/Components/InvoiceView.swift
  3. 124
      damus/Models/UserSettings.swift
  4. 81
      damus/Models/UserSettingsStore.swift
  5. 71
      damus/Models/Wallet.swift
  6. 17
      damus/Views/ConfigView.swift
  7. 3
      damus/Views/ProfileView.swift
  8. 64
      damus/Views/SelectWalletView.swift

20
damus.xcodeproj/project.pbxproj

@ -130,8 +130,9 @@
4CEE2AF7280B2DEA00AB5EEF /* ProfileName.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CEE2AF6280B2DEA00AB5EEF /* ProfileName.swift */; }; 4CEE2AF7280B2DEA00AB5EEF /* ProfileName.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CEE2AF6280B2DEA00AB5EEF /* ProfileName.swift */; };
4CEE2AF9280B2EAC00AB5EEF /* PowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CEE2AF8280B2EAC00AB5EEF /* PowView.swift */; }; 4CEE2AF9280B2EAC00AB5EEF /* PowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CEE2AF8280B2EAC00AB5EEF /* PowView.swift */; };
4CEE2B02280B39E800AB5EEF /* EventActionBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CEE2B01280B39E800AB5EEF /* EventActionBar.swift */; }; 4CEE2B02280B39E800AB5EEF /* EventActionBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CEE2B01280B39E800AB5EEF /* EventActionBar.swift */; };
4FE60CDD295E1C5E00105A1F /* Wallet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FE60CDC295E1C5E00105A1F /* Wallet.swift */; };
6C7DE41F2955169800E66263 /* Vault in Frameworks */ = {isa = PBXBuildFile; productRef = 6C7DE41E2955169800E66263 /* Vault */; }; 6C7DE41F2955169800E66263 /* Vault in Frameworks */ = {isa = PBXBuildFile; productRef = 6C7DE41E2955169800E66263 /* Vault */; };
BA693074295D649800ADDB87 /* UserSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA693073295D649800ADDB87 /* UserSettings.swift */; }; BA693074295D649800ADDB87 /* UserSettingsStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA693073295D649800ADDB87 /* UserSettingsStore.swift */; };
BAB68BED29543FA3007BA466 /* SelectWalletView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BAB68BEC29543FA3007BA466 /* SelectWalletView.swift */; }; BAB68BED29543FA3007BA466 /* SelectWalletView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BAB68BEC29543FA3007BA466 /* SelectWalletView.swift */; };
E990020F2955F837003BBC5A /* EditMetadataView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E990020E2955F837003BBC5A /* EditMetadataView.swift */; }; E990020F2955F837003BBC5A /* EditMetadataView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E990020E2955F837003BBC5A /* EditMetadataView.swift */; };
E9E4ED0B295867B900DD7078 /* ThreadV2View.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9E4ED0A295867B900DD7078 /* ThreadV2View.swift */; }; E9E4ED0B295867B900DD7078 /* ThreadV2View.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9E4ED0A295867B900DD7078 /* ThreadV2View.swift */; };
@ -313,7 +314,8 @@
4CEE2AF6280B2DEA00AB5EEF /* ProfileName.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileName.swift; sourceTree = "<group>"; }; 4CEE2AF6280B2DEA00AB5EEF /* ProfileName.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileName.swift; sourceTree = "<group>"; };
4CEE2AF8280B2EAC00AB5EEF /* PowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PowView.swift; sourceTree = "<group>"; }; 4CEE2AF8280B2EAC00AB5EEF /* PowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PowView.swift; sourceTree = "<group>"; };
4CEE2B01280B39E800AB5EEF /* EventActionBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventActionBar.swift; sourceTree = "<group>"; }; 4CEE2B01280B39E800AB5EEF /* EventActionBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventActionBar.swift; sourceTree = "<group>"; };
BA693073295D649800ADDB87 /* UserSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserSettings.swift; sourceTree = "<group>"; }; 4FE60CDC295E1C5E00105A1F /* Wallet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Wallet.swift; sourceTree = "<group>"; };
BA693073295D649800ADDB87 /* UserSettingsStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserSettingsStore.swift; sourceTree = "<group>"; };
BAB68BEC29543FA3007BA466 /* SelectWalletView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectWalletView.swift; sourceTree = "<group>"; }; BAB68BEC29543FA3007BA466 /* SelectWalletView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectWalletView.swift; sourceTree = "<group>"; };
E990020E2955F837003BBC5A /* EditMetadataView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditMetadataView.swift; sourceTree = "<group>"; }; E990020E2955F837003BBC5A /* EditMetadataView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditMetadataView.swift; sourceTree = "<group>"; };
E9E4ED0A295867B900DD7078 /* ThreadV2View.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThreadV2View.swift; sourceTree = "<group>"; }; E9E4ED0A295867B900DD7078 /* ThreadV2View.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThreadV2View.swift; sourceTree = "<group>"; };
@ -440,7 +442,8 @@
4C64987D286D082C00EAE2B3 /* DirectMessagesModel.swift */, 4C64987D286D082C00EAE2B3 /* DirectMessagesModel.swift */,
4C216F372871EDE300040376 /* DirectMessageModel.swift */, 4C216F372871EDE300040376 /* DirectMessageModel.swift */,
4C99737A28C92A9200E53835 /* ChatroomMetadata.swift */, 4C99737A28C92A9200E53835 /* ChatroomMetadata.swift */,
BA693073295D649800ADDB87 /* UserSettings.swift */, BA693073295D649800ADDB87 /* UserSettingsStore.swift */,
4FE60CDC295E1C5E00105A1F /* Wallet.swift */,
); );
path = Models; path = Models;
sourceTree = "<group>"; sourceTree = "<group>";
@ -802,7 +805,7 @@
4C363A8428233689006E126D /* Parser.swift in Sources */, 4C363A8428233689006E126D /* Parser.swift in Sources */,
4CE4F9E328528C5200C00DD9 /* AddRelayView.swift in Sources */, 4CE4F9E328528C5200C00DD9 /* AddRelayView.swift in Sources */,
4C363A9A28283854006E126D /* Reply.swift in Sources */, 4C363A9A28283854006E126D /* Reply.swift in Sources */,
BA693074295D649800ADDB87 /* UserSettings.swift in Sources */, BA693074295D649800ADDB87 /* UserSettingsStore.swift in Sources */,
4C90BD18283A9EE5008EE7EF /* LoginView.swift in Sources */, 4C90BD18283A9EE5008EE7EF /* LoginView.swift in Sources */,
4C3EA66828FF5F9900C48A62 /* hex.c in Sources */, 4C3EA66828FF5F9900C48A62 /* hex.c in Sources */,
E9E4ED0B295867B900DD7078 /* ThreadV2View.swift in Sources */, E9E4ED0B295867B900DD7078 /* ThreadV2View.swift in Sources */,
@ -872,6 +875,7 @@
4CACA9D5280C31E100D9BBE8 /* ReplyView.swift in Sources */, 4CACA9D5280C31E100D9BBE8 /* ReplyView.swift in Sources */,
4C0A3F97280F8E02000448DE /* ThreadView.swift in Sources */, 4C0A3F97280F8E02000448DE /* ThreadView.swift in Sources */,
4C06670B28FDE64700038D2A /* damus.c in Sources */, 4C06670B28FDE64700038D2A /* damus.c in Sources */,
4FE60CDD295E1C5E00105A1F /* Wallet.swift in Sources */,
4C99737B28C92A9200E53835 /* ChatroomMetadata.swift in Sources */, 4C99737B28C92A9200E53835 /* ChatroomMetadata.swift in Sources */,
4C75EFA427FA577B0006080F /* PostView.swift in Sources */, 4C75EFA427FA577B0006080F /* PostView.swift in Sources */,
4C75EFB528049D790006080F /* Relay.swift in Sources */, 4C75EFB528049D790006080F /* Relay.swift in Sources */,
@ -1045,7 +1049,7 @@
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 7; CURRENT_PROJECT_VERSION = 7;
DEVELOPMENT_ASSET_PATHS = "\"damus/Preview Content\""; DEVELOPMENT_ASSET_PATHS = "\"damus/Preview Content\"";
DEVELOPMENT_TEAM = XK7H4JAB3D; DEVELOPMENT_TEAM = S5U94G8XN2;
ENABLE_PREVIEWS = YES; ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = damus/Info.plist; INFOPLIST_FILE = damus/Info.plist;
@ -1064,7 +1068,7 @@
"$(PROJECT_DIR)", "$(PROJECT_DIR)",
); );
MARKETING_VERSION = 0.1.8; MARKETING_VERSION = 0.1.8;
PRODUCT_BUNDLE_IDENTIFIER = com.jb55.damus2; PRODUCT_BUNDLE_IDENTIFIER = dev.hakes.damus2;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_OBJC_BRIDGING_HEADER = "damus-c/damus-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "damus-c/damus-Bridging-Header.h";
@ -1084,7 +1088,7 @@
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 7; CURRENT_PROJECT_VERSION = 7;
DEVELOPMENT_ASSET_PATHS = "\"damus/Preview Content\""; DEVELOPMENT_ASSET_PATHS = "\"damus/Preview Content\"";
DEVELOPMENT_TEAM = XK7H4JAB3D; DEVELOPMENT_TEAM = S5U94G8XN2;
ENABLE_PREVIEWS = YES; ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = damus/Info.plist; INFOPLIST_FILE = damus/Info.plist;
@ -1103,7 +1107,7 @@
"$(PROJECT_DIR)", "$(PROJECT_DIR)",
); );
MARKETING_VERSION = 0.1.8; MARKETING_VERSION = 0.1.8;
PRODUCT_BUNDLE_IDENTIFIER = com.jb55.damus2; PRODUCT_BUNDLE_IDENTIFIER = dev.hakes.damus2;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_OBJC_BRIDGING_HEADER = "damus-c/damus-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "damus-c/damus-Bridging-Header.h";

8
damus/Components/InvoiceView.swift

@ -20,14 +20,14 @@ struct InvoiceView: View {
var PayButton: some View { var PayButton: some View {
Button { Button {
inv = invoice.string inv = invoice.string
if (user_settings.showwalletselector){ if (user_settings.showWalletSelector){
showingSelectWallet = true showingSelectWallet = true
} else { } else {
let wallet = get_default_wallet(user_settings.defaultwallet.rawValue) let walletModel = user_settings.defaultWallet.model
if let url = URL(string: "\(wallet.link)\(inv)"), UIApplication.shared.canOpenURL(url) { if let url = URL(string: "\(walletModel.link)\(inv)"), UIApplication.shared.canOpenURL(url) {
openURL(url) openURL(url)
} else { } else {
if let url = URL(string: wallet.appStoreLink), UIApplication.shared.canOpenURL(url) { if let url = URL(string: walletModel.appStoreLink), UIApplication.shared.canOpenURL(url) {
openURL(url) openURL(url)
} }
} }

124
damus/Models/UserSettings.swift

@ -1,124 +0,0 @@
//
// UserSettings.swift
// damus
//
// Created by Suhail Saqan on 12/29/22.
//
import Foundation
struct WalletItem : Decodable, Identifiable, Hashable {
var id: Int
var tag: String
var name : String
var link : String
var appStoreLink : String
var image: String
}
// New url prefixes needed to be added to LSApplicationQueriesSchemes
enum Wallet: String, CaseIterable {
case defaultwallet = """
{"id": -1, "tag": "defaultwallet", "name": "Local default", "link": "lightning:", "appStoreLink": "lightning:", "image": ""}
"""
case strike = """
{"id": 0, "tag": "strike", "name": "Strike", "link": "strike:", "appStoreLink": "https://apps.apple.com/us/app/strike-bitcoin-payments/id1488724463", "image": "strike"}
"""
case cashapp = """
{"id": 1, "tag": "cashapp", "name": "Cash App", "link": "squarecash://", "appStoreLink": "https://apps.apple.com/us/app/cash-app/id711923939", "image": "cashapp"}
"""
case muun = """
{"id": 2, "tag": "muun", "name": "Muun", "link": "muun:", "appStoreLink": "https://apps.apple.com/us/app/muun-wallet/id1482037683", "image": "muun"}
"""
case bluewallet = """
{"id": 3, "tag": "bluewallet", "name": "Blue Wallet", "link": "bluewallet:lightning:", "appStoreLink": "https://apps.apple.com/us/app/bluewallet-bitcoin-wallet/id1376878040", "image": "bluewallet"}
"""
case walletofsatoshi = """
{"id": 4, "tag": "walletofsatoshi", "name": "Wallet Of Satoshi", "link": "walletofsatoshi:lightning:", "appStoreLink": "https://apps.apple.com/us/app/wallet-of-satoshi/id1438599608", "image": "walletofsatoshi"}
"""
case zebedee = """
{"id": 5, "tag": "zebedee", "name": "Zebedee", "link": "zebedee:lightning:", "appStoreLink": "https://apps.apple.com/us/app/zebedee-wallet/id1484394401", "image": "zebedee"}
"""
case zeusln = """
{"id": 6, "tag": "zeusln", "name": "Zeus LN", "link": "zeusln:lightning:", "appStoreLink": "https://apps.apple.com/us/app/zeus-ln/id1456038895", "image": "zeusln"}
"""
case lnlink = """
{"id": 7, "tag": "lnlink", "name": "LNLink", "link": "lnlink:lightning:", "appStoreLink": "https://testflight.apple.com/join/aNY4yuuZ", "image": "lnlink"}
"""
case phoenix = """
{"id": 8, "tag": "phoenix", "name": "Phoenix", "link": "phoenix://", "appStoreLink": "https://apps.apple.com/us/app/phoenix-wallet/id1544097028", "image": "phoenix"}
"""
}
class UserSettingsStore: ObservableObject {
@Published var defaultwallet: Wallet {
didSet {
UserDefaults.standard.set(defaultwallet.rawValue, forKey: "defaultwallet")
}
}
@Published var showwalletselector: Bool {
didSet {
UserDefaults.standard.set(showwalletselector, forKey: "showwalletselector")
}
}
init() {
self.defaultwallet = (UserDefaults.standard.object(forKey: "defaultwallet") == nil ? Wallet.defaultwallet : Wallet(rawValue: UserDefaults.standard.object(forKey: "defaultwallet") as! String)) ?? Wallet.defaultwallet
self.showwalletselector = UserDefaults.standard.object(forKey: "showwalletselector") == nil ? true : UserDefaults.standard.object(forKey: "showwalletselector") as! Bool
}
}
func get_wallet_list() -> [WalletItem] {
let values: [String] = Wallet.allCases.map { $0.rawValue }
var walletList: [WalletItem] = []
for value in values {
let data = value.data(using: .utf8)!
do {
let wallet = try JSONDecoder().decode(WalletItem.self, from: data)
walletList.append(wallet)
} catch {
return []
}
}
return walletList
}
func get_wallet_tag(_ tag: String) -> Wallet {
switch tag {
case "defaultwallet":
return Wallet.defaultwallet
case "strike":
return Wallet.strike
case "cashapp":
return Wallet.cashapp
case "muun":
return Wallet.muun
case "bluewallet":
return Wallet.bluewallet
case "walletofsatoshi":
return Wallet.walletofsatoshi
case "zebedee":
return Wallet.zebedee
case "zeusln":
return Wallet.zeusln
case "lnlink":
return Wallet.lnlink
case "phoenix":
return Wallet.phoenix
default:
return Wallet.defaultwallet
}
}
func get_default_wallet(_ us: String) -> WalletItem {
let data = us.data(using: .utf8)!
do {
return try JSONDecoder().decode(WalletItem.self, from: data)
} catch {
return get_wallet_list()[0]
}
}

81
damus/Models/UserSettingsStore.swift

@ -0,0 +1,81 @@
//
// UserSettingsStore.swift
// damus
//
// Created by Suhail Saqan on 12/29/22.
//
import Foundation
class UserSettingsStore: ObservableObject {
@Published var defaultWallet: Wallet {
didSet {
UserDefaults.standard.set(defaultWallet.rawValue, forKey: "systemdefaultwallet")
}
}
@Published var showWalletSelector: Bool {
didSet {
UserDefaults.standard.set(showWalletSelector, forKey: "showwalletselector")
}
}
init() {
self.defaultWallet = UserDefaults.standard.object(forKey: "defaultwallet") as? Wallet ?? .systemdefaultwallet
self.showWalletSelector = UserDefaults.standard.object(forKey: "showwalletselector") as? Bool ?? true
}
}
//
//func get_wallet_list() -> [WalletItem] {
// let values: [String] = Wallet.allCases.map { $0.rawValue }
//
// var walletList: [WalletItem] = []
//
// for value in values {
// let data = value.data(using: .utf8)!
// do {
// let wallet = try JSONDecoder().decode(WalletItem.self, from: data)
// walletList.append(wallet)
// } catch {
// return []
// }
// }
// return walletList
//}
//func get_wallet_tag(_ tag: String) -> Wallet {
// switch tag {
// case "defaultwallet":
// return Wallet.defaultwallet
// case "strike":
// return Wallet.strike
// case "cashapp":
// return Wallet.cashapp
// case "muun":
// return Wallet.muun
// case "bluewallet":
// return Wallet.bluewallet
// case "walletofsatoshi":
// return Wallet.walletofsatoshi
// case "zebedee":
// return Wallet.zebedee
// case "zeusln":
// return Wallet.zeusln
// case "lnlink":
// return Wallet.lnlink
// case "phoenix":
// return Wallet.phoenix
// default:
// return Wallet.defaultwallet
// }
//}
//func get_default_wallet(_ us: String) -> WalletItem {
// let data = us.data(using: .utf8)!
// do {
// return try JSONDecoder().decode(WalletItem.self, from: data)
// } catch {
// return get_wallet_list()[0]
// }
//
//}

71
damus/Models/Wallet.swift

@ -0,0 +1,71 @@
//
// Wallet.swift
// damus
//
// Created by Benjamin Hakes on 12/29/22.
//
import Foundation
// New url prefixes needed to be added to LSApplicationQueriesSchemes
enum Wallet: String, CaseIterable {
struct Model: Identifiable, Hashable {
var id: String { self.tag }
var index: Int
var tag: String
var displayName : String
var link : String
var appStoreLink : String
var image: String
}
case systemdefaultwallet
case strike
case cashapp
case muun
case bluewallet
case walletofsatoshi
case zebedee
case zeusln
case lnlink
case phoenix
var model: Model {
switch self {
case .systemdefaultwallet:
return .init(index: -1, tag: "systemdefaultwallet", displayName: "Local default",
link: "lightning:", appStoreLink: "lightning:", image: "")
case .strike:
return .init(index: 0, tag: "strike", displayName: "Strike", link: "strike:",
appStoreLink: "https://apps.apple.com/us/app/strike-bitcoin-payments/id1488724463", image: "strike")
case .cashapp:
return .init(index: 1, tag: "cashapp", displayName: "Cash App", link: "squarecash://",
appStoreLink: "https://apps.apple.com/us/app/cash-app/id711923939", image: "cashapp")
case .muun:
return .init(index: 2, tag: "muun", displayName: "Muun", link: "muun:", appStoreLink: "https://apps.apple.com/us/app/muun-wallet/id1482037683", image: "muun")
case .bluewallet:
return .init(index: 3, tag: "bluewallet", displayName: "Blue Wallet", link: "bluewallet:lightning:",
appStoreLink: "https://apps.apple.com/us/app/bluewallet-bitcoin-wallet/id1376878040", image: "bluewallet")
case .walletofsatoshi:
return .init(index: 4, tag: "walletofsatoshi", displayName: "Wallet Of Satoshi", link: "walletofsatoshi:lightning:",
appStoreLink: "https://apps.apple.com/us/app/wallet-of-satoshi/id1438599608", image: "walletofsatoshi")
case .zebedee:
return .init(index: 5, tag: "zebedee", displayName: "Zebedee", link: "zebedee:lightning:",
appStoreLink: "https://apps.apple.com/us/app/zebedee-wallet/id1484394401", image: "zebedee")
case .zeusln:
return .init(index: 6, tag: "zeusln", displayName: "Zeus LN", link: "zeusln:lightning:",
appStoreLink: "https://apps.apple.com/us/app/zeus-ln/id1456038895", image: "zeusln")
case .lnlink:
return .init(index: 7, tag: "lnlink", displayName: "LNLink", link: "lnlink:lightning:",
appStoreLink: "https://testflight.apple.com/join/aNY4yuuZ", image: "lnlink")
case .phoenix:
return .init(index: 8, tag: "phoenix", displayName: "Phoenix", link: "phoenix://",
appStoreLink: "https://apps.apple.com/us/app/phoenix-wallet/id1544097028", image: "phoenix")
}
}
static var allModels: [Model] {
return Self.allCases.map { $0.model }
}
}

17
damus/Views/ConfigView.swift

@ -19,7 +19,7 @@ struct ConfigView: View {
@State var pubkey_copied: Bool = false @State var pubkey_copied: Bool = false
@EnvironmentObject var user_settings: UserSettingsStore @EnvironmentObject var user_settings: UserSettingsStore
let walletItems: [WalletItem] = get_wallet_list() @State var walletModels: [Wallet.Model] = Wallet.allModels
let generator = UIImpactFeedbackGenerator(style: .light) let generator = UIImpactFeedbackGenerator(style: .light)
@ -82,14 +82,13 @@ struct ConfigView: View {
} }
Section("Wallet Selector") { Section("Wallet Selector") {
Toggle("Show wallet selector", isOn: $user_settings.showwalletselector).toggleStyle(.switch) Toggle("Show wallet selector", isOn: $user_settings.showWalletSelector).toggleStyle(.switch)
if walletItems != [] { Picker(selection: $user_settings.defaultWallet, label: Text("Select default wallet"), content: {
Picker(selection: $user_settings.defaultwallet, label: Text("Select default wallet"), content: { List($walletModels) { $wallet in
ForEach(walletItems, id: \.self) { wallet in Text(wallet.displayName)
Text(wallet.name).tag(get_wallet_tag(wallet.tag)) .tag(wallet.tag)
} }
}) })
}
} }
Section("Reset") { Section("Reset") {

3
damus/Views/ProfileView.swift

@ -150,7 +150,8 @@ struct ProfileView: View {
} }
} }
}.sheet(isPresented: $showingSelectWallet, onDismiss: {showingSelectWallet = false}) { }.sheet(isPresented: $showingSelectWallet, onDismiss: {showingSelectWallet = false}) {
SelectWalletView(showingSelectWallet: $showingSelectWallet, invoice: $inv).environmentObject(user_settings) SelectWalletView(showingSelectWallet: $showingSelectWallet, invoice: $inv)
.environmentObject(user_settings)
} }
} }

64
damus/Views/SelectWalletView.swift

@ -14,8 +14,8 @@ struct SelectWalletView: View {
@State var invoice_copied: Bool = false @State var invoice_copied: Bool = false
@EnvironmentObject var user_settings: UserSettingsStore @EnvironmentObject var user_settings: UserSettingsStore
@State var allWalletModels: [Wallet.Model] = Wallet.allModels
let generator = UIImpactFeedbackGenerator(style: .light) let generator = UIImpactFeedbackGenerator(style: .light)
let walletItems: [WalletItem] = get_wallet_list()
var body: some View { var body: some View {
NavigationView { NavigationView {
@ -35,42 +35,42 @@ struct SelectWalletView: View {
generator.impactOccurred() generator.impactOccurred()
} }
} }
Section("Select a lightning wallet"){ Section("Select a lightning wallet"){
List{ List{
Button() { Button() {
let wallet = get_default_wallet(user_settings.defaultwallet.rawValue) let walletModel = user_settings.defaultWallet.model
if let url = URL(string: "\(wallet.link)\(invoice)"), UIApplication.shared.canOpenURL(url) { if let url = URL(string: "\(walletModel.link)\(invoice)"), UIApplication.shared.canOpenURL(url) {
openURL(url)
} else {
if let url = URL(string: walletModel.appStoreLink), UIApplication.shared.canOpenURL(url) {
openURL(url) openURL(url)
} else {
if let url = URL(string: wallet.appStoreLink), UIApplication.shared.canOpenURL(url) {
openURL(url)
}
}
} label: {
HStack {
Text("Default Wallet").font(.body).foregroundColor(.blue)
} }
}.buttonStyle(.plain) }
ForEach(walletItems, id: \.self) { wallet in } label: {
if (wallet.id >= 0){ HStack {
Button() { Text("Default Wallet").font(.body).foregroundColor(.blue)
if let url = URL(string: "\(wallet.link)\(invoice)"), UIApplication.shared.canOpenURL(url) { }
}.buttonStyle(.plain)
List($allWalletModels) { $wallet in
if wallet.index >= 0 {
Button() {
if let url = URL(string: "\(wallet.link)\(invoice)"), UIApplication.shared.canOpenURL(url) {
openURL(url)
} else {
if let url = URL(string: wallet.appStoreLink), UIApplication.shared.canOpenURL(url) {
openURL(url) openURL(url)
} else {
if let url = URL(string: wallet.appStoreLink), UIApplication.shared.canOpenURL(url) {
openURL(url)
}
} }
} label: { }
HStack { } label: {
Image(wallet.image).resizable().frame(width: 32.0, height: 32.0,alignment: .center).cornerRadius(5) HStack {
Text(wallet.name).font(.body) Image(wallet.image).resizable().frame(width: 32.0, height: 32.0,alignment: .center).cornerRadius(5)
} Text(wallet.displayName).font(.body)
}.buttonStyle(.plain) }
} }.buttonStyle(.plain)
} }
}.padding(.vertical, 2.5) }
} }.padding(.vertical, 2.5)
}
}.navigationBarTitle(Text("Pay the lightning invoice"), displayMode: .inline).navigationBarItems(trailing: Button(action: { }.navigationBarTitle(Text("Pay the lightning invoice"), displayMode: .inline).navigationBarItems(trailing: Button(action: {
self.showingSelectWallet = false self.showingSelectWallet = false
}) { }) {

Loading…
Cancel
Save