mirror of
https://github.com/RetroShare/RetroShare.git
synced 2024-10-01 02:35:48 -04:00
Support token system in Qml app to reduce polling
Main window keep track centrally of all valid tokens, a Timer coupled with it's own instance of LibresapiLocalClient refresh periodically valid tokens, registerToken and isTokenValid are offered to child components to operate without polling Main window coreStateCheckTimer is stopped after login
This commit is contained in:
parent
286783c72e
commit
620e5225f2
@ -28,6 +28,33 @@ ApplicationWindow
|
|||||||
width: 400
|
width: 400
|
||||||
height: 400
|
height: 400
|
||||||
|
|
||||||
|
property var tokens: ({})
|
||||||
|
function registerToken(token, callback)
|
||||||
|
{
|
||||||
|
if (Array.isArray(tokens[token])) tokens[token].push(callback)
|
||||||
|
else tokens[token] = [callback]
|
||||||
|
}
|
||||||
|
function tokenExpire(token)
|
||||||
|
{
|
||||||
|
if(Array.isArray(tokens[token]))
|
||||||
|
{
|
||||||
|
var arrLen = tokens[token].length
|
||||||
|
for(var i=0; i<arrLen; ++i)
|
||||||
|
{
|
||||||
|
var tokCallback = tokens[token][i]
|
||||||
|
if (typeof tokCallback == 'function')
|
||||||
|
{
|
||||||
|
console.log("event token", token, tokCallback)
|
||||||
|
tokCallback()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
delete tokens[token]
|
||||||
|
}
|
||||||
|
function isTokenValid(token) { return Array.isArray(tokens[token]) }
|
||||||
|
|
||||||
|
|
||||||
header: ToolBar
|
header: ToolBar
|
||||||
{
|
{
|
||||||
id: toolBar
|
id: toolBar
|
||||||
@ -74,15 +101,14 @@ ApplicationWindow
|
|||||||
{
|
{
|
||||||
text: qsTr("Trusted Nodes")
|
text: qsTr("Trusted Nodes")
|
||||||
//iconSource: "qrc:/qml/icons/document-share.png"
|
//iconSource: "qrc:/qml/icons/document-share.png"
|
||||||
onTriggered:
|
onTriggered: stackView.push("qrc:/qml/TrustedNodesView.qml")
|
||||||
stackView.push("qrc:/qml/TrustedNodesView.qml")
|
|
||||||
}
|
}
|
||||||
MenuItem
|
MenuItem
|
||||||
{
|
{
|
||||||
text: qsTr("Search Contacts")
|
text: qsTr("Search Contacts")
|
||||||
onTriggered:
|
onTriggered:
|
||||||
stackView.push(
|
stackView.push("qrc:/qml/Contacts.qml",
|
||||||
"qrc:/qml/Contacts.qml", {'searching': true} )
|
{'searching': true} )
|
||||||
}
|
}
|
||||||
MenuItem
|
MenuItem
|
||||||
{
|
{
|
||||||
@ -104,37 +130,6 @@ ApplicationWindow
|
|||||||
event.accepted = true;
|
event.accepted = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function checkCoreStatus()
|
|
||||||
{
|
|
||||||
function runStateCallback(par)
|
|
||||||
{
|
|
||||||
var jsonReponse = JSON.parse(par.response)
|
|
||||||
var runState = jsonReponse.data.runstate
|
|
||||||
if(typeof(runState) === 'string') stackView.state = runState
|
|
||||||
else
|
|
||||||
{
|
|
||||||
stackView.state = "core_down"
|
|
||||||
console.log("runStateCallback(...) core is down")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var ret = rsApi.request("/control/runstate/", "", runStateCallback)
|
|
||||||
if ( ret < 1 )
|
|
||||||
{
|
|
||||||
console.log("checkCoreStatus() core is down")
|
|
||||||
stackView.state = "core_down"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Timer
|
|
||||||
{
|
|
||||||
id: refreshTimer
|
|
||||||
interval: 800
|
|
||||||
repeat: true
|
|
||||||
triggeredOnStart: true
|
|
||||||
onTriggered: if(stackView.visible) stackView.checkCoreStatus()
|
|
||||||
Component.onCompleted: start()
|
|
||||||
}
|
|
||||||
|
|
||||||
state: "core_down"
|
state: "core_down"
|
||||||
states: [
|
states: [
|
||||||
State
|
State
|
||||||
@ -164,7 +159,8 @@ ApplicationWindow
|
|||||||
{
|
{
|
||||||
script:
|
script:
|
||||||
{
|
{
|
||||||
console.log("StateChangeScript waiting_account_select")
|
console.log("StateChangeScript running_ok")
|
||||||
|
coreStateCheckTimer.stop()
|
||||||
stackView.clear()
|
stackView.clear()
|
||||||
stackView.push("qrc:/qml/Contacts.qml")
|
stackView.push("qrc:/qml/Contacts.qml")
|
||||||
}
|
}
|
||||||
@ -179,11 +175,79 @@ ApplicationWindow
|
|||||||
|
|
||||||
initialItem: Rectangle
|
initialItem: Rectangle
|
||||||
{
|
{
|
||||||
anchors.fill: parent
|
|
||||||
color: "green"
|
color: "green"
|
||||||
border.color: "black"
|
Text
|
||||||
|
{
|
||||||
|
text: "Connecting to core..."
|
||||||
|
anchors.centerIn: parent
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Text { text: "Connecting to core..." }
|
LibresapiLocalClient
|
||||||
|
{
|
||||||
|
id: refreshTokensApi
|
||||||
|
|
||||||
|
onResponseReceived:
|
||||||
|
{
|
||||||
|
var jsonData = JSON.parse(msg).data
|
||||||
|
var arrayLength = jsonData.length;
|
||||||
|
for (var i = 0; i < arrayLength; i++)
|
||||||
|
mainWindow.tokenExpire(jsonData[i])
|
||||||
|
}
|
||||||
|
|
||||||
|
Component.onCompleted:
|
||||||
|
{
|
||||||
|
if(QT_DEBUG) debug = false
|
||||||
|
|
||||||
|
openConnection(apiSocketPath)
|
||||||
|
refreshTokensTimer.start()
|
||||||
|
}
|
||||||
|
|
||||||
|
function refreshTokens()
|
||||||
|
{
|
||||||
|
var ret = request("/statetokenservice/*",
|
||||||
|
'['+Object.keys(mainWindow.tokens)+']')
|
||||||
|
if(ret < 1) stackView.state = "core_down"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Timer
|
||||||
|
{
|
||||||
|
id: refreshTokensTimer
|
||||||
|
interval: 1500
|
||||||
|
repeat: true
|
||||||
|
triggeredOnStart: true
|
||||||
|
onTriggered: refreshTokensApi.refreshTokens()
|
||||||
|
}
|
||||||
|
|
||||||
|
Timer
|
||||||
|
{
|
||||||
|
id: coreStateCheckTimer
|
||||||
|
interval: 1000
|
||||||
|
repeat: true
|
||||||
|
triggeredOnStart: true
|
||||||
|
onTriggered:
|
||||||
|
{
|
||||||
|
var ret = rsApi.request("/control/runstate/", "", runStateCallback)
|
||||||
|
if ( ret < 1 )
|
||||||
|
{
|
||||||
|
console.log("checkCoreStatus() core is down")
|
||||||
|
stackView.state = "core_down"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Component.onCompleted: start()
|
||||||
|
|
||||||
|
function runStateCallback(par)
|
||||||
|
{
|
||||||
|
var jsonReponse = JSON.parse(par.response)
|
||||||
|
var runState = jsonReponse.data.runstate
|
||||||
|
if(typeof(runState) === 'string') stackView.state = runState
|
||||||
|
else
|
||||||
|
{
|
||||||
|
stackView.state = "core_down"
|
||||||
|
console.log("runStateCallback(...) core is down")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user