URI: 
       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)