feat(network): add “Reset known servers” action in Qt and QML
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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):
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user