{
GError *error;
gchar *cleartext_object_path;
+ UDisksObject *cleartext_object;
error = NULL;
if (!udisks_encrypted_call_unlock_sync (encrypted,
g_object_unref (object);
goto out;
}
+ udisks_client_settle (client);
+
+ cleartext_object = UDISKS_OBJECT (g_dbus_object_manager_get_object (udisks_client_get_object_manager (client),
+ (cleartext_object_path)));
g_print ("Unlocked %s as %s.\n",
udisks_block_device_get_device (block),
- cleartext_object_path);
- /* TODO: lookup cleartext_object_path and print device */
+ udisks_block_device_get_device (udisks_object_get_block_device (cleartext_object)));
+ g_object_unref (cleartext_object);
g_free (cleartext_object_path);
}
else
if (is_setup)
{
- gchar *resulting_device_object_path;
+ gchar *resulting_object_path;
+ UDisksObject *resulting_object;
GUnixFDList *fd_list;
gint fd;
gboolean rc;
g_variant_new_handle (0),
options,
fd_list,
- &resulting_device_object_path,
+ &resulting_object_path,
NULL, /* out_fd_list */
NULL, /* GCancellable */
&error);
g_error_free (error);
goto out;
}
+ udisks_client_settle (client);
+ resulting_object = UDISKS_OBJECT (g_dbus_object_manager_get_object (udisks_client_get_object_manager (client),
+ (resulting_object_path)));
g_print ("Mapped file %s as %s.\n",
opt_loop_file,
- resulting_device_object_path);
- /* TODO: lookup cleartext_object_path and print device */
- g_free (resulting_device_object_path);
+ udisks_block_device_get_device (udisks_object_get_block_device (resulting_object)));
+ g_object_unref (resulting_object);
+ g_free (resulting_object_path);
}
else
{
GError *initialization_error;
GDBusObjectManager *object_manager;
+
+ GMainContext *context;
};
typedef struct
g_object_unref (client->object_manager);
+ if (client->context != NULL)
+ g_main_context_unref (client->context);
+
G_OBJECT_CLASS (udisks_client_parent_class)->finalize (object);
}
}
g_assert (client->initialization_error == NULL);
+ client->context = g_main_context_get_thread_default ();
+ if (client->context != NULL)
+ g_main_context_ref (client->context);
+
client->object_manager = udisks_object_manager_client_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_NONE,
"org.freedesktop.UDisks2",
out:
return ret;
}
+
+/**
+ * udisks_client_settle:
+ * @client: A #UDisksClient.
+ *
+ * Blocks until all pending D-Bus messages have been delivered.
+ *
+ * This is useful when using synchronous method calls since e.g. D-Bus
+ * signals received while waiting for the reply are queued up and
+ * dispatched after the synchronous call ends.
+ */
+void
+udisks_client_settle (UDisksClient *client)
+{
+ while (g_main_context_iteration (client->context, FALSE /* may_block */))
+ ;
+}