static gboolean handle_delete (CockpitStorageMDRaid *object, GDBusMethodInvocation *invocation) { StorageMDRaid *mdraid = STORAGE_MDRAID(object); StorageProvider *provider = storage_object_get_provider (mdraid->object); UDisksClient *udisks_client = storage_provider_get_udisks_client (provider); gs_unref_object UDisksBlock *block = NULL; GList *members = NULL; GError *error = NULL; /* Delete is Stop followed by wiping of all member devices. */ block = udisks_client_get_block_for_mdraid (udisks_client, mdraid->udisks_mdraid); if (block) { if (!storage_cleanup_block (provider, block, &error)) goto out; } GVariantBuilder options; g_variant_builder_init (&options, G_VARIANT_TYPE("a{sv}")); if (!udisks_mdraid_call_stop_sync (mdraid->udisks_mdraid, g_variant_builder_end (&options), NULL, &error)) goto out; members = udisks_client_get_members_for_mdraid (udisks_client, mdraid->udisks_mdraid); for (GList *m = members; m; m = m->next) { UDisksBlock *block = m->data; GVariantBuilder options; g_variant_builder_init (&options, G_VARIANT_TYPE("a{sv}")); udisks_block_call_format_sync (block, "empty", g_variant_builder_end (&options), NULL, error ? NULL : &error); } out: if (error) { g_dbus_error_strip_remote_error (error); g_dbus_method_invocation_return_error (invocation, COCKPIT_ERROR, COCKPIT_ERROR_FAILED, "%s", error->message); } else cockpit_storage_mdraid_complete_stop (object, invocation); g_list_free_full (members, g_object_unref); g_clear_error (&error); return TRUE; }
static void udisks_client_get_object_info_for_mdraid (UDisksClient *client, UDisksMDRaid *mdraid, UDisksPartition *partition, UDisksObjectInfo *info) { UDisksBlock *block = NULL; guint64 size = 0; gchar *size_str = NULL; const gchar *name; const gchar *level; gchar *s; block = udisks_client_get_block_for_mdraid (client, mdraid); size = udisks_mdraid_get_size (mdraid); if (size > 0) size_str = udisks_client_get_size_for_display (client, size, FALSE, FALSE); name = udisks_mdraid_get_name (mdraid); s = strstr (name, ":"); if (s != NULL && strlen (s) > 1) info->name = g_strdup (s + 1); else info->name = g_strdup (name); info->icon = g_themed_icon_new_with_default_fallbacks ("drive-multidisk"); info->icon_symbolic = g_themed_icon_new_with_default_fallbacks ("drive-multidisk-symbolic"); level = udisks_mdraid_get_level (mdraid); if (size_str != NULL) { /* Translators: Used to format the description for a RAID array. * The first %s is the size (e.g. '42.0 GB'). * The second %s is the level (e.g. 'RAID-5 Array'). */ info->description = g_strdup_printf (C_("mdraid-desc", "%s %s"), size_str, format_mdraid_level (level)); } else { info->description = g_strdup (format_mdraid_level (level)); } if (partition != NULL) { /* Translators: Used to describe a partition of a RAID Array. * The %d is the partition number. * The %s is the description for the drive (e.g. "2 TB RAID-5"). */ s = g_strdup_printf (C_("part-raid", "Partition %d of %s"), udisks_partition_get_number (partition), info->description); g_free (info->description); info->description = s; } if (strlen (info->name) > 0) { if (block != NULL) { /* Translators: String used for one-liner description of running RAID array. * The first %s is the array name (e.g. "AlphaGo"). * The second %s is the size and level (e.g. "2 TB RAID-5"). * The third %s is the special device file (e.g. "/dev/sda"). */ info->one_liner = g_strdup_printf (C_("one-liner-mdraid-running", "%s — %s (%s)"), info->name, info->description, udisks_block_get_preferred_device (block)); } else { /* Translators: String used for one-liner description of non-running RAID array. * The first %s is the array name (e.g. "AlphaGo"). * The second %s is the size and level (e.g. "2 TB RAID-5"). */ info->one_liner = g_strdup_printf (C_("one-liner-mdraid-not-running", "%s — %s"), info->name, info->description); } } else { if (block != NULL) { /* Translators: String used for one-liner description of running RAID array w/o a name. * The first %s is the array name (e.g. "AlphaGo"). * The second %s is the size and level (e.g. "2 TB RAID-5"). * The third %s is the special device file (e.g. "/dev/sda"). */ info->one_liner = g_strdup_printf (C_("one-liner-mdraid-no-name-running", "%s — %s"), info->description, udisks_block_get_preferred_device (block)); } else { /* Translators: String used for one-liner description of non-running RAID array w/o a name. * The first %s is the array name (e.g. "AlphaGo"). * The second %s is the size and level (e.g. "2 TB RAID-5"). */ info->one_liner = g_strdup_printf (C_("one-liner-mdraid-no-name-not-running", "%s"), info->description); } } g_clear_object (&block); info->sort_key = g_strdup_printf ("01_mdraid_%s_%d", udisks_mdraid_get_uuid (mdraid), partition != NULL ? udisks_partition_get_number (partition) : 0); }