Skip to content

Commit c67f220

Browse files
committed
fix: route pubky keys from send scanner
1 parent 6781954 commit c67f220

3 files changed

Lines changed: 42 additions & 4 deletions

File tree

Bitkit/Managers/ScannerManager.swift

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ class ScannerManager: ObservableObject {
3838
}
3939

4040
func handleScan(_ uri: String, context: ScannerContext) async {
41+
let uri = uri.trimmingCharacters(in: .whitespacesAndNewlines)
42+
guard !uri.isEmpty else { return }
43+
4144
Haptics.play(.scanSuccess)
4245

4346
switch context {
@@ -90,7 +93,7 @@ class ScannerManager: ObservableObject {
9093
}
9194
}
9295

93-
private func handlePubkyRouteIfNeeded(_ input: String) -> Bool {
96+
private func handlePubkyRouteIfNeeded(_ input: String, hiding sheetId: SheetID? = .scanner, reason: String = "Scanner routed pubky key") -> Bool {
9497
guard let navigation,
9598
let route = resolvePastedPubkyRoute(
9699
input: input,
@@ -101,7 +104,9 @@ class ScannerManager: ObservableObject {
101104
return false
102105
}
103106

104-
sheets?.hideSheetIfActive(.scanner, reason: "Scanner routed pubky key")
107+
if let sheetId {
108+
sheets?.hideSheetIfActive(sheetId, reason: reason)
109+
}
105110
navigation.navigate(route)
106111
return true
107112
}
@@ -115,6 +120,11 @@ class ScannerManager: ObservableObject {
115120
Haptics.play(.scanSuccess)
116121

117122
do {
123+
if handlePubkyRouteIfNeeded(uri, hiding: .send, reason: "Send scanner routed pubky key") {
124+
completion(nil)
125+
return
126+
}
127+
118128
try await app.handleScannedData(uri)
119129

120130
let route = PaymentNavigationHelper.appropriateSendRoute(
@@ -177,7 +187,7 @@ class ScannerManager: ObservableObject {
177187
return
178188
}
179189

180-
await handleScan(uri, context: context)
190+
await handleScan(uri.trimmingCharacters(in: .whitespacesAndNewlines), context: context)
181191
}
182192

183193
func handleImageSelection(_ item: PhotosPickerItem?, context: ScannerContext, completion: @escaping (SendRoute?) -> Void = { _ in }) async {

Bitkit/Views/Wallets/Send/SendOptionsView.swift

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,13 @@ import SwiftUI
33

44
struct SendOptionsView: View {
55
@EnvironmentObject var app: AppViewModel
6+
@EnvironmentObject var contactsManager: ContactsManager
67
@EnvironmentObject var currency: CurrencyViewModel
8+
@EnvironmentObject var navigation: NavigationViewModel
9+
@EnvironmentObject var pubkyProfile: PubkyProfileManager
710
@EnvironmentObject var scanner: ScannerManager
811
@EnvironmentObject var settings: SettingsViewModel
12+
@EnvironmentObject var sheets: SheetViewModel
913
@EnvironmentObject var wallet: WalletViewModel
1014

1115
@Binding var navigationPath: [SendRoute]
@@ -71,8 +75,12 @@ struct SendOptionsView: View {
7175
wallet.syncState()
7276
scanner.configure(
7377
app: app,
78+
contactsManager: contactsManager,
7479
currency: currency,
75-
settings: settings
80+
settings: settings,
81+
navigation: navigation,
82+
pubkyProfile: pubkyProfile,
83+
sheets: sheets
7684
)
7785
}
7886
}
@@ -110,6 +118,13 @@ struct SendOptionsView: View {
110118
NavigationStack {
111119
SendOptionsView(navigationPath: .constant([]))
112120
.environmentObject(AppViewModel())
121+
.environmentObject(ContactsManager())
122+
.environmentObject(CurrencyViewModel())
123+
.environmentObject(NavigationViewModel())
124+
.environmentObject(PubkyProfileManager())
125+
.environmentObject(ScannerManager())
126+
.environmentObject(SettingsViewModel.shared)
127+
.environmentObject(SheetViewModel())
113128
.environmentObject(WalletViewModel())
114129
}
115130
.presentationDetents([.height(UIScreen.screenHeight - 120)])

BitkitTests/ContactsManagerTests.swift

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,19 @@ final class ContactsManagerTests: XCTestCase {
281281
)
282282
}
283283

284+
func testResolvePastedPubkyRouteTrimsClipboardInput() {
285+
let contactKey = "pubky3rsduhcxpw74snwyct86m38c63j3pq8x4ycqikxg64roik8yw5xg"
286+
287+
XCTAssertEqual(
288+
resolvePastedPubkyRoute(
289+
input: " \(contactKey)\n",
290+
ownPublicKey: nil,
291+
contacts: [makeContact(publicKey: contactKey)]
292+
),
293+
.contactDetail(publicKey: contactKey)
294+
)
295+
}
296+
284297
func testResolvePastedPubkyRouteReturnsAddContactForUnknownKey() {
285298
let contactKey = "pubky3rsduhcxpw74snwyct86m38c63j3pq8x4ycqikxg64roik8yw5xg"
286299

0 commit comments

Comments
 (0)