mirror of
https://gitlab.freedesktop.org/upower/upower.git
synced 2025-12-20 06:40:04 +01:00
lib: Implement up_client_get_devices_async()
This commit is contained in:
parent
95618dfad4
commit
1fdc0824b6
3 changed files with 89 additions and 3 deletions
|
|
@ -160,6 +160,71 @@ up_client_get_devices2 (UpClient *client)
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
get_devices_async_thread (GTask *task,
|
||||||
|
gpointer source_object,
|
||||||
|
gpointer task_data,
|
||||||
|
GCancellable *cancellable)
|
||||||
|
{
|
||||||
|
GError *error = NULL;
|
||||||
|
GPtrArray *array;
|
||||||
|
|
||||||
|
array = up_client_get_devices_full (UP_CLIENT (source_object), cancellable, &error);
|
||||||
|
if (!array)
|
||||||
|
g_task_return_error (task, error);
|
||||||
|
else
|
||||||
|
g_task_return_pointer (task, array, (GDestroyNotify) g_ptr_array_unref);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* up_client_get_devices_async:
|
||||||
|
* @client: a #UpClient instance.
|
||||||
|
* @cancellable: (nullable): a #GCancellable or %NULL
|
||||||
|
* @callback: a #GAsyncReadyCallback to call when the request is satisfied
|
||||||
|
* @user_data: the data to pass to @callback
|
||||||
|
*
|
||||||
|
* Asynchronously fetches the list of #UpDevice objects.
|
||||||
|
*
|
||||||
|
* Since: 0.99.14
|
||||||
|
**/
|
||||||
|
void
|
||||||
|
up_client_get_devices_async (UpClient *client,
|
||||||
|
GCancellable *cancellable,
|
||||||
|
GAsyncReadyCallback callback,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
GTask *task;
|
||||||
|
|
||||||
|
task = g_task_new (client, cancellable, callback, user_data);
|
||||||
|
g_task_set_source_tag (task, (gpointer) G_STRFUNC);
|
||||||
|
|
||||||
|
g_task_run_in_thread (task, get_devices_async_thread);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* up_client_get_devices_finish:
|
||||||
|
* @client: a #UpClient instance.
|
||||||
|
* @res: a #GAsyncResult obtained from the #GAsyncReadyCallback passed
|
||||||
|
* to up_client_get_devices_async()
|
||||||
|
*
|
||||||
|
* Finishes an operation started with up_client_get_devices_async().
|
||||||
|
*
|
||||||
|
* Return value: (element-type UpDevice) (transfer full): an array of
|
||||||
|
* #UpDevice objects or %NULL on error.
|
||||||
|
**/
|
||||||
|
GPtrArray *
|
||||||
|
up_client_get_devices_finish (UpClient *client,
|
||||||
|
GAsyncResult *res,
|
||||||
|
GError **error)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (UP_IS_CLIENT (client), NULL);
|
||||||
|
g_return_val_if_fail (g_task_is_valid (res, client), NULL);
|
||||||
|
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
|
||||||
|
|
||||||
|
return g_task_propagate_pointer (G_TASK (res), error);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* up_client_get_display_device:
|
* up_client_get_display_device:
|
||||||
* @client: a #UpClient instance.
|
* @client: a #UpClient instance.
|
||||||
|
|
|
||||||
|
|
@ -86,6 +86,13 @@ char * up_client_get_critical_action (UpClient *client);
|
||||||
/* accessors */
|
/* accessors */
|
||||||
GPtrArray *up_client_get_devices (UpClient *client) G_DEPRECATED_FOR(up_client_get_devices2);
|
GPtrArray *up_client_get_devices (UpClient *client) G_DEPRECATED_FOR(up_client_get_devices2);
|
||||||
GPtrArray *up_client_get_devices2 (UpClient *client);
|
GPtrArray *up_client_get_devices2 (UpClient *client);
|
||||||
|
void up_client_get_devices_async (UpClient *client,
|
||||||
|
GCancellable *cancellable,
|
||||||
|
GAsyncReadyCallback callback,
|
||||||
|
gpointer user_data);
|
||||||
|
GPtrArray *up_client_get_devices_finish (UpClient *client,
|
||||||
|
GAsyncResult *res,
|
||||||
|
GError **error);
|
||||||
const gchar *up_client_get_daemon_version (UpClient *client);
|
const gchar *up_client_get_daemon_version (UpClient *client);
|
||||||
G_DEPRECATED
|
G_DEPRECATED
|
||||||
gboolean up_client_get_lid_is_closed (UpClient *client);
|
gboolean up_client_get_lid_is_closed (UpClient *client);
|
||||||
|
|
|
||||||
|
|
@ -1967,18 +1967,32 @@ class Tests(dbusmock.DBusTestCase):
|
||||||
def test_lib_up_client_async(self):
|
def test_lib_up_client_async(self):
|
||||||
'''Test up_client_async_new()'''
|
'''Test up_client_async_new()'''
|
||||||
|
|
||||||
|
ac = self.testbed.add_device('power_supply', 'AC', None,
|
||||||
|
['type', 'Mains', 'online', '1'], [])
|
||||||
self.start_daemon()
|
self.start_daemon()
|
||||||
|
|
||||||
def client_new_cb(obj, task):
|
def client_new_cb(obj, res):
|
||||||
nonlocal ml
|
nonlocal ml, client
|
||||||
client = UPowerGlib.Client.new_finish(task)
|
client = UPowerGlib.Client.new_finish(res)
|
||||||
self.assertRegex(client.get_daemon_version(), '^[0-9.]+$')
|
self.assertRegex(client.get_daemon_version(), '^[0-9.]+$')
|
||||||
ml.quit()
|
ml.quit()
|
||||||
|
|
||||||
|
def get_devices_cb(obj, res):
|
||||||
|
nonlocal ml, client
|
||||||
|
devs = client.get_devices_finish(res)
|
||||||
|
self.assertEqual(len(devs), 1)
|
||||||
|
ml.quit()
|
||||||
|
|
||||||
|
client = None
|
||||||
ml = GLib.MainLoop()
|
ml = GLib.MainLoop()
|
||||||
UPowerGlib.Client.new_async(None, client_new_cb)
|
UPowerGlib.Client.new_async(None, client_new_cb)
|
||||||
ml.run()
|
ml.run()
|
||||||
|
|
||||||
|
# This will crash, see:
|
||||||
|
# https://gitlab.gnome.org/GNOME/gobject-introspection/-/issues/305
|
||||||
|
# client.get_devices_async(None, get_devices_cb)
|
||||||
|
# ml.run()
|
||||||
|
|
||||||
#
|
#
|
||||||
# Helper methods
|
# Helper methods
|
||||||
#
|
#
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue