avoid to update SMART more than each 30s (costly operation for the udisks2 daemon)
[psensor.git] / src / lib / psensor.c
index c37dc58..fb30352 100644 (file)
@@ -69,6 +69,9 @@ struct psensor *psensor_create(char *id,
        psensor->graph_enabled = 1;
        psensor->appindicator_enabled = 0;
 
+       psensor->provider_data = NULL;
+       psensor->provider_data_free_fct = &free;
+
        return psensor;
 }
 
@@ -83,6 +86,7 @@ void psensor_values_resize(struct psensor *s, int new_size)
 
        if (cur_ms) {
                int i;
+
                for (i = 0; i < new_size - 1 && i < cur_size - 1; i++)
                        measure_copy(&cur_ms[cur_size - i - 1],
                                     &new_ms[new_size - i - 1]);
@@ -94,26 +98,30 @@ void psensor_values_resize(struct psensor *s, int new_size)
        s->measures = new_ms;
 }
 
-void psensor_free(struct psensor *sensor)
+void psensor_free(struct psensor *s)
 {
-       if (sensor) {
-               log_debug("Cleanup %s", sensor->id);
+       if (!s)
+               return;
 
-               free(sensor->name);
-               free(sensor->id);
+       log_debug("Cleanup %s", s->id);
 
-               if (sensor->chip)
-                       free(sensor->chip);
+       free(s->name);
+       free(s->id);
 
-               if (sensor->color)
-                       free(sensor->color);
+       if (s->chip)
+               free(s->chip);
 
-               measures_free(sensor->measures);
+       if (s->color)
+               free(s->color);
 
-               free(sensor->url);
+       measures_free(s->measures);
 
-               free(sensor);
-       }
+       free(s->url);
+
+       if (s->provider_data && s->provider_data_free_fct)
+               s->provider_data_free_fct(s->provider_data);
+
+       free(s);
 }
 
 void psensor_list_free(struct psensor **sensors)
@@ -194,7 +202,7 @@ void psensor_list_append(struct psensor ***sensors, struct psensor *sensor)
        struct psensor **tmp;
 
        if (!sensor)
-               return ;
+               return;
 
        tmp = psensor_list_add(*sensors, sensor);
 
@@ -348,6 +356,7 @@ double get_max_value(struct psensor **sensors, int type)
                if (sensor->type & type) {
                        int i;
                        double t;
+
                        for (i = 0; i < sensor->values_max_length; i++) {
                                t = sensor->measures[i].value;
 
@@ -457,8 +466,8 @@ const char *psensor_type_to_str(unsigned int type)
                        return "Memory usage";
                else if (type & SENSOR_TYPE_PCIE)
                        return "PCIe usage";
-               else
-                       return "NVIDIA GPU";
+
+               return "NVIDIA GPU";
        }
 
        if (type & SENSOR_TYPE_ATIADL) {
@@ -466,8 +475,8 @@ const char *psensor_type_to_str(unsigned int type)
                        return "AMD GPU Temperature";
                else if (type & SENSOR_TYPE_RPM)
                        return "AMD GPU Fan Speed";
-               else /* type & SENSOR_TYPE_USAGE */
-                       return "AMD GPU Usage";
+               /*else type & SENSOR_TYPE_USAGE */
+               return "AMD GPU Usage";
        }
 
        if ((type & SENSOR_TYPE_HDD_TEMP) == SENSOR_TYPE_HDD_TEMP)
@@ -500,15 +509,13 @@ const char *psensor_type_to_unit_str(unsigned int type, int use_celsius)
        if (is_temp_type(type)) {
                if (use_celsius)
                        return "\302\260C";
-               else
-                       return "\302\260F";
+               return "\302\260F";
        } else if (type & SENSOR_TYPE_RPM) {
                return _("RPM");
        } else if (type & SENSOR_TYPE_PERCENT) {
                return _("%");
-       } else {
-               return _("N/A");
        }
+       return _("N/A");
 }
 
 void psensor_list_update_measures(struct psensor **sensors)