95 lines
2.6 KiB
QML
95 lines
2.6 KiB
QML
import QtQuick 2.15
|
|
|
|
import AppLayouts.Wallet.services.dapps 1.0
|
|
import StatusQ.Core.Utils 0.1
|
|
|
|
import shared.stores 1.0
|
|
import utils 1.0
|
|
|
|
DAppsModel {
|
|
id: root
|
|
|
|
required property WalletConnectSDKBase bcSDK
|
|
|
|
readonly property int connectorId: Constants.StatusConnect
|
|
readonly property bool enabled: bcSDK.enabled
|
|
|
|
signal connected(string pairingId, string topic, string dAppUrl)
|
|
signal disconnected(string topic, string dAppUrl)
|
|
|
|
Connections {
|
|
target: root.bcSDK
|
|
enabled: root.enabled
|
|
|
|
function onSessionDelete(topic, err) {
|
|
const dapp = root.getByTopic(topic)
|
|
if (!dapp) {
|
|
console.warn("DApp not found for topic - cannot delete session", topic)
|
|
return
|
|
}
|
|
|
|
root.remove(topic)
|
|
root.disconnected(topic, dapp.url)
|
|
}
|
|
|
|
function onApproveSessionResult(proposalId, session, error) {
|
|
if (error) {
|
|
console.warn("Failed to approve session", error)
|
|
return
|
|
}
|
|
|
|
const dapp = d.sessionToDApp(session)
|
|
root.append(dapp)
|
|
root.connected(proposalId, dapp.topic, dapp.url)
|
|
}
|
|
}
|
|
|
|
QtObject {
|
|
id: d
|
|
function sessionToDApp(session) {
|
|
const dapp = session.peer.metadata
|
|
if (!!dapp.icons && dapp.icons.length > 0) {
|
|
dapp.iconUrl = dapp.icons[0]
|
|
} else {
|
|
dapp.iconUrl = ""
|
|
}
|
|
const accounts = DAppsHelpers.getAccountsInSession(session)
|
|
dapp.accountAddresses = accounts.map(account => ({address: account}))
|
|
dapp.topic = session.topic
|
|
dapp.rawSessions = [session]
|
|
dapp.connectorId = root.connectorId
|
|
return dapp
|
|
}
|
|
function getPersistedDapps() {
|
|
if (!root.enabled) {
|
|
return []
|
|
}
|
|
let dapps = []
|
|
root.bcSDK.getActiveSessions((allSessions) => {
|
|
if (!allSessions) {
|
|
return
|
|
}
|
|
|
|
for (const sessionID in allSessions) {
|
|
const session = allSessions[sessionID]
|
|
const dapp = sessionToDApp(session)
|
|
dapps.push(dapp)
|
|
}
|
|
})
|
|
return dapps
|
|
}
|
|
|
|
function resetModel() {
|
|
root.clear()
|
|
const dapps = d.getPersistedDapps()
|
|
for (let i = 0; i < dapps.length; i++) {
|
|
root.append(dapps[i])
|
|
}
|
|
}
|
|
}
|
|
|
|
Component.onCompleted: {
|
|
d.resetModel()
|
|
}
|
|
}
|