X-Git-Url: https://git.wpitchoune.net/gitweb/?p=psensor.git;a=blobdiff_plain;f=src%2Fui_notify.c;h=719f50210cf7847946f7cc28a9a3d087db1df45d;hp=e9e4b9df81006196ece9ecdf728701ea2bfea9a2;hb=c1e20f2631a1249720e9c75d753eacfcb0f6c7b9;hpb=47e80c42bbbeb2269137e025a634f07c035c9db2 diff --git a/src/ui_notify.c b/src/ui_notify.c index e9e4b9d..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 @@ -22,64 +22,82 @@ #include +/* Macro defined since libnotify 0.5.2 */ +#ifndef NOTIFY_CHECK_VERSION +#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"); -#ifdef NOTIFY_VERSION_MAJOR /* - * since libnotify 0.7 notify_notification_new has + * Since libnotify 0.7 notify_notification_new has * only 3 parameters. - * - * libnotify < 0.7 does not define - * NOTIFY_VERSION_MAJOR */ - notif = notify_notification_new(_("Temperature alert"), - name, - NULL); +#if NOTIFY_CHECK_VERSION(0, 7, 0) + 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"); } }