implemented sensor logging
[psensor.git] / src / main.c
index 559400b..164f10a 100644 (file)
@@ -37,6 +37,7 @@
 #include "ui_sensorlist.h"
 #include "ui_color.h"
 #include "lmsensor.h"
+#include "slog.h"
 #include "ui_pref.h"
 #include "ui_graph.h"
 #include "ui_status.h"
@@ -87,7 +88,7 @@ static void print_help()
 {
        printf(_("Usage: %s [OPTION]...\n"), program_name);
 
-       puts(_("psensor is a GTK application for monitoring hardware sensors, "
+       puts(_("Psensor is a GTK+ application for monitoring hardware sensors, "
               "including temperatures and fan speeds."));
 
        puts("");
@@ -97,13 +98,14 @@ static void print_help()
 
        puts("");
 
-       puts(_("  -u, --url=URL       "
-              "the URL of the psensor-server, example: http://hostname:3131"));
-       puts(_("  --use-libatasmart   "
-              "use atasmart library for disk monitoring "
-              "instead of hddtemp daemon"));
-       puts(_("  -n, --new-instance  "
-              "force the creation of a new Psensor application"));
+       puts(_(
+"  -u, --url=URL       the URL of the psensor-server,\n"
+"                      example: http://hostname:3131"));
+       puts(_(
+"  --use-libatasmart   use atasmart library for disk monitoring instead of\n"
+"                      hddtemp daemon"));
+       puts(_(
+"  -n, --new-instance  force the creation of a new Psensor application"));
        puts("");
 
        puts(_("  -d, --debug=LEVEL   "
@@ -117,23 +119,20 @@ static void print_help()
 }
 
 /*
-  Updates the size of the sensor values if different than the
-  configuration.
* Updates the size of the sensor values if different than the
* configuration.
  */
-void
+static void
 update_psensor_values_size(struct psensor **sensors, struct config *cfg)
 {
-       struct psensor **cur;
+       struct psensor **cur, *s;
 
-       cur = sensors;
-       while (*cur) {
-               struct psensor *s = *cur;
+       for (cur = sensors; *cur; cur++) {
+               s = *cur;
 
                if (s->values_max_length != cfg->sensor_values_max_length)
                        psensor_values_resize(s,
                                              cfg->sensor_values_max_length);
-
-               cur++;
        }
 }
 
@@ -167,6 +166,9 @@ static void update_measures(struct ui_psensor *ui)
 
                psensor_log_measures(sensors);
 
+               if (cfg->slog_enabled)
+                       slog_write_sensors(sensors);
+
                period = cfg->sensor_update_interval;
 
                g_mutex_unlock(ui->sensors_mutex);
@@ -241,7 +243,7 @@ gboolean ui_refresh_thread(gpointer data)
 static void cb_alarm_raised(struct psensor *sensor, void *data)
 {
 #ifdef HAVE_LIBNOTIFY
-       if (sensor->enabled)
+       if (sensor->alarm_enabled)
                ui_notify(sensor, (struct ui_psensor *)data);
 #endif
 }
@@ -291,16 +293,16 @@ associate_cb_alarm_raised(struct psensor **sensors, struct ui_psensor *ui)
                s->cb_alarm_raised = cb_alarm_raised;
                s->cb_alarm_raised_data = ui;
 
-               s->alarm_high_thresold
-                       = config_get_sensor_alarm_high_thresold(s->id);
-               s->alarm_low_thresold
-                       = config_get_sensor_alarm_low_thresold(s->id);
+               s->alarm_high_threshold
+                       = config_get_sensor_alarm_high_threshold(s->id);
+               s->alarm_low_threshold
+                       = config_get_sensor_alarm_low_threshold(s->id);
 
-               if (is_temp_type(s->type)) {
+               if (is_temp_type(s->type) || is_fan_type(s->type)) {
                        s->alarm_enabled
                            = config_get_sensor_alarm_enabled(s->id);
                } else {
-                       s->alarm_high_thresold = 0;
+                       s->alarm_high_threshold = 0;
                        s->alarm_enabled = 0;
                }
 
@@ -324,6 +326,8 @@ static void associate_preferences(struct psensor **sensors)
                        s->name = n;
                }
 
+               s->appindicator_enabled = config_is_appindicator_enabled(s->id);
+
                sensor_cur++;
        }
 }
@@ -436,8 +440,6 @@ static void cleanup(struct ui_psensor *ui)
        config_cleanup();
 
        log_debug("Cleanup done, closing log");
-
-       log_close();
 }
 
 /*
@@ -456,8 +458,8 @@ static struct psensor **create_sensors_list(const char *url,
                rsensor_init();
                sensors = get_remote_sensors(url, 600);
 #else
-               fprintf(stderr,
-                       _("ERROR: Not compiled with remote sensor support.\n"));
+               log_err(_("Psensor has not been compiled with remote "
+                         "sensor support."));
                exit(EXIT_FAILURE);
 #endif
        } else {
@@ -519,7 +521,7 @@ int main(int argc, char **argv)
                        exit(EXIT_SUCCESS);
                case 'd':
                        log_level = atoi(optarg);
-                       log_printf(LOG_INFO, _("Enables debug mode."));
+                       log_info(_("Enables debug mode."));
                        break;
                case 'n':
                        new_instance = 1;
@@ -544,7 +546,7 @@ int main(int argc, char **argv)
 
        if (!new_instance && g_application_get_is_remote(app)) {
                g_application_activate(app);
-               log_warn(_("Psensor instance already exists"));
+               log_warn(_("A Psensor instance already exists."));
                exit(EXIT_SUCCESS);
        }
 
@@ -604,22 +606,24 @@ int main(int argc, char **argv)
        ui_appindicator_init(&ui);
 #endif
 
-       /*
-        * show the window as soon as all gtk events have been processed
-        * in order to ensure that the status icon is attempted to be
-        * drawn before. If not, there is no way to detect that it is
-        * visible.
-       */
-       g_idle_add((GSourceFunc)initial_window_show, &ui);
-
        gdk_notify_startup_complete();
 
+       /*
+        * hack, did not find a cleaner solution.
+        * wait 2s to ensure that the status icon is attempted to be
+        * drawn before determining whether the main window must be
+        * show.
+        */
+       g_timeout_add(2000, (GSourceFunc)initial_window_show, &ui);
+
        /* main loop */
        gtk_main();
 
        g_object_ref(app);
        cleanup(&ui);
+
        log_debug("Quitting...");
+       log_close();
 
        return 0;
 }