commit - 8891f624779ed4fa401c84d7a82ac804a04faa96
commit + aaccc123cdde1db6b2a237e2bf409a6e4b57a864
blob - 788ef4361dcf20851dd5a2a13d271468d57a9fe9
blob + ecebe462e172d3998394f107fc495bf4dd088ae6
--- amused.c
+++ amused.c
struct imsg imsg;
ssize_t n;
int shut = 0;
- const char *song;
if (event & EV_READ) {
if ((n = imsg_read(ibuf)) == -1 && errno != EAGAIN)
break;
switch (imsg.hdr.type) {
- case IMSG_EOF:
case IMSG_ERR:
- song = playlist_advance();
- if (song == NULL)
- break;
- /* XXX: watch out for failures! */
- main_play_song(song);
+ /* TODO: remove current track from the playlist */
+ case IMSG_EOF:
+ main_playlist_advance();
break;
default:
log_debug("%s: error handling imsg %d", __func__,
strlcpy(path, song, sizeof(path));
if ((fd = open(path, O_RDONLY)) == -1) {
-#if todo
log_warn("open %s", path);
return -1;
-#else
- fatal("open %s", path);
-#endif
}
+ play_state = STATE_PLAYING;
imsg_compose_event(iev_player, IMSG_PLAY, 0, 0, fd,
path, sizeof(path));
return 0;
+}
+
+void
+main_playlist_advance(void)
+{
+ const char *song;
+
+ for (;;) {
+ song = playlist_advance();
+ if (song == NULL)
+ return;
+
+ if (main_play_song(song))
+ break;
+
+ /* TODO: remove the song from the playlist */
+ }
}
void
+main_restart_track(void)
+{
+ const char *song;
+
+ song = playlist_current();
+ if (song == NULL)
+ return;
+
+ if (main_play_song(song))
+ return;
+
+ /* TODO: remove the song from the playlist */
+ main_playlist_advance();
+}
+
+void
main_enqueue(struct imsgev *iev, struct imsg *imsg)
{
size_t datalen;
blob - f6be8f6fce8a4df8e049ac58e182443f25ae99c3
blob + 77712b46d1856aa8ac18ce799cc122014d80b52b
--- amused.h
+++ amused.h
int imsg_compose_event(struct imsgev *, uint16_t, uint32_t,
pid_t, int, const void *, uint16_t);
int main_send_player(uint16_t, int, const void *, uint16_t);
-int main_play_song(const char *);
+void main_playlist_advance(void);
+void main_restart_track(void);
void main_enqueue(struct imsgev *, struct imsg *);
/* ctl.c */
blob - ad46624765e58f1927d9152815042267e9a3f676
blob + fe847f1b67c4856351914c7ac73f301d173219ac
--- control.c
+++ control.c
struct ctl_conn *c;
struct imsg imsg;
ssize_t n;
- const char *song;
if ((c = control_connbyfd(fd)) == NULL) {
log_warnx("%s: fd %d: not found", __func__, fd);
case IMSG_CTL_PLAY:
switch (play_state) {
case STATE_STOPPED:
- song = playlist_advance();
- if (song == NULL)
- break;
- /* XXX: watch out for failures! */
- play_state = STATE_PLAYING;
- main_play_song(song);
+ main_playlist_advance();
break;
case STATE_PLAYING:
/* do nothing */
case IMSG_CTL_TOGGLE_PLAY:
switch (play_state) {
case STATE_STOPPED:
- song = playlist_advance();
- if (song == NULL)
- break;
- /* XXX: watch out for failures! */
- main_play_song(song);
+ main_playlist_advance();
break;
case STATE_PLAYING:
main_send_player(IMSG_PAUSE, -1, NULL, 0);
break;
case IMSG_CTL_RESTART:
main_send_player(IMSG_STOP, -1, NULL, 0);
- song = playlist_current();
- if (song == NULL)
- break;
- /* XXX: watch out for failures */
- main_play_song(song);
+ main_restart_track();
break;
case IMSG_CTL_ADD:
main_enqueue(&c->iev, &imsg);