diff options
Diffstat (limited to 'binding/afm-mediaplayer-binding.c')
-rw-r--r-- | binding/afm-mediaplayer-binding.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/binding/afm-mediaplayer-binding.c b/binding/afm-mediaplayer-binding.c index 6c3c3b3..9e77dc1 100644 --- a/binding/afm-mediaplayer-binding.c +++ b/binding/afm-mediaplayer-binding.c @@ -42,6 +42,7 @@ static GList *current_track = NULL; typedef struct _CustomData { GstElement *playbin; gboolean playing; + gboolean loop; guint volume; gint64 position; gint64 duration; @@ -295,6 +296,7 @@ static int seek_track(int cmd) * * pick-track - select track via index number * volume - set volume between 0 - 100% + * loop - set looping of playlist (true or false) */ static void controls(struct afb_req request) @@ -379,6 +381,11 @@ static void controls(struct afb_req request) break; } + case LOOP_CMD: { + const char *state = afb_req_value(request, "state"); + data.loop = !strcasecmp(state, "true") ? TRUE : FALSE; + break; + } default: afb_req_fail(request, "failed", "unknown command"); pthread_mutex_unlock(&mutex); @@ -527,9 +534,12 @@ static gboolean handle_message(GstBus *bus, GstMessage *msg, CustomData *data) data->duration = GST_CLOCK_TIME_NONE; ret = seek_track(NEXT_CMD); + if (ret < 0) { - data->playing = FALSE; + if (!data->loop) + data->playing = FALSE; current_track = playlist; + set_media_uri(current_track->data); } else if (data->playing) { gst_element_set_state(data->playbin, GST_STATE_PLAYING); } |