static void on_udisks_object_added (GDBusObjectManager *manager, GDBusObject *object, gpointer user_data) { FormatData *data = user_data; if (data->invocation == NULL) return; UDisksObject *udisks_object = UDISKS_OBJECT (object); UDisksJob *udisks_job = udisks_object_peek_job (udisks_object); if (udisks_job) { const gchar *us = g_dbus_proxy_get_object_path (G_DBUS_PROXY (data->block)); const gchar *const *them = udisks_job_get_objects (udisks_job); for (int i = 0; them[i]; i++) { if (strcmp (them[i], us) == 0) { g_dbus_method_invocation_return_value (data->invocation, g_variant_new ("()")); g_clear_object (&data->invocation); break; } } } }
static void update_progress_for_device (const gchar *operation, const gchar *dev, double progress) { StorageDaemon *daemon; StorageManager *manager; GList *jobs, *l; daemon = storage_daemon_get (); manager = storage_daemon_get_manager (daemon); jobs = storage_daemon_get_jobs (daemon); for (l = jobs; l; l = g_list_next (l)) { UDisksJob *job = l->data; const gchar *const *job_objects; int i; if (g_strcmp0 (udisks_job_get_operation (job), operation) != 0) continue; job_objects = udisks_job_get_objects (job); for (i = 0; job_objects[i]; i++) { StorageBlock *block; gboolean found = FALSE; block = storage_manager_find_block (manager, job_objects[i]); if (block) { if (g_strcmp0 (storage_block_get_device (block), dev) == 0) { found = TRUE; } else { const gchar **symlinks; int j; symlinks = storage_block_get_symlinks (block); for (j = 0; symlinks[j]; j++) { if (g_strcmp0 (symlinks[j], dev) == 0) { found = TRUE; break; } } } } if (found) { udisks_job_set_progress (job, progress); udisks_job_set_progress_valid (job, TRUE); } } } g_list_free_full (jobs, g_object_unref); }