diff --git a/source/HomeAssistantApp.mc b/source/HomeAssistantApp.mc index 674933a..1755d00 100644 --- a/source/HomeAssistantApp.mc +++ b/source/HomeAssistantApp.mc @@ -268,9 +268,17 @@ class HomeAssistantApp extends Application.AppBase { mTemplates = {}; for (var i = 0; i < mItemsToUpdate.size(); i++) { var item = mItemsToUpdate[i]; - mTemplates.put(i.toString(), { - "template" => item.buildTemplate() - }); + var template = item.buildTemplate(); + if (template != null) { + mTemplates.put(i.toString(), { + "template" => template + }); + } + if (item instanceof HomeAssistantToggleMenuItem) { + mTemplates.put(i.toString() + "t", { + "template" => (item as HomeAssistantToggleMenuItem).buildToggleTemplate() + }); + } } updateMenuItems(); } @@ -328,6 +336,9 @@ class HomeAssistantApp extends Application.AppBase { var item = mItemsToUpdate[i]; var state = data.get(i.toString()); item.updateState(state); + if (item instanceof HomeAssistantToggleMenuItem) { + (item as HomeAssistantToggleMenuItem).updateToggleState(data.get(i.toString() + "t")); + } } var delay = Settings.getPollDelay(); if (delay > 0) { diff --git a/source/HomeAssistantGroupMenuItem.mc b/source/HomeAssistantGroupMenuItem.mc index 7d44f4d..e53ea9c 100644 --- a/source/HomeAssistantGroupMenuItem.mc +++ b/source/HomeAssistantGroupMenuItem.mc @@ -53,7 +53,7 @@ class HomeAssistantGroupMenuItem extends WatchUi.IconMenuItem { function updateState(data as Lang.String or Lang.Dictionary or Null) as Void { if (data == null) { - setSubLabel($.Rez.Strings.Empty); + setSubLabel(null); } else if(data instanceof Lang.String) { setSubLabel(data); } else if(data instanceof Lang.Dictionary) { diff --git a/source/HomeAssistantToggleMenuItem.mc b/source/HomeAssistantToggleMenuItem.mc index 07e7b64..caee2c0 100644 --- a/source/HomeAssistantToggleMenuItem.mc +++ b/source/HomeAssistantToggleMenuItem.mc @@ -56,23 +56,17 @@ class HomeAssistantToggleMenuItem extends WatchUi.ToggleMenuItem { } function buildTemplate() as Lang.String or Null { - if (mTemplate == null) { - return "{{states('" + mData.get("entity_id") + "')}}"; - } - return "{{states('" + mData.get("entity_id") + "')}}," + mTemplate; + return mTemplate; + } + function buildToggleTemplate() as Lang.String or Null { + return "{{states('" + mData.get("entity_id") + "')}}"; } function updateState(data as Lang.String or Lang.Dictionary or Null) as Void { if (data == null) { - setSubLabel($.Rez.Strings.Empty); + setSubLabel(null); } else if(data instanceof Lang.String) { - if (mTemplate == null) { - setUiToggle(data); - } else { - var split = data.find(","); - setSubLabel(data.substring(split + 1, data.length())); - setUiToggle(data.substring(0, split)); - } + setSubLabel(data); } else if(data instanceof Lang.Dictionary) { // System.println("HomeAsistantToggleMenuItem updateState() data = " + data); if (data.get("error") != null) { @@ -86,6 +80,31 @@ class HomeAssistantToggleMenuItem extends WatchUi.ToggleMenuItem { } WatchUi.requestUpdate(); } + function updateToggleState(data as Lang.String or Lang.Dictionary or Null) as Void { + if (data == null) { + setUiToggle("off"); + } else if(data instanceof Lang.String) { + setUiToggle(data); + if (mTemplate == null and data.equals("unavailable")) { + setSubLabel($.Rez.Strings.Unavailable); + } + } else if(data instanceof Lang.Dictionary) { + // System.println("HomeAsistantToggleMenuItem updateState() data = " + data); + if (mTemplate == null) { + if (data.get("error") != null) { + setSubLabel($.Rez.Strings.TemplateError); + } else { + setSubLabel($.Rez.Strings.PotentialError); + } + } + } else { + // The template must return a Lang.String, a number can be either integer or float and hence cannot be formatted locally without error. + if (mTemplate == null) { + setSubLabel(WatchUi.loadResource($.Rez.Strings.TemplateError) as Lang.String); + } + } + WatchUi.requestUpdate(); + } // Callback function after completing the POST request to set the status. //