URI: 
       tCleanup main script, with semantic changes: The --offline flag applies only to GUI. Commands must use the daemon if a daemon is running, otherwise they are run offline. Commands that only require the wallet do not have the require_network flag. - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit fb8f9e55efa2f4bed36c8120834b8e823f1a70a7
   DIR parent 93573282bf8c966a19ebbd7a3b3c0cc37b521f4a
  HTML Author: ThomasV <thomasv@electrum.org>
       Date:   Wed, 23 Dec 2015 15:59:32 +0100
       
       Cleanup main script, with semantic changes:
       The --offline flag applies only to GUI.
       Commands must use the daemon if a daemon is running, otherwise they are run offline.
       Commands that only require the wallet do not have the require_network flag.
       
       Diffstat:
         M electrum                            |     124 ++++++++++++++++----------------
         M lib/commands.py                     |      21 ++++++++++-----------
       
       2 files changed, 72 insertions(+), 73 deletions(-)
       ---
   DIR diff --git a/electrum b/electrum
       t@@ -321,84 +321,84 @@ if __name__ == '__main__':
                config_options['url'] = uri
        
            config = SimpleConfig(config_options)
       -    cmd_name = config.get('cmd')
       +    cmdname = config.get('cmd')
        
            # initialize plugins.
       -    gui_name = config.get('gui', 'qt') if cmd_name == 'gui' else 'cmdline'
       +    gui_name = config.get('gui', 'qt') if cmdname == 'gui' else 'cmdline'
            plugins = Plugins(config, is_bundle or is_local or is_android, gui_name)
        
            # run non-RPC commands separately
       -    if cmd_name in ['create', 'restore', 'deseed']:
       +    if cmdname in ['create', 'restore', 'deseed']:
                run_non_RPC(config)
                sys.exit(0)
        
            # check if a daemon is running
            server = get_daemon(config)
        
       -    # if no daemon is running, run the command offline
       -    if cmd_name not in ['gui', 'daemon']:
       -        init_cmdline(config_options)
       -        if server is None: #not (cmd.requires_network or cmd.requires_wallet) or config.get('offline'):
       -            result = run_offline_command(config, config_options)
       -            print_msg(json_encode(result))
       -            sys.exit(0)
       -
       -    # daemon is running
       -    if server is not None:
       -        cmdname = config_options.get('cmd')
       -        if cmdname == 'daemon':
       -            result = server.daemon(config_options)
       -        elif cmdname == 'gui':
       +    if cmdname == 'gui':
       +        if server is not None:
                    result = server.gui(config_options)
                else:
       -            result = server.run_cmdline(config_options)
       -        if type(result) in [str, unicode]:
       -            print_msg(result)
       -        elif type(result) is dict and result.get('error'):
       -            print_stderr(result.get('error'))
       -        elif result is not None:
       -            print_msg(json_encode(result))
       -        sys.exit(0)
       -
       -    # daemon is not running
       -    if cmd_name == 'gui':
       -        if not config.get('offline'):
       -            network = Network(config)
       -            network.start()
       -            plugins.start()
       -        else:
       -            network = None
       -        gui = init_gui(config, network, plugins)
       -        daemon = Daemon(config, network, gui)
       -        daemon.start()
       -        gui.main()
       -        sys.exit(0)
       -
       -    elif cmd_name == 'daemon':
       -        subcommand = config.get('subcommand')
       -        if subcommand in ['status', 'stop']:
       -            print_msg("Daemon not running")
       -            sys.exit(1)
       -        elif subcommand == 'start':
       -            p = os.fork()
       -            if p == 0:
       +            if not config.get('offline'):
                        network = Network(config)
                        network.start()
                        plugins.start()
       -                daemon = Daemon(config, network)
       -                if config.get('websocket_server'):
       -                    from electrum import websockets
       -                    websockets.WebSocketServer(config, network).start()
       -                if config.get('requests_dir'):
       -                    util.check_www_dir(config.get('requests_dir'))
       -                daemon.start()
       -                daemon.join()
                    else:
       -                print_stderr("starting daemon (PID %d)"%p)
       -                sys.exit(0)
       +                network = None
       +            gui = init_gui(config, network, plugins)
       +            daemon = Daemon(config, network, gui)
       +            daemon.start()
       +            gui.main()
       +            sys.exit(0)
       +
       +    elif cmdname == 'daemon':
       +        if server is not None:
       +            result = server.daemon(config_options)
                else:
       -            print_msg("syntax: electrum daemon <start|status|stop>")
       -            sys.exit(1)
       +            subcommand = config.get('subcommand')
       +            if subcommand in ['status', 'stop']:
       +                print_msg("Daemon not running")
       +                sys.exit(1)
       +            elif subcommand == 'start':
       +                p = os.fork()
       +                if p == 0:
       +                    network = Network(config)
       +                    network.start()
       +                    plugins.start()
       +                    daemon = Daemon(config, network)
       +                    if config.get('websocket_server'):
       +                        from electrum import websockets
       +                        websockets.WebSocketServer(config, network).start()
       +                    if config.get('requests_dir'):
       +                        util.check_www_dir(config.get('requests_dir'))
       +                    daemon.start()
       +                    daemon.join()
       +                    sys.exit(0)
       +                else:
       +                    print_stderr("starting daemon (PID %d)"%p)
       +                    sys.exit(0)
       +            else:
       +                print_msg("syntax: electrum daemon <start|status|stop>")
       +                sys.exit(1)
       +
            else:
       -        print_msg("Network daemon is not running. Try 'electrum daemon start'\nIf you want to run this command offline, use the -o flag.")
       -        sys.exit(1)
       +        # command line
       +        init_cmdline(config_options)
       +        if server is not None:
       +            result = server.run_cmdline(config_options)
       +        else:
       +            cmd = known_commands[cmdname]
       +            if cmd.requires_network:
       +                print_msg("Network daemon is not running. Try 'electrum daemon start'")
       +                sys.exit(1)
       +            else:
       +                result = run_offline_command(config, config_options)
       +
       +    # print result
       +    if type(result) in [str, unicode]:
       +        print_msg(result)
       +    elif type(result) is dict and result.get('error'):
       +        print_stderr(result.get('error'))
       +    elif result is not None:
       +        print_msg(json_encode(result))
       +    sys.exit(0)
   DIR diff --git a/lib/commands.py b/lib/commands.py
       t@@ -160,7 +160,7 @@ class Commands:
                """
                return self.network.synchronous_get(('blockchain.address.get_history', [address]))
        
       -    @command('nw')
       +    @command('w')
            def listunspent(self):
                """List unspent outputs. Returns the list of unspent transaction
                outputs in your wallet."""
       t@@ -276,10 +276,9 @@ class Commands:
                """Return the public keys for a wallet address. """
                return self.wallet.get_public_keys(address)
        
       -    @command('nw')
       +    @command('w')
            def getbalance(self, account=None):
       -        """Return the balance of your wallet. If run with the --offline flag,
       -        returns the last known balance."""
       +        """Return the balance of your wallet. """
                if account is None:
                    c, u, x = self.wallet.get_balance()
                else:
       t@@ -421,21 +420,21 @@ class Commands:
                    self.wallet.sign_transaction(tx, self._password)
                return tx
        
       -    @command('wpn')
       +    @command('wp')
            def payto(self, destination, amount, tx_fee=None, from_addr=None, change_addr=None, nocheck=False, unsigned=False):
                """Create a transaction. """
                domain = [from_addr] if from_addr else None
                tx = self._mktx([(destination, amount)], tx_fee, change_addr, domain, nocheck, unsigned)
                return tx.as_dict()
        
       -    @command('wpn')
       +    @command('wp')
            def paytomany(self, outputs, tx_fee=None, from_addr=None, change_addr=None, nocheck=False, unsigned=False):
                """Create a multi-output transaction. """
                domain = [from_addr] if from_addr else None
                tx = self._mktx(outputs, tx_fee, change_addr, domain, nocheck, unsigned)
                return tx.as_dict()
        
       -    @command('wn')
       +    @command('w')
            def history(self):
                """Wallet history. Returns the transaction history of your wallet."""
                balance = 0
       t@@ -505,7 +504,7 @@ class Commands:
                    out.append(item)
                return out
        
       -    @command('nw')
       +    @command('w')
            def gettransaction(self, txid):
                """Retrieve a transaction. """
                tx = self.wallet.transactions.get(txid) if self.wallet else None
       t@@ -538,7 +537,7 @@ class Commands:
                out['status'] = pr_str[out.get('status', PR_UNKNOWN)]
                return out
        
       -    @command('wn')
       +    @command('w')
            def getrequest(self, key):
                """Return a payment request"""
                r = self.wallet.get_payment_request(key, self.config)
       t@@ -551,7 +550,7 @@ class Commands:
            #    """<Not implemented>"""
            #    pass
        
       -    @command('wn')
       +    @command('w')
            def listrequests(self, pending=False, expired=False, paid=False):
                """List the payment requests you made."""
                out = self.wallet.get_sorted_requests(self.config)
       t@@ -734,7 +733,6 @@ def get_parser():
            group.add_argument("-v", "--verbose", action="store_true", dest="verbose", default=False, help="Show debugging information")
            group.add_argument("-P", "--portable", action="store_true", dest="portable", default=False, help="Use local 'electrum_data' directory")
            group.add_argument("-w", "--wallet", dest="wallet_path", help="wallet path")
       -    group.add_argument("-o", "--offline", action="store_true", dest="offline", default=False, help="Run offline")
            # create main parser
            parser = argparse.ArgumentParser(
                parents=[parent_parser],
       t@@ -745,6 +743,7 @@ def get_parser():
            parser_gui.add_argument("url", nargs='?', default=None, help="bitcoin URI (or bip70 file)")
            #parser_gui.set_defaults(func=run_gui)
            parser_gui.add_argument("-g", "--gui", dest="gui", help="select graphical user interface", choices=['qt', 'lite', 'gtk', 'kivy', 'text', 'stdio', 'jsonrpc'])
       +    parser_gui.add_argument("-o", "--offline", action="store_true", dest="offline", default=False, help="Run offline")
            parser_gui.add_argument("-m", action="store_true", dest="hide_gui", default=False, help="hide GUI on startup")
            parser_gui.add_argument("-L", "--lang", dest="language", default=None, help="default language used in GUI")
            add_network_options(parser_gui)