From 42d1a7233c6c4fdce02b239608e4c2fd7f8c1d35 Mon Sep 17 00:00:00 2001 From: Philip Abbey Date: Sun, 18 Aug 2024 12:04:34 +0100 Subject: [PATCH] Update Settings.mc Test the phone is connected before attempting WebHook HTTP requests. --- source/Settings.mc | 70 ++++++++++++++++++++++++---------------------- 1 file changed, 37 insertions(+), 33 deletions(-) diff --git a/source/Settings.mc b/source/Settings.mc index 8a598d4..404f163 100644 --- a/source/Settings.mc +++ b/source/Settings.mc @@ -70,42 +70,46 @@ class Settings { // Manage this inside the application or widget only (not a glance or background service process) if (mIsApp) { if (mHasService) { - mWebhookManager = new WebhookManager(); - if (getWebhookId().equals("")) { - // System.println("Settings update(): Doing full webhook & sensor creation."); - mWebhookManager.requestWebhookId(); - } else { - // System.println("Settings update(): Doing just sensor creation."); - // We already have a Webhook ID, so just enable or disable the sensor in Home Assistant. - // Its a multiple step process, hence starting at step 0. - mWebhookManager.registerWebhookSensor({ - "device_class" => "battery", - "name" => "Battery Level", - "state" => System.getSystemStats().battery, - "type" => "sensor", - "unique_id" => "battery_level", - "unit_of_measurement" => "%", - "state_class" => "measurement", - "entity_category" => "diagnostic", - "disabled" => !Settings.isSensorsLevelEnabled() - }, 0); - } - if (mIsSensorsLevelEnabled) { - // Create the timed activity - if ((Background.getTemporalEventRegisteredTime() == null) or - (Background.getTemporalEventRegisteredTime() != (mBatteryRefreshRate * 60))) { - Background.registerForTemporalEvent(new Time.Duration(mBatteryRefreshRate * 60)); // Convert to seconds - Background.registerForActivityCompletedEvent(); + if (System.getDeviceSettings().phoneConnected) { + mWebhookManager = new WebhookManager(); + if (getWebhookId().equals("")) { + // System.println("Settings update(): Doing full webhook & sensor creation."); + mWebhookManager.requestWebhookId(); + } else { + // System.println("Settings update(): Doing just sensor creation."); + // We already have a Webhook ID, so just enable or disable the sensor in Home Assistant. + // Its a multiple step process, hence starting at step 0. + mWebhookManager.registerWebhookSensor({ + "device_class" => "battery", + "name" => "Battery Level", + "state" => System.getSystemStats().battery, + "type" => "sensor", + "unique_id" => "battery_level", + "unit_of_measurement" => "%", + "state_class" => "measurement", + "entity_category" => "diagnostic", + "disabled" => !Settings.isSensorsLevelEnabled() + }, 0); } - } else if (Background.getTemporalEventRegisteredTime() != null) { - Background.deleteTemporalEvent(); - Background.deleteActivityCompletedEvent(); + if (mIsSensorsLevelEnabled) { + // Create the timed activity + if ((Background.getTemporalEventRegisteredTime() == null) or + (Background.getTemporalEventRegisteredTime() != (mBatteryRefreshRate * 60))) { + Background.registerForTemporalEvent(new Time.Duration(mBatteryRefreshRate * 60)); // Convert to seconds + Background.registerForActivityCompletedEvent(); + } + } else if (Background.getTemporalEventRegisteredTime() != null) { + Background.deleteTemporalEvent(); + Background.deleteActivityCompletedEvent(); + } + } else { + // Explicitly disable the background event which persists when the application closes. + // If !mHasService disable the Settings option as user feedback + unsetIsSensorsLevelEnabled(); + unsetWebhookId(); } } else { - // Explicitly disable the background event which persists when the application closes. - // If !mHasService disable the Settings option as user feedback - unsetIsSensorsLevelEnabled(); - unsetWebhookId(); + ErrorView.show(WatchUi.loadResource($.Rez.Strings.NoPhone) as Lang.String); } } // System.println("Settings update(): getTemporalEventRegisteredTime() = " + Background.getTemporalEventRegisteredTime());