mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-01-15 01:17:16 -05:00
Qml app support contact link import/export
This commit is contained in:
parent
5ee517b64f
commit
5c1ad36d2b
@ -17,6 +17,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import QtQuick 2.7
|
import QtQuick 2.7
|
||||||
|
import QtQuick.Controls 2.0
|
||||||
|
import "URI.js" as UriJs
|
||||||
|
|
||||||
Item
|
Item
|
||||||
{
|
{
|
||||||
@ -111,19 +113,59 @@ Item
|
|||||||
anchors.leftMargin: 5
|
anchors.leftMargin: 5
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Row
|
||||||
|
{
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.rightMargin: 10
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
height: parent.height - 10
|
||||||
|
|
||||||
|
Image
|
||||||
|
{
|
||||||
|
source: "qrc:/icons/document-share.png"
|
||||||
|
|
||||||
|
height: parent.height
|
||||||
|
width: height
|
||||||
|
|
||||||
|
MouseArea
|
||||||
|
{
|
||||||
|
anchors.fill: parent
|
||||||
|
onClicked:
|
||||||
|
{
|
||||||
|
rsApi.request(
|
||||||
|
"/identity/export_key",
|
||||||
|
JSON.stringify({ gxs_id: model.gxs_id }),
|
||||||
|
function(par)
|
||||||
|
{
|
||||||
|
var jD = JSON.parse(par.response).data
|
||||||
|
clipboardWrap.text = "retroshare://" +
|
||||||
|
"identity?gxsid=" +
|
||||||
|
model.gxs_id +
|
||||||
|
"&name=" +
|
||||||
|
UriJs.URI.encode(model.name) +
|
||||||
|
"&groupdata=" +
|
||||||
|
UriJs.URI.encode(jD.radix)
|
||||||
|
clipboardWrap.selectAll()
|
||||||
|
clipboardWrap.copy()
|
||||||
|
linkCopiedPopup.itemName = model.name
|
||||||
|
linkCopiedPopup.visible = true
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Rectangle
|
Rectangle
|
||||||
{
|
{
|
||||||
visible: model.unread_count > 0
|
visible: model.unread_count > 0
|
||||||
|
|
||||||
anchors.right: parent.right
|
|
||||||
anchors.rightMargin: 10
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
color: "cornflowerblue"
|
color: "cornflowerblue"
|
||||||
antialiasing: true
|
antialiasing: true
|
||||||
border.color: "blue"
|
border.color: "blue"
|
||||||
border.width: 1
|
border.width: 1
|
||||||
|
height: parent.height
|
||||||
radius: height/2
|
radius: height/2
|
||||||
height: parent.height - 10
|
|
||||||
width: height
|
width: height
|
||||||
|
|
||||||
Text
|
Text
|
||||||
@ -136,3 +178,4 @@ Item
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
BIN
retroshare-qml-app/src/icons/document-share.png
Normal file
BIN
retroshare-qml-app/src/icons/document-share.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.5 KiB |
@ -38,6 +38,7 @@ ApplicationWindow
|
|||||||
Component.onCompleted:
|
Component.onCompleted:
|
||||||
{
|
{
|
||||||
addUriHandler("/certificate", certificateLinkHandler)
|
addUriHandler("/certificate", certificateLinkHandler)
|
||||||
|
addUriHandler("/identity", contactLinkHandler)
|
||||||
|
|
||||||
var argc = mainArgs.length
|
var argc = mainArgs.length
|
||||||
for(var i=0; i<argc; ++i)
|
for(var i=0; i<argc; ++i)
|
||||||
@ -120,8 +121,6 @@ ApplicationWindow
|
|||||||
handleIntentUri(clipboardWrap.text)
|
handleIntentUri(clipboardWrap.text)
|
||||||
}
|
}
|
||||||
enabled: mainWindow.coreReady
|
enabled: mainWindow.coreReady
|
||||||
|
|
||||||
TextField { id: clipboardWrap; visible: false }
|
|
||||||
}
|
}
|
||||||
MenuItem
|
MenuItem
|
||||||
{
|
{
|
||||||
@ -285,17 +284,11 @@ ApplicationWindow
|
|||||||
var uQuery = uri.search(true)
|
var uQuery = uri.search(true)
|
||||||
if(uQuery.radix)
|
if(uQuery.radix)
|
||||||
{
|
{
|
||||||
console.log("/peers/examine_cert/")
|
|
||||||
console.log("uriStr", uriStr)
|
|
||||||
|
|
||||||
var certStr = UriJs.URI.decode(uQuery.radix)
|
var certStr = UriJs.URI.decode(uQuery.radix)
|
||||||
|
|
||||||
// Workaround https://github.com/RetroShare/RetroShare/issues/772
|
// Workaround https://github.com/RetroShare/RetroShare/issues/772
|
||||||
certStr = certStr.replace(/ /g, "+")
|
certStr = certStr.replace(/ /g, "+")
|
||||||
|
|
||||||
console.log("certStr", certStr)
|
|
||||||
console.log("JSON.stringify(..)",
|
|
||||||
JSON.stringify({cert_string: certStr}, null, 1))
|
|
||||||
rsApi.request(
|
rsApi.request(
|
||||||
"/peers/examine_cert/",
|
"/peers/examine_cert/",
|
||||||
JSON.stringify({cert_string: certStr}),
|
JSON.stringify({cert_string: certStr}),
|
||||||
@ -320,4 +313,120 @@ ApplicationWindow
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function contactLinkHandler(uriStr)
|
||||||
|
{
|
||||||
|
console.log("contactLinkHandler(uriStr)", coreReady)
|
||||||
|
|
||||||
|
if(!coreReady)
|
||||||
|
{
|
||||||
|
// Save cert uri for later processing as we need core to examine it
|
||||||
|
pendingUriRegister.push(uriStr)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var uri = new UriJs.URI(uriStr)
|
||||||
|
var uQuery = uri.search(true)
|
||||||
|
if(uQuery.groupdata)
|
||||||
|
{
|
||||||
|
contactImportPopup.expectedName = uQuery.name
|
||||||
|
contactImportPopup.expectedGxsId = uQuery.gxsid
|
||||||
|
|
||||||
|
rsApi.request(
|
||||||
|
"/identity/import_key",
|
||||||
|
JSON.stringify({radix: uQuery.groupdata}),
|
||||||
|
function(par)
|
||||||
|
{
|
||||||
|
var jD = JSON.parse(par.response).data
|
||||||
|
contactImportPopup.realGxsId = jD.gxs_id
|
||||||
|
contactImportPopup.open()
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Popup
|
||||||
|
{
|
||||||
|
id: contactImportPopup
|
||||||
|
property string expectedName
|
||||||
|
property string expectedGxsId
|
||||||
|
property string realGxsId
|
||||||
|
|
||||||
|
function idMatch() { return expectedGxsId === realGxsId }
|
||||||
|
|
||||||
|
visible: false
|
||||||
|
onVisibleChanged: if(visible && idMatch()) contactImportTimer.start()
|
||||||
|
|
||||||
|
x: parent.x + parent.width/2 - width/2
|
||||||
|
y: parent.y + parent.height/2 - height/2
|
||||||
|
|
||||||
|
Column
|
||||||
|
{
|
||||||
|
spacing: 3
|
||||||
|
anchors.centerIn: parent
|
||||||
|
|
||||||
|
Text
|
||||||
|
{
|
||||||
|
text: qsTr("%1 key imported").arg(
|
||||||
|
contactImportPopup.expectedName)
|
||||||
|
horizontalAlignment: parent.horizontalCenter
|
||||||
|
}
|
||||||
|
|
||||||
|
Text
|
||||||
|
{
|
||||||
|
text: qsTr("Link malformed!")
|
||||||
|
|
||||||
|
color: "red"
|
||||||
|
visible: contactImportPopup.visible &&
|
||||||
|
!contactImportPopup.idMatch()
|
||||||
|
horizontalAlignment: parent.horizontalCenter
|
||||||
|
}
|
||||||
|
|
||||||
|
Text
|
||||||
|
{
|
||||||
|
text:
|
||||||
|
qsTr("Expected id and real one differs:") +
|
||||||
|
"<br/><pre>" + contactImportPopup.expectedGxsId +
|
||||||
|
"<br/>" + contactImportPopup.realGxsId + "</pre>"
|
||||||
|
|
||||||
|
visible: contactImportPopup.visible &&
|
||||||
|
!contactImportPopup.idMatch()
|
||||||
|
horizontalAlignment: parent.horizontalCenter
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Timer
|
||||||
|
{
|
||||||
|
id: contactImportTimer
|
||||||
|
interval: 1500
|
||||||
|
onTriggered: contactImportPopup.close()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Popup
|
||||||
|
{
|
||||||
|
id: linkCopiedPopup
|
||||||
|
property string itemName
|
||||||
|
|
||||||
|
visible: false
|
||||||
|
onVisibleChanged: if(visible) contactLinkTimer.start()
|
||||||
|
|
||||||
|
x: parent.x + parent.width/2 - width/2
|
||||||
|
y: parent.y + parent.height/2 - height/2
|
||||||
|
|
||||||
|
Text
|
||||||
|
{
|
||||||
|
text:
|
||||||
|
qsTr("%1 link copied to clipboard").arg(
|
||||||
|
linkCopiedPopup.itemName)
|
||||||
|
}
|
||||||
|
|
||||||
|
Timer
|
||||||
|
{
|
||||||
|
id: contactLinkTimer
|
||||||
|
interval: 1500
|
||||||
|
onTriggered: linkCopiedPopup.close()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TextField { id: clipboardWrap; visible: false }
|
||||||
}
|
}
|
||||||
|
@ -23,5 +23,6 @@
|
|||||||
<file>TokensManager.qml</file>
|
<file>TokensManager.qml</file>
|
||||||
<file>qmldir</file>
|
<file>qmldir</file>
|
||||||
<file>TrustedNodeDetails.qml</file>
|
<file>TrustedNodeDetails.qml</file>
|
||||||
|
<file>icons/document-share.png</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
Loading…
Reference in New Issue
Block a user