Commit Diff


commit - 8ff9231f014b105cce3b220d9afede547f153d6e
commit + 946944db0c7e4c83a9842b6c8fc9870616d44364
blob - fb8aab8c435d364c7c7a4bf64e6919e1d2bb6b71
blob + 1c24940ec5b8a99e1ee2315338d28155e7e8dcd4
--- amused.c
+++ amused.c
@@ -50,6 +50,7 @@ const char	*argv0;
 pid_t		 player_pid;
 struct event	 ev_sigint;
 struct event	 ev_sigterm;
+struct event	 ev_siginfo;
 
 enum amused_process {
 	PROC_MAIN,
@@ -80,6 +81,32 @@ main_shutdown(void)
 
 	log_info("terminating");
 	exit(0);
+}
+
+static void
+main_status(void)
+{
+	const char *cur;
+
+	switch (play_state) {
+	case STATE_STOPPED:
+		log_info("status: stopped");
+		break;
+	case STATE_PLAYING:
+		log_info("status: playing");
+		break;
+	case STATE_PAUSED:
+		log_info("status: paused");
+		break;
+	default:
+		log_info("status: unknown");
+		break;
+	}
+
+	if ((cur = playlist_current()) != NULL)
+		log_info("playing %s", cur);
+	else
+		log_info("not playing anything");
 }
 
 static void
@@ -95,6 +122,9 @@ main_sig_handler(int sig, short event, void *arg)
 	case SIGINT:
 		main_shutdown();
 		break;
+	case SIGINFO:
+		main_status();
+		break;
 	default:
 		fatalx("unexpected signal %d", sig);
 	}
@@ -222,9 +252,11 @@ amused_main(void)
 
 	signal_set(&ev_sigint, SIGINT, main_sig_handler, NULL);
 	signal_set(&ev_sigterm, SIGTERM, main_sig_handler, NULL);
+	signal_set(&ev_siginfo, SIGINFO, main_sig_handler, NULL);
 
 	signal_add(&ev_sigint, NULL);
 	signal_add(&ev_sigterm, NULL);
+	signal_add(&ev_siginfo, NULL);
 
 	signal(SIGHUP, SIG_IGN);
 	signal(SIGCHLD, SIG_IGN);