Commit e7519829 authored by Romain Bignon's avatar Romain Bignon

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.
parent e46722b2
......@@ -218,7 +218,7 @@
</listitem>
<listitem>
<para>
<varname>smartstop</varname>:
<varname>single</varname>:
<returnvalue>0 or 1</returnvalue>
</para>
</listitem>
......@@ -408,18 +408,19 @@
</para>
</listitem>
</varlistentry>
<varlistentry id="command_smartstop">
<varlistentry id="command_single">
<term>
<cmdsynopsis>
<command>smartstop</command>
<command>single</command>
<arg choice="req"><replaceable>STATE</replaceable></arg>
</cmdsynopsis>
</term>
<listitem>
<para>
Sets smartstop state to <varname>STATE</varname>,
Sets single state to <varname>STATE</varname>,
<varname>STATE</varname> should be 0 or 1.
When smartstop is activated, playback is stopped after current song.
When single is activated, playback is stopped after current song, or
song is repeated if the 'repeat' mode is enabled.
</para>
</listitem>
</varlistentry>
......
......@@ -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
......
......@@ -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);
......
......@@ -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);
......
......@@ -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;
......
......@@ -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
(&
......
......@@ -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]) *
......
......@@ -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;
......
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