solaar-cli: return on the first match when searching for device name
results may be occasionally ambiguous, but the command runs faster
This commit is contained in:
parent
59c5619b44
commit
9db2a65b31
|
@ -40,7 +40,7 @@ def _receiver():
|
|||
return r
|
||||
|
||||
|
||||
def _find_device(receiver, name):
|
||||
def _find_device(receiver, name, may_be_receiver=False):
|
||||
if len(name) == 1:
|
||||
try:
|
||||
number = int(name)
|
||||
|
@ -57,20 +57,17 @@ def _find_device(receiver, name):
|
|||
_fail("need at least 3 characters to match a device")
|
||||
|
||||
name = name.lower()
|
||||
if 'receiver'.startswith(name) or name.upper() == receiver.serial:
|
||||
if may_be_receiver and ('receiver'.startswith(name) or name == receiver.serial.lower()):
|
||||
return receiver
|
||||
|
||||
dev = None
|
||||
for d in receiver:
|
||||
if name.upper() == d.serial or name in d.name.lower() or name in d.codename.lower():
|
||||
if dev is None:
|
||||
dev = d
|
||||
else:
|
||||
_fail("'%s' matches multiple devices" % name)
|
||||
for dev in receiver:
|
||||
if (name == dev.serial.lower() or
|
||||
name == dev.codename.lower() or
|
||||
name == str(dev.kind).lower() or
|
||||
name in dev.name.lower()):
|
||||
return dev
|
||||
|
||||
if dev is None:
|
||||
_fail("no device found matching '%s'" % name)
|
||||
return dev
|
||||
_fail("no device found matching '%s'" % name)
|
||||
|
||||
|
||||
def _print_receiver(receiver, verbose=False):
|
||||
|
@ -169,7 +166,7 @@ def show_devices(receiver, args):
|
|||
print ("")
|
||||
_print_device(dev, args.verbose)
|
||||
else:
|
||||
dev = _find_device(receiver, args.device)
|
||||
dev = _find_device(receiver, args.device, True)
|
||||
if dev is receiver:
|
||||
_print_receiver(receiver, args.verbose)
|
||||
else:
|
||||
|
@ -230,8 +227,6 @@ def pair_device(receiver, args):
|
|||
|
||||
def unpair_device(receiver, args):
|
||||
dev = _find_device(receiver, args.device)
|
||||
if dev is receiver:
|
||||
_fail("cannot unpair the receiver from itself!")
|
||||
|
||||
# query these now, it's last chance to get them
|
||||
number, name, codename, serial = dev.number, dev.name, dev.codename, dev.serial
|
||||
|
@ -244,8 +239,8 @@ def unpair_device(receiver, args):
|
|||
|
||||
def config_device(receiver, args):
|
||||
dev = _find_device(receiver, args.device)
|
||||
if dev is receiver:
|
||||
_fail("no settings for the receiver")
|
||||
# if dev is receiver:
|
||||
# _fail("no settings for the receiver")
|
||||
|
||||
if not dev.settings:
|
||||
_fail("no settings for %s" % dev.name)
|
||||
|
|
|
@ -266,6 +266,10 @@ def request(handle, devnumber, request_id, *params):
|
|||
:param params: parameters for the feature call, 3 to 16 bytes.
|
||||
:returns: the reply data, or ``None`` if some error occured.
|
||||
"""
|
||||
|
||||
# import inspect as _inspect
|
||||
# print ('\n '.join(str(s) for s in _inspect.stack()))
|
||||
|
||||
assert isinstance(request_id, int)
|
||||
if devnumber != 0xFF and request_id < 0x8000:
|
||||
timeout = _DEVICE_REQUEST_TIMEOUT
|
||||
|
@ -353,6 +357,9 @@ def ping(handle, devnumber):
|
|||
if _log.isEnabledFor(_DEBUG):
|
||||
_log.debug("(%s) pinging device %d", handle, devnumber)
|
||||
|
||||
# import inspect as _inspect
|
||||
# print ('\n '.join(str(s) for s in _inspect.stack()))
|
||||
|
||||
# randomize the SoftwareId and mark byte to be able to identify the ping
|
||||
# reply, and set most significant (0x8) bit in SoftwareId so that the reply
|
||||
# is always distinguishable from notifications
|
||||
|
|
Loading…
Reference in New Issue