ui: handle re-pairing receivers correctly when pairing
This commit is contained in:
parent
e89b50cdf2
commit
dc2a1adf26
|
@ -490,18 +490,25 @@ class Receiver(object):
|
||||||
del self._devices[key]
|
del self._devices[key]
|
||||||
return
|
return
|
||||||
|
|
||||||
action = 0x03
|
if self.re_pairs:
|
||||||
reply = self.write_register(_R.receiver_pairing, action, key)
|
# invalidate the device, but these receivers don't unpair per se
|
||||||
if reply:
|
|
||||||
# invalidate the device
|
|
||||||
dev.online = False
|
dev.online = False
|
||||||
dev.wpid = None
|
dev.wpid = None
|
||||||
if key in self._devices:
|
if key in self._devices:
|
||||||
del self._devices[key]
|
del self._devices[key]
|
||||||
_log.warn("%s unpaired device %s", self, dev)
|
_log.warn("%s removed device %s", self, dev)
|
||||||
else:
|
else:
|
||||||
_log.error("%s failed to unpair device %s", self, dev)
|
reply = self.write_register(_R.receiver_pairing, 0x03, key)
|
||||||
raise IndexError(key)
|
if reply:
|
||||||
|
# invalidate the device
|
||||||
|
dev.online = False
|
||||||
|
dev.wpid = None
|
||||||
|
if key in self._devices:
|
||||||
|
del self._devices[key]
|
||||||
|
_log.warn("%s unpaired device %s", self, dev)
|
||||||
|
else:
|
||||||
|
_log.error("%s failed to unpair device %s", self, dev)
|
||||||
|
raise IndexError(key)
|
||||||
|
|
||||||
def __len__(self):
|
def __len__(self):
|
||||||
return len([d for d in self._devices.values() if d is not None])
|
return len([d for d in self._devices.values() if d is not None])
|
||||||
|
|
|
@ -61,8 +61,7 @@ def run(receivers, args, find_receiver, _ignore):
|
||||||
if n.devnumber not in known_devices:
|
if n.devnumber not in known_devices:
|
||||||
receiver.status.new_device = receiver[n.devnumber]
|
receiver.status.new_device = receiver[n.devnumber]
|
||||||
elif receiver.re_pairs:
|
elif receiver.re_pairs:
|
||||||
# unfortunately this breaks encapsulation but the nice way tries to unpair
|
del receiver[n.devnumber] # get rid of information on device re-paired away
|
||||||
del receiver._devices[n.devnumber] # get rid of information on device re-paired away
|
|
||||||
receiver.status.new_device = receiver[n.devnumber]
|
receiver.status.new_device = receiver[n.devnumber]
|
||||||
|
|
||||||
timeout = 20 # seconds
|
timeout = 20 # seconds
|
||||||
|
|
|
@ -198,8 +198,17 @@ class ReceiverListener(_listener.EventsListener):
|
||||||
if n.sub_id == 0x40 and not already_known:
|
if n.sub_id == 0x40 and not already_known:
|
||||||
return # disconnecting something that is not known - nothing to do
|
return # disconnecting something that is not known - nothing to do
|
||||||
|
|
||||||
if n.sub_id == 0x41 and not already_known:
|
if n.sub_id == 0x41:
|
||||||
dev = self.receiver.register_new_device(n.devnumber, n)
|
if not already_known:
|
||||||
|
dev = self.receiver.register_new_device(n.devnumber, n)
|
||||||
|
elif self.receiver.status.lock_open and self.receiver.re_pairs:
|
||||||
|
dev = self.receiver[n.devnumber]
|
||||||
|
del self.receiver[n.devnumber] # get rid of information on device re-paired away
|
||||||
|
self._status_changed(dev) # signal that this device has changed
|
||||||
|
dev = self.receiver.register_new_device(n.devnumber, n)
|
||||||
|
self.receiver.status.new_device = self.receiver[n.devnumber]
|
||||||
|
else:
|
||||||
|
dev = self.receiver[n.devnumber]
|
||||||
else:
|
else:
|
||||||
dev = self.receiver[n.devnumber]
|
dev = self.receiver[n.devnumber]
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue