diff --git a/custom_components/divoom_pixoo/pixoo64/_pixoo.py b/custom_components/divoom_pixoo/pixoo64/_pixoo.py index 5cfcd78..269f6f3 100644 --- a/custom_components/divoom_pixoo/pixoo64/_pixoo.py +++ b/custom_components/divoom_pixoo/pixoo64/_pixoo.py @@ -347,6 +347,16 @@ def set_custom_page(self, index): if data['error_code'] != 0: self.__error(data) + def play_gif(self, gif_url): + response = requests.post(self.__url, json.dumps({ + 'Command': 'Device/PlayTFGif', + 'FileType': 2, + 'FileName': gif_url + }), timeout=self.timeout) + data = response.json() + if data['error_code'] != 0: + self.__error(data) + def set_face(self, face_id): self.set_clock(face_id) diff --git a/custom_components/divoom_pixoo/sensor.py b/custom_components/divoom_pixoo/sensor.py index dd1ad58..af3c5b7 100644 --- a/custom_components/divoom_pixoo/sensor.py +++ b/custom_components/divoom_pixoo/sensor.py @@ -130,7 +130,7 @@ async def _async_next_page(self): self._current_page_index = (self._current_page_index + 1) % len(self._pages) iteration_count += 1 - def _render_page(self, page): + def _render_page(self, page: dict): pixoo = self._pixoo pixoo.clear() @@ -144,13 +144,16 @@ def _render_page(self, page): pixoo.set_visualizer(page['id']) elif page_type == "clock": pixoo.set_clock(page['id']) + elif page_type == "gif": + pixoo.play_gif(page['gif_url']) elif page_type in ["custom", "components"]: variables = page.get('variables', {}) rendered_variables = {} for var_name in variables: rendered_variables[var_name] = Template(str(variables[var_name]), self.hass).async_render() - for component in page['components']: + components: list = page['components'].copy() # Copy the list so we can add new items to it. + for index, component in enumerate(components): if component['type'] == "text": try: @@ -255,6 +258,14 @@ def _render_page(self, page): except TemplateError as e: _LOGGER.error("Template render error: %s", e) + elif component["type"] == "templatable": + try: + rendered_list = list(Template(str(component.get("template", [])), self.hass).async_render(variables=rendered_variables)) + for item in rendered_list[::-1]: # Reverse the list so that the order is correct. + components.insert(index + 1, item) + + except TemplateError as e: + _LOGGER.error("Template render error: %s", e) pixoo.push()