Fixed restoration of the panel divider position.
[psensor.git] / src / ui_notify.c
index e9e4b9d..719f502 100644 (file)
@@ -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
 
 #include <libnotify/notify.h>
 
+/* 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");
        }
 }