X-Git-Url: https://git.wpitchoune.net/gitweb/?p=psensor.git;a=blobdiff_plain;f=src%2Fui_notify.c;h=719f50210cf7847946f7cc28a9a3d087db1df45d;hp=693473b4f8f533c336333cb3bece5dcb0b046a96;hb=c1e20f2631a1249720e9c75d753eacfcb0f6c7b9;hpb=0dc49160336a74ee63f47cdde796443c9d869931 diff --git a/src/ui_notify.c b/src/ui_notify.c index 693473b..719f502 100644 --- a/src/ui_notify.c +++ b/src/ui_notify.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2011 jeanfi@gmail.com + * Copyright (C) 2010-2016 jeanfi@gmail.com * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -24,64 +24,80 @@ /* Macro defined since libnotify 0.5.2 */ #ifndef NOTIFY_CHECK_VERSION -#define NOTIFY_CHECK_VERSION(x,y,z) 0 +#define NOTIFY_CHECK_VERSION(x, y, z) 0 #endif +#include "cfg.h" #include "ui.h" #include "ui_notify.h" +/* Time of the last notification. */ +static struct timeval last_notification_tv; + void ui_notify(struct psensor *sensor, struct ui_psensor *ui) { - struct timeval *t = malloc(sizeof(struct timeval)); - char *name; + struct timeval t; + char *body, *svalue; + const char *summary; NotifyNotification *notif; + unsigned int use_celsius; - if (gettimeofday(t, NULL) != 0) { - fprintf(stderr, _("ERROR: failed gettimeofday\n")); - free(t); + log_debug("last_notification %d", last_notification_tv.tv_sec); + if (gettimeofday(&t, NULL) != 0) { + log_err(_("gettimeofday failed.")); return; } - if (!ui->notification_last_time) { - /* first notification */ - ui->notification_last_time = t; - } else { - - if (t->tv_sec - ui->notification_last_time->tv_sec < 60) { - /* last notification less than 1mn ago */ - free(t); - return; - } else { - /* last notification more than 1mn ago */ - free(ui->notification_last_time); - ui->notification_last_time = t; - } - } + if (!last_notification_tv.tv_sec + || t.tv_sec - last_notification_tv.tv_sec >= 60) + last_notification_tv = t; + else + return; if (notify_is_initted() == FALSE) notify_init("psensor"); if (notify_is_initted() == TRUE) { - name = strdup(sensor->name); + if (config_get_temperature_unit() == CELSIUS) + use_celsius = 1; + else + use_celsius = 0; + + svalue = psensor_measure_to_str + (psensor_get_current_measure(sensor), + sensor->type, + use_celsius); + + body = malloc(strlen(sensor->name) + 3 + strlen(svalue) + 1); + sprintf(body, "%s : %s", sensor->name, svalue); + free(svalue); + + if (is_temp_type(sensor->type)) + summary = _("Temperature alert"); + else if (sensor->type & SENSOR_TYPE_RPM) + summary = _("Fan speed alert"); + else + summary = _("N/A"); /* * Since libnotify 0.7 notify_notification_new has * only 3 parameters. - */ + */ #if NOTIFY_CHECK_VERSION(0, 7, 0) - notif = notify_notification_new(_("Temperature alert"), - name, - NULL); + notif = notify_notification_new(summary, body, PSENSOR_ICON); #else - notif = notify_notification_new(_("Temperature alert"), - name, - NULL, + notif = notify_notification_new(summary, + body, + PSENSOR_ICON, GTK_WIDGET(ui->main_window)); #endif + log_debug("notif_notification_new %s", body); notify_notification_show(notif, NULL); g_object_unref(notif); + } else { + log_err("notify not initialized"); } }