chore(dapps) move responsibility of tracking sessions from WC SDK
Updates: #14615
This commit is contained in:
parent
0cf41a60cb
commit
ea2b6b2ed7
|
@ -0,0 +1,79 @@
|
||||||
|
import QtQuick 2.15
|
||||||
|
|
||||||
|
import utils 1.0
|
||||||
|
|
||||||
|
QtObject {
|
||||||
|
id: root
|
||||||
|
|
||||||
|
required property WalletConnectSDK sdk
|
||||||
|
|
||||||
|
readonly property alias pairingsModel: d.pairingsModel
|
||||||
|
readonly property alias sessionsModel: d.sessionsModel
|
||||||
|
|
||||||
|
function updatePairings() {
|
||||||
|
d.resetPairingsModel()
|
||||||
|
}
|
||||||
|
function updateSessions() {
|
||||||
|
d.resetSessionsModel()
|
||||||
|
}
|
||||||
|
|
||||||
|
readonly property QtObject _d: QtObject {
|
||||||
|
id: d
|
||||||
|
|
||||||
|
property ListModel pairingsModel: ListModel {
|
||||||
|
id: pairings
|
||||||
|
}
|
||||||
|
property ListModel sessionsModel: ListModel {
|
||||||
|
id: sessions
|
||||||
|
}
|
||||||
|
|
||||||
|
function resetPairingsModel(entryCallback)
|
||||||
|
{
|
||||||
|
pairings.clear();
|
||||||
|
|
||||||
|
// We have to postpone `getPairings` call, cause otherwise:
|
||||||
|
// - the last made pairing will always have `active` prop set to false
|
||||||
|
// - expiration date won't be the correct one, but one used in session proposal
|
||||||
|
// - the list of pairings will display succesfully made pairing as inactive
|
||||||
|
Backpressure.debounce(this, 250, () => {
|
||||||
|
sdk.getPairings((pairList) => {
|
||||||
|
for (let i = 0; i < pairList.length; i++) {
|
||||||
|
pairings.append(pairList[i]);
|
||||||
|
|
||||||
|
if (entryCallback) {
|
||||||
|
entryCallback(pairList[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
}
|
||||||
|
|
||||||
|
function resetSessionsModel() {
|
||||||
|
sessions.clear();
|
||||||
|
|
||||||
|
Backpressure.debounce(this, 250, () => {
|
||||||
|
sdk.getActiveSessions((sessionList) => {
|
||||||
|
for (var topic of Object.keys(sessionList)) {
|
||||||
|
sessions.append(sessionList[topic]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
}
|
||||||
|
|
||||||
|
function getPairingTopicFromPairingUrl(url)
|
||||||
|
{
|
||||||
|
if (!url.startsWith("wc:"))
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
const atIndex = url.indexOf("@");
|
||||||
|
if (atIndex < 0)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return url.slice(3, atIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -8,15 +8,11 @@ import QtWebChannel 1.15
|
||||||
import StatusQ.Core.Utils 0.1 as SQUtils
|
import StatusQ.Core.Utils 0.1 as SQUtils
|
||||||
import StatusQ.Components 0.1
|
import StatusQ.Components 0.1
|
||||||
|
|
||||||
import utils 1.0
|
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
required property string projectId
|
required property string projectId
|
||||||
readonly property alias sdkReady: d.sdkReady
|
readonly property alias sdkReady: d.sdkReady
|
||||||
readonly property alias pairingsModel: d.pairingsModel
|
|
||||||
readonly property alias sessionsModel: d.sessionsModel
|
|
||||||
readonly property alias webEngineLoader: loader
|
readonly property alias webEngineLoader: loader
|
||||||
|
|
||||||
property alias active: loader.active
|
property alias active: loader.active
|
||||||
|
@ -108,67 +104,7 @@ Item {
|
||||||
id: d
|
id: d
|
||||||
|
|
||||||
property bool sdkReady: false
|
property bool sdkReady: false
|
||||||
property ListModel pairingsModel: pairings
|
|
||||||
property ListModel sessionsModel: sessions
|
|
||||||
|
|
||||||
property WebEngineView engine: loader.instance
|
property WebEngineView engine: loader.instance
|
||||||
|
|
||||||
onSdkReadyChanged: {
|
|
||||||
if (sdkReady)
|
|
||||||
{
|
|
||||||
d.resetPairingsModel()
|
|
||||||
d.resetSessionsModel()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function resetPairingsModel(entryCallback)
|
|
||||||
{
|
|
||||||
pairings.clear();
|
|
||||||
|
|
||||||
// We have to postpone `getPairings` call, cause otherwise:
|
|
||||||
// - the last made pairing will always have `active` prop set to false
|
|
||||||
// - expiration date won't be the correct one, but one used in session proposal
|
|
||||||
// - the list of pairings will display succesfully made pairing as inactive
|
|
||||||
Backpressure.debounce(this, 250, () => {
|
|
||||||
wcCalls.getPairings((pairList) => {
|
|
||||||
for (let i = 0; i < pairList.length; i++) {
|
|
||||||
pairings.append(pairList[i]);
|
|
||||||
|
|
||||||
if (entryCallback) {
|
|
||||||
entryCallback(pairList[i])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
})();
|
|
||||||
}
|
|
||||||
|
|
||||||
function resetSessionsModel() {
|
|
||||||
sessions.clear();
|
|
||||||
|
|
||||||
Backpressure.debounce(this, 250, () => {
|
|
||||||
wcCalls.getActiveSessions((sessionList) => {
|
|
||||||
for (var topic of Object.keys(sessionList)) {
|
|
||||||
sessions.append(sessionList[topic]);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
})();
|
|
||||||
}
|
|
||||||
|
|
||||||
function getPairingTopicFromPairingUrl(url)
|
|
||||||
{
|
|
||||||
if (!url.startsWith("wc:"))
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
const atIndex = url.indexOf("@");
|
|
||||||
if (atIndex < 0)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return url.slice(3, atIndex);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QtObject {
|
QtObject {
|
||||||
|
@ -445,13 +381,11 @@ Item {
|
||||||
|
|
||||||
function onDisconnectSessionResponse(topic, error) {
|
function onDisconnectSessionResponse(topic, error) {
|
||||||
console.debug(`WC WalletConnectSDK.onDisconnectSessionResponse; topic: ${topic}, error: ${error}`)
|
console.debug(`WC WalletConnectSDK.onDisconnectSessionResponse; topic: ${topic}, error: ${error}`)
|
||||||
d.resetSessionsModel()
|
|
||||||
root.sessionDelete(topic, error)
|
root.sessionDelete(topic, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
function onDisconnectPairingResponse(topic, error) {
|
function onDisconnectPairingResponse(topic, error) {
|
||||||
console.debug(`WC WalletConnectSDK.onDisconnectPairingResponse; topic: ${topic}, error: ${error}`)
|
console.debug(`WC WalletConnectSDK.onDisconnectPairingResponse; topic: ${topic}, error: ${error}`)
|
||||||
d.resetPairingsModel()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function onBuildApprovedNamespacesResponse(approvedNamespaces, error) {
|
function onBuildApprovedNamespacesResponse(approvedNamespaces, error) {
|
||||||
|
@ -461,30 +395,22 @@ Item {
|
||||||
|
|
||||||
function onApproveSessionResponse(session, error) {
|
function onApproveSessionResponse(session, error) {
|
||||||
console.debug(`WC WalletConnectSDK.onApproveSessionResponse; sessionTopic: ${JSON.stringify(session, null, 2)}, error: ${error}`)
|
console.debug(`WC WalletConnectSDK.onApproveSessionResponse; sessionTopic: ${JSON.stringify(session, null, 2)}, error: ${error}`)
|
||||||
d.resetPairingsModel()
|
|
||||||
d.resetSessionsModel()
|
|
||||||
root.approveSessionResult(session, error)
|
root.approveSessionResult(session, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
function onRejectSessionResponse(error) {
|
function onRejectSessionResponse(error) {
|
||||||
console.debug(`WC WalletConnectSDK.onRejectSessionResponse; error: ${error}`)
|
console.debug(`WC WalletConnectSDK.onRejectSessionResponse; error: ${error}`)
|
||||||
root.rejectSessionResult(error)
|
root.rejectSessionResult(error)
|
||||||
d.resetPairingsModel()
|
|
||||||
d.resetSessionsModel()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function onRespondSessionRequestResponse(error) {
|
function onRespondSessionRequestResponse(error) {
|
||||||
console.debug(`WC WalletConnectSDK.onRespondSessionRequestResponse; error: ${error}`)
|
console.debug(`WC WalletConnectSDK.onRespondSessionRequestResponse; error: ${error}`)
|
||||||
root.sessionRequestUserAnswerResult(true, error)
|
root.sessionRequestUserAnswerResult(true, error)
|
||||||
d.resetPairingsModel()
|
|
||||||
d.resetSessionsModel()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function onRejectSessionRequestResponse(error) {
|
function onRejectSessionRequestResponse(error) {
|
||||||
console.debug(`WC WalletConnectSDK.onRejectSessionRequestResponse; error: ${error}`)
|
console.debug(`WC WalletConnectSDK.onRejectSessionRequestResponse; error: ${error}`)
|
||||||
root.sessionRequestUserAnswerResult(false, error)
|
root.sessionRequestUserAnswerResult(false, error)
|
||||||
d.resetPairingsModel()
|
|
||||||
d.resetSessionsModel()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function onSessionProposal(details) {
|
function onSessionProposal(details) {
|
||||||
|
@ -507,8 +433,6 @@ Item {
|
||||||
function onSessionDelete(details) {
|
function onSessionDelete(details) {
|
||||||
console.debug(`WC WalletConnectSDK.onSessionDelete; details: ${JSON.stringify(details, null, 2)}`)
|
console.debug(`WC WalletConnectSDK.onSessionDelete; details: ${JSON.stringify(details, null, 2)}`)
|
||||||
root.sessionDelete(details.topic, "")
|
root.sessionDelete(details.topic, "")
|
||||||
d.resetPairingsModel()
|
|
||||||
d.resetSessionsModel()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function onSessionExpire(details) {
|
function onSessionExpire(details) {
|
||||||
|
@ -553,14 +477,6 @@ Item {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ListModel {
|
|
||||||
id: pairings
|
|
||||||
}
|
|
||||||
|
|
||||||
ListModel {
|
|
||||||
id: sessions
|
|
||||||
}
|
|
||||||
|
|
||||||
WebEngineLoader {
|
WebEngineLoader {
|
||||||
id: loader
|
id: loader
|
||||||
|
|
||||||
|
|
|
@ -103,5 +103,9 @@ QtObject {
|
||||||
readonly property QtObject _d: QtObject {
|
readonly property QtObject _d: QtObject {
|
||||||
property var currentSessionProposal: null
|
property var currentSessionProposal: null
|
||||||
property var acceptedSessionProposal: null
|
property var acceptedSessionProposal: null
|
||||||
|
|
||||||
|
readonly property DAppsListProvider dappsProvider: DAppsListProvider {
|
||||||
|
sdk: root.wcSDK
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,4 +1,5 @@
|
||||||
WalletConnectSDK 1.0 WalletConnectSDK.qml
|
WalletConnectSDK 1.0 WalletConnectSDK.qml
|
||||||
WalletConnectService 1.0 WalletConnectService.qml
|
WalletConnectService 1.0 WalletConnectService.qml
|
||||||
|
DAppsListProvider 1.0 DAppsListProvider.qml
|
||||||
|
|
||||||
Helpers 1.0 helpers.js
|
Helpers 1.0 helpers.js
|
Loading…
Reference in New Issue