renamed alarm_limit to alarm_high_thresold
[psensor.git] / src / main.c
index c42f18e..0698dd3 100644 (file)
@@ -102,6 +102,8 @@ static void print_help()
        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("");
 
        puts(_("  -d, --debug=LEVEL   "
@@ -252,7 +254,7 @@ static void associate_colors(struct psensor **sensors)
        unsigned int colors[COLORS_COUNT][3] = {
                {0x0000, 0x0000, 0x0000},       /* black */
                {0xffff, 0x0000, 0x0000},       /* red */
-               {0x0000, 0.0000, 0xffff},       /* blue */
+               {0x0000, 0x0000, 0xffff},       /* blue */
                {0x0000, 0xffff, 0x0000},       /* green */
 
                {0x7fff, 0x7fff, 0x7fff},       /* grey */
@@ -290,12 +292,12 @@ associate_cb_alarm_raised(struct psensor **sensors, struct ui_psensor *ui)
                s->cb_alarm_raised_data = ui;
 
                if (is_temp_type(s->type)) {
-                       s->alarm_limit
-                           = config_get_sensor_alarm_limit(s->id, 60);
+                       s->alarm_high_thresold
+                           = config_get_sensor_alarm_high_thresold(s->id);
                        s->alarm_enabled
                            = config_get_sensor_alarm_enabled(s->id);
                } else {
-                       s->alarm_limit = 0;
+                       s->alarm_high_thresold = 0;
                        s->alarm_enabled = 0;
                }
 
@@ -351,6 +353,7 @@ static struct option long_options[] = {
        {"help", no_argument, 0, 'h'},
        {"url", required_argument, 0, 'u'},
        {"debug", required_argument, 0, 'd'},
+       {"new-instance", no_argument, 0, 'n'},
        {0, 0, 0, 0}
 };
 
@@ -389,8 +392,8 @@ static void log_glib_info()
                  glib_micro_version);
 }
 
-static void activate(GApplication *application,
-                    gpointer data)
+static void cb_activate(GApplication *application,
+                       gpointer data)
 {
        ui_window_show((struct ui_psensor *)data);
 }
@@ -402,6 +405,8 @@ static void cleanup(struct ui_psensor *ui)
 {
        g_mutex_lock(ui->sensors_mutex);
 
+       log_debug("Cleanup...");
+
        psensor_cleanup();
 
 #ifdef HAVE_NVIDIA
@@ -432,12 +437,51 @@ static void cleanup(struct ui_psensor *ui)
        log_close();
 }
 
+/*
+ * Creates the list of sensors.
+ *
+ * 'url': remote psensor server url, null for local monitoring.
+ * 'use_libatasmart': whether the libatasmart must be used.
+ */
+static struct psensor **create_sensors_list(const char *url,
+                                           unsigned int use_libatasmart)
+{
+       struct psensor **sensors;
+
+       if (url) {
+#ifdef HAVE_REMOTE_SUPPORT
+               rsensor_init();
+               sensors = get_remote_sensors(url, 600);
+#else
+               fprintf(stderr,
+                       _("ERROR: Not compiled with remote sensor support.\n"));
+               exit(EXIT_FAILURE);
+#endif
+       } else {
+               sensors = get_all_sensors(use_libatasmart, 600);
+#ifdef HAVE_NVIDIA
+               sensors = nvidia_psensor_list_add(sensors, 600);
+#endif
+#ifdef HAVE_LIBATIADL
+               sensors = amd_psensor_list_add(sensors, 600);
+#endif
+#ifdef HAVE_GTOP
+               sensors = cpu_psensor_list_add(sensors, 600);
+#endif
+       }
+
+       associate_preferences(sensors);
+       associate_colors(sensors);
+
+       return sensors;
+}
+
 int main(int argc, char **argv)
 {
        struct ui_psensor ui;
        GError *error;
        GThread *thread;
-       int optc, cmdok, opti, use_libatasmart;
+       int optc, cmdok, opti, use_libatasmart, new_instance;
        char *url = NULL;
        GApplication *app;
 
@@ -450,10 +494,10 @@ int main(int argc, char **argv)
        textdomain(PACKAGE);
 #endif
 
-       use_libatasmart = 0;
+       use_libatasmart = new_instance = 0;
 
        cmdok = 1;
-       while ((optc = getopt_long(argc, argv, "vhd:u:", long_options,
+       while ((optc = getopt_long(argc, argv, "vhd:u:n", long_options,
                                   &opti)) != -1) {
                switch (optc) {
                case 0:
@@ -474,6 +518,9 @@ int main(int argc, char **argv)
                        log_level = atoi(optarg);
                        log_printf(LOG_INFO, _("Enables debug mode."));
                        break;
+               case 'n':
+                       new_instance = 1;
+                       break;
                default:
                        cmdok = 0;
                        break;
@@ -489,15 +536,16 @@ int main(int argc, char **argv)
        log_init();
 
        app = g_application_new("wpitchoune.psensor", 0);
+
        g_application_register(app, NULL, NULL);
 
-       if (g_application_get_is_remote(app)) {
+       if (!new_instance && g_application_get_is_remote(app)) {
                g_application_activate(app);
-               log_debug(_("Psensor instance already exists"));
+               log_warn(_("Psensor instance already exists"));
                exit(EXIT_SUCCESS);
        }
 
-       g_signal_connect(app, "activate", G_CALLBACK(activate), &ui);
+       g_signal_connect(app, "activate", G_CALLBACK(cb_activate), &ui);
 
        log_glib_info();
 #if !(GLIB_CHECK_VERSION(2, 31, 0))
@@ -515,36 +563,11 @@ int main(int argc, char **argv)
 
        ui.sensors_mutex = g_mutex_new();
 
-       config_init();
-
        ui.config = config_load();
 
        psensor_init();
 
-       if (url) {
-#ifdef HAVE_REMOTE_SUPPORT
-               rsensor_init();
-               ui.sensors = get_remote_sensors(url, 600);
-#else
-               fprintf(stderr,
-                       _("ERROR: Not compiled with remote sensor support.\n"));
-               exit(EXIT_FAILURE);
-#endif
-       } else {
-               ui.sensors = get_all_sensors(use_libatasmart, 600);
-#ifdef HAVE_NVIDIA
-               ui.sensors = nvidia_psensor_list_add(ui.sensors, 600);
-#endif
-#ifdef HAVE_LIBATIADL
-               ui.sensors = amd_psensor_list_add(ui.sensors, 600);
-#endif
-#ifdef HAVE_GTOP
-               ui.sensors = cpu_psensor_list_add(ui.sensors, 600);
-#endif
-       }
-
-       associate_preferences(ui.sensors);
-       associate_colors(ui.sensors);
+       ui.sensors = create_sensors_list(url, use_libatasmart);
        associate_cb_alarm_raised(ui.sensors, &ui);
 
 #if !defined(HAVE_APPINDICATOR) && !defined(HAVE_APPINDICATOR_029)
@@ -591,8 +614,9 @@ int main(int argc, char **argv)
        /* main loop */
        gtk_main();
 
-       log_debug("Quitting...");
+       g_object_ref(app);
        cleanup(&ui);
+       log_debug("Quitting...");
 
        return 0;
 }