1
0

Plugins: pass wallet to settings_dialog

Also, remove settings_widget method.
The widget should always be a button.

nwc: is_initialized -> initialized
This commit is contained in:
ThomasV
2025-04-12 10:57:53 +02:00
parent 3a18000f7a
commit eff8b65355
8 changed files with 25 additions and 28 deletions

View File

@@ -294,9 +294,9 @@ class ElectrumGui(BaseElectrumGui, Logger):
self.lightning_dialog = LightningDialog(self) self.lightning_dialog = LightningDialog(self)
self.lightning_dialog.bring_to_top() self.lightning_dialog.bring_to_top()
def show_plugins_dialog(self): def show_plugins_dialog(self, wallet=None):
from .plugins_dialog import PluginsDialog from .plugins_dialog import PluginsDialog
d = PluginsDialog(self) d = PluginsDialog(self, wallet)
d.exec() d.exec()
def show_network_dialog(self, proxy_tab=False): def show_network_dialog(self, proxy_tab=False):

View File

@@ -759,7 +759,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger, QtEventListener):
tools_menu.addAction(_("Electrum preferences"), self.settings_dialog) tools_menu.addAction(_("Electrum preferences"), self.settings_dialog)
tools_menu.addAction(_("&Network"), self.gui_object.show_network_dialog).setEnabled(bool(self.network)) tools_menu.addAction(_("&Network"), self.gui_object.show_network_dialog).setEnabled(bool(self.network))
tools_menu.addAction(_("&Plugins"), self.gui_object.show_plugins_dialog) tools_menu.addAction(_("&Plugins"), partial(self.gui_object.show_plugins_dialog, self.wallet))
tools_menu.addSeparator() tools_menu.addSeparator()
tools_menu.addAction(_("&Sign/verify message"), self.sign_verify_message) tools_menu.addAction(_("&Sign/verify message"), self.sign_verify_message)
tools_menu.addAction(_("&Encrypt/decrypt message"), self.encrypt_message) tools_menu.addAction(_("&Encrypt/decrypt message"), self.encrypt_message)

View File

@@ -1,17 +1,20 @@
from typing import TYPE_CHECKING, Optional from typing import TYPE_CHECKING, Optional
from functools import partial from functools import partial
import shutil
import os
from PyQt6.QtWidgets import QLabel, QVBoxLayout, QGridLayout, QPushButton, QWidget, QScrollArea, QFormLayout from PyQt6.QtWidgets import QLabel, QVBoxLayout, QGridLayout, QPushButton, QWidget, QScrollArea, QFormLayout, QFileDialog
from electrum.i18n import _ from electrum.i18n import _
from electrum.plugin import run_hook from electrum.plugin import run_hook
from .util import WindowModalDialog, Buttons, CloseButton, WWLabel, insert_spaces, MessageBoxMixin from .util import WindowModalDialog, Buttons, CloseButton, WWLabel, insert_spaces, MessageBoxMixin, EnterButton
if TYPE_CHECKING: if TYPE_CHECKING:
from . import ElectrumGui from . import ElectrumGui
from electrum_cc import ECPrivkey from electrum_cc import ECPrivkey
from electrum.wallet import Abstract_Wallet
class PluginDialog(WindowModalDialog): class PluginDialog(WindowModalDialog):
@@ -56,9 +59,11 @@ class PluginDialog(WindowModalDialog):
close_button.setText(_('Close')) close_button.setText(_('Close'))
buttons = [toggle_button, close_button] buttons = [toggle_button, close_button]
# add settings widget # add settings widget
if p and p.requires_settings() and p.is_enabled(): if p and p.requires_settings() and p.is_enabled() and self.window.wallet is not None:
widget = p.settings_widget(self) button = EnterButton(
buttons.insert(0, widget) _('Settings'),
partial(p.settings_dialog, self, self.window.wallet))
buttons.insert(0, button)
vbox.addLayout(Buttons(*buttons)) vbox.addLayout(Buttons(*buttons))
def do_toggle(self, toggle_button, name): def do_toggle(self, toggle_button, name):
@@ -115,11 +120,12 @@ class PluginStatusButton(QPushButton):
class PluginsDialog(WindowModalDialog, MessageBoxMixin): class PluginsDialog(WindowModalDialog, MessageBoxMixin):
def __init__(self, gui_object: 'ElectrumGui'): def __init__(self, gui_object: 'ElectrumGui', wallet: Optional['Abstract_Wallet']):
WindowModalDialog.__init__(self, None, _('Electrum Plugins')) WindowModalDialog.__init__(self, None, _('Electrum Plugins'))
self.gui_object = gui_object self.gui_object = gui_object
self.config = gui_object.config self.config = gui_object.config
self.plugins = gui_object.plugins self.plugins = gui_object.plugins
self.wallet = wallet
vbox = QVBoxLayout(self) vbox = QVBoxLayout(self)
scroll = QScrollArea() scroll = QScrollArea()
scroll.setEnabled(True) scroll.setEnabled(True)
@@ -216,8 +222,6 @@ class PluginsDialog(WindowModalDialog, MessageBoxMixin):
os.unlink(path) os.unlink(path)
def add_plugin_dialog(self): def add_plugin_dialog(self):
from PyQt6.QtWidgets import QFileDialog
import shutil, os
pubkey, salt = self.plugins.get_pubkey_bytes() pubkey, salt = self.plugins.get_pubkey_bytes()
if not pubkey: if not pubkey:
self.init_plugins_password() self.init_plugins_password()

View File

@@ -48,10 +48,7 @@ class Plugin(BasePlugin):
def requires_settings(self): def requires_settings(self):
return True return True
def settings_widget(self, window): def settings_dialog(self, window, wallet):
return EnterButton(_('Settings'), partial(self.settings_dialog, window))
def settings_dialog(self, window):
d = WindowModalDialog(window, _("Audio Modem Settings")) d = WindowModalDialog(window, _("Audio Modem Settings"))
layout = QGridLayout(d) layout = QGridLayout(d)

View File

@@ -31,12 +31,7 @@ class Plugin(LabelsPlugin):
def requires_settings(self): def requires_settings(self):
return True return True
def settings_widget(self, window: WindowModalDialog): def settings_dialog(self, window: WindowModalDialog, wallet: 'Abstract_Wallet'):
return EnterButton(_('Settings'),
partial(self.settings_dialog, window))
def settings_dialog(self, window: WindowModalDialog):
wallet = window.parent().wallet
if not wallet.get_fingerprint(): if not wallet.get_fingerprint():
window.show_error(_("{} plugin does not support this type of wallet.") window.show_error(_("{} plugin does not support this type of wallet.")
.format("Label Sync")) .format("Label Sync"))

View File

@@ -44,7 +44,7 @@ class NWCServerPlugin(BasePlugin):
def start_plugin(self, wallet: 'Abstract_Wallet'): def start_plugin(self, wallet: 'Abstract_Wallet'):
if not wallet.has_lightning(): if not wallet.has_lightning():
return return
if self.is_initialized: if self.initialized:
# this might be called for several wallets. only use one. # this might be called for several wallets. only use one.
return return
storage = self.get_plugin_storage(wallet) storage = self.get_plugin_storage(wallet)

View File

@@ -38,11 +38,12 @@ class Plugin(NWCServerPlugin):
def requires_settings(self): def requires_settings(self):
return True return True
def settings_widget(self, window: WindowModalDialog): def settings_dialog(self, window: WindowModalDialog, wallet: 'Abstract_Wallet'):
return EnterButton(_('Setup'), if not wallet.has_lightning():
partial(self.settings_dialog, window)) window.show_error(_("{} plugin requires a lightning enabled wallet. Setup lightning first.")
.format("NWC"))
return
def settings_dialog(self, window: WindowModalDialog):
d = WindowModalDialog(window, _("Nostr Wallet Connect")) d = WindowModalDialog(window, _("Nostr Wallet Connect"))
main_layout = QVBoxLayout(d) main_layout = QVBoxLayout(d)

View File

@@ -92,8 +92,8 @@ class Plugin(RevealerPlugin):
def requires_settings(self): def requires_settings(self):
return True return True
def settings_widget(self, window): def settings_dialog(self, window, wallet):
return EnterButton(_('Printer Calibration'), partial(self.calibration_dialog, window)) return self.calibration_dialog(window)
def password_dialog(self, msg=None, parent=None): def password_dialog(self, msg=None, parent=None):
from electrum.gui.qt.password_dialog import PasswordDialog from electrum.gui.qt.password_dialog import PasswordDialog