feat(network): add “Reset known servers” action in Qt and QML

This commit is contained in:
2026-02-16 17:57:36 +01:00
committed by davide3011
parent 9ec48c831b
commit 44cf125962
4 changed files with 75 additions and 0 deletions

View File

@@ -297,6 +297,35 @@ Pane {
}
}
FlatButton {
Layout.fillWidth: true
Layout.preferredWidth: 1
text: qsTr('Reset known servers');
icon.source: '../../icons/network.png'
onClicked: {
var dialog = app.messageDialog.createObject(app, {
title: qsTr('Are you sure?'),
text: qsTr('This will remove cached recently connected servers.'),
yesno: true
})
dialog.accepted.connect(function() {
var removed = Network.clearKnownServers()
Network.serverListModel.initModel()
var msg = removed < 0
? qsTr('Failed to reset known servers.')
: removed > 0
? qsTr('%1 known servers were removed.').arg(removed)
: qsTr('No cached known servers were found.')
var infoDialog = app.messageDialog.createObject(app, {
title: qsTr('Reset known servers'),
text: msg
})
infoDialog.open()
})
dialog.open()
}
}
FlatButton {
Layout.fillWidth: true
Layout.preferredWidth: 1

View File

@@ -314,3 +314,11 @@ class QENetwork(QObject, QtEventListener):
except Exception:
self._logger.exception("failed to clear pinned server certificates")
return -1
@pyqtSlot(result=int)
def clearKnownServers(self):
try:
return self.network.run_from_another_thread(self.network.clear_recent_servers())
except Exception:
self._logger.exception("failed to clear known servers")
return -1

View File

@@ -446,8 +446,11 @@ class ServerWidget(QWidget, QtEventListener):
self.clear_certs_button = QPushButton(_('Reset SSL certificates'))
self.clear_certs_button.clicked.connect(self.clear_pinned_server_certs)
self.clear_known_servers_button = QPushButton(_('Reset known servers'))
self.clear_known_servers_button.clicked.connect(self.clear_known_servers)
buttons = QHBoxLayout()
buttons.addStretch(1)
buttons.addWidget(self.clear_known_servers_button)
buttons.addWidget(self.clear_certs_button)
self.layout().addLayout(buttons)
@@ -615,6 +618,31 @@ class ServerWidget(QWidget, QtEventListener):
msg = _('No cached certificate files were found.')
QMessageBox.information(self, _('Reset SSL certificates'), msg)
def clear_known_servers(self):
result = QMessageBox.question(
self,
_('Reset known servers'),
_('This will remove cached recently connected servers.')
+ '\n\n'
+ _('Do you want to continue?'),
QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No,
QMessageBox.StandardButton.No,
)
if result != QMessageBox.StandardButton.Yes:
return
try:
removed = self.network.run_from_another_thread(self.network.clear_recent_servers())
except Exception as e:
_logger.exception("failed to clear known servers")
QMessageBox.critical(self, _('Reset known servers'), str(e))
return
if removed > 0:
msg = _('{} known servers were removed.').format(removed)
else:
msg = _('No cached known servers were found.')
self.nodes_list_widget.update()
QMessageBox.information(self, _('Reset known servers'), msg)
class NostrWidget(QWidget, QtEventListener):

View File

@@ -429,6 +429,16 @@ class Network(Logger, NetworkRetryManager[ServerAddr]):
await self._close_interface(iface)
return removed
async def clear_recent_servers(self) -> int:
"""Delete cached list of recently connected servers."""
with self.recent_servers_lock:
removed = len(self._recent_servers)
self._recent_servers = []
self._save_recent_servers()
self.logger.info(f"removed {removed} cached recent server(s)")
util.trigger_callback('network_updated')
return removed
def has_channel_db(self):
return self.channel_db is not None