URI: 
       tconfig: remove 'open_last_wallet' side-effecting - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 1a080639288de6a4237a47e2f97b8b608f695aea
   DIR parent d1026b5afeae5873022427e3f344d000df5a1c4d
  HTML Author: SomberNight <somber.night@protonmail.com>
       Date:   Tue, 10 Sep 2019 17:10:52 +0200
       
       config: remove 'open_last_wallet' side-effecting
       
       related: #5629
       
       Diffstat:
         M electrum/daemon.py                  |       3 +--
         M electrum/gui/kivy/__init__.py       |       9 +++++++--
         M electrum/gui/kivy/main_window.py    |      14 ++++++++++----
         M electrum/gui/qt/__init__.py         |       3 +--
         M electrum/gui/qt/main_window.py      |       2 +-
         M electrum/simple_config.py           |      16 +++++-----------
       
       6 files changed, 25 insertions(+), 22 deletions(-)
       ---
   DIR diff --git a/electrum/daemon.py b/electrum/daemon.py
       t@@ -366,8 +366,7 @@ class Daemon(Logger):
                config = SimpleConfig(config_options)
                if self.gui_object:
                    if hasattr(self.gui_object, 'new_window'):
       -                config.open_last_wallet()
       -                path = config.get_wallet_path()
       +                path = config.get_wallet_path(use_gui_last_wallet=True)
                        self.gui_object.new_window(path, config.get('url'))
                        response = "ok"
                    else:
   DIR diff --git a/electrum/gui/kivy/__init__.py b/electrum/gui/kivy/__init__.py
       t@@ -27,6 +27,7 @@
        
        import sys
        import os
       +from typing import TYPE_CHECKING
        
        try:
            sys.argv = ['']
       t@@ -40,12 +41,17 @@ except ImportError:
        kivy.require('1.8.0')
        from kivy.logger import Logger
        
       +if TYPE_CHECKING:
       +    from electrum.simple_config import SimpleConfig
       +    from electrum.daemon import Daemon
       +    from electrum.plugin import Plugins
       +
        
        
        
        class ElectrumGui:
        
       -    def __init__(self, config, daemon, plugins):
       +    def __init__(self, config: 'SimpleConfig', daemon: 'Daemon', plugins: 'Plugins'):
                Logger.debug('ElectrumGUI: initialising')
                self.daemon = daemon
                self.network = daemon.network
       t@@ -54,7 +60,6 @@ class ElectrumGui:
        
            def main(self):
                from .main_window import ElectrumWindow
       -        self.config.open_last_wallet()
                w = ElectrumWindow(config=self.config,
                                   network=self.network,
                                   plugins = self.plugins,
   DIR diff --git a/electrum/gui/kivy/main_window.py b/electrum/gui/kivy/main_window.py
       t@@ -7,6 +7,7 @@ import traceback
        from decimal import Decimal
        import threading
        import asyncio
       +from typing import TYPE_CHECKING
        
        from electrum.bitcoin import TYPE_ADDRESS
        from electrum.storage import WalletStorage
       t@@ -77,6 +78,10 @@ from electrum.util import (base_units, NoDynamicFeeEstimates, decimal_point_to_b
        from .uix.dialogs.lightning_open_channel import LightningOpenChannelDialog
        from .uix.dialogs.lightning_channels import LightningChannelsDialog
        
       +if TYPE_CHECKING:
       +    from electrum.simple_config import SimpleConfig
       +
       +
        class ElectrumWindow(App):
        
            electrum_config = ObjectProperty(None)
       t@@ -311,7 +316,7 @@ class ElectrumWindow(App):
                App.__init__(self)#, **kwargs)
        
                title = _('Electrum App')
       -        self.electrum_config = config = kwargs.get('config', None)
       +        self.electrum_config = config = kwargs.get('config', None)  # type: SimpleConfig
                self.language = config.get('language', 'en')
                self.network = network = kwargs.get('network', None)  # type: Network
                if self.network:
       t@@ -543,7 +548,7 @@ class ElectrumWindow(App):
                    self.network.register_callback(self.on_channel, ['channel'])
                    self.network.register_callback(self.on_payment_status, ['payment_status'])
                # load wallet
       -        self.load_wallet_by_name(self.electrum_config.get_wallet_path())
       +        self.load_wallet_by_name(self.electrum_config.get_wallet_path(use_gui_last_wallet=True))
                # URI passed in config
                uri = self.electrum_config.get('url')
                if uri:
       t@@ -565,7 +570,8 @@ class ElectrumWindow(App):
                elif not self.wallet:
                    # wizard did not return a wallet; and there is no wallet open atm
                    # try to open last saved wallet (potentially start wizard again)
       -            self.load_wallet_by_name(self.electrum_config.get_wallet_path(), ask_if_wizard=True)
       +            self.load_wallet_by_name(self.electrum_config.get_wallet_path(use_gui_last_wallet=True),
       +                                     ask_if_wizard=True)
        
            def load_wallet_by_name(self, path, ask_if_wizard=False):
                if not path:
       t@@ -1077,7 +1083,7 @@ class ElectrumWindow(App):
                self.stop_wallet()
                os.unlink(wallet_path)
                self.show_error(_("Wallet removed: {}").format(basename))
       -        new_path = self.electrum_config.get_wallet_path()
       +        new_path = self.electrum_config.get_wallet_path(use_gui_last_wallet=True)
                self.load_wallet_by_name(new_path)
        
            def show_seed(self, label):
   DIR diff --git a/electrum/gui/qt/__init__.py b/electrum/gui/qt/__init__.py
       t@@ -343,8 +343,7 @@ class ElectrumGui(Logger):
                    return
                self.timer.start()
        
       -        self.config.open_last_wallet()
       -        path = self.config.get_wallet_path()
       +        path = self.config.get_wallet_path(use_gui_last_wallet=True)
                if not self.start_new_window(path, self.config.get('url'), app_is_starting=True):
                    return
                signal.signal(signal.SIGINT, lambda *args: self.app.quit())
   DIR diff --git a/electrum/gui/qt/main_window.py b/electrum/gui/qt/main_window.py
       t@@ -556,7 +556,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger):
                self.recently_visited_menu.setEnabled(len(recent))
        
            def get_wallet_folder(self):
       -        return os.path.dirname(os.path.abspath(self.config.get_wallet_path()))
       +        return os.path.dirname(os.path.abspath(self.wallet.storage.path))
        
            def new_wallet(self):
                try:
   DIR diff --git a/electrum/simple_config.py b/electrum/simple_config.py
       t@@ -265,17 +265,17 @@ class SimpleConfig(Logger):
                    if os.path.exists(self.path):  # or maybe not?
                        raise
        
       -    def get_wallet_path(self):
       +    def get_wallet_path(self, *, use_gui_last_wallet=False):
                """Set the path of the wallet."""
        
                # command line -w option
                if self.get('wallet_path'):
                    return os.path.join(self.get('cwd', ''), self.get('wallet_path'))
        
       -        # path in config file
       -        path = self.get('default_wallet_path')
       -        if path and os.path.exists(path):
       -            return path
       +        if use_gui_last_wallet:
       +            path = self.get('gui_last_wallet')
       +            if path and os.path.exists(path):
       +                return path
        
                # default path
                util.assert_datadir_available(self.path)
       t@@ -304,12 +304,6 @@ class SimpleConfig(Logger):
            def get_session_timeout(self):
                return self.get('session_timeout', 300)
        
       -    def open_last_wallet(self):
       -        if self.get('wallet_path') is None:
       -            last_wallet = self.get('gui_last_wallet')
       -            if last_wallet is not None and os.path.exists(last_wallet):
       -                self.cmdline_options['default_wallet_path'] = last_wallet
       -
            def save_last_wallet(self, wallet):
                if self.get('wallet_path') is None:
                    path = wallet.storage.path