Allow toggles to work if template fails

This commit is contained in:
Joseph Abbey
2024-08-26 20:11:19 +01:00
parent 2a48790f9c
commit bd37d5f2a8
3 changed files with 46 additions and 16 deletions

View File

@ -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) {

View File

@ -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) {

View File

@ -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.
//