Browse Source

payserver: make daemon_wallet_loaded hook reliable

daemon.load_wallet() often early-returns,
e.g. in Qt case, for storage-encrypted wallets.

closes https://github.com/spesmilo/electrum/issues/8118
master
SomberNight 3 years ago
parent
commit
9039ec1dc4
No known key found for this signature in database
GPG Key ID: B33B5F232C6271E9
  1. 4
      electrum/daemon.py
  2. 20
      electrum/plugins/payserver/payserver.py

4
electrum/daemon.py

@ -456,8 +456,7 @@ class Daemon(Logger):
if wallet is None:
return
wallet.start_network(self.network)
self._wallets[path] = wallet
run_hook('daemon_wallet_loaded', self, wallet)
self.add_wallet(wallet)
return wallet
@staticmethod
@ -492,6 +491,7 @@ class Daemon(Logger):
path = wallet.storage.path
path = standardize_path(path)
self._wallets[path] = wallet
run_hook('daemon_wallet_loaded', self, wallet)
def get_wallet(self, path: str) -> Optional[Abstract_Wallet]:
path = standardize_path(path)

20
electrum/plugins/payserver/payserver.py

@ -26,34 +26,32 @@
import os
import asyncio
from collections import defaultdict
from typing import TYPE_CHECKING
from aiohttp import ClientResponse
from aiohttp import web, client_exceptions
from aiorpcx import timeout_after, TaskTimeout, ignore_after
from aiohttp import web
from aiorpcx import NetAddress
from electrum.util import log_exceptions, ignore_exceptions
from electrum.crypto import sha256
from electrum.plugin import BasePlugin, hook
from electrum.logging import Logger
from electrum.logging import Logger
from electrum.util import EventListener, event_listener
from electrum.invoices import PR_PAID, PR_EXPIRED
if TYPE_CHECKING:
from electrum.simple_config import SimpleConfig
from electrum.daemon import Daemon
from electrum.wallet import Abstract_Wallet
class PayServerPlugin(BasePlugin):
def __init__(self, parent, config, name):
def __init__(self, parent, config: 'SimpleConfig', name):
BasePlugin.__init__(self, parent, config, name)
self.config = config
self.server = None
@hook
def daemon_wallet_loaded(self, daemon, wallet):
def daemon_wallet_loaded(self, daemon: 'Daemon', wallet: 'Abstract_Wallet'):
# we use the first wallet loaded
if self.server is not None:
return
@ -71,7 +69,7 @@ class PayServer(Logger, EventListener):
WWW_DIR = os.path.join(os.path.dirname(__file__), 'www')
def __init__(self, config, wallet):
def __init__(self, config: 'SimpleConfig', wallet: 'Abstract_Wallet'):
Logger.__init__(self)
assert self.has_www_dir(), self.WWW_DIR
self.config = config

Loading…
Cancel
Save