From bb8cfed3d86253d5b2d9aaf924692cdf1c38d193 Mon Sep 17 00:00:00 2001 From: i00 <1435262+i00@users.noreply.github.com> Date: Wed, 25 Mar 2020 06:05:11 +0000 Subject: [PATCH 1/9] Android TV --- .../components/androidtv/media_player.py | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/homeassistant/components/androidtv/media_player.py b/homeassistant/components/androidtv/media_player.py index 9366695891902f..e17d0c0d24aa25 100644 --- a/homeassistant/components/androidtv/media_player.py +++ b/homeassistant/components/androidtv/media_player.py @@ -1,4 +1,6 @@ """Support for functionality to interact with Android TV / Fire TV devices.""" +import binascii +from datetime import datetime import functools import logging import os @@ -475,6 +477,32 @@ def unique_id(self): """Return the device unique id.""" return self._unique_id + async def async_get_media_image(self): + """Fetch current playing image.""" + media_data = self.get_raw_media_data() + if media_data: + return binascii.a2b_base64(media_data), "image/png" + return None, None + + def get_raw_media_data(self): + """Raw base64 image data.""" + if self.state not in [STATE_OFF, None]: + + try: + response = self.aftv.adb_shell("screencap -p | base64") + except UnicodeDecodeError: + return None + + if isinstance(response, str) and response.strip(): + return response.strip().replace("\n", "") + + return None + + @property + def media_image_url(self): + """URL for obtaining a screen capture.""" + return f"{datetime.now().timestamp()}" + @adb_decorator() def media_play(self): """Send play command.""" From 95e1ed4108ef8c60b2ab34742687737c4430ea1a Mon Sep 17 00:00:00 2001 From: i00 <1435262+i00@users.noreply.github.com> Date: Wed, 25 Mar 2020 06:18:24 +0000 Subject: [PATCH 2/9] Android TV --- homeassistant/components/androidtv/media_player.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/androidtv/media_player.py b/homeassistant/components/androidtv/media_player.py index e17d0c0d24aa25..aa5c665239d2b7 100644 --- a/homeassistant/components/androidtv/media_player.py +++ b/homeassistant/components/androidtv/media_player.py @@ -490,7 +490,7 @@ def get_raw_media_data(self): try: response = self.aftv.adb_shell("screencap -p | base64") - except UnicodeDecodeError: + except Exception: return None if isinstance(response, str) and response.strip(): From e07efb7bf1c2b31daa7f709b041ab592907d4968 Mon Sep 17 00:00:00 2001 From: i00 <1435262+i00@users.noreply.github.com> Date: Wed, 25 Mar 2020 07:59:17 +0000 Subject: [PATCH 3/9] Android TV --- homeassistant/components/androidtv/media_player.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/androidtv/media_player.py b/homeassistant/components/androidtv/media_player.py index aa5c665239d2b7..e17d0c0d24aa25 100644 --- a/homeassistant/components/androidtv/media_player.py +++ b/homeassistant/components/androidtv/media_player.py @@ -490,7 +490,7 @@ def get_raw_media_data(self): try: response = self.aftv.adb_shell("screencap -p | base64") - except Exception: + except UnicodeDecodeError: return None if isinstance(response, str) and response.strip(): From a10b15402537d7443995c695d2f66f47e7327afd Mon Sep 17 00:00:00 2001 From: i00 <1435262+i00@users.noreply.github.com> Date: Wed, 25 Mar 2020 22:07:42 +0000 Subject: [PATCH 4/9] Android TV --- homeassistant/components/androidtv/media_player.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/androidtv/media_player.py b/homeassistant/components/androidtv/media_player.py index e17d0c0d24aa25..8aea8f359231aa 100644 --- a/homeassistant/components/androidtv/media_player.py +++ b/homeassistant/components/androidtv/media_player.py @@ -479,11 +479,12 @@ def unique_id(self): async def async_get_media_image(self): """Fetch current playing image.""" - media_data = self.get_raw_media_data() + media_data = await self.hass.async_add_executor_job(self.get_raw_media_data) if media_data: - return binascii.a2b_base64(media_data), "image/png" + return media_data, "image/png" return None, None + @adb_decorator() def get_raw_media_data(self): """Raw base64 image data.""" if self.state not in [STATE_OFF, None]: @@ -494,7 +495,7 @@ def get_raw_media_data(self): return None if isinstance(response, str) and response.strip(): - return response.strip().replace("\n", "") + return binascii.a2b_base64(response.strip().replace("\n", "")) return None From 3b0b17d66ccba9e6c81a56c54e8eb86992ed3371 Mon Sep 17 00:00:00 2001 From: i00 <1435262+i00@users.noreply.github.com> Date: Thu, 26 Mar 2020 00:11:03 +0000 Subject: [PATCH 5/9] Android TV --- homeassistant/components/androidtv/media_player.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/androidtv/media_player.py b/homeassistant/components/androidtv/media_player.py index 8aea8f359231aa..b8cc83ee4aba8d 100644 --- a/homeassistant/components/androidtv/media_player.py +++ b/homeassistant/components/androidtv/media_player.py @@ -500,10 +500,12 @@ def get_raw_media_data(self): return None @property - def media_image_url(self): - """URL for obtaining a screen capture.""" + def media_image_hash(self): + """Hash value for media image.""" return f"{datetime.now().timestamp()}" + return None + @adb_decorator() def media_play(self): """Send play command.""" From 5f2bbdeeb4100406a9f85aa5aea2b80248d94804 Mon Sep 17 00:00:00 2001 From: i00 <1435262+i00@users.noreply.github.com> Date: Thu, 26 Mar 2020 01:57:09 +0000 Subject: [PATCH 6/9] Android TV --- .../components/androidtv/media_player.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/homeassistant/components/androidtv/media_player.py b/homeassistant/components/androidtv/media_player.py index b8cc83ee4aba8d..c4cf20626d1429 100644 --- a/homeassistant/components/androidtv/media_player.py +++ b/homeassistant/components/androidtv/media_player.py @@ -487,15 +487,16 @@ async def async_get_media_image(self): @adb_decorator() def get_raw_media_data(self): """Raw base64 image data.""" - if self.state not in [STATE_OFF, None]: + if self.state in [STATE_OFF, None]: + return None - try: - response = self.aftv.adb_shell("screencap -p | base64") - except UnicodeDecodeError: - return None + try: + response = self.aftv.adb_shell("screencap -p | base64") + except UnicodeDecodeError: + return None - if isinstance(response, str) and response.strip(): - return binascii.a2b_base64(response.strip().replace("\n", "")) + if isinstance(response, str) and response.strip(): + return binascii.a2b_base64(response.strip().replace("\n", "")) return None From f663115883eb624eeaf85d450ac0ed6eb0c4751f Mon Sep 17 00:00:00 2001 From: i00 <1435262+i00@users.noreply.github.com> Date: Thu, 26 Mar 2020 01:59:27 +0000 Subject: [PATCH 7/9] Android TV --- homeassistant/components/androidtv/media_player.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/androidtv/media_player.py b/homeassistant/components/androidtv/media_player.py index c4cf20626d1429..bc593ec3810973 100644 --- a/homeassistant/components/androidtv/media_player.py +++ b/homeassistant/components/androidtv/media_player.py @@ -479,6 +479,9 @@ def unique_id(self): async def async_get_media_image(self): """Fetch current playing image.""" + if self.state in [STATE_OFF, None]: + return None, None + media_data = await self.hass.async_add_executor_job(self.get_raw_media_data) if media_data: return media_data, "image/png" @@ -487,9 +490,6 @@ async def async_get_media_image(self): @adb_decorator() def get_raw_media_data(self): """Raw base64 image data.""" - if self.state in [STATE_OFF, None]: - return None - try: response = self.aftv.adb_shell("screencap -p | base64") except UnicodeDecodeError: From a64ffe58b53289cc7c51e5225ab425a9791c9a2b Mon Sep 17 00:00:00 2001 From: i00 <1435262+i00@users.noreply.github.com> Date: Thu, 26 Mar 2020 03:15:51 +0000 Subject: [PATCH 8/9] Android TV --- homeassistant/components/androidtv/media_player.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/homeassistant/components/androidtv/media_player.py b/homeassistant/components/androidtv/media_player.py index bc593ec3810973..ec621c2ddf177e 100644 --- a/homeassistant/components/androidtv/media_player.py +++ b/homeassistant/components/androidtv/media_player.py @@ -505,8 +505,6 @@ def media_image_hash(self): """Hash value for media image.""" return f"{datetime.now().timestamp()}" - return None - @adb_decorator() def media_play(self): """Send play command.""" From aff28e515868ae43fc06d7f8d9369473e0cd061d Mon Sep 17 00:00:00 2001 From: i00 <1435262+i00@users.noreply.github.com> Date: Thu, 26 Mar 2020 03:55:24 +0000 Subject: [PATCH 9/9] Android TV --- homeassistant/components/androidtv/media_player.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/androidtv/media_player.py b/homeassistant/components/androidtv/media_player.py index ec621c2ddf177e..f9ec68c87426b5 100644 --- a/homeassistant/components/androidtv/media_player.py +++ b/homeassistant/components/androidtv/media_player.py @@ -479,7 +479,7 @@ def unique_id(self): async def async_get_media_image(self): """Fetch current playing image.""" - if self.state in [STATE_OFF, None]: + if self.state in [STATE_OFF, None] or not self.available: return None, None media_data = await self.hass.async_add_executor_job(self.get_raw_media_data)