URI: 
       tload wallets in daemon - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 39af17bc236602bced51d5feab6564ef26bd26e6
   DIR parent d97106f17d874bd8b441ef1c1c9ba80d2f241532
  HTML Author: ThomasV <thomasv@electrum.org>
       Date:   Sat, 28 Nov 2015 15:37:51 +0100
       
       load wallets in daemon
       
       Diffstat:
         M electrum                            |      43 +++++++++++++++++++++----------
       
       1 file changed, 29 insertions(+), 14 deletions(-)
       ---
   DIR diff --git a/electrum b/electrum
       t@@ -233,16 +233,8 @@ def init_cmdline(config):
            return cmd, password
        
        
       -def run_command(config, network, password):
       -    cmdname = config.get('cmd')
       -    cmd = known_commands[cmdname]
       -    # instanciate wallet for command-line
       -    storage = WalletStorage(config.get_wallet_path())
       -    # create wallet instance
       -    wallet = Wallet(storage) if cmd.requires_wallet else None
       -    # start threads
       +def run_command(config, cmd, network, wallet, password):
            if wallet and network:
       -        wallet.start_threads(network)
                wallet.wait_until_synchronized()
            # arguments passed to function
            args = map(lambda x: config.get(x), cmd.params)
       t@@ -254,9 +246,6 @@ def run_command(config, network, password):
            cmd_runner.password = password
            func = getattr(cmd_runner, cmd.name)
            result = func(*args)
       -    # stop threads
       -    if wallet:
       -        wallet.stop_threads()
            return result
        
        
       t@@ -298,13 +287,16 @@ class ClientThread(util.DaemonThread):
                            'nodes': self.network.get_interfaces(),
                            'connected': self.network.is_connected(),
                            'auto_connect': p[4],
       +                    'wallets': self.server.wallets.keys(),
                        }
                    elif sub == 'stop':
                        self.server.stop()
                        response = "Daemon stopped"
                else:
       +            c = known_commands[cmd]
       +            wallet = self.server.load_wallet(config) if c.requires_wallet else None
                    try:
       -                response = run_command(config, self.network, password)
       +                response = run_command(config, c, self.network, wallet, password)
                    except BaseException as e:
                        err = traceback.format_exc()
                        response = {'error':err}
       t@@ -325,6 +317,18 @@ class NetworkServer(util.DaemonThread):
                self.lock = threading.RLock()
                # gui is None is we run as daemon
                self.gui = None
       +        self.wallets = {}
       +
       +    def load_wallet(self, config):
       +        path = config.get_wallet_path()
       +        if path in self.wallets:
       +            wallet = self.wallets[path]
       +        else:
       +            storage = WalletStorage(path)
       +            wallet = Wallet(storage)
       +            wallet.start_threads(self.network)
       +            self.wallets[path] = wallet
       +        return wallet
        
            def run(self):
                s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
       t@@ -343,6 +347,11 @@ class NetworkServer(util.DaemonThread):
                    client.start()
                print_error("Daemon exiting")
        
       +    def stop(self):
       +        for k, wallet in self.wallets.items():
       +            wallet.stop_threads()
       +        util.DaemonThread.stop(self)
       +
        
        def get_daemon(config):
            lockfile = os.path.join(config.path, 'lock')
       t@@ -426,7 +435,13 @@ if __name__ == '__main__':
            if cmd_name not in ['gui', 'daemon']:
                cmd, password = init_cmdline(config)
                if not cmd.requires_network or config.get('offline'):
       -            result = run_command(config, None, password)
       +            if cmd.requires_wallet:
       +                path = config.get_wallet_path()
       +                storage = WalletStorage(path)
       +                wallet = Wallet(storage)
       +            else:
       +                wallet = None
       +            result = run_command(config, cmd, None, wallet, password)
                    print_msg(json_encode(result))
                    sys.exit(0)
                else: