Merge pull request #9757 from accumulator/qml_nostr_servers_config
qml: add nostr relay config in NetworkOverview and add relay edit dialog
This commit is contained in:
BIN
electrum/gui/icons/nostr.png
Normal file
BIN
electrum/gui/icons/nostr.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 136 KiB |
@@ -217,6 +217,22 @@ Pane {
|
|||||||
text: Daemon.currentWallet.lightningNumPeers
|
text: Daemon.currentWallet.lightningNumPeers
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Heading {
|
||||||
|
Layout.columnSpan: 2
|
||||||
|
text: qsTr('Nostr')
|
||||||
|
}
|
||||||
|
|
||||||
|
Label {
|
||||||
|
text: qsTr('Relays:')
|
||||||
|
color: Material.accentColor
|
||||||
|
}
|
||||||
|
|
||||||
|
Label {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
text: Config.nostrRelays.replace(/,/g, "\n")
|
||||||
|
wrapMode: Text.Wrap
|
||||||
|
}
|
||||||
|
|
||||||
Heading {
|
Heading {
|
||||||
Layout.columnSpan: 2
|
Layout.columnSpan: 2
|
||||||
text: qsTr('Proxy')
|
text: qsTr('Proxy')
|
||||||
@@ -286,6 +302,16 @@ Pane {
|
|||||||
dialog.open()
|
dialog.open()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
FlatButton {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.preferredWidth: 1
|
||||||
|
text: qsTr('Nostr Settings');
|
||||||
|
icon.source: '../../icons/nostr.png'
|
||||||
|
onClicked: {
|
||||||
|
var dialog = nostrConfig.createObject(root)
|
||||||
|
dialog.open()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -302,4 +328,11 @@ Pane {
|
|||||||
onClosed: destroy()
|
onClosed: destroy()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Component {
|
||||||
|
id: nostrConfig
|
||||||
|
NostrConfigDialog {
|
||||||
|
onClosed: destroy()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
118
electrum/gui/qml/components/NostrConfigDialog.qml
Normal file
118
electrum/gui/qml/components/NostrConfigDialog.qml
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
import QtQuick
|
||||||
|
import QtQuick.Layouts
|
||||||
|
import QtQuick.Controls
|
||||||
|
import QtQuick.Controls.Material
|
||||||
|
|
||||||
|
import org.electrum 1.0
|
||||||
|
|
||||||
|
import "controls"
|
||||||
|
|
||||||
|
ElDialog {
|
||||||
|
id: rootItem
|
||||||
|
|
||||||
|
title: qsTr('Nostr relays')
|
||||||
|
iconSource: Qt.resolvedUrl('../../icons/nostr.png')
|
||||||
|
|
||||||
|
width: parent.width
|
||||||
|
height: parent.height
|
||||||
|
|
||||||
|
padding: 0
|
||||||
|
|
||||||
|
property bool valid: true
|
||||||
|
|
||||||
|
function clean_array(text) {
|
||||||
|
var relays = []
|
||||||
|
const fragments = text.split("\n")
|
||||||
|
fragments.forEach(function(fragment) {
|
||||||
|
fragment = fragment.trim()
|
||||||
|
if (fragment != "" && !relays.includes(fragment))
|
||||||
|
relays.push(fragment)
|
||||||
|
})
|
||||||
|
return relays
|
||||||
|
}
|
||||||
|
|
||||||
|
function verify(text) {
|
||||||
|
const re=/^wss?:\/\/([a-zA-Z0-9\-]+\.)+[a-zA-Z]+(\/.*)?$/
|
||||||
|
const relays = clean_array(text)
|
||||||
|
var isvalid = relays.every(function(relay) {
|
||||||
|
return re.test(relay)
|
||||||
|
})
|
||||||
|
return isvalid
|
||||||
|
}
|
||||||
|
|
||||||
|
ColumnLayout {
|
||||||
|
width: parent.width
|
||||||
|
height: parent.height
|
||||||
|
spacing: 0
|
||||||
|
|
||||||
|
ColumnLayout {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.fillHeight: true
|
||||||
|
Layout.leftMargin: constants.paddingLarge
|
||||||
|
Layout.rightMargin: constants.paddingLarge
|
||||||
|
|
||||||
|
RowLayout {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
TextHighlightPane {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Label {
|
||||||
|
text: qsTr('Enter the list of Nostr relays')
|
||||||
|
width: parent.width
|
||||||
|
wrapMode: Text.Wrap
|
||||||
|
}
|
||||||
|
}
|
||||||
|
HelpButton {
|
||||||
|
heading: Config.shortDescFor('NOSTR_RELAYS')
|
||||||
|
helptext: Config.longDescFor('NOSTR_RELAYS')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
RowLayout {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
ElTextArea {
|
||||||
|
id: relays_ta
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.fillHeight: true
|
||||||
|
font.family: FixedFont
|
||||||
|
wrapMode: TextEdit.WrapAnywhere
|
||||||
|
onTextChanged: valid = verify(text)
|
||||||
|
inputMethodHints: Qt.ImhSensitiveData | Qt.ImhNoPredictiveText | Qt.ImhNoAutoUppercase
|
||||||
|
background: PaneInsetBackground {
|
||||||
|
baseColor: constants.darkerDialogBackground
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ColumnLayout {
|
||||||
|
Layout.alignment: Qt.AlignTop
|
||||||
|
ToolButton {
|
||||||
|
icon.source: '../../icons/paste.png'
|
||||||
|
icon.height: constants.iconSizeMedium
|
||||||
|
icon.width: constants.iconSizeMedium
|
||||||
|
onClicked: {
|
||||||
|
if (verify(AppController.clipboardToText())) {
|
||||||
|
if (!relays_ta.text.endsWith('\n'))
|
||||||
|
relays_ta.text = relays_ta.text + '\n'
|
||||||
|
relays_ta.text = relays_ta.text + AppController.clipboardToText()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FlatButton {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
text: qsTr('Ok')
|
||||||
|
enabled: valid
|
||||||
|
icon.source: '../../icons/confirmed.png'
|
||||||
|
onClicked: {
|
||||||
|
Config.nostrRelays = clean_array(relays_ta.text).join(",")
|
||||||
|
rootItem.close()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Component.onCompleted: {
|
||||||
|
relays_ta.text = Config.nostrRelays.replace(/,/g, "\n")
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -294,6 +294,17 @@ class QEConfig(AuthMixin, QObject):
|
|||||||
self.config.LIGHTNING_PAYMENT_FEE_MAX_MILLIONTHS = lightningPaymentFeeMaxMillionths
|
self.config.LIGHTNING_PAYMENT_FEE_MAX_MILLIONTHS = lightningPaymentFeeMaxMillionths
|
||||||
self.lightningPaymentFeeMaxMillionthsChanged.emit()
|
self.lightningPaymentFeeMaxMillionthsChanged.emit()
|
||||||
|
|
||||||
|
nostrRelaysChanged = pyqtSignal()
|
||||||
|
@pyqtProperty(str, notify=nostrRelaysChanged)
|
||||||
|
def nostrRelays(self):
|
||||||
|
return self.config.NOSTR_RELAYS
|
||||||
|
|
||||||
|
@nostrRelays.setter
|
||||||
|
def nostrRelays(self, nostr_relays):
|
||||||
|
if nostr_relays != self.config.NOSTR_RELAYS:
|
||||||
|
self.config.NOSTR_RELAYS = nostr_relays
|
||||||
|
self.nostrRelaysChanged.emit()
|
||||||
|
|
||||||
swapServerNPubChanged = pyqtSignal()
|
swapServerNPubChanged = pyqtSignal()
|
||||||
@pyqtProperty(str, notify=swapServerNPubChanged)
|
@pyqtProperty(str, notify=swapServerNPubChanged)
|
||||||
def swapServerNPub(self):
|
def swapServerNPub(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user