From 616dc9d4659ca7486dfd252efeda0531766409cc Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Sat, 25 Apr 2009 14:08:31 +0200 Subject: 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). --- src/playlist.c | 4 ++++ src/playlist.h | 7 +++++++ src/playlist_control.c | 10 ++++------ 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/playlist.c b/src/playlist.c index 79f6022a5..35c09329a 100644 --- a/src/playlist.c +++ b/src/playlist.c @@ -61,12 +61,16 @@ playlist_init(struct playlist *playlist) playlist->queued = -1; playlist->current = -1; + + playlist->prev_elapsed = g_timer_new(); } void playlist_finish(struct playlist *playlist) { queue_finish(&playlist->queue); + + g_timer_destroy(playlist->prev_elapsed); } /** diff --git a/src/playlist.h b/src/playlist.h index 4237cea98..57b2450fa 100644 --- a/src/playlist.h +++ b/src/playlist.h @@ -82,6 +82,13 @@ struct playlist { * This variable is only valid if #playing is true. */ 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 */ diff --git a/src/playlist_control.c b/src/playlist_control.c index 4f51345c3..f1702149a 100644 --- a/src/playlist_control.c +++ b/src/playlist_control.c @@ -185,15 +185,11 @@ nextSongInPlaylist(struct playlist *playlist) void previousSongInPlaylist(struct playlist *playlist) { - static time_t lastTime; - time_t diff = time(NULL) - lastTime; - - lastTime += diff; - if (!playlist->playing) 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 "prev" button on CD players) */ @@ -213,6 +209,8 @@ void previousSongInPlaylist(struct playlist *playlist) playPlaylistOrderNumber(playlist, playlist->current); } } + + g_timer_start(playlist->prev_elapsed); } enum playlist_result -- cgit v1.2.3