Fixed: Fresh install of 1.2.0 complains about missing sensor config keys. (LP :#1650378)
[psensor.git] / src / main.c
index ad964dc..2868142 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2010-2014 jeanfi@gmail.com
+ * Copyright (C) 2010-2017 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
@@ -31,6 +31,7 @@
 #include <config.h>
 
 #include <amd.h>
+#include <bcm2835.h>
 #include <cfg.h>
 #include <graph.h>
 #include <hdd.h>
@@ -144,6 +145,7 @@ static void *update_measures(void *data)
                gtop2_psensor_list_update(sensors);
                atasmart_psensor_list_update(sensors);
                hddtemp_psensor_list_update(sensors);
+               bcm2835_psensor_list_update(sensors);
 
                psensor_log_measures(sensors);
 
@@ -191,16 +193,14 @@ static gboolean ui_refresh_thread(gpointer data)
 
        pmutex_lock(&ui->sensors_mutex);
 
-       graph_update(ui->sensors, ui->w_graph, ui->config, ui->main_window);
+       graph_update(ui->sensors, ui_get_graph(), ui->config, ui->main_window);
 
        ui_sensorlist_update(ui, 0);
 
        if (is_appindicator_supported() || is_status_supported())
                indicators_update(ui);
 
-       ui_unity_launcher_entry_update(ui->sensors,
-                                      !cfg->unity_launcher_count_disabled,
-                                      cfg->temperature_unit == CELSIUS);
+       ui_unity_launcher_entry_update(ui->sensors);
 
        if (ui->graph_update_interval != cfg->graph_update_interval) {
                ui->graph_update_interval = cfg->graph_update_interval;
@@ -224,71 +224,48 @@ static void cb_alarm_raised(struct psensor *sensor, void *data)
        }
 }
 
-static void associate_colors(struct psensor **sensors)
-{
-       GdkRGBA rgba;
-       /* copied from the default colors of the gtk color color
-        * chooser. */
-       const char *default_colors[27] = {
-               "#ef2929",  /* Scarlet Red */
-               "#fcaf3e",  /* Orange */
-               "#fce94f",  /* Butter */
-               "#8ae234",  /* Chameleon */
-               "#729fcf",  /* Sky Blue */
-               "#ad7fa8",  /* Plum */
-               "#e9b96e",  /* Chocolate */
-               "#888a85",  /* Aluminum 1 */
-               "#eeeeec",  /* Aluminum 2 */
-               "#cc0000",
-               "#f57900",
-               "#edd400",
-               "#73d216",
-               "#3465a4",
-               "#75507b",
-               "#c17d11",
-               "#555753",
-               "#d3d7cf",
-               "#a40000",
-               "#ce5c00",
-               "#c4a000",
-               "#4e9a06",
-               "#204a87",
-               "#5c3566",
-               "#8f5902",
-               "#2e3436",
-               "#babdb6"
-       };
-       int i;
-       struct psensor **cur;
-       struct color c;
-
-       for (cur = sensors, i = 0; *cur; cur++, i++) {
-               gdk_rgba_parse(&rgba, default_colors[i % 27]);
-               c.red = rgba.red;
-               c.green = rgba.green;
-               c.blue = rgba.blue;
-
-               (*cur)->color = config_get_sensor_color((*cur)->id, &c);
-       }
-}
-
 static void
 associate_cb_alarm_raised(struct psensor **sensors, struct ui_psensor *ui)
 {
-       struct psensor **sensor_cur = sensors;
+       bool ret;
+       struct psensor *s;
+       double high_temp, high_default, low_default;
 
-       while (*sensor_cur) {
-               struct psensor *s = *sensor_cur;
+       high_temp = config_get_default_high_threshold_temperature();
+
+       while (*sensors) {
+               s = *sensors;
 
                s->cb_alarm_raised = cb_alarm_raised;
                s->cb_alarm_raised_data = ui;
 
-               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 (s->max == UNKNOWN_DBL_VALUE) {
+                       if (s->type & SENSOR_TYPE_TEMP)
+                               high_default = high_temp;
+                       else
+                               high_default = UNKNOWN_DBL_VALUE;
+               } else {
+                       high_default = s->max;
+               }
 
-               sensor_cur++;
+               ret = config_get_sensor_alarm_high_threshold
+                       (s->id, &s->alarm_high_threshold, high_default);
+
+               if (!ret)
+                       s->alarm_high_threshold = high_default;
+
+               if (s->min == UNKNOWN_DBL_VALUE)
+                       low_default = 0;
+               else
+                       low_default = s->min;
+
+               ret = config_get_sensor_alarm_low_threshold
+                       (s->id, &s->alarm_low_threshold, low_default);
+
+               if (!ret)
+                       s->alarm_low_threshold = low_default;
+
+               sensors++;
        }
 }
 
@@ -448,10 +425,11 @@ static struct psensor **create_sensors_list(const char *url)
 
                if (config_is_udisks2_enabled())
                        udisks2_psensor_list_append(&sensors, 600);
+
+               bcm2835_psensor_list_append(&sensors, 600);
        }
 
        associate_preferences(sensors);
-       associate_colors(sensors);
 
        return sensors;
 }
@@ -565,6 +543,7 @@ int main(int argc, char **argv)
        g_timeout_add(1000 * ui.graph_update_interval, ui_refresh_thread, &ui);
 
        ui_appindicator_init(&ui);
+       ui_unity_init();
 
        gdk_notify_startup_complete();