From e7519829ac588e4b261c1832bb0e7d6ffbd47322 Mon Sep 17 00:00:00 2001 From: Romain Bignon Date: Fri, 27 Mar 2009 15:28:49 +0100 Subject: renamed smartstop to single and changed behavior When single mode is enabled, after current song it stops playback, or it replay same song if repeat mode is activated. --- src/command.c | 12 ++++++------ src/playlist.c | 23 ++++++++++++++++------- src/playlist.h | 4 ++-- src/playlist_control.c | 4 ++-- src/playlist_state.c | 14 +++++++------- src/queue.c | 11 ++++++++--- src/queue.h | 4 ++-- 7 files changed, 43 insertions(+), 29 deletions(-) (limited to 'src') diff --git a/src/command.c b/src/command.c index 82b088587..69fbe514f 100644 --- a/src/command.c +++ b/src/command.c @@ -59,7 +59,7 @@ #define COMMAND_STATUS_VOLUME "volume" #define COMMAND_STATUS_STATE "state" #define COMMAND_STATUS_REPEAT "repeat" -#define COMMAND_STATUS_SMARTSTOP "smartstop" +#define COMMAND_STATUS_SINGLE "single" #define COMMAND_STATUS_RANDOM "random" #define COMMAND_STATUS_PLAYLIST "playlist" #define COMMAND_STATUS_PLAYLIST_LENGTH "playlistlength" @@ -470,7 +470,7 @@ handle_status(struct client *client, COMMAND_STATUS_VOLUME ": %i\n" COMMAND_STATUS_REPEAT ": %i\n" COMMAND_STATUS_RANDOM ": %i\n" - COMMAND_STATUS_SMARTSTOP ": %i\n" + COMMAND_STATUS_SINGLE ": %i\n" COMMAND_STATUS_PLAYLIST ": %li\n" COMMAND_STATUS_PLAYLIST_LENGTH ": %i\n" COMMAND_STATUS_CROSSFADE ": %i\n" @@ -478,7 +478,7 @@ handle_status(struct client *client, volume_level_get(), getPlaylistRepeatStatus(&g_playlist), getPlaylistRandomStatus(&g_playlist), - getPlaylistSmartstopStatus(&g_playlist), + getPlaylistSingleStatus(&g_playlist), getPlaylistVersion(&g_playlist), getPlaylistLength(&g_playlist), (int)(getPlayerCrossFade() + 0.5), @@ -1096,7 +1096,7 @@ handle_repeat(struct client *client, G_GNUC_UNUSED int argc, char *argv[]) } static enum command_return -handle_smartstop(struct client *client, G_GNUC_UNUSED int argc, char *argv[]) +handle_single(struct client *client, G_GNUC_UNUSED int argc, char *argv[]) { int status; @@ -1109,7 +1109,7 @@ handle_smartstop(struct client *client, G_GNUC_UNUSED int argc, char *argv[]) return COMMAND_RETURN_ERROR; } - setPlaylistSmartstopStatus(&g_playlist, status); + setPlaylistSingleStatus(&g_playlist, status); return COMMAND_RETURN_OK; } @@ -1623,7 +1623,7 @@ static const struct command commands[] = { { "seekid", PERMISSION_CONTROL, 2, 2, handle_seekid }, { "setvol", PERMISSION_CONTROL, 1, 1, handle_setvol }, { "shuffle", PERMISSION_CONTROL, 0, 1, handle_shuffle }, - { "smartstop", PERMISSION_CONTROL, 1, 1, handle_smartstop }, + { "single", PERMISSION_CONTROL, 1, 1, handle_single }, { "stats", PERMISSION_READ, 0, 0, handle_stats }, { "status", PERMISSION_READ, 0, 0, handle_status }, #ifdef ENABLE_SQLITE diff --git a/src/playlist.c b/src/playlist.c index 0ec46492a..776308db0 100644 --- a/src/playlist.c +++ b/src/playlist.c @@ -262,9 +262,9 @@ getPlaylistRandomStatus(const struct playlist *playlist) } bool -getPlaylistSmartstopStatus(const struct playlist *playlist) +getPlaylistSingleStatus(const struct playlist *playlist) { - return playlist->queue.smartstop; + return playlist->queue.single; } void setPlaylistRepeatStatus(struct playlist *playlist, bool status) @@ -292,12 +292,15 @@ static void orderPlaylist(struct playlist *playlist) queue_restore_order(&playlist->queue); } -void setPlaylistSmartstopStatus(struct playlist *playlist, bool status) +void setPlaylistSingleStatus(struct playlist *playlist, bool status) { - playlist->queue.smartstop = status; + if (status == playlist->queue.single) + return; + + playlist->queue.single = status; /* if the last song is currently being played, the "next song" - might change when repeat mode is toggled */ + might change when single mode is toggled */ playlist_update_queued_song(playlist, playlist_get_queued_song(playlist)); @@ -359,8 +362,14 @@ int getPlaylistNextSong(const struct playlist *playlist) { if (playlist->current >= 0) { - if (playlist->queue.smartstop == 1) - return -1; + if (playlist->queue.single == 1) + { + if (playlist->queue.repeat == 1) + return queue_order_to_position(&playlist->queue, + playlist->current); + else + return -1; + } if (playlist->current + 1 < (int)queue_length(&playlist->queue)) return queue_order_to_position(&playlist->queue, playlist->current + 1); diff --git a/src/playlist.h b/src/playlist.h index 4e11ec421..17862b335 100644 --- a/src/playlist.h +++ b/src/playlist.h @@ -180,9 +180,9 @@ getPlaylistRandomStatus(const struct playlist *playlist); void setPlaylistRandomStatus(struct playlist *playlist, bool status); bool -getPlaylistSmartstopStatus(const struct playlist *playlist); +getPlaylistSingleStatus(const struct playlist *playlist); -void setPlaylistSmartstopStatus(struct playlist *playlist, bool status); +void setPlaylistSingleStatus(struct playlist *playlist, bool status); int getPlaylistCurrentSong(const struct playlist *playlist); diff --git a/src/playlist_control.c b/src/playlist_control.c index 90aab5f29..9e31c07ab 100644 --- a/src/playlist_control.c +++ b/src/playlist_control.c @@ -152,8 +152,8 @@ nextSongInPlaylist(struct playlist *playlist) next_order = queue_next_order(&playlist->queue, playlist->current); if (next_order < 0) { - /* cancel smartstop */ - playlist->queue.smartstop = false; + /* cancel single */ + playlist->queue.single = false; /* no song after this one: stop playback */ stopPlaylist(playlist); return; diff --git a/src/playlist_state.c b/src/playlist_state.c index 6d1756eed..f5b1456d7 100644 --- a/src/playlist_state.c +++ b/src/playlist_state.c @@ -34,7 +34,7 @@ #define PLAYLIST_STATE_FILE_STATE "state: " #define PLAYLIST_STATE_FILE_RANDOM "random: " #define PLAYLIST_STATE_FILE_REPEAT "repeat: " -#define PLAYLIST_STATE_FILE_SMARTSTOP "smartstop: " +#define PLAYLIST_STATE_FILE_SINGLE "single: " #define PLAYLIST_STATE_FILE_CURRENT "current: " #define PLAYLIST_STATE_FILE_TIME "time: " #define PLAYLIST_STATE_FILE_CROSSFADE "crossfade: " @@ -72,8 +72,8 @@ playlist_state_save(FILE *fp, const struct playlist *playlist) playlist->queue.random); fprintf(fp, "%s%i\n", PLAYLIST_STATE_FILE_REPEAT, playlist->queue.repeat); - fprintf(fp, "%s%i\n", PLAYLIST_STATE_FILE_SMARTSTOP, - playlist->queue.smartstop); + fprintf(fp, "%s%i\n", PLAYLIST_STATE_FILE_SINGLE, + playlist->queue.single); fprintf(fp, "%s%i\n", PLAYLIST_STATE_FILE_CROSSFADE, (int)(getPlayerCrossFade())); fprintf(fp, "%s\n", PLAYLIST_STATE_FILE_PLAYLIST_BEGIN); @@ -139,13 +139,13 @@ playlist_state_restore(FILE *fp, struct playlist *playlist) setPlaylistRepeatStatus(playlist, true); } else setPlaylistRepeatStatus(playlist, false); - } else if (g_str_has_prefix(buffer, PLAYLIST_STATE_FILE_SMARTSTOP)) { + } else if (g_str_has_prefix(buffer, PLAYLIST_STATE_FILE_SINGLE)) { if (strcmp - (&(buffer[strlen(PLAYLIST_STATE_FILE_SMARTSTOP)]), + (&(buffer[strlen(PLAYLIST_STATE_FILE_SINGLE)]), "1") == 0) { - setPlaylistSmartstopStatus(playlist, true); + setPlaylistSingleStatus(playlist, true); } else - setPlaylistSmartstopStatus(playlist, false); + setPlaylistSingleStatus(playlist, false); } else if (g_str_has_prefix(buffer, PLAYLIST_STATE_FILE_CROSSFADE)) { setPlayerCrossFade(atoi (& diff --git a/src/queue.c b/src/queue.c index 28da0e5a3..21d4884c6 100644 --- a/src/queue.c +++ b/src/queue.c @@ -40,8 +40,13 @@ queue_next_order(const struct queue *queue, unsigned order) { assert(order < queue->length); - if (queue->smartstop) - return -1; + if (queue->single) + { + if (queue->repeat) + return order; + else + return -1; + } if (order + 1 < queue->length) return order + 1; else if (queue->repeat) @@ -277,7 +282,7 @@ queue_init(struct queue *queue, unsigned max_length) queue->version = 1; queue->repeat = false; queue->random = false; - queue->smartstop = false; + queue->single = false; queue->items = g_new(struct queue_item, max_length); queue->order = g_malloc(sizeof(queue->order[0]) * diff --git a/src/queue.h b/src/queue.h index 63b71d199..452084ce8 100644 --- a/src/queue.h +++ b/src/queue.h @@ -81,8 +81,8 @@ struct queue { reached? */ bool repeat; - /** stop playing after that song. */ - bool smartstop; + /** play only current song. */ + bool single; /** play back songs in random order? */ bool random; -- cgit v1.2.3