forked from Public/monero-gui
SimpleMode: automatic public nodes discovering and switching
This commit is contained in:
@@ -72,7 +72,6 @@ Rectangle {
|
||||
wizardController.tmpWalletFilename = '';
|
||||
wizardController.walletRestoreMode = 'seed'
|
||||
wizardController.walletOptionsSubaddressLookahead = '';
|
||||
wizardController.remoteNodes = {};
|
||||
disconnect();
|
||||
|
||||
if (typeof wizardController.m_wallet !== 'undefined'){
|
||||
@@ -107,7 +106,6 @@ Rectangle {
|
||||
property string walletOptionsDeviceName: ''
|
||||
property bool walletOptionsDeviceIsRestore: false
|
||||
property string tmpWalletFilename: ''
|
||||
property var remoteNodes: ''
|
||||
|
||||
// language settings, updated via sidebar
|
||||
property string language_locale: 'en_US'
|
||||
@@ -560,87 +558,6 @@ Rectangle {
|
||||
passwordDialog.open(appWindow.usefulName(appWindow.walletPath()));
|
||||
}
|
||||
|
||||
function fetchRemoteNodes(cb, cb_err){
|
||||
// Fetch remote nodes, parse JSON, store in result `wizardController.remoteNodes`, call setAutNode(), call callback
|
||||
var url = appWindow.remoteNodeService + 'api/nodes.json';
|
||||
console.log("HTTP request: " + url);
|
||||
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.timeout = 3500;
|
||||
|
||||
// Unfortunately we cannot spoof User-Agent since it is hardcoded in Qt
|
||||
//xhr.setRequestHeader("User-Agent", "-");
|
||||
|
||||
xhr.onreadystatechange = function() {
|
||||
var msg;
|
||||
if (xhr.readyState != 4) {
|
||||
return;
|
||||
} else if(xhr.status != 200){
|
||||
msg = "Error fetching remote nodes; status code was not 200";
|
||||
console.log(msg);
|
||||
if(typeof cb_err === 'function')
|
||||
return cb_err(msg);
|
||||
} else {
|
||||
var body = xhr.responseText;
|
||||
if(typeof body === 'undefined' || body === ''){
|
||||
msg = "Error fetching remote nodes; response body was empty";
|
||||
console.log(msg);
|
||||
if(typeof cb_err === 'function')
|
||||
return cb_err(msg);
|
||||
}
|
||||
|
||||
var data = JSON.parse(body);
|
||||
wizardController.remoteNodes = data;
|
||||
console.log("node list updated");
|
||||
setAutoNode();
|
||||
return cb();
|
||||
}
|
||||
}
|
||||
|
||||
xhr.open('GET', url, true);
|
||||
xhr.send(null);
|
||||
}
|
||||
|
||||
function setAutoNode(){
|
||||
var node;
|
||||
var nodes;
|
||||
var nodeObject = wizardController.remoteNodes;
|
||||
var region = persistentSettings.remoteNodeRegion;
|
||||
|
||||
if(typeof region !== 'undefined' && region !== ""){
|
||||
if(nodeObject.hasOwnProperty(region) && nodeObject[region].length > 0){
|
||||
nodes = nodeObject[region];
|
||||
} else {
|
||||
console.log("No suitable nodes found for region " + region + ". Defaulting to random node.");
|
||||
}
|
||||
}
|
||||
|
||||
if(typeof nodes === 'undefined'){
|
||||
nodes = [];
|
||||
Object.keys(nodeObject).forEach(function(obj, i){
|
||||
nodes = nodes.concat(nodeObject[obj]);
|
||||
});
|
||||
}
|
||||
|
||||
// 18089 has precedence
|
||||
var filteredNodes = Utils.filterNodes(nodes, "18089");
|
||||
if(filteredNodes.length > 0){
|
||||
node = Utils.randomChoice(filteredNodes);
|
||||
console.log('Choosing remote node \''+ node +'\' from a list of ' + filteredNodes.length);
|
||||
} else if(nodes.length > 0){
|
||||
node = Utils.randomChoice(nodes);
|
||||
console.log('Choosing remote node \''+ node +'\' from a list of ' + nodes.length);
|
||||
} else {
|
||||
console.log("No suitable nodes found.")
|
||||
return ''
|
||||
}
|
||||
|
||||
if(appWindow.walletMode === 0)
|
||||
persistentSettings.remoteNodeAddress = node;
|
||||
else if(appWindow.walletMode === 1)
|
||||
persistentSettings.bootstrapNodeAddress = node;
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
//
|
||||
}
|
||||
|
||||
@@ -74,12 +74,7 @@ Rectangle {
|
||||
wizardController.walletOptionsPassword = passwordFields.password;
|
||||
|
||||
if(appWindow.walletMode === 0 || appWindow.walletMode === 1){
|
||||
wizardController.fetchRemoteNodes(function(){
|
||||
wizardStateView.state = "wizardCreateWallet4";
|
||||
}, function(){
|
||||
appWindow.showStatusMessage(qsTr("Failed to fetch remote nodes from third-party server."), 5);
|
||||
wizardStateView.state = "wizardCreateWallet4";
|
||||
});
|
||||
wizardStateView.state = "wizardCreateWallet4";
|
||||
} else {
|
||||
wizardStateView.state = "wizardCreateWallet3";
|
||||
}
|
||||
|
||||
@@ -97,49 +97,6 @@ Rectangle {
|
||||
text: qsTr("Remain aware of these limitations. <b>Users who prioritize privacy and decentralization must use a full node instead</b>.") + translationManager.emptyString
|
||||
}
|
||||
|
||||
MoneroComponents.TextPlain {
|
||||
text: qsTr("For enhanced node performance you may specify your region:") + translationManager.emptyString
|
||||
wrapMode: Text.Wrap
|
||||
Layout.topMargin: 8
|
||||
Layout.fillWidth: true
|
||||
|
||||
font.family: MoneroComponents.Style.fontRegular.name
|
||||
font.pixelSize: 16
|
||||
color: MoneroComponents.Style.defaultFontColor
|
||||
}
|
||||
|
||||
GridLayout {
|
||||
columns: 3
|
||||
columnSpacing: 20
|
||||
|
||||
ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
spacing: 0
|
||||
|
||||
MoneroComponents.StandardDropdown {
|
||||
id: regionDropdown
|
||||
Layout.fillWidth: true
|
||||
dataModel: regionModel
|
||||
currentIndex: 0
|
||||
|
||||
onChanged: {
|
||||
var region = regionModel.get(currentIndex).region;
|
||||
persistentSettings.remoteNodeRegion = region;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Item {
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
Item {
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
z: parent.z + 1
|
||||
}
|
||||
|
||||
MoneroComponents.CheckBox {
|
||||
id: understoodCheckbox
|
||||
Layout.topMargin: 20
|
||||
@@ -184,22 +141,4 @@ Rectangle {
|
||||
wizardModeBootstrapWarning.understood = false;
|
||||
understoodCheckbox.checked = false;
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
var region = persistentSettings.remoteNodeRegion;
|
||||
|
||||
if(region){
|
||||
for(var i = 0; i !== regionDropdown.dataModel.count; i++){
|
||||
var item = regionDropdown.dataModel.get(i);
|
||||
if(item['region'] === region){
|
||||
regionDropdown.currentIndex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
regionDropdown.currentIndex = 0;
|
||||
}
|
||||
|
||||
regionDropdown.update();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -100,49 +100,6 @@ Rectangle {
|
||||
text: qsTr("Remain aware of these limitations. <b>Users who prioritize privacy and decentralization must use a full node instead</b>.") + translationManager.emptyString
|
||||
}
|
||||
|
||||
MoneroComponents.TextPlain {
|
||||
text: qsTr("For enhanced node performance you may specify your region:") + translationManager.emptyString
|
||||
wrapMode: Text.Wrap
|
||||
Layout.topMargin: 8
|
||||
Layout.fillWidth: true
|
||||
|
||||
font.family: MoneroComponents.Style.fontRegular.name
|
||||
font.pixelSize: 16
|
||||
color: MoneroComponents.Style.defaultFontColor
|
||||
}
|
||||
|
||||
GridLayout {
|
||||
columns: 3
|
||||
columnSpacing: 20
|
||||
|
||||
ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
spacing: 0
|
||||
|
||||
MoneroComponents.StandardDropdown {
|
||||
id: regionDropdown
|
||||
Layout.fillWidth: true
|
||||
dataModel: regionModel
|
||||
currentIndex: 0
|
||||
|
||||
onChanged: {
|
||||
var region = regionModel.get(currentIndex).region;
|
||||
persistentSettings.remoteNodeRegion = region;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Item {
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
Item {
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
z: parent.z + 1
|
||||
}
|
||||
|
||||
MoneroComponents.CheckBox {
|
||||
id: understoodCheckbox
|
||||
Layout.topMargin: 20
|
||||
@@ -187,22 +144,4 @@ Rectangle {
|
||||
wizardModeRemoteNodeWarning.understood = false;
|
||||
understoodCheckbox.checked = false;
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
var region = persistentSettings.remoteNodeRegion;
|
||||
|
||||
if(region){
|
||||
for(var i = 0; i !== regionDropdown.dataModel.count; i++){
|
||||
var item = regionDropdown.dataModel.get(i);
|
||||
if(item['region'] === region){
|
||||
regionDropdown.currentIndex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
regionDropdown.currentIndex = 0;
|
||||
}
|
||||
|
||||
regionDropdown.update();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -282,16 +282,7 @@ Rectangle {
|
||||
onClicked: {
|
||||
persistentSettings.nettype = parseInt(networktype)
|
||||
|
||||
if(appWindow.walletMode === 0 || appWindow.walletMode === 1){
|
||||
wizardController.fetchRemoteNodes(function(){
|
||||
wizardController.openWalletFile(item.filePath);
|
||||
}, function(){
|
||||
appWindow.showStatusMessage(qsTr("Failed to fetch remote nodes from third-party server."), 5);
|
||||
wizardController.openWalletFile(item.filePath);
|
||||
});
|
||||
} else {
|
||||
wizardController.openWalletFile(item.filePath);
|
||||
}
|
||||
wizardController.openWalletFile(item.filePath);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -73,12 +73,7 @@ Rectangle {
|
||||
wizardController.walletOptionsPassword = passwordFields.password;
|
||||
|
||||
if(appWindow.walletMode === 0 || appWindow.walletMode === 1){
|
||||
wizardController.fetchRemoteNodes(function(){
|
||||
wizardStateView.state = "wizardRestoreWallet4";
|
||||
}, function(){
|
||||
appWindow.showStatusMessage(qsTr("Failed to fetch remote nodes from third-party server."), 5);
|
||||
wizardStateView.state = "wizardRestoreWallet4";
|
||||
});
|
||||
wizardStateView.state = "wizardRestoreWallet4";
|
||||
} else {
|
||||
wizardStateView.state = "wizardRestoreWallet3";
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user