detect available hardware wallets before listing them in wizard
This commit is contained in:
parent
280b5c79d2
commit
992c70a688
|
@ -442,7 +442,17 @@ class InstallWizard(QDialog):
|
||||||
if not wallet_type:
|
if not wallet_type:
|
||||||
return
|
return
|
||||||
elif wallet_type == 'hardware':
|
elif wallet_type == 'hardware':
|
||||||
hardware_wallets = map(lambda x:(x[1],x[2]), filter(lambda x:x[0]=='hardware', electrum.wallet.wallet_types))
|
hardware_wallets = []
|
||||||
|
for item in electrum.wallet.wallet_types:
|
||||||
|
t, name, description, loader = item
|
||||||
|
if t == 'hardware':
|
||||||
|
try:
|
||||||
|
p = loader()
|
||||||
|
except:
|
||||||
|
util.print_error("cannot load plugin for:", name)
|
||||||
|
continue
|
||||||
|
if p:
|
||||||
|
hardware_wallets.append((name, description))
|
||||||
wallet_type = self.choice(_("Hardware Wallet"), 'Select your hardware wallet', hardware_wallets)
|
wallet_type = self.choice(_("Hardware Wallet"), 'Select your hardware wallet', hardware_wallets)
|
||||||
|
|
||||||
if not wallet_type:
|
if not wallet_type:
|
||||||
|
|
|
@ -49,6 +49,14 @@ def is_available(name, w):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def plugin_loader(config, name):
|
||||||
|
global plugins
|
||||||
|
if plugins.get(name) is None:
|
||||||
|
print_error(_("Loading plugin by constructor:"), name)
|
||||||
|
p = loader(name)
|
||||||
|
plugins[name] = p.Plugin(config, name)
|
||||||
|
return plugins[name]
|
||||||
|
|
||||||
@profiler
|
@profiler
|
||||||
def init_plugins(config, is_local, gui_name):
|
def init_plugins(config, is_local, gui_name):
|
||||||
global plugins, descriptions, loader
|
global plugins, descriptions, loader
|
||||||
|
@ -60,20 +68,9 @@ def init_plugins(config, is_local, gui_name):
|
||||||
electrum_plugins = __import__('electrum_plugins')
|
electrum_plugins = __import__('electrum_plugins')
|
||||||
loader = lambda name: __import__('electrum_plugins.' + name, fromlist=['electrum_plugins'])
|
loader = lambda name: __import__('electrum_plugins.' + name, fromlist=['electrum_plugins'])
|
||||||
|
|
||||||
def constructor(name, storage):
|
def register_wallet_type(name, x):
|
||||||
if plugins.get(name) is None:
|
|
||||||
try:
|
|
||||||
print_error(_("Loading plugin by constructor:"), name)
|
|
||||||
p = loader(name)
|
|
||||||
plugins[name] = p.Plugin(config, name)
|
|
||||||
except:
|
|
||||||
print_msg(_("Error: cannot initialize plugin"), name)
|
|
||||||
return
|
|
||||||
return plugins[name].constructor(storage)
|
|
||||||
|
|
||||||
def register_wallet_type(name, x, constructor):
|
|
||||||
import wallet
|
import wallet
|
||||||
x += (lambda storage: constructor(name, storage),)
|
x += (lambda: plugin_loader(config, name),)
|
||||||
wallet.wallet_types.append(x)
|
wallet.wallet_types.append(x)
|
||||||
|
|
||||||
descriptions = electrum_plugins.descriptions
|
descriptions = electrum_plugins.descriptions
|
||||||
|
@ -83,7 +80,7 @@ def init_plugins(config, is_local, gui_name):
|
||||||
continue
|
continue
|
||||||
x = item.get('registers_wallet_type')
|
x = item.get('registers_wallet_type')
|
||||||
if x:
|
if x:
|
||||||
register_wallet_type(name, x, constructor)
|
register_wallet_type(name, x)
|
||||||
if not config.get('use_' + name):
|
if not config.get('use_' + name):
|
||||||
continue
|
continue
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -1925,9 +1925,9 @@ class Wallet(object):
|
||||||
|
|
||||||
wallet_type = storage.get('wallet_type')
|
wallet_type = storage.get('wallet_type')
|
||||||
if wallet_type:
|
if wallet_type:
|
||||||
for cat, t, name, c in wallet_types:
|
for cat, t, name, loader in wallet_types:
|
||||||
if t == wallet_type:
|
if t == wallet_type:
|
||||||
WalletClass = c
|
WalletClass = lambda storage: apply(loader().constructor, (storage,))
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
if re.match('(\d+)of(\d+)', wallet_type):
|
if re.match('(\d+)of(\d+)', wallet_type):
|
||||||
|
|
Loading…
Reference in New Issue