ttry to fix "--offline" mode - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 94888739d346f970b735daa69f4bb0cec2f73a3b DIR parent 37747d74695daf000ffb0db9626191193a6b0555 HTML Author: SomberNight <somber.night@protonmail.com> Date: Thu, 9 Jan 2020 18:21:48 +0100 ttry to fix "--offline" mode Diffstat: M electrum/gui/qt/__init__.py | 4 ++-- M electrum/gui/qt/channels_list.py | 5 ++++- M electrum/gui/qt/lightning_dialog.py | 1 + M electrum/gui/qt/main_window.py | 13 ++++++++----- M electrum/gui/qt/watchtower_dialog.… | 1 + M electrum/lnworker.py | 5 +++++ M electrum/wallet.py | 2 +- 7 files changed, 22 insertions(+), 9 deletions(-) --- DIR diff --git a/electrum/gui/qt/__init__.py b/electrum/gui/qt/__init__.py t@@ -157,9 +157,9 @@ class ElectrumGui(Logger): m.clear() network = self.daemon.network m.addAction(_("Network"), self.show_network_dialog) - if network.lngossip: + if network and network.lngossip: m.addAction(_("Lightning Network"), self.show_lightning_dialog) - if network.local_watchtower: + if network and network.local_watchtower: m.addAction(_("Local Watchtower"), self.show_watchtower_dialog) for window in self.windows: name = window.wallet.basename() DIR diff --git a/electrum/gui/qt/channels_list.py b/electrum/gui/qt/channels_list.py t@@ -127,9 +127,12 @@ class ChannelsList(MyTreeView): def do_update_rows(self, wallet): if wallet != self.parent.wallet: return + lnworker = self.parent.wallet.lnworker + if not lnworker: + return self.model().clear() self.update_headers(self.headers) - for chan in self.parent.wallet.lnworker.channels.values(): + for chan in lnworker.channels.values(): items = [QtGui.QStandardItem(x) for x in self.format_fields(chan)] self.set_editability(items) items[self.Columns.NODE_ID].setData(chan.channel_id, ROLE_CHANNEL_ID) DIR diff --git a/electrum/gui/qt/lightning_dialog.py b/electrum/gui/qt/lightning_dialog.py t@@ -42,6 +42,7 @@ class LightningDialog(QDialog): self.gui_object = gui_object self.config = gui_object.config self.network = gui_object.daemon.network + assert self.network self.setWindowTitle(_('Lightning Network')) self.setMinimumSize(600, 20) vbox = QVBoxLayout(self) DIR diff --git a/electrum/gui/qt/main_window.py b/electrum/gui/qt/main_window.py t@@ -435,7 +435,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger): def load_wallet(self, wallet): wallet.thread = TaskThread(self, self.on_error) self.update_recently_visited(wallet.storage.path) - if wallet.lnworker: + if wallet.lnworker and wallet.network: wallet.network.trigger_callback('channels_updated', wallet) self.need_update.set() # Once GUI has been initialized check if we want to announce something since the callback has been called before the GUI was initialized t@@ -642,7 +642,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger): tools_menu.addAction(_("Electrum preferences") if sys.platform == 'darwin' else _("Preferences"), self.settings_dialog) if self.network: tools_menu.addAction(_("&Network"), self.gui_object.show_network_dialog) - if self.wallet.has_lightning(): + if self.wallet.has_lightning() and self.network: tools_menu.addAction(_("&Lightning"), self.gui_object.show_lightning_dialog) tools_menu.addAction(_("&Watchtower"), self.gui_object.show_watchtower_dialog) tools_menu.addAction(_("&Plugins"), self.plugins_dialog) t@@ -889,7 +889,8 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger): self.tray.setToolTip("%s (%s)" % (text, self.wallet.basename())) self.balance_label.setText(text) - self.status_button.setIcon( icon ) + if self.status_button: + self.status_button.setIcon( icon ) def update_wallet(self): self.update_status() t@@ -907,6 +908,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger): self.utxo_list.update() self.contact_list.update() self.invoice_list.update() + self.channels_list.update_rows.emit(wallet) self.update_completions() def create_channels_tab(self, wallet): t@@ -2027,12 +2029,13 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger): sb.addPermanentWidget(StatusBarButton(read_QIcon("preferences.png"), _("Preferences"), self.settings_dialog ) ) self.seed_button = StatusBarButton(read_QIcon("seed.png"), _("Seed"), self.show_seed_dialog ) sb.addPermanentWidget(self.seed_button) - if self.wallet.has_lightning(): + if self.wallet.has_lightning() and self.network: self.lightning_button = StatusBarButton(read_QIcon("lightning.png"), _("Lightning Network"), self.gui_object.show_lightning_dialog) sb.addPermanentWidget(self.lightning_button) + self.status_button = None if self.network: self.status_button = StatusBarButton(read_QIcon("status_disconnected.png"), _("Network"), self.gui_object.show_network_dialog) - sb.addPermanentWidget(self.status_button) + sb.addPermanentWidget(self.status_button) run_hook('create_status_bar', sb) self.setStatusBar(sb) DIR diff --git a/electrum/gui/qt/watchtower_dialog.py b/electrum/gui/qt/watchtower_dialog.py t@@ -62,6 +62,7 @@ class WatchtowerDialog(QDialog): self.gui_object = gui_object self.config = gui_object.config self.network = gui_object.daemon.network + assert self.network self.lnwatcher = self.network.local_watchtower self.setWindowTitle(_('Watchtower')) self.setMinimumSize(600, 20) DIR diff --git a/electrum/lnworker.py b/electrum/lnworker.py t@@ -186,6 +186,7 @@ class LNWorker(Logger): return sum([p.initialized.is_set() for p in self.peers.values()]) def start_network(self, network: 'Network'): + assert network self.network = network self.config = network.config daemon = network.daemon t@@ -306,6 +307,7 @@ class LNGossip(LNWorker): assert is_using_fast_ecc(), "verifying LN gossip msgs without libsecp256k1 is hopeless" def start_network(self, network: 'Network'): + assert network super().start_network(network) asyncio.run_coroutine_threadsafe(network.daemon.taskgroup.spawn(self.maintain_db()), self.network.asyncio_loop) t@@ -407,6 +409,7 @@ class LNWallet(LNWorker): await watchtower.add_sweep_tx(outpoint, ctn, tx.inputs()[0].prevout.to_str(), tx.serialize()) def start_network(self, network: 'Network'): + assert network self.lnwatcher = LNWatcher(network) self.lnwatcher.start_network(network) self.network = network t@@ -731,6 +734,8 @@ class LNWallet(LNWorker): name = sweep_info.name spender_txid = spenders.get(prevout) if spender_txid is not None: + # TODO handle exceptions for network.get_transaction + # TODO don't do network request every time... save tx at least in memory, or maybe wallet file? spender_tx = await self.network.get_transaction(spender_txid) spender_tx = Transaction(spender_tx) e_htlc_tx = chan.sweep_htlc(closing_tx, spender_tx) DIR diff --git a/electrum/wallet.py b/electrum/wallet.py t@@ -307,7 +307,7 @@ class Abstract_Wallet(AddressSynchronizer, ABC): def start_network(self, network): AddressSynchronizer.start_network(self, network) - if self.lnworker: + if self.lnworker and network: network.maybe_init_lightning() self.lnworker.start_network(network)