Jelajahi Sumber

Rebind lost devices after reload

Hal De 4 tahun lalu
induk
melakukan
5d06eafbd4
1 mengubah file dengan 14 tambahan dan 0 penghapusan
  1. 14 0
      app/app.py

+ 14 - 0
app/app.py

@@ -134,6 +134,7 @@ async def reloadCallback(mngr: Manager, msg: Message):
   await refreshDevicesCache()
   await refreshStatesCache()
   await refreshQueuesCache()
+  await rebindLostDevices()
 
 @manager.register_event('ExtensionStatus')
 async def extensionStatusCallback(mngr: Manager, msg: Message):
@@ -564,6 +565,19 @@ async def refreshQueuesCache():
   app.cache['queues'] = await amiQueues()
   return len(app.cache['queues'])
 
+async def rebindLostDevices():
+  ast = await getGlobalVars()
+  for device in app.cache['devices']:
+    user = await getDeviceUser(device)
+    if (user != 'none') and (user in app.cache['ustates'].keys()):
+      _device = await getUserDevice(_user)
+      if _device != device:
+        app.logger.warning('Fixing bind user {} to device {}'.format(user, device))
+        dial = await getDeviceDial(device)
+        await setUserHint(user, dial, ast)           # Set hints for user on new device
+        await setUserDeviceStates(user, device, ast) # Set device states for users device
+        await setUserDevice(user, device)            # Bind device to user
+
 async def userStateChangeCallback(user, state, prevState = None):
   reply = None
   if ((app.config['STATE_CALLBACK_URL'] not in NONEs) and