aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristopher Zimmerman <madroach@zakweb.de>2009-06-26 09:26:12 +0200
committerMax Kellermann <max@duempel.org>2009-06-26 09:26:12 +0200
commita641f562f3aab2de95555c3c33133341d0f274b7 (patch)
tree2817b3db830bcb3180cac58a2675d4043da4739f
parentfe96bdf7e6d4705788565149b618759234d4339a (diff)
downloadmpd-a641f562f3aab2de95555c3c33133341d0f274b7.tar.gz
mpd-a641f562f3aab2de95555c3c33133341d0f274b7.tar.xz
mpd-a641f562f3aab2de95555c3c33133341d0f274b7.zip
playlist_state: save state when stopped
At the moment mpd doesn't store or restore the current track to/from its state file when the daemon is stopped/started while in 'stopped' state. I believe the preferred behaviour would be to store and restore the current track even when the daemon is in stopped state when shutting down. I made a small patch to adapt this behaviour. If you believe this is not the preferred behaviour, maybe this should be realized as a configuration option. I'm not sure how to do this, but made a small comment, where one would have to put the option.
-rw-r--r--NEWS1
-rw-r--r--src/playlist_state.c14
2 files changed, 10 insertions, 5 deletions
diff --git a/NEWS b/NEWS
index 94941fc21..fc702032a 100644
--- a/NEWS
+++ b/NEWS
@@ -6,6 +6,7 @@ ver 0.16 (20??/??/??)
* commands:
- added new "status" line with more precise "elapsed time"
* log unused/unknown block parameters
+* save state when stopped
ver 0.15 (2009/06/23)
diff --git a/src/playlist_state.c b/src/playlist_state.c
index af0f7982b..9530b7d36 100644
--- a/src/playlist_state.c
+++ b/src/playlist_state.c
@@ -66,8 +66,12 @@ playlist_state_save(FILE *fp, const struct playlist *playlist)
playlist->current));
fprintf(fp, "%s%i\n", PLAYLIST_STATE_FILE_TIME,
getPlayerElapsedTime());
- } else
+ } else {
fprintf(fp, "%s\n", PLAYLIST_STATE_FILE_STATE_STOP);
+ fprintf(fp, "%s%i\n", PLAYLIST_STATE_FILE_CURRENT,
+ queue_order_to_position(&playlist->queue,
+ playlist->current));
+ }
fprintf(fp, "%s%i\n", PLAYLIST_STATE_FILE_RANDOM,
playlist->queue.random);
@@ -172,19 +176,19 @@ playlist_state_restore(FILE *fp, struct playlist *playlist)
(PLAYLIST_STATE_FILE_CURRENT)]));
} else if (g_str_has_prefix(buffer,
PLAYLIST_STATE_FILE_PLAYLIST_BEGIN)) {
- if (state == PLAYER_STATE_STOP)
- current = -1;
playlist_state_load(fp, playlist, buffer);
}
}
setPlaylistRandomStatus(playlist, random_mode);
- if (state != PLAYER_STATE_STOP && !queue_is_empty(&playlist->queue)) {
+ if (!queue_is_empty(&playlist->queue)) {
if (!queue_valid_position(&playlist->queue, current))
current = 0;
- if (seek_time == 0)
+ if (state == PLAYER_STATE_STOP /* && config_option */)
+ playlist->current = current;
+ else if (seek_time == 0)
playPlaylist(playlist, current);
else
seekSongInPlaylist(playlist, current, seek_time);