Skip to content

Commit 9ec8d9c

Browse files
committed
feat(qr): support scanning walletconnect codes
1 parent 83aa0ed commit 9ec8d9c

File tree

4 files changed

+37
-10
lines changed

4 files changed

+37
-10
lines changed

ui/StatusQ/src/StatusQ/Components/StatusQrCodeCapture.qml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ Item {
5555
forwardVideoSink: videoOutput.videoSink
5656
scanning: true
5757

58-
captureRect: contentZoneHighlight
58+
captureRect: captureRectangle
5959

6060
onCapturedChanged: (tag) => {
6161
d.lastTag = tag
@@ -74,7 +74,7 @@ Item {
7474
fillMode: VideoOutput.PreserveAspectCrop
7575
}
7676
Rectangle {
77-
id: captureRect
77+
id: captureRectangle
7878
width: root.captureRectWidth
7979
height: root.captureRectHeight
8080
anchors.centerIn: parent

ui/app/mainui/AppMain.qml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -952,6 +952,17 @@ Item {
952952
}
953953
}
954954
onTransferOwnershipRequested: (tokenId, senderAddress) => popupRequestsHandler.sendModalHandler.transferOwnership(tokenId, senderAddress)
955+
onWcUriScanned: uri => {
956+
if (!dAppsServiceLoader.active || !dAppsServiceLoader.item) {
957+
return
958+
}
959+
function pairingHandler() {
960+
dAppsServiceLoader.item.dappsModule.pair(uri)
961+
dAppsServiceLoader.item.pairingValidated.disconnect(pairingHandler)
962+
}
963+
dAppsServiceLoader.item.pairingValidated.connect(pairingHandler)
964+
dAppsServiceLoader.item.validatePairingUri(uri)
965+
}
955966
}
956967

957968
HandlersManager {

ui/app/mainui/Popups.qml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import AppLayouts.Wallet.popups.buy
2424
import AppLayouts.Wallet.popups
2525
import AppLayouts.Communities.stores
2626
import AppLayouts.Profile.helpers
27+
import AppLayouts.Wallet.services.dapps
2728

2829
import AppLayouts.Wallet.stores as WalletStores
2930
import AppLayouts.Chat.stores as ChatStores
@@ -75,6 +76,7 @@ QtObject {
7576
signal saveDomainToUnfurledWhitelist(string domain)
7677
signal ownershipDeclined(string communityId, string communityName)
7778
signal transferOwnershipRequested(string tokenId, string senderAddress)
79+
signal wcUriScanned(string uri)
7880

7981
property var activePopupComponents: []
8082

@@ -1513,6 +1515,8 @@ QtObject {
15131515
return
15141516
}
15151517
Global.requestOpenLink(tag)
1518+
} else if (tagType === QRCodeScannerDialog.TagType.WCUri) {
1519+
root.wcUriScanned(tag)
15161520
}
15171521
}
15181522
}

ui/imports/shared/popups/QRCodeScannerDialog.qml

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import StatusQ.Components
99
import StatusQ.Controls.Validators
1010
import StatusQ.Popups.Dialog
1111

12+
import AppLayouts.Wallet.services.dapps
13+
1214
import utils
1315

1416
StatusDialog {
@@ -32,13 +34,15 @@ StatusDialog {
3234

3335
enum TagType {
3436
Link,
35-
Address
37+
Address,
38+
WCUri
3639
}
3740

3841
QtObject {
3942
id: d
4043

4144
property string validTag: ""
45+
property int validTagType
4246
}
4347

4448
contentItem: QRCodeScanner {
@@ -49,11 +53,7 @@ StatusDialog {
4953
running: !!d.validTag
5054
repeat: false
5155
onTriggered: {
52-
if (Utils.isURL(d.validTag)) {
53-
root.tagFound(QRCodeScannerDialog.TagType.Link, d.validTag)
54-
} else if (Utils.isValidAddress(d.validTag)) {
55-
root.tagFound(QRCodeScannerDialog.TagType.Address, d.validTag)
56-
}
56+
root.tagFound(d.validTagType, d.validTag)
5757
root.close()
5858
}
5959
}
@@ -63,8 +63,20 @@ StatusDialog {
6363
name: "isValidQR"
6464
errorMessage: qsTr("We cannot read that QR code.")
6565
validate: function (tag) {
66-
// We accept URLs and addresses
67-
return Utils.isURL(tag) || Utils.isValidAddress(tag)
66+
// We accept URLs, addresses and WalletConnect URIs
67+
if (Utils.isURL(tag)) {
68+
d.validTagType = QRCodeScannerDialog.TagType.Link
69+
return true
70+
}
71+
if (Utils.isValidAddress(tag)) {
72+
d.validTagType = QRCodeScannerDialog.TagType.Address
73+
return true
74+
}
75+
if (DAppsHelpers.validURI(tag)) {
76+
d.validTagType = QRCodeScannerDialog.TagType.WCUri
77+
return true
78+
}
79+
return false
6880
}
6981
}
7082
]

0 commit comments

Comments
 (0)