From d3744f285229a40ed10b41b5e33bc27dbbd2aedf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre=20St=C3=A5hl?= Date: Mon, 23 Dec 2019 12:10:07 +0100 Subject: [PATCH] Fix position in MRP when elapsed time is missing --- pyatv/mrp/__init__.py | 20 +++++++++++++------- pyatv/mrp/player_state.py | 2 +- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/pyatv/mrp/__init__.py b/pyatv/mrp/__init__.py index f1248e33f..331f3f3c3 100644 --- a/pyatv/mrp/__init__.py +++ b/pyatv/mrp/__init__.py @@ -226,14 +226,20 @@ def total_time(self): @property def position(self): """Position in the playing media (seconds).""" + # If we don't have reference time, we can't do anything + if not self._state.timestamp: + return None + elapsed_time = self._state.metadata_field('elapsedTime') - if elapsed_time: - now = datetime.datetime.now() - diff = (now - self._state.timestamp).total_seconds() - if self.device_state == const.DEVICE_STATE_PLAYING: - return int(elapsed_time + diff) - return int(elapsed_time) - return None + now = datetime.datetime.now() + diff = (now - self._state.timestamp).total_seconds() + + # If elapsed time is available, we make the assumption that + # it is zero (playback started at reference time) + elapsed_time = elapsed_time or 0 + if self.device_state == const.DEVICE_STATE_PLAYING: + return int(elapsed_time + diff) + return int(elapsed_time) def _get_command_info(self, command): for cmd in self._state.supported_commands: diff --git a/pyatv/mrp/player_state.py b/pyatv/mrp/player_state.py index 5831e6745..e38575a39 100644 --- a/pyatv/mrp/player_state.py +++ b/pyatv/mrp/player_state.py @@ -23,7 +23,7 @@ def __init__(self): """Initialize a new PlayerState instance.""" self.playback_state = None self.supported_commands = [] - self.timestamp = 0 + self.timestamp = None self.items = [] self.location = 0