Commit 616dc9d4 authored by Max Kellermann's avatar Max Kellermann

playlist_control: use GTimer in previousSongInPlaylist()

To determine whether to rewind the current song or to go to the previous song, use a GTimer instead of manually diffing time(NULL).
parent d2010c02
...@@ -61,12 +61,16 @@ playlist_init(struct playlist *playlist) ...@@ -61,12 +61,16 @@ 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);
} }
/** /**
......
...@@ -82,6 +82,13 @@ struct playlist { ...@@ -82,6 +82,13 @@ 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 */
......
...@@ -185,15 +185,11 @@ nextSongInPlaylist(struct playlist *playlist) ...@@ -185,15 +185,11 @@ nextSongInPlaylist(struct playlist *playlist)
void previousSongInPlaylist(struct playlist *playlist) void previousSongInPlaylist(struct playlist *playlist)
{ {
static time_t lastTime;
time_t diff = time(NULL) - lastTime;
lastTime += diff;
if (!playlist->playing) if (!playlist->playing)
return; return;
if (diff && getPlayerElapsedTime() > PLAYLIST_PREV_UNLESS_ELAPSED) { if (g_timer_elapsed(playlist->prev_elapsed, NULL) >= 1.0 &&
getPlayerElapsedTime() > PLAYLIST_PREV_UNLESS_ELAPSED) {
/* re-start playing the current song (just like the /* re-start playing the current song (just like the
"prev" button on CD players) */ "prev" button on CD players) */
...@@ -213,6 +209,8 @@ void previousSongInPlaylist(struct playlist *playlist) ...@@ -213,6 +209,8 @@ void previousSongInPlaylist(struct playlist *playlist)
playPlaylistOrderNumber(playlist, playlist->current); playPlaylistOrderNumber(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