diff options
Diffstat (limited to 'plugins/udisks2')
-rw-r--r-- | plugins/udisks2/Makefile.am | 2 | ||||
-rw-r--r-- | plugins/udisks2/udisks2-plugin.c | 462 | ||||
-rw-r--r-- | plugins/udisks2/udisks2-plugin.h | 2 |
3 files changed, 187 insertions, 279 deletions
diff --git a/plugins/udisks2/Makefile.am b/plugins/udisks2/Makefile.am index 14e512a..9bb0f11 100644 --- a/plugins/udisks2/Makefile.am +++ b/plugins/udisks2/Makefile.am @@ -1,4 +1,4 @@ -# UDisks plugin +# UDisks2 plugin plugindir = $(libdir)/mate-sensors-applet/plugins AM_CPPFLAGS = -DMATELOCALEDIR=\""$(datadir)/locale/"\" \ diff --git a/plugins/udisks2/udisks2-plugin.c b/plugins/udisks2/udisks2-plugin.c index c23d09d..fcadc59 100644 --- a/plugins/udisks2/udisks2-plugin.c +++ b/plugins/udisks2/udisks2-plugin.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009 Pramod Dematagoda <[email protected]> + * Copyright (C) 2017 info-cppsp <[email protected]> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,21 +19,17 @@ /* Udisks2 plugin for the mate-sensors-applet -written by [email protected] using the structure and code of the previous version -from above author +written using the structure and code of the previous version +from Pramod Dematagoda <[email protected]> -fd1 - from doc1 - dbus-glib documentation +dbus-glib documentation https://dbus.freedesktop.org/doc/dbus-glib/ -fd2 - from doc2 - GDBUS documentation +GDBUS documentation https://developer.gnome.org/gio/stable/index.html -I couldn't figure out debug, so I used syslog -syslog(LOG_ERR, "hellodd"); --> /var/log/syslog */ - #ifdef HAVE_CONFIG_H #include "config.h" #endif /* HAVE_CONFIG_H */ @@ -43,7 +39,7 @@ syslog(LOG_ERR, "hellodd"); #include "udisks2-plugin.h" -// remove // from next line for syslog debug +/* remove // from next line for syslog debug */ //#define UD2PD 1 #ifdef UD2PD @@ -60,122 +56,73 @@ syslog(LOG_ERR, "hellodd"); #define UDISKS2_OBJECT_PATH "/org/freedesktop/UDisks2" -/* - * Info about a single sensor - */ -typedef struct _DevInfo{ +/* Info about a single sensor */ +typedef struct _DevInfo { gchar *path; gchar *id; gdouble temp; - GDBusProxy *sensor_proxy; // dbus object + GDBusProxy *sensor_proxy; /* dbus object */ GError *error; } DevInfo; const gchar *plugin_name = "udisks2"; -// a container for the devices found to have smart enabled +/* a container for the devices found to have smart enabled */ GHashTable *devices = NULL; /* This is a global variable for convenience */ GDBusConnection *connection = NULL; -static void update_device(DevInfo *info) { +static void update_device (DevInfo *info) { GError *error = NULL; GVariant *tempgvar = NULL; GVariant *tempgvar2 = NULL; gdouble temp; - // check valid input parameter - g_return_if_fail(info != NULL); + /* check valid input parameter */ + g_return_if_fail (info != NULL); - // check connection too - g_return_if_fail(connection != NULL); + /* check connection too */ + g_return_if_fail (connection != NULL); - g_clear_error(&info->error); + g_clear_error (&info->error); -// for the udisks plugin a new sensor_proxy was created here, which seems stupid, as one is already stored in the DevInfo struct -// I only create one direct connect proxy here in this function + /* check for sensor_proxy, which should exist at this point, make one if necessary and save it into DevInfo + * this is used to get the temp value the direct way */ + if (NULL == info->sensor_proxy) { + info->sensor_proxy = g_dbus_proxy_new_sync (connection, G_DBUS_PROXY_FLAGS_NONE, NULL, + UDISKS2_BUS_NAME, + info->path, + UDISKS2_PROPERTIES_INTERFACE, + NULL, &error); - // check for sensor_proxy, which should exist at this point, make one if necessary and save it into DevInfo - // this is used to get the temp value the direct way - if(NULL == info->sensor_proxy) { - info->sensor_proxy = g_dbus_proxy_new_sync(connection, G_DBUS_PROXY_FLAGS_NONE, NULL, - UDISKS2_BUS_NAME, - info->path, - UDISKS2_PROPERTIES_INTERFACE, - NULL, &error ); - - // check, just to be sure + /* check, just to be sure */ if (NULL == info->sensor_proxy) { #ifdef UD2PD syslog(LOG_ERR, "Failed to get drive temperature 1"); #endif - g_debug("Failed to get drive temperature 1: %s", error->message); - g_clear_error(&error); + g_debug ("Failed to get drive temperature 1: %s", error->message); + g_clear_error (&error); return; } } -// "DriveAtaSmartTimeCollected" in ud2 is "drive ata SmartUpdated" -// fd: The point in time (seconds since the Unix Epoch) that the SMART status was updated or 0 if never updated. -// should we bother getting this time?? - -/* - if (!g_dbus_proxy_call_sync(sensor_proxy, "Get", NULL, - G_TYPE_STRING, UDISKS2_BUS_NAME, - G_TYPE_STRING, "DriveAtaSmartTimeCollected", G_TYPE_INVALID, - G_TYPE_VALUE, &smart_time, - G_TYPE_INVALID) || !g_value_get_uint64(&smart_time)) { - - g_object_unref(sensor_proxy); - return; - } -*/ +/* note on timing: + * it seems to me that smart updates occur automatically every 10 minutes + * mate-sensor-applet has a default refresh of 2 seconds... + * it is possible to force a smart update with udisks2: SmartUpdate (IN a{sv} options); */ - -// reading "DriveAtaSmartBlob" doesn't make it refresh -// it seems to me that smart updates occur automatically every 10 minutes -// mate-sensor-applet has a default refresh of 2 seconds... -// it is possible to force a smart update with udisks2: SmartUpdate (IN a{sv} options); - -// fd: A blob containing the ATA SMART data. This blob can be used with libatasmart to get more information. This property is only valid if DriveAtaSmartTimeCollected is greater than zero. -// this smartblob was needed, bc there was no other way to get the smart temperature from udisks -/* - - if (!g_dbus_proxy_call_sync(sensor_proxy, "Get", &info->error, - G_TYPE_STRING, UDISKS2_BUS_NAME, - G_TYPE_STRING, "DriveAtaSmartBlob", G_TYPE_INVALID, - G_TYPE_VALUE, &smart_blob_val, - G_TYPE_INVALID)) { - - g_debug("Error getting DriveAtaSmartBlob %s", info->error ? info->error->message : "NULL"); - g_object_unref(sensor_proxy); - return; - } - smart_blob = g_value_get_boxed(&smart_blob_val); - - sk_disk_open(NULL, &sk_disk); - sk_disk_set_blob(sk_disk, smart_blob->data, smart_blob->len); - if (sk_disk_smart_get_temperature(sk_disk, &temperature) < 0) { - g_debug("Error getting temperature from AtaSmartBlob"); - g_free(sk_disk); - g_array_free(smart_blob, TRUE); - g_object_unref(sensor_proxy); - return; - } -*/ - - // directly asking the device's DBus object for the temp - tempgvar = g_dbus_proxy_call_sync(info->sensor_proxy, "Get", + /* directly asking the device's DBus object for the temp */ + tempgvar = g_dbus_proxy_call_sync (info->sensor_proxy, "Get", g_variant_new ("(ss)", UDISKS2_DEVICE_INTERFACE2_NAME, - "SmartTemperature"), // parameters - G_DBUS_CALL_FLAGS_NONE, // flags - -1, // timeout - NULL, // cancellable + "SmartTemperature"), /* parameters */ + G_DBUS_CALL_FLAGS_NONE, /* flags */ + -1, /* timeout */ + NULL, /* cancellable */ &error); if (NULL == tempgvar) { @@ -183,31 +130,32 @@ syslog(LOG_ERR, "Failed to get drive temperature 1"); #ifdef UD2PD syslog(LOG_ERR, "Failed to get drive temperature 2"); #endif - g_debug("Failed to get drive temperature 2: %s", error->message); - g_clear_error(&error); - // throw away proxy, maybe next time it will be better - g_clear_object(&info->sensor_proxy); + g_debug ("Failed to get drive temperature 2: %s", error->message); + g_clear_error (&error); + /* throw away proxy, maybe next time it will be better */ + g_clear_object (&info->sensor_proxy); return; + } else { #ifdef UD2PD syslog(LOG_ERR, "tempgvar value: %s", g_variant_print(tempgvar, TRUE)); -// leaks memory! +/* leaks memory! */ //syslog(LOG_ERR, "tempgvar value: %s", g_variant_print(g_variant_get_variant(g_variant_get_child_value(tempgvar, 0)), TRUE)); #endif - // tempgvar comes back as sg along the lines of array(gvariant(tempasdouble)) - // hence unpacking - // need to free up every param / return value, so can't do it like: - //temp = g_variant_get_double(g_variant_get_variant(g_variant_get_child_value(tempgvar, 0))); - tempgvar2 = g_variant_get_child_value(tempgvar, 0); - g_variant_unref(tempgvar); - tempgvar = g_variant_get_variant(tempgvar2); - g_variant_unref(tempgvar2); - temp = g_variant_get_double(tempgvar); - g_variant_unref(tempgvar); - - // temp in K + /* tempgvar comes back as something along the lines of array(gvariant(tempasdouble)) + * hence unpacking + * need to free up every param / return value, so can't do it like: + * temp = g_variant_get_double(g_variant_get_variant(g_variant_get_child_value(tempgvar, 0))); */ + tempgvar2 = g_variant_get_child_value (tempgvar, 0); + g_variant_unref (tempgvar); + tempgvar = g_variant_get_variant (tempgvar2); + g_variant_unref (tempgvar2); + temp = g_variant_get_double (tempgvar); + g_variant_unref (tempgvar); + + /* temp in K */ info->temp = temp - 273.15; #ifdef UD2PD @@ -216,32 +164,13 @@ syslog(LOG_ERR, "Refresh udisks2 device temp: '%f'\n", info->temp); } - -} - - - -/* This is the handler for the Changed() signal emitted by UDisks. */ -/* -static void udisks2_changed_signal_cb(GDBusProxy *sensor_proxy) { - const gchar *path; - DevInfo *info; - - // fd2: Gets the object path sensor_proxy is for. - path = g_dbus_proxy_get_object_path(sensor_proxy); - g_debug("%s changed()", path); - info = g_hash_table_lookup(devices, path); - -// update_device(info); } -*/ - -// in this function we would like to get a list of device (hdd/ssd) paths -// then with each path we get the temperature -// it is possible with udisks2 to get all the above information in one g_dbus_proxy_call_sync(), so that is how I did it -// a better version would be to use GDBusObjectManager Server + Client ?? -static void udisks2_plugin_get_sensors(GList **sensors) { +/* in this function we would like to get a list of device (hdd/ssd) paths + * then with each path we get the temperature + * it is possible with udisks2 to get all the above information in one g_dbus_proxy_call_sync(), so that is how I did it + * maybe a better version would be to use GDBusObjectManager Server + Client ?? */ +static void udisks2_plugin_get_sensors (GList **sensors) { #ifdef UD2PD syslog(LOG_ERR, "fstart"); @@ -252,20 +181,16 @@ syslog(LOG_ERR, "fstart"); DevInfo *info; - /* This connection will be used for everything, including the obtaining - * of sensor data - */ - // fd1: Returns a connection to the given bus. The connection is a global variable shared with other callers of this function. - // fd2: Synchronously connects to the message bus specified by bus_type . Note that the returned object may shared with other callers, e.g. if two separate parts of a process calls this function with the same bus_type , they will share the same object. - connection = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error); + /* This connection will be used for everything, including the obtaining of sensor data */ + connection = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &error); if (NULL == connection) { #ifdef UD2PD syslog(LOG_ERR, "dbus conn fail"); #endif - g_debug("Failed to open connection to DBUS: %s", error->message); - g_clear_error(&error); + g_debug ("Failed to open connection to DBUS: %s", error->message); + g_clear_error (&error); return; } @@ -273,26 +198,21 @@ syslog(LOG_ERR, "dbus conn fail"); syslog(LOG_ERR, "dbus conn success"); #endif - /* This was the proxy which is only used once during the enumeration of - * the device object paths - */ - // I use it to get all info of all devices at once - // fd1: Creates a new proxy for a remote interface exported by a connection on a message bus. - // fd2: Creates a proxy for accessing interface_name on the remote object at object_path owned by name at connection and synchronously loads D-Bus properties unless the G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES flag is used. - proxy = g_dbus_proxy_new_sync(connection, G_DBUS_PROXY_FLAGS_NONE, NULL, - UDISKS2_BUS_NAME, - UDISKS2_OBJECT_PATH, - UDISKS2_INTERFACE_NAME, - NULL, &error ); + /* I use this proxy to get all info of all devices at once */ + proxy = g_dbus_proxy_new_sync (connection, G_DBUS_PROXY_FLAGS_NONE, NULL, + UDISKS2_BUS_NAME, + UDISKS2_OBJECT_PATH, + UDISKS2_INTERFACE_NAME, + NULL, &error); if (NULL == proxy) { #ifdef UD2PD syslog(LOG_ERR, "dbus conn proxy fail"); #endif - g_debug("dbus conn proxy fail: %s", error->message); - g_clear_error(&error); - g_clear_object(&connection); + g_debug ("dbus conn proxy fail: %s", error->message); + g_clear_error (&error); + g_clear_object (&connection); return; } @@ -300,26 +220,20 @@ syslog(LOG_ERR, "dbus conn proxy fail"); syslog(LOG_ERR, "dbus conn proxy success"); #endif - /* The object paths of the disks are enumerated and placed in an array - * of object paths - */ - // fd1: Function for synchronously invoking a method and receiving reply values. - // fd2: Synchronously invokes the method_name method on proxy. - // called "EnumerateDevices" method on UDisks object through dbus - // which returned an array of objectpaths - // "GetManagedObjects" returns dict of (objectpath, (dict of (string [ie. if. name], dict of(string [ie. property name], variant [ie. prop. value])))) + /* The object paths of the disks are enumerated and placed in an array of object paths + * "GetManagedObjects" returns dict of (objectpath, (dict of (string [ie. if. name], dict of(string [ie. property name], variant [ie. prop. value])))) */ - // g_dbus_proxy_call_sync() returns NULL on error, GVariant * otherwise - // need second param to prevent memory leak - GVariant *managed_objects, *managed_objects2; + /* g_dbus_proxy_call_sync() returns NULL on error, GVariant * otherwise + * need second variable to prevent memory leak */ + GVariant *managed_objects = NULL; + GVariant *managed_objects2 = NULL; - - managed_objects2 = g_dbus_proxy_call_sync(proxy, "GetManagedObjects", - NULL, // parameters - G_DBUS_CALL_FLAGS_NONE, // flags - -1, // timeout - NULL, // cancellable - &error); + managed_objects2 = g_dbus_proxy_call_sync (proxy, "GetManagedObjects", + NULL, /* parameters */ + G_DBUS_CALL_FLAGS_NONE, /* flags */ + -1, /* timeout */ + NULL, /* cancellable */ + &error); if (NULL == managed_objects2) { @@ -327,45 +241,44 @@ syslog(LOG_ERR, "dbus conn proxy success"); syslog(LOG_ERR, "Failed to enumerate disk devices"); #endif - g_debug("Failed to enumerate disk devices: %s", error->message); - g_clear_error(&error); - g_clear_object(&proxy); - g_clear_object(&connection); + g_debug ("Failed to enumerate disk devices: %s", error->message); + g_clear_error (&error); + g_clear_object (&proxy); + g_clear_object (&connection); return; } - // the result dictionary is enclosed in an array, unpack - managed_objects = g_variant_get_child_value(managed_objects2, 0); - g_variant_unref(managed_objects2); + /* the result dictionary is enclosed in an array, unpack */ + managed_objects = g_variant_get_child_value (managed_objects2, 0); + g_variant_unref (managed_objects2); #ifdef UD2PD //syslog(LOG_ERR, "managed_objects type: %s", g_variant_print(managed_objects, TRUE)); syslog(LOG_ERR, "success to enumerate disk devices"); #endif - // iterator for the result dictionary - - // iterator code is based on the g_variant_iter_next() documentation - // iter is freed if the GVariant is, when using g_variant_iter_init() + /* iterator for the result dictionary + * iterator code is based on the g_variant_iter_next() documentation + * iter is freed if the GVariant is, when using g_variant_iter_init() */ GVariantIter iter; - gchar *key; // object path (like '/org/freedesktop/UDisks2/drives/Samsung_SSD_840_EVO_250GB_*insert drive serial nr.*') - GVariant *value; + gchar *key = NULL; /* object path (like '/org/freedesktop/UDisks2/drives/Samsung_SSD_840_EVO_250GB_*insert drive serial nr.*') */ + GVariant *value = NULL; #ifdef UD2PD -// log collection size -syslog(LOG_ERR, "iter init count: %d", (int) g_variant_iter_init(&iter, managed_objects)); +/* log collection size */ +syslog(LOG_ERR, "iter init count: %d", (int) g_variant_iter_init (&iter, managed_objects)); #else - g_variant_iter_init(&iter, managed_objects); + g_variant_iter_init (&iter, managed_objects); #endif - // "{sv}" is a GVariant format string - // {} dictionary of, s string, v GVariant - // changed to "{oa{sa{sv}}}" on error message 'the GVariant format string '{sv}' has a type of '{sv}' but the given value has a type of 'a{oa{sa{sv}}}'' - // a is array, o is object path - // NOO!! the right format string is "{o@*}", which means get an object path into the 1st variable (key) - // and get 'everything else' (as a GVariant) into the 2nd variable (value) - // needs the & before the key and value params! - while (g_variant_iter_next(&iter, "{o@*}", &key, &value)) { + /* "{sv}" is a GVariant format string + * {} dictionary of, s string, v GVariant + * changed to "{oa{sa{sv}}}" on error message 'the GVariant format string '{sv}' has a type of '{sv}' but the given value has a type of 'a{oa{sa{sv}}}'' + * a is array, o is object path + * NOO!! the right format string is "{o@*}", which means get an object path into the 1st variable (key) + * and get 'everything else' (as a GVariant) into the 2nd variable (value) + * needs the & before the key and value params! */ + while (g_variant_iter_next (&iter, "{o@*}", &key, &value)) { #ifdef UD2PD syslog(LOG_ERR, "in iter while loop"); @@ -373,42 +286,42 @@ syslog(LOG_ERR, "key value: %s", key); //syslog(LOG_ERR, "value type: %s", g_variant_print(value, TRUE)); #endif - // level 2 - // create a dictionary of value - // the two interface names that we are searching for are known and defined - // can't use GVariantDict, it only supports '{sv}' but the given value has a type of '{sa{sv}}' - // using general lookup + /* level 2 + * create a dictionary of value + * the two interface names that we are searching for are known and defined + * can't use GVariantDict, it only supports '{sv}' but the given value has a type of '{sa{sv}}' + * using general lookup */ - GVariant *propdict; // drive data - GVariant *propdict2; // drive smart data + GVariant *propdict = NULL; /* drive data */ + GVariant *propdict2 = NULL; /* drive smart data */ - // make two dictionaries that contain the properties of the drive interfaces - propdict = g_variant_lookup_value(value, UDISKS2_DEVICE_INTERFACE_NAME, G_VARIANT_TYPE_DICTIONARY); - propdict2 = g_variant_lookup_value(value, UDISKS2_DEVICE_INTERFACE2_NAME, G_VARIANT_TYPE_DICTIONARY); + /* make two dictionaries that contain the properties of the drive interfaces */ + propdict = g_variant_lookup_value (value, UDISKS2_DEVICE_INTERFACE_NAME, G_VARIANT_TYPE_DICTIONARY); + propdict2 = g_variant_lookup_value (value, UDISKS2_DEVICE_INTERFACE2_NAME, G_VARIANT_TYPE_DICTIONARY); - // do we have the right ifname keys? - if((NULL != propdict) && (NULL != propdict2)) { + /* do we have the right ifname keys? */ + if ((NULL != propdict) && (NULL != propdict2)) { #ifdef UD2PD syslog(LOG_ERR, "propdict type: %s", g_variant_print(propdict, TRUE)); syslog(LOG_ERR, "propdict2 type: %s", g_variant_print(propdict2, TRUE)); #endif - // get data - gchar *id; - gchar *model; + /* get data */ + gchar *id = NULL; + gchar *model = NULL; gboolean smartenabled; gdouble temp; - // NULL, bc we don't care about the length of the string - // typecast bc g_variant_get_string() returns const char* - id = (gchar *) g_variant_get_string(g_variant_lookup_value(propdict, "Id", G_VARIANT_TYPE_STRING), NULL); - model = (gchar *) g_variant_get_string(g_variant_lookup_value(propdict, "Model", G_VARIANT_TYPE_STRING), NULL); + /* NULL, bc we don't care about the length of the string + * typecast bc g_variant_get_string() returns const char* */ + id = (gchar *) g_variant_get_string (g_variant_lookup_value (propdict, "Id", G_VARIANT_TYPE_STRING), NULL); + model = (gchar *) g_variant_get_string (g_variant_lookup_value (propdict, "Model", G_VARIANT_TYPE_STRING), NULL); - smartenabled = g_variant_get_boolean(g_variant_lookup_value(propdict2, "SmartEnabled", G_VARIANT_TYPE_BOOLEAN)); - temp = g_variant_get_double(g_variant_lookup_value(propdict2, "SmartTemperature", G_VARIANT_TYPE_DOUBLE)); + smartenabled = g_variant_get_boolean (g_variant_lookup_value (propdict2, "SmartEnabled", G_VARIANT_TYPE_BOOLEAN)); + temp = g_variant_get_double (g_variant_lookup_value (propdict2, "SmartTemperature", G_VARIANT_TYPE_DOUBLE)); #ifdef UD2PD syslog(LOG_ERR, "Found udisks2 device id: '%s'\n", id); @@ -417,35 +330,34 @@ syslog(LOG_ERR, "Found udisks2 device smartenabled: '%d'\n", smartenabled); syslog(LOG_ERR, "Found udisks2 device temp: '%f'\n", temp); #endif + /* only go on if smart is enabled + * save data */ + if (smartenabled) { - // only go on if smart is enabled - // save data - if(smartenabled) { - - info = g_malloc0(sizeof(DevInfo)); + info = g_malloc0 (sizeof (DevInfo)); if (NULL == devices) { - devices = g_hash_table_new(g_str_hash, g_str_equal); + devices = g_hash_table_new (g_str_hash, g_str_equal); } - info->id = g_strdup(id); - info->path = g_strdup(key); + info->id = g_strdup (id); + info->path = g_strdup (key); - // temp in K - // this could be left at 0.0, 2 seconds later it will be refreshed anyway - info->temp = (gdouble)temp - 273.15; - g_hash_table_insert(devices, info->id, info); + /* temp in K + * this could be left at 0.0, 2 seconds later it will be refreshed anyway */ + info->temp = (gdouble) temp - 273.15; + g_hash_table_insert (devices, info->id, info); - // Write the sensor data - sensors_applet_plugin_add_sensor(sensors, - id, - "Disk Temperature", - model, - TEMP_SENSOR, - FALSE, - HDD_ICON, - DEFAULT_GRAPH_COLOR); + /* Write the sensor data */ + sensors_applet_plugin_add_sensor (sensors, + id, + "Disk Temperature", + model, + TEMP_SENSOR, + FALSE, + HDD_ICON, + DEFAULT_GRAPH_COLOR); - g_debug("Added %s", id); + g_debug ("Added %s", id); #ifdef UD2PD syslog(LOG_ERR, "Added %s", id); @@ -464,8 +376,8 @@ syslog(LOG_ERR, "No temp data for device: %s\n", key); syslog(LOG_ERR, "b4 free1"); #endif - g_free(id); - g_free(model); + g_free (id); + g_free (model); } @@ -473,40 +385,40 @@ syslog(LOG_ERR, "b4 free1"); syslog(LOG_ERR, "b4 free2"); #endif - // free propdict, propdict2 - // g_variant_dict_unref() may not work a few times, gives error - // this one seems to do fine - if(NULL != propdict) {g_variant_unref(propdict);} - if(NULL != propdict2) {g_variant_unref(propdict2);} + /* free propdict, propdict2 + * g_variant_dict_unref() may not work a few times, gives error + * this one seems to do fine */ + if (NULL != propdict) {g_variant_unref (propdict);} + if (NULL != propdict2) {g_variant_unref (propdict2);} #ifdef UD2PD syslog(LOG_ERR, "b4 free3"); #endif - g_free(key); - g_variant_unref(value); + g_free (key); + g_variant_unref (value); - } // end of while loop + } /* end of while loop */ - g_variant_unref(managed_objects); - g_clear_object(&proxy); + g_variant_unref (managed_objects); + g_clear_object (&proxy); if (NULL == devices) { - g_clear_object(&connection); + g_clear_object (&connection); } } -// this is the function called every refresh cycle -static gdouble udisks2_plugin_get_sensor_value(const gchar *path, - const gchar *id, - SensorType type, - GError **error) { - DevInfo *info; +/* this function is called every refresh cycle */ +static gdouble udisks2_plugin_get_sensor_value (const gchar *path, + const gchar *id, + SensorType type, + GError **error) { + DevInfo *info = NULL; - // get device stuct from data store - info = (DevInfo *) g_hash_table_lookup(devices, path); + /* get device stuct from data store */ + info = (DevInfo *) g_hash_table_lookup (devices, path); if (NULL == info) { - g_set_error(error, SENSORS_APPLET_PLUGIN_ERROR, 0, "Error finding disk with path %s", path); + g_set_error (error, SENSORS_APPLET_PLUGIN_ERROR, 0, "Error finding disk with path %s", path); return 0.0; } @@ -516,37 +428,33 @@ static gdouble udisks2_plugin_get_sensor_value(const gchar *path, return 0.0; } - // refresh device temp - /* update value since Changed() signal doesn't fire manually enough so - * poll instead */ - update_device(info); + /* refresh device temp */ + update_device (info); return info->temp; } -// API functions -const gchar *sensors_applet_plugin_name(void) -{ +/* API functions */ +const gchar *sensors_applet_plugin_name (void) { return plugin_name; } -static GList *udisks2_plugin_init(void) { +static GList *udisks2_plugin_init (void) { GList *sensors = NULL; - udisks2_plugin_get_sensors(&sensors); + udisks2_plugin_get_sensors (&sensors); return sensors; } -GList *sensors_applet_plugin_init(void) -{ - return udisks2_plugin_init(); +GList *sensors_applet_plugin_init (void) { + return udisks2_plugin_init (); } -gdouble sensors_applet_plugin_get_sensor_value(const gchar *path, - const gchar *id, - SensorType type, - GError **error) { +gdouble sensors_applet_plugin_get_sensor_value (const gchar *path, + const gchar *id, + SensorType type, + GError **error) { - return udisks2_plugin_get_sensor_value(path, id, type, error); + return udisks2_plugin_get_sensor_value (path, id, type, error); } diff --git a/plugins/udisks2/udisks2-plugin.h b/plugins/udisks2/udisks2-plugin.h index 026ee8c..98664be 100644 --- a/plugins/udisks2/udisks2-plugin.h +++ b/plugins/udisks2/udisks2-plugin.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009 Pramod Dematagoda <[email protected]> + * Copyright (C) 2017 info-cppsp <[email protected]> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by |