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