Skip to content

Commit 57a44d8

Browse files
authored
Update WebhookManager.mc (#179)
Speculative fix to handle the callback data from webhook generation perhaps not being Lang.Dict.
2 parents 15e2b19 + 4432c7b commit 57a44d8

File tree

1 file changed

+18
-8
lines changed

1 file changed

+18
-8
lines changed

source/WebhookManager.mc

+18-8
Original file line numberDiff line numberDiff line change
@@ -160,26 +160,36 @@ class WebhookManager {
160160

161161
case 200:
162162
case 201:
163-
var d = data as Lang.Dictionary;
164-
if ((d.get("success") as Lang.Boolean or Null) != false) {
165-
if (sensors.size() == 0) {
166-
getApp().startUpdates();
163+
if (data instanceof Lang.Dictionary) {
164+
var d = data as Lang.Dictionary;
165+
var b = d.get("success") as Lang.Boolean or Null;
166+
if (b != null and b != false) {
167+
if (sensors.size() == 0) {
168+
getApp().startUpdates();
169+
} else {
170+
registerWebhookSensor(sensors);
171+
}
167172
} else {
168-
registerWebhookSensor(sensors);
173+
// System.println("WebhookManager onReturnRegisterWebhookSensor(): Failure, no 'success'.");
174+
Settings.unsetWebhookId();
175+
Settings.unsetIsSensorsLevelEnabled();
176+
ErrorView.show(WatchUi.loadResource($.Rez.Strings.WebhookFailed) as Lang.String);
169177
}
170178
} else {
171-
// System.println("WebhookManager onReturnRegisterWebhookSensor(): Failure");
179+
// !! Speculative code for an application crash !!
180+
// System.println("WebhookManager onReturnRegisterWebhookSensor(): Failure, not a Lang.Dict");
181+
// Webhook ID might have been deleted on Home Assistant server and a Lang.String is trying to tell us an error message
172182
Settings.unsetWebhookId();
173183
Settings.unsetIsSensorsLevelEnabled();
174-
ErrorView.show(WatchUi.loadResource($.Rez.Strings.WebhookFailed) as Lang.String);
184+
ErrorView.show(WatchUi.loadResource($.Rez.Strings.WebhookFailed) as Lang.String + "\n" + data.toString());
175185
}
176186
break;
177187

178188
default:
179189
// System.println("WebhookManager onReturnRequestWebhookId(): Unhandled HTTP response code = " + responseCode);
180190
Settings.unsetWebhookId();
181191
Settings.unsetIsSensorsLevelEnabled();
182-
ErrorView.show(WatchUi.loadResource($.Rez.Strings.WebhookFailed) as Lang.String + "\n" + WatchUi.loadResource($.Rez.Strings.UnhandledHttpErr) as Lang.String + responseCode);
192+
ErrorView.show(WatchUi.loadResource($.Rez.Strings.WebhookFailed) as Lang.String + "\n" + WatchUi.loadResource($.Rez.Strings.UnhandledHttpErr) as Lang.String + " " + responseCode);
183193
}
184194
}
185195

0 commit comments

Comments
 (0)