From 4432c7b9a074c453bbe26a666a01c4dedfce7b70 Mon Sep 17 00:00:00 2001 From: Philip Abbey Date: Fri, 30 Aug 2024 15:49:06 +0100 Subject: [PATCH] Update WebhookManager.mc Speculative fix to handle the callback data from webhook generation perhaps not being Lang.Dict. --- source/WebhookManager.mc | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/source/WebhookManager.mc b/source/WebhookManager.mc index 45ffe9f..d682d5b 100644 --- a/source/WebhookManager.mc +++ b/source/WebhookManager.mc @@ -160,18 +160,28 @@ class WebhookManager { case 200: case 201: - var d = data as Lang.Dictionary; - if ((d.get("success") as Lang.Boolean or Null) != false) { - if (sensors.size() == 0) { - getApp().startUpdates(); + if (data instanceof Lang.Dictionary) { + var d = data as Lang.Dictionary; + var b = d.get("success") as Lang.Boolean or Null; + if (b != null and b != false) { + if (sensors.size() == 0) { + getApp().startUpdates(); + } else { + registerWebhookSensor(sensors); + } } else { - registerWebhookSensor(sensors); + // System.println("WebhookManager onReturnRegisterWebhookSensor(): Failure, no 'success'."); + Settings.unsetWebhookId(); + Settings.unsetIsSensorsLevelEnabled(); + ErrorView.show(WatchUi.loadResource($.Rez.Strings.WebhookFailed) as Lang.String); } } else { - // System.println("WebhookManager onReturnRegisterWebhookSensor(): Failure"); + // !! Speculative code for an application crash !! + // System.println("WebhookManager onReturnRegisterWebhookSensor(): Failure, not a Lang.Dict"); + // Webhook ID might have been deleted on Home Assistant server and a Lang.String is trying to tell us an error message Settings.unsetWebhookId(); Settings.unsetIsSensorsLevelEnabled(); - ErrorView.show(WatchUi.loadResource($.Rez.Strings.WebhookFailed) as Lang.String); + ErrorView.show(WatchUi.loadResource($.Rez.Strings.WebhookFailed) as Lang.String + "\n" + data.toString()); } break; @@ -179,7 +189,7 @@ class WebhookManager { // System.println("WebhookManager onReturnRequestWebhookId(): Unhandled HTTP response code = " + responseCode); Settings.unsetWebhookId(); Settings.unsetIsSensorsLevelEnabled(); - ErrorView.show(WatchUi.loadResource($.Rez.Strings.WebhookFailed) as Lang.String + "\n" + WatchUi.loadResource($.Rez.Strings.UnhandledHttpErr) as Lang.String + responseCode); + ErrorView.show(WatchUi.loadResource($.Rez.Strings.WebhookFailed) as Lang.String + "\n" + WatchUi.loadResource($.Rez.Strings.UnhandledHttpErr) as Lang.String + " " + responseCode); } }