Handle media position in Bravia TV (#107080)

Handle media position in BraviaTV
This commit is contained in:
Artem Draft 2024-02-22 18:22:07 +03:00 committed by GitHub
parent ef66560744
commit a7a19786cc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 24 additions and 1 deletions

View File

@ -2,7 +2,7 @@
from __future__ import annotations from __future__ import annotations
from collections.abc import Awaitable, Callable, Coroutine, Iterable from collections.abc import Awaitable, Callable, Coroutine, Iterable
from datetime import timedelta from datetime import datetime, timedelta
from functools import wraps from functools import wraps
import logging import logging
from types import MappingProxyType from types import MappingProxyType
@ -87,6 +87,8 @@ class BraviaTVCoordinator(DataUpdateCoordinator[None]):
self.media_content_type: MediaType | None = None self.media_content_type: MediaType | None = None
self.media_uri: str | None = None self.media_uri: str | None = None
self.media_duration: int | None = None self.media_duration: int | None = None
self.media_position: int | None = None
self.media_position_updated_at: datetime | None = None
self.volume_level: float | None = None self.volume_level: float | None = None
self.volume_target: str | None = None self.volume_target: str | None = None
self.volume_muted = False self.volume_muted = False
@ -185,6 +187,16 @@ class BraviaTVCoordinator(DataUpdateCoordinator[None]):
self.media_content_id = None self.media_content_id = None
self.media_content_type = None self.media_content_type = None
self.source = None self.source = None
if start_datetime := playing_info.get("startDateTime"):
start_datetime = datetime.fromisoformat(start_datetime)
current_datetime = datetime.now().replace(tzinfo=start_datetime.tzinfo)
self.media_position = int(
(current_datetime - start_datetime).total_seconds()
)
self.media_position_updated_at = datetime.now()
else:
self.media_position = None
self.media_position_updated_at = None
if self.media_uri: if self.media_uri:
self.media_content_id = self.media_uri self.media_content_id = self.media_uri
if self.media_uri[:8] == "extInput": if self.media_uri[:8] == "extInput":

View File

@ -1,6 +1,7 @@
"""Media player support for Bravia TV integration.""" """Media player support for Bravia TV integration."""
from __future__ import annotations from __future__ import annotations
from datetime import datetime
from typing import Any from typing import Any
from homeassistant.components.media_player import ( from homeassistant.components.media_player import (
@ -111,6 +112,16 @@ class BraviaTVMediaPlayer(BraviaTVEntity, MediaPlayerEntity):
"""Duration of current playing media in seconds.""" """Duration of current playing media in seconds."""
return self.coordinator.media_duration return self.coordinator.media_duration
@property
def media_position(self) -> int | None:
"""Position of current playing media in seconds."""
return self.coordinator.media_position
@property
def media_position_updated_at(self) -> datetime | None:
"""When was the position of the current playing media valid."""
return self.coordinator.media_position_updated_at
async def async_turn_on(self) -> None: async def async_turn_on(self) -> None:
"""Turn the device on.""" """Turn the device on."""
await self.coordinator.async_turn_on() await self.coordinator.async_turn_on()