Skip to content

Commit

Permalink
Re-order callbacks
Browse files Browse the repository at this point in the history
  • Loading branch information
kvj committed Apr 15, 2022
1 parent c9c0531 commit 324acfe
Showing 1 changed file with 31 additions and 15 deletions.
46 changes: 31 additions & 15 deletions custom_components/nuki_ng/nuki.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,29 +124,47 @@ async def web_lock_action(self, dev_id: str, action: str):
)
)

async def bridge_check_callback(self, callback: str, add: bool = True):
async def bridge_remove_callback(self, callback: str):
callbacks = await self.async_json(
lambda r: r.get(self.bridge_url("/callback/list"))
)
_LOGGER.debug(f"bridge_check_callback: {callbacks}, {callback}")
result = dict()
_LOGGER.debug(f"bridge_remove_callback: {callbacks}, {callback}")
callbacks_list = callbacks.get("callbacks", [])
for item in callbacks.get("callbacks", []):
for item in callbacks_list:
if item["url"] == callback:
if add:
return callbacks_list
result = await self.async_json(
lambda r: r.get(
self.bridge_url("/callback/remove", {"id": item["id"]})
)
)
if add:
if not result.get("success", True):
raise ConnectionError(result.get("message"))
return True
return False

async def bridge_check_callback(self, callback: str):
callbacks = await self.async_json(
lambda r: r.get(self.bridge_url("/callback/list"))
)
_LOGGER.debug(f"bridge_check_callback: {callbacks}, {callback}")
result = dict()
callbacks_list = callbacks.get("callbacks", [])
if len(callbacks_list) and callbacks_list[0]["url"] == callback:
_LOGGER.debug("Callback is set")
return
add_callbacks = [callback]
for item in callbacks.get("callbacks", []):
if item["url"] != callback:
add_callbacks.append(item["url"])
await self.bridge_remove_callback(item["url"])
for callback_url in add_callbacks[:3]:
result = await self.async_json(
lambda r: r.get(self.bridge_url("/callback/add", {"url": callback}))
lambda r: r.get(self.bridge_url("/callback/add", {"url": callback_url}))
)
if not result.get("success", True):
raise ConnectionError(result.get("message"))
return callbacks_list
if not result.get("success", True):
raise ConnectionError(result.get("message"))
_LOGGER.debug("Callback is set - re-added")
return

def web_url(self, path):
return f"https://api.nuki.io{path}"
Expand Down Expand Up @@ -360,9 +378,7 @@ async def _hook_handler(hass, hook_id, request):
async def unload(self):
try:
if self.api.can_bridge():
result = await self.api.bridge_check_callback(
self.bridge_hook, add=False
)
result = await self.api.bridge_remove_callback(self.bridge_hook)
_LOGGER.debug(f"unload: {result} {self.bridge_hook}")
except Exception:
_LOGGER.exception(f"Failed to remove callback")
Expand Down Expand Up @@ -393,7 +409,7 @@ async def do_fwupdate(self):

async def do_delete_callback(self, callback):
if self.api.can_bridge():
await self.api.bridge_check_callback(callback, add=False)
await self.api.bridge_remove_callback(callback)
else:
raise ConnectionError("Not supported")

Expand Down

0 comments on commit 324acfe

Please sign in to comment.