From 6746dd019679e9f8d50318672a761e56a6ee07a7 Mon Sep 17 00:00:00 2001 From: Jens Luetjen Date: Tue, 5 Jan 2016 07:41:02 +0100 Subject: [PATCH] More function for config value core.restore_state - New values for core.restore_state : "volume", "last" - Update changelog - Adjust logger output --- docs/changelog.rst | 3 +++ docs/config.rst | 5 ++++- mopidy/core/actor.py | 16 +++++++++++----- mopidy/core/playback.py | 9 +++++++-- mopidy/models/__init__.py | 2 +- 5 files changed, 26 insertions(+), 9 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 4f49b8e5..db76c501 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -16,6 +16,9 @@ Core API - Start ``tlid`` counting at 1 instead of 0 to keep in sync with MPD's ``songid``. +- Persist state between runs. The amount of data to persist can be + controlled by config value :confval:`core/restore_state` + Local backend -------------- diff --git a/docs/config.rst b/docs/config.rst index 50d58e39..5b7a2c29 100644 --- a/docs/config.rst +++ b/docs/config.rst @@ -118,8 +118,11 @@ Core configuration Allowed values: - ``off``: restore nothing + - ``volume``: restore volume - ``load``: restore settings, volume and play queue - - ``play``: restore settings, volume, play queue and start playback + - ``last``: like ``load``, additional start playback if last state was + 'playing' + - ``play``: like ``load``, additional start playback Audio configuration ------------------- diff --git a/mopidy/core/actor.py b/mopidy/core/actor.py index e017a13b..cc229827 100644 --- a/mopidy/core/actor.py +++ b/mopidy/core/actor.py @@ -143,10 +143,15 @@ class Core( amount = self._config['core']['restore_state'] if not amount or 'off' == amount: pass + elif 'volume' == amount: + coverage = ['volume'] elif 'load' == amount: coverage = ['tracklist', 'mode', 'volume', 'history'] + elif 'last' == amount: + coverage = ['tracklist', 'mode', 'play-last', 'volume', + 'history'] elif 'play' == amount: - coverage = ['tracklist', 'mode', 'autoplay', 'volume', + coverage = ['tracklist', 'mode', 'play-always', 'volume', 'history'] else: logger.warn('Unknown value for config ' @@ -175,14 +180,13 @@ class Core( :param name: a name (for later use with :meth:`load_state`) :type name: str """ - logger.info('Save state: "%s"', name) if not name: raise TypeError('missing file name') file_name = os.path.join( self._config['core']['data_dir'], name) file_name += '.state' - logger.info('Save state to "%s"', file_name) + logger.info('Save state to %s', file_name) data = {} data['tracklist'] = self.tracklist._export_state() @@ -190,6 +194,7 @@ class Core( data['playback'] = self.playback._export_state() data['mixer'] = self.mixer._export_state() storage.save(file_name, data) + logger.debug('Save state done') def load_state(self, name, coverage): """ @@ -210,13 +215,13 @@ class Core( :param coverage: amount of data to restore :type coverage: list of string (see above) """ - logger.info('Load state: "%s"', name) if not name: raise TypeError('missing file name') file_name = os.path.join( self._config['core']['data_dir'], name) file_name += '.state' + logger.info('Load state from %s', file_name) data = storage.load(file_name) if 'history' in data: @@ -224,10 +229,11 @@ class Core( if 'tracklist' in data: self.tracklist._restore_state(data['tracklist'], coverage) if 'playback' in data: + # playback after tracklist self.playback._restore_state(data['playback'], coverage) if 'mixer' in data: self.mixer._restore_state(data['mixer'], coverage) - logger.debug('Load state done. file_name="%s"', file_name) + logger.debug('Load state done.') class Backends(list): diff --git a/mopidy/core/playback.py b/mopidy/core/playback.py index 33f37802..5efbd382 100644 --- a/mopidy/core/playback.py +++ b/mopidy/core/playback.py @@ -536,7 +536,12 @@ class PlaybackController(object): if state: if not isinstance(state, models.PlaybackState): raise TypeError('Expect an argument of type "PlaybackState"') - if 'autoplay' in coverage: - if state.tl_track is not None: + new_state = '' + if 'play-always' in coverage: + new_state = PlaybackState.PLAYING + if 'play-last' in coverage: + new_state = state.state + if state.tl_track is not None: + if PlaybackState.PLAYING == new_state: self.play(tl_track=state.tl_track) # TODO: seek to state.position? diff --git a/mopidy/models/__init__.py b/mopidy/models/__init__.py index fc6e9be6..e919bbbf 100644 --- a/mopidy/models/__init__.py +++ b/mopidy/models/__init__.py @@ -417,7 +417,7 @@ class PlaybackState(ValidatedImmutableObject): :param position: play position :type position: int :param state: playback state - :type state: :class:`TlTrack` + :type state: :class:`validation.PLAYBACK_STATES` """ # The current playing track. Read-only.