From 58ef3c9707b053126af09ee194c3b9ff33978d43 Mon Sep 17 00:00:00 2001 From: Matthew Grove Date: Thu, 16 May 2024 14:41:04 +0100 Subject: [PATCH] [FIX] Media player media position retrieval from API --- api.py | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/api.py b/api.py index ac47818..5b432d1 100644 --- a/api.py +++ b/api.py @@ -1,5 +1,6 @@ from requests import get import gc +import time class Api: def __init__(self, base_url, access_token) -> None: @@ -15,23 +16,32 @@ class Api: } print("Starting request for " + endpoint) response = get(url, headers=headers) - print("Received response for " + endpoint) return response.json() def getLightData(self, entity_id: str) -> dict: # TODO: error handling if can't access hass (e.g. no connection, invalid token) response = self.__request("/api/states/" + entity_id) + on = response["state"] == "on" return { - "on": response["state"] == "on", - "rgb_color": response["attributes"]["rgb_color"], - "rgbw_color": response["attributes"]["rgbw_color"], - "brightness": response["attributes"]["brightness"], - "friendly_name": response["attributes"]["friendly_name"], - "icon": response["attributes"]["icon"] + "on": on, + "rgb_color": response["attributes"]["rgb_color"] if on else None, + "rgbw_color": response["attributes"]["rgbw_color"] if on else None, + "brightness": response["attributes"]["brightness"] if on else 0, + "friendly_name": response["attributes"]["friendly_name"] } def getMediaPlayerData(self, entity_id: str) -> dict: response = self.__request("/api/states/" + entity_id) + if ("media_position" in (dict)(response["attributes"])): + p = response["attributes"]["media_position"] + else: + p = 0 + if ("media_position_updated_at" in (dict)(response["attributes"])): + dts = response["attributes"]["media_position_updated_at"] + # p += (datetime.now() - datetime.strptime(dts, "%Y-%m-%dT%H:%M:%S.%f%z")).total_seconds() + print(dts) + t = time.mktime((int(dts[0:4]), int(dts[5:7]), int(dts[8:10]), int(dts[11:13]) + int(dts[27:29]), int(dts[14:16]) + int(dts[30:31]), int(dts[17:19]), 0, 0)) + p += time.mktime(time.localtime()) - t return { "playing": response["state"] in ["on", "playing", "buffering"], "shuffle": response["attributes"]["shuffle"], @@ -39,9 +49,9 @@ class Api: "volume_level": response["attributes"]["volume_level"], "friendly_name": response["attributes"]["friendly_name"], "entity_picture": response["attributes"]["entity_picture"] if "entity_picture" in (dict)(response["attributes"]) else None, - "media_duration": response["attributes"]["media_duration"] if "media_duration" in (dict)(response["attributes"]) else None, - "media_position": response["attributes"]["media_position"] if "media_position" in (dict)(response["attributes"]) else None, - "media_title": response["attributes"]["media_title"] if "media_title" in (dict)(response["attributes"]) else None, - "media_artist": response["attributes"]["media_artist"] if "media_artist" in (dict)(response["attributes"]) else None, - "media_album_name": response["attributes"]["media_album_name"] if "media_album_name" in (dict)(response["attributes"]) else None + "media_duration": response["attributes"]["media_duration"] if "media_duration" in (dict)(response["attributes"]) else 0, + "media_position": p, + "media_title": response["attributes"]["media_title"] if "media_title" in (dict)(response["attributes"]) else "Nothing playing", + "media_artist": response["attributes"]["media_artist"] if "media_artist" in (dict)(response["attributes"]) else "", + "media_album_name": response["attributes"]["media_album_name"] if "media_album_name" in (dict)(response["attributes"]) else "" } \ No newline at end of file