mirror of
				https://github.com/house-of-abbey/GarminHomeAssistant.git
				synced 2025-11-04 08:58:13 +00:00 
			
		
		
		
	Allow toggles to work if template fails
This commit is contained in:
		@@ -268,9 +268,17 @@ class HomeAssistantApp extends Application.AppBase {
 | 
				
			|||||||
            mTemplates = {};
 | 
					            mTemplates = {};
 | 
				
			||||||
            for (var i = 0; i < mItemsToUpdate.size(); i++) {
 | 
					            for (var i = 0; i < mItemsToUpdate.size(); i++) {
 | 
				
			||||||
                var item = mItemsToUpdate[i];
 | 
					                var item = mItemsToUpdate[i];
 | 
				
			||||||
                mTemplates.put(i.toString(), {
 | 
					                var template = item.buildTemplate();
 | 
				
			||||||
                    "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();
 | 
					            updateMenuItems();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -328,6 +336,9 @@ class HomeAssistantApp extends Application.AppBase {
 | 
				
			|||||||
                    var item = mItemsToUpdate[i];
 | 
					                    var item = mItemsToUpdate[i];
 | 
				
			||||||
                    var state = data.get(i.toString());
 | 
					                    var state = data.get(i.toString());
 | 
				
			||||||
                    item.updateState(state);
 | 
					                    item.updateState(state);
 | 
				
			||||||
 | 
					                    if (item instanceof HomeAssistantToggleMenuItem) {
 | 
				
			||||||
 | 
					                        (item as HomeAssistantToggleMenuItem).updateToggleState(data.get(i.toString() + "t"));
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                var delay = Settings.getPollDelay();
 | 
					                var delay = Settings.getPollDelay();
 | 
				
			||||||
                if (delay > 0) {
 | 
					                if (delay > 0) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -53,7 +53,7 @@ class HomeAssistantGroupMenuItem extends WatchUi.IconMenuItem {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    function updateState(data as Lang.String or Lang.Dictionary or Null) as Void {
 | 
					    function updateState(data as Lang.String or Lang.Dictionary or Null) as Void {
 | 
				
			||||||
        if (data == null) {
 | 
					        if (data == null) {
 | 
				
			||||||
            setSubLabel($.Rez.Strings.Empty);
 | 
					            setSubLabel(null);
 | 
				
			||||||
        } else if(data instanceof Lang.String) {
 | 
					        } else if(data instanceof Lang.String) {
 | 
				
			||||||
            setSubLabel(data);
 | 
					            setSubLabel(data);
 | 
				
			||||||
        } else if(data instanceof Lang.Dictionary) {
 | 
					        } else if(data instanceof Lang.Dictionary) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -56,23 +56,17 @@ class HomeAssistantToggleMenuItem extends WatchUi.ToggleMenuItem {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function buildTemplate() as Lang.String or Null {
 | 
					    function buildTemplate() as Lang.String or Null {
 | 
				
			||||||
        if (mTemplate == null) {
 | 
					        return mTemplate;
 | 
				
			||||||
            return "{{states('" + mData.get("entity_id") + "')}}";
 | 
					    }
 | 
				
			||||||
        }
 | 
					    function buildToggleTemplate() as Lang.String or Null {
 | 
				
			||||||
        return "{{states('" + mData.get("entity_id") + "')}}," + mTemplate;
 | 
					        return "{{states('" + mData.get("entity_id") + "')}}";
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function updateState(data as Lang.String or Lang.Dictionary or Null) as Void {
 | 
					    function updateState(data as Lang.String or Lang.Dictionary or Null) as Void {
 | 
				
			||||||
        if (data == null) {
 | 
					        if (data == null) {
 | 
				
			||||||
            setSubLabel($.Rez.Strings.Empty);
 | 
					            setSubLabel(null);
 | 
				
			||||||
        } else if(data instanceof Lang.String) {
 | 
					        } else if(data instanceof Lang.String) {
 | 
				
			||||||
            if (mTemplate == null) {
 | 
					            setSubLabel(data);
 | 
				
			||||||
                setUiToggle(data);
 | 
					 | 
				
			||||||
            } else {
 | 
					 | 
				
			||||||
                var split = data.find(",");
 | 
					 | 
				
			||||||
                setSubLabel(data.substring(split + 1, data.length()));
 | 
					 | 
				
			||||||
                setUiToggle(data.substring(0, split));
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        } else if(data instanceof Lang.Dictionary) {
 | 
					        } else if(data instanceof Lang.Dictionary) {
 | 
				
			||||||
            // System.println("HomeAsistantToggleMenuItem updateState() data = " + data);
 | 
					            // System.println("HomeAsistantToggleMenuItem updateState() data = " + data);
 | 
				
			||||||
            if (data.get("error") != null) {
 | 
					            if (data.get("error") != null) {
 | 
				
			||||||
@@ -86,6 +80,31 @@ class HomeAssistantToggleMenuItem extends WatchUi.ToggleMenuItem {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        WatchUi.requestUpdate();
 | 
					        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.
 | 
					    // Callback function after completing the POST request to set the status.
 | 
				
			||||||
    //
 | 
					    //
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user