@@ -28,11 +28,11 @@ class DeviceInfo(DataClassDictMixin):
2828 mac_address : str | None = None
2929
3030
31- @dataclass
31+ @dataclass ( kw_only = True )
3232class PlayerMedia (DataClassDictMixin ):
3333 """Metadata of Media loading/loaded into a player."""
3434
35- uri : str # uri or other identifier of the loaded media
35+ uri : str # uri or other identifier of the loaded media - mandatory!
3636 media_type : MediaType = MediaType .UNKNOWN
3737 title : str | None = None # optional
3838 artist : str | None = None # optional
@@ -41,7 +41,18 @@ class PlayerMedia(DataClassDictMixin):
4141 duration : int | None = None # optional
4242 source_id : str | None = None # optional (ID of the source, may be a queue id)
4343 queue_item_id : str | None = None # only present for requests from queue controller
44- custom_data : dict [str , Any ] | None = None # optional
44+ custom_data : dict [str , Any ] | None = None # optional - must be serializable
45+ elapsed_time : int | None = (
46+ None # optional - elapsed playback time of the currently playing media
47+ )
48+ elapsed_time_last_updated : float | None = None # UTC timestamp
49+
50+ @property
51+ def corrected_elapsed_time (self ) -> float | None :
52+ """Return the corrected/realtime elapsed time (while playing)."""
53+ if self .elapsed_time is None or self .elapsed_time_last_updated is None :
54+ return None
55+ return self .elapsed_time + (time .time () - self .elapsed_time_last_updated )
4556
4657
4758@dataclass
0 commit comments