From 2b3e85508052f1ca931d964ca088ecf31c0f1c76 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Fri, 23 Aug 2013 13:36:39 +0200 Subject: display the notification again on SIGUSR1 --- config.def.h | 1 + mpd-notification.c | 42 ++++++++++++++++++++++++++++++++---------- 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/config.def.h b/config.def.h index 0047f7d..f135a8d 100644 --- a/config.def.h +++ b/config.def.h @@ -8,4 +8,5 @@ #define TEXT_PLAY "Playing %s\nby %s\nfrom %s" #define TEXT_PAUSE "Paused playback" #define TEXT_STOP "Stopped playback" +#define TEXT_NONE "No action received yet." #define TEXT_UNKNOWN "(unknown)" diff --git a/mpd-notification.c b/mpd-notification.c index 9202513..031cbe7 100644 --- a/mpd-notification.c +++ b/mpd-notification.c @@ -13,6 +13,7 @@ #include #include #include +#include #include "config.h" @@ -23,42 +24,60 @@ #define DEBUG 0 #endif +/* global variables */ +char *program = NULL; +NotifyNotification * notification = NULL; + +/*** show_again ***/ +void show_again(int signal) { + GError * error = NULL; + + if (!notify_notification_show(notification, &error)) { + g_printerr("%s: Error \"%s\" while trying to show notification again.\n", program, error->message); + g_error_free(error); + } +} + +/*** main ***/ int main(int argc, char ** argv) { char * album = NULL, * artist = NULL, * notifystr = NULL, * title = NULL; GError * error = NULL; unsigned short int errcount = 0, state = MPD_STATE_UNKNOWN; - NotifyNotification * notification = NULL; struct mpd_connection * conn = NULL; struct mpd_song * song = NULL; + program = argv[0]; + printf("%s: %s v%s (compiled: " __DATE__ ", " __TIME__ # if DEBUG ", with debug output" # endif - ")\n", argv[0], PROGNAME, VERSION); + ")\n", program, PROGNAME, VERSION); conn = mpd_connection_new(NULL, 0, 30000); if (mpd_connection_get_error(conn) != MPD_ERROR_SUCCESS) { - fprintf(stderr,"%s: %s\n", argv[0], mpd_connection_get_error_message(conn)); + fprintf(stderr,"%s: %s\n", program, mpd_connection_get_error_message(conn)); mpd_connection_free(conn); exit(EXIT_FAILURE); } if(!notify_init(PROGNAME)) { - fprintf(stderr, "%s: Can't create notify.\n", argv[0]); + fprintf(stderr, "%s: Can't create notify.\n", program); exit(EXIT_FAILURE); } notification = # if NOTIFY_CHECK_VERSION(0, 7, 0) - notify_notification_new(TEXT_TOPIC, NULL, ICON_SOUND); + notify_notification_new(TEXT_TOPIC, TEXT_NONE, ICON_SOUND); # else - notify_notification_new(TEXT_TOPIC, NULL, ICON_SOUND, NULL); + notify_notification_new(TEXT_TOPIC, TEXT_NONE, ICON_SOUND, NULL); # endif notify_notification_set_category(notification, PROGNAME); notify_notification_set_urgency (notification, NOTIFY_URGENCY_NORMAL); + signal(SIGUSR1, show_again); + while(mpd_run_idle_mask(conn, MPD_IDLE_PLAYER)) { mpd_command_list_begin(conn, true); mpd_send_status(conn); @@ -90,7 +109,7 @@ int main(int argc, char ** argv) { notifystr = TEXT_UNKNOWN; # if DEBUG - printf("%s: %s\n", argv[0], notifystr); + printf("%s: %s\n", program, notifystr); # endif notify_notification_update(notification, TEXT_TOPIC, notifystr, ICON_SOUND); @@ -99,10 +118,10 @@ int main(int argc, char ** argv) { while(!notify_notification_show(notification, &error)) { if (errcount > 1) { - fprintf(stderr, "%s: Looks like we can not reconnect to notification daemon... Exiting.\n", argv[0]); + fprintf(stderr, "%s: Looks like we can not reconnect to notification daemon... Exiting.\n", program); exit(EXIT_FAILURE); } else { - g_printerr("%s: Error \"%s\" while trying to show notification. Trying to reconnect.\n", argv[0], error->message); + g_printerr("%s: Error \"%s\" while trying to show notification. Trying to reconnect.\n", program, error->message); errcount++; g_error_free(error); @@ -113,7 +132,7 @@ int main(int argc, char ** argv) { usleep(500 * 1000); if(!notify_init(PROGNAME)) { - fprintf(stderr, "%s: Can't create notify.\n", argv[0]); + fprintf(stderr, "%s: Can't create notify.\n", program); exit(EXIT_FAILURE); } } @@ -126,5 +145,8 @@ int main(int argc, char ** argv) { } mpd_connection_free(conn); + g_object_unref(G_OBJECT(notification)); + notify_uninit(); + return EXIT_SUCCESS; } -- cgit v1.2.3-54-g00ecf