Commit Diff


commit - bfaa78978668ab4b8078802c3ac873a16e4357d6
commit + 2f589330f4858cf8f45f7d4a5c2f90e11eecc232
blob - 4c153998dca494438aaad84852e350bfc2544358
blob + 6992675c67b9569778f023bdc94632bbaa318a8a
--- amused.c
+++ amused.c
@@ -394,6 +394,22 @@ main_play_song(const char *song)
 	imsg_compose_event(iev_player, IMSG_PLAY, 0, 0, fd,
 	    path, sizeof(path));
 	return 1;
+}
+
+void
+main_playlist_resume(void)
+{
+	const char *song;
+
+	if ((song = playlist_current()) == NULL)
+		song = playlist_advance();
+
+	for (;song != NULL; song = playlist_advance()) {
+		if (main_play_song(song))
+			return;
+
+		playlist_dropcurrent();
+	}
 }
 
 void
blob - ce92c23f936b012809b3081a4783a6873d5cf8bf
blob + 2475ee20926c8e17979c97b4e5c97b23998e2707
--- amused.h
+++ amused.h
@@ -100,6 +100,7 @@ void		imsg_event_add(struct imsgev *iev);
 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);
+void		main_playlist_resume(void);
 void		main_playlist_advance(void);
 void		main_playlist_previous(void);
 void		main_restart_track(void);
blob - 6323e068f5736f6fcf8c4501c5987c78a1c31b21
blob + d8e0f626db6bc19c15243ab660931a65ec79ca46
--- control.c
+++ control.c
@@ -256,7 +256,7 @@ control_dispatch_imsg(int fd, short event, void *bula)
 		case IMSG_CTL_PLAY:
 			switch (play_state) {
 			case STATE_STOPPED:
-				main_playlist_advance();
+				main_playlist_resume();
 				break;
 			case STATE_PLAYING:
 				/* do nothing */
@@ -270,7 +270,7 @@ control_dispatch_imsg(int fd, short event, void *bula)
 		case IMSG_CTL_TOGGLE_PLAY:
 			switch (play_state) {
 			case STATE_STOPPED:
-				main_playlist_advance();
+				main_playlist_resume();
 				break;
 			case STATE_PLAYING:
 				play_state = STATE_PAUSED;