Handle media position in Bravia TV (#107080)

Handle media position in BraviaTV
pull/111198/head
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 collections.abc import Awaitable, Callable, Coroutine, Iterable
from datetime import timedelta
from datetime import datetime, timedelta
from functools import wraps
import logging
from types import MappingProxyType
@ -87,6 +87,8 @@ class BraviaTVCoordinator(DataUpdateCoordinator[None]):
self.media_content_type: MediaType | None = None
self.media_uri: str | 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_target: str | None = None
self.volume_muted = False
@ -185,6 +187,16 @@ class BraviaTVCoordinator(DataUpdateCoordinator[None]):
self.media_content_id = None
self.media_content_type = 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:
self.media_content_id = self.media_uri
if self.media_uri[:8] == "extInput":

View File

@ -1,6 +1,7 @@
"""Media player support for Bravia TV integration."""
from __future__ import annotations
from datetime import datetime
from typing import Any
from homeassistant.components.media_player import (
@ -111,6 +112,16 @@ class BraviaTVMediaPlayer(BraviaTVEntity, MediaPlayerEntity):
"""Duration of current playing media in seconds."""
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:
"""Turn the device on."""
await self.coordinator.async_turn_on()