From 3dc6612cd9acae1f0cd5e471a422939c0a3dd203 Mon Sep 17 00:00:00 2001 From: Kris Bennett <1435262+i00@users.noreply.github.com> Date: Fri, 27 Mar 2020 04:31:23 +1000 Subject: [PATCH] Add Android TV cover art (screen content) (#33232) * Android TV * Android TV * Android TV * Android TV * Android TV * Android TV * Android TV * Android TV * Android TV --- .../components/androidtv/media_player.py | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/homeassistant/components/androidtv/media_player.py b/homeassistant/components/androidtv/media_player.py index 93666958919..f9ec68c8742 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,34 @@ class ADBDevice(MediaPlayerDevice): """Return the device unique id.""" return self._unique_id + async def async_get_media_image(self): + """Fetch current playing image.""" + 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) + if media_data: + return media_data, "image/png" + return None, None + + @adb_decorator() + def get_raw_media_data(self): + """Raw base64 image data.""" + 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", "")) + + return None + + @property + def media_image_hash(self): + """Hash value for media image.""" + return f"{datetime.now().timestamp()}" + @adb_decorator() def media_play(self): """Send play command."""