Commit a5960c20 authored by Max Kellermann's avatar Max Kellermann

playlist_control: "previous" really plays the previous song

No more CD player emulation. The current behaviour of "previous" is difficult for a client to predict, because it does not definitely know the current position within the song. If a client wants to restart the current song, it can always send "playid".
parent aa71ce4c
...@@ -5,6 +5,7 @@ ver 0.16 (20??/??/??) ...@@ -5,6 +5,7 @@ ver 0.16 (20??/??/??)
- removed the deprecated "volume" command - removed the deprecated "volume" command
- added the "findadd" command - added the "findadd" command
- range support for "delete" - range support for "delete"
- "previous" really plays the previous song
* input: * input:
- lastfm: use metadata - lastfm: use metadata
* tags: * tags:
......
...@@ -62,16 +62,12 @@ playlist_init(struct playlist *playlist) ...@@ -62,16 +62,12 @@ playlist_init(struct playlist *playlist)
playlist->queued = -1; playlist->queued = -1;
playlist->current = -1; playlist->current = -1;
playlist->prev_elapsed = g_timer_new();
} }
void void
playlist_finish(struct playlist *playlist) playlist_finish(struct playlist *playlist)
{ {
queue_finish(&playlist->queue); queue_finish(&playlist->queue);
g_timer_destroy(playlist->prev_elapsed);
} }
/** /**
......
...@@ -81,13 +81,6 @@ struct playlist { ...@@ -81,13 +81,6 @@ struct playlist {
* This variable is only valid if #playing is true. * This variable is only valid if #playing is true.
*/ */
int queued; int queued;
/**
* This timer tracks the time elapsed since the last "prev"
* command. If that is less than one second ago, "prev" jumps
* to the previous song instead of rewinding the current song.
*/
GTimer *prev_elapsed;
}; };
/** the global playlist object */ /** the global playlist object */
......
...@@ -30,14 +30,6 @@ ...@@ -30,14 +30,6 @@
#undef G_LOG_DOMAIN #undef G_LOG_DOMAIN
#define G_LOG_DOMAIN "playlist" #define G_LOG_DOMAIN "playlist"
enum {
/**
* When the "prev" command is received, rewind the current
* track if this number of seconds has already elapsed.
*/
PLAYLIST_PREV_UNLESS_ELAPSED = 10,
};
void playlist_stop(struct playlist *playlist) void playlist_stop(struct playlist *playlist)
{ {
if (!playlist->playing) if (!playlist->playing)
...@@ -191,29 +183,21 @@ void playlist_previous(struct playlist *playlist) ...@@ -191,29 +183,21 @@ void playlist_previous(struct playlist *playlist)
if (!playlist->playing) if (!playlist->playing)
return; return;
if (g_timer_elapsed(playlist->prev_elapsed, NULL) >= 1.0 && assert(queue_length(&playlist->queue) > 0);
getPlayerElapsedTime() > PLAYLIST_PREV_UNLESS_ELAPSED) {
/* re-start playing the current song (just like the
"prev" button on CD players) */
playlist_play_order(playlist, playlist->current); if (playlist->current > 0) {
/* play the preceding song */
playlist_play_order(playlist,
playlist->current - 1);
} else if (playlist->queue.repeat) {
/* play the last song in "repeat" mode */
playlist_play_order(playlist,
queue_length(&playlist->queue) - 1);
} else { } else {
if (playlist->current > 0) { /* re-start playing the current song if it's
/* play the preceding song */ the first one */
playlist_play_order(playlist, playlist_play_order(playlist, playlist->current);
playlist->current - 1);
} else if (playlist->queue.repeat) {
/* play the last song in "repeat" mode */
playlist_play_order(playlist,
queue_length(&playlist->queue) - 1);
} else {
/* re-start playing the current song if it's
the first one */
playlist_play_order(playlist, playlist->current);
}
} }
g_timer_start(playlist->prev_elapsed);
} }
enum playlist_result enum playlist_result
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment