forked from enlightenment/enlightenment
Update of the dbus calls of the upower module.
Reviewers: zmike, devilhorns, stephenmhouston Reviewed By: zmike, stephenmhouston Subscribers: cedric Tags: #enlightenment-git Differential Revision: https://phab.enlightenment.org/D6386
This commit is contained in:
parent
63f2d0ba95
commit
fff3f69114
|
@ -6,6 +6,8 @@
|
|||
# define BUS "org.freedesktop.UPower"
|
||||
# define PATH "/org/freedesktop/UPower"
|
||||
# define IFACE "org.freedesktop.UPower"
|
||||
# define IFACE_DEVICE "org.freedesktop.UPower.Device"
|
||||
# define IFACE_PROPERTIES "org.freedesktop.DBus.Properties"
|
||||
|
||||
extern Eina_List *device_batteries;
|
||||
extern Eina_List *device_ac_adapters;
|
||||
|
@ -13,6 +15,8 @@ extern double init_time;
|
|||
|
||||
static Eldbus_Connection *conn;
|
||||
static Eldbus_Proxy *upower_proxy;
|
||||
static Eldbus_Proxy *upower_proxy_bat;
|
||||
static Eldbus_Proxy *upower_proxy_ac;
|
||||
|
||||
static void
|
||||
_battery_free(Battery *bat)
|
||||
|
@ -85,7 +89,7 @@ _process_ac(Eldbus_Proxy *proxy)
|
|||
ac->proxy = proxy;
|
||||
ac->udi = eina_stringshare_add(eldbus_object_path_get(eldbus_proxy_object_get(proxy)));
|
||||
eldbus_proxy_property_get_all(proxy, _ac_get_all_cb, ac);
|
||||
eldbus_proxy_signal_handler_add(proxy, "Changed", _ac_changed_cb, ac);
|
||||
eldbus_proxy_signal_handler_add(upower_proxy_ac, "PropertiesChanged", _ac_changed_cb, ac);
|
||||
device_ac_adapters = eina_list_append(device_ac_adapters, ac);
|
||||
return;
|
||||
|
||||
|
@ -215,7 +219,7 @@ _process_battery(Eldbus_Proxy *proxy)
|
|||
bat->proxy = proxy;
|
||||
bat->udi = eina_stringshare_add(eldbus_object_path_get(eldbus_proxy_object_get(proxy)));
|
||||
eldbus_proxy_property_get_all(proxy, _bat_get_all_cb, bat);
|
||||
eldbus_proxy_signal_handler_add(proxy, "Changed", _bat_changed_cb, bat);
|
||||
eldbus_proxy_signal_handler_add(upower_proxy_bat, "PropertiesChanged", _bat_changed_cb, bat);
|
||||
device_batteries = eina_list_append(device_batteries, bat);
|
||||
_battery_device_update();
|
||||
}
|
||||
|
@ -228,14 +232,25 @@ _device_type_cb(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending E
|
|||
Eldbus_Object *obj;
|
||||
unsigned int type;
|
||||
|
||||
const char *path = eldbus_pending_path_get (pending);
|
||||
if (!eldbus_message_arguments_get(msg, "v", &variant))
|
||||
goto error;
|
||||
|
||||
eldbus_message_iter_arguments_get(variant, "u", &type);
|
||||
if (type == 1)
|
||||
{
|
||||
obj = eldbus_object_get(conn, BUS, path);
|
||||
EINA_SAFETY_ON_FALSE_RETURN(obj);
|
||||
upower_proxy_ac = eldbus_proxy_get(obj, IFACE_PROPERTIES);
|
||||
_process_ac(proxy);
|
||||
}
|
||||
else if (type == 2)
|
||||
{
|
||||
obj = eldbus_object_get(conn, BUS, path);
|
||||
EINA_SAFETY_ON_FALSE_RETURN(obj);
|
||||
upower_proxy_bat = eldbus_proxy_get(obj, IFACE_PROPERTIES);
|
||||
_process_battery(proxy);
|
||||
}
|
||||
else
|
||||
goto error;
|
||||
|
||||
|
@ -256,7 +271,7 @@ _process_enumerate_path(const char *path)
|
|||
|
||||
obj = eldbus_object_get(conn, BUS, path);
|
||||
EINA_SAFETY_ON_FALSE_RETURN(obj);
|
||||
proxy = eldbus_proxy_get(obj, "org.freedesktop.UPower.Device");
|
||||
proxy = eldbus_proxy_get(obj, IFACE_DEVICE);
|
||||
eldbus_proxy_property_get(proxy, "Type", _device_type_cb, proxy);
|
||||
}
|
||||
|
||||
|
@ -312,6 +327,7 @@ _battery_upower_start(void)
|
|||
{
|
||||
Eldbus_Object *obj;
|
||||
|
||||
eldbus_init();
|
||||
conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SYSTEM);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(conn, 0);
|
||||
|
||||
|
@ -320,9 +336,9 @@ _battery_upower_start(void)
|
|||
upower_proxy = eldbus_proxy_get(obj, IFACE);
|
||||
EINA_SAFETY_ON_NULL_GOTO(upower_proxy, proxy_error);
|
||||
|
||||
eldbus_proxy_call(upower_proxy, "EnumerateDevices", _enumerate_cb, NULL, -1, "");
|
||||
eldbus_proxy_signal_handler_add(upower_proxy, "DeviceAdded", _device_added_cb, NULL);
|
||||
eldbus_proxy_signal_handler_add(upower_proxy, "DeviceRemoved", _device_removed_cb, NULL);
|
||||
eldbus_proxy_call(upower_proxy, "EnumerateDevices", _enumerate_cb, NULL, -1, "");
|
||||
return 1;
|
||||
|
||||
proxy_error:
|
||||
|
@ -339,6 +355,8 @@ _battery_upower_stop(void)
|
|||
Battery *bat;
|
||||
Ac_Adapter *ac;
|
||||
Eldbus_Object *obj;
|
||||
Eldbus_Object *obj_ac;
|
||||
Eldbus_Object *obj_bat;
|
||||
|
||||
EINA_LIST_FOREACH_SAFE(device_batteries, list, list2, bat)
|
||||
_battery_free(bat);
|
||||
|
@ -348,6 +366,21 @@ _battery_upower_stop(void)
|
|||
obj = eldbus_proxy_object_get(upower_proxy);
|
||||
eldbus_proxy_unref(upower_proxy);
|
||||
eldbus_object_unref(obj);
|
||||
if (upower_proxy_ac)
|
||||
{
|
||||
obj_ac = eldbus_proxy_object_get(upower_proxy_ac);
|
||||
eldbus_proxy_unref(upower_proxy_ac);
|
||||
eldbus_object_unref(obj_ac);
|
||||
upower_proxy_ac = NULL;
|
||||
}
|
||||
if (upower_proxy_bat)
|
||||
{
|
||||
obj_bat = eldbus_proxy_object_get(upower_proxy_bat);
|
||||
eldbus_proxy_unref(upower_proxy_bat);
|
||||
eldbus_object_unref(obj_bat);
|
||||
upower_proxy_bat = NULL;
|
||||
}
|
||||
eldbus_connection_unref(conn);
|
||||
eldbus_shutdown();
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -3,6 +3,8 @@
|
|||
#define BUS "org.freedesktop.UPower"
|
||||
#define PATH "/org/freedesktop/UPower"
|
||||
#define IFACE "org.freedesktop.UPower"
|
||||
# define IFACE_DEVICE "org.freedesktop.UPower.Device"
|
||||
# define IFACE_PROPERTIES "org.freedesktop.DBus.Properties"
|
||||
|
||||
EINTERN extern Eina_List *batman_device_batteries;
|
||||
EINTERN extern Eina_List *batman_device_ac_adapters;
|
||||
|
@ -10,6 +12,8 @@ EINTERN extern double batman_init_time;
|
|||
|
||||
static Eldbus_Connection *conn;
|
||||
static Eldbus_Proxy *upower_proxy;
|
||||
static Eldbus_Proxy *upower_proxy_bat;
|
||||
static Eldbus_Proxy *upower_proxy_ac;
|
||||
|
||||
typedef struct _Upower_Data Upower_Data;
|
||||
struct _Upower_Data
|
||||
|
@ -90,7 +94,7 @@ _process_ac(Eldbus_Proxy *proxy, Instance *inst)
|
|||
ac->proxy = proxy;
|
||||
ac->udi = eina_stringshare_add(eldbus_object_path_get(eldbus_proxy_object_get(proxy)));
|
||||
eldbus_proxy_property_get_all(proxy, _ac_get_all_cb, ac);
|
||||
eldbus_proxy_signal_handler_add(proxy, "Changed", _ac_changed_cb, ac);
|
||||
eldbus_proxy_signal_handler_add(upower_proxy_ac, "PropertiesChanged", _ac_changed_cb, ac);
|
||||
batman_device_ac_adapters = eina_list_append(batman_device_ac_adapters, ac);
|
||||
return;
|
||||
|
||||
|
@ -220,27 +224,38 @@ _process_battery(Eldbus_Proxy *proxy, Instance *inst)
|
|||
bat->proxy = proxy;
|
||||
bat->udi = eina_stringshare_add(eldbus_object_path_get(eldbus_proxy_object_get(proxy)));
|
||||
eldbus_proxy_property_get_all(proxy, _bat_get_all_cb, bat);
|
||||
eldbus_proxy_signal_handler_add(proxy, "Changed", _bat_changed_cb, bat);
|
||||
eldbus_proxy_signal_handler_add(upower_proxy_bat, "PropertiesChanged", _bat_changed_cb, bat);
|
||||
batman_device_batteries = eina_list_append(batman_device_batteries, bat);
|
||||
_batman_device_update(bat->inst);
|
||||
}
|
||||
|
||||
static void
|
||||
_device_type_cb(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
|
||||
_device_type_cb(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending)
|
||||
{
|
||||
Upower_Data *ud = data;
|
||||
Eldbus_Message_Iter *variant;
|
||||
Eldbus_Object *obj;
|
||||
unsigned int type;
|
||||
|
||||
const char *path = eldbus_pending_path_get (pending);
|
||||
if (!eldbus_message_arguments_get(msg, "v", &variant))
|
||||
goto error;
|
||||
|
||||
eldbus_message_iter_arguments_get(variant, "u", &type);
|
||||
if (type == 1)
|
||||
_process_ac(ud->proxy, ud->inst);
|
||||
{
|
||||
obj = eldbus_object_get(conn, BUS, path);
|
||||
EINA_SAFETY_ON_FALSE_RETURN(obj);
|
||||
upower_proxy_ac = eldbus_proxy_get(obj, IFACE_PROPERTIES);
|
||||
_process_ac(proxy);
|
||||
}
|
||||
else if (type == 2)
|
||||
_process_battery(ud->proxy, ud->inst);
|
||||
{
|
||||
obj = eldbus_object_get(conn, BUS, path);
|
||||
EINA_SAFETY_ON_FALSE_RETURN(obj);
|
||||
upower_proxy_bat = eldbus_proxy_get(obj, IFACE_PROPERTIES);
|
||||
_process_battery(proxy);
|
||||
}
|
||||
else
|
||||
goto error;
|
||||
|
||||
|
@ -265,7 +280,7 @@ _process_enumerate_path(const char *path, Instance *inst)
|
|||
|
||||
obj = eldbus_object_get(conn, BUS, path);
|
||||
EINA_SAFETY_ON_FALSE_RETURN(obj);
|
||||
proxy = eldbus_proxy_get(obj, "org.freedesktop.UPower.Device");
|
||||
proxy = eldbus_proxy_get(obj, IFACE_DEVICE);
|
||||
ud = E_NEW(Upower_Data, 1);
|
||||
if (!ud)
|
||||
{
|
||||
|
@ -365,9 +380,9 @@ _batman_upower_start(Instance *inst)
|
|||
upower_proxy = eldbus_proxy_get(obj, IFACE);
|
||||
EINA_SAFETY_ON_NULL_GOTO(upower_proxy, proxy_error);
|
||||
|
||||
eldbus_proxy_call(upower_proxy, "EnumerateDevices", _enumerate_cb, inst, -1, "");
|
||||
eldbus_proxy_signal_handler_add(upower_proxy, "DeviceAdded", _device_added_cb, inst);
|
||||
eldbus_proxy_signal_handler_add(upower_proxy, "DeviceRemoved", _device_removed_cb, inst);
|
||||
eldbus_proxy_call(upower_proxy, "EnumerateDevices", _enumerate_cb, inst, -1, "");
|
||||
return 1;
|
||||
|
||||
proxy_error:
|
||||
|
@ -393,6 +408,12 @@ _batman_upower_stop(void)
|
|||
obj = eldbus_proxy_object_get(upower_proxy);
|
||||
E_FREE_FUNC(upower_proxy, eldbus_proxy_unref);
|
||||
E_FREE_FUNC(obj, eldbus_object_unref);
|
||||
obj = eldbus_proxy_object_get(upower_proxy_ac);
|
||||
E_FREE_FUNC(upower_proxy_ac, eldbus_proxy_unref);
|
||||
E_FREE_FUNC(obj, eldbus_object_unref);
|
||||
obj = eldbus_proxy_object_get(upower_proxy_bat);
|
||||
E_FREE_FUNC(upower_proxy_bat, eldbus_proxy_unref);
|
||||
E_FREE_FUNC(obj, eldbus_object_unref);
|
||||
E_FREE_FUNC(conn, eldbus_connection_unref);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue