Skip to content

Commit f64ce24

Browse files
committed
Extend Playermedia
1 parent f6d5cc9 commit f64ce24

File tree

2 files changed

+22
-3
lines changed

2 files changed

+22
-3
lines changed

music_assistant_models/player.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@ class DeviceInfo(DataClassDictMixin):
2828
mac_address: str | None = None
2929

3030

31-
@dataclass
31+
@dataclass(kw_only=True)
3232
class 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

music_assistant_models/streamdetails.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from __future__ import annotations
44

5+
import time
56
from dataclasses import dataclass, field
67
from datetime import UTC, datetime
78
from typing import Any
@@ -36,6 +37,13 @@ class StreamMetadata(DataClassDictMixin):
3637
elapsed_time: int | None = None
3738
elapsed_time_last_updated: float | None = None # UTC timestamp
3839

40+
@property
41+
def corrected_elapsed_time(self) -> float | None:
42+
"""Return the corrected/realtime elapsed time (while playing)."""
43+
if self.elapsed_time is None or self.elapsed_time_last_updated is None:
44+
return None
45+
return self.elapsed_time + (time.time() - self.elapsed_time_last_updated)
46+
3947

4048
@dataclass
4149
class MultiPartPath:

0 commit comments

Comments
 (0)