static GDBusInterface * get_udisk_iface (UDisksObject *object) { UDisksBlock *block = udisks_object_peek_block (object); if (block) { /* don't include unused loop or nbd devices */ if (udisks_block_get_size (block) == 0 && (g_str_has_prefix (udisks_block_get_device (block), "/dev/loop") || g_str_has_prefix (udisks_block_get_device (block), "/dev/nbd"))) return NULL; return G_DBUS_INTERFACE (block); } UDisksDrive *drive = udisks_object_peek_drive (object); if (drive) { return G_DBUS_INTERFACE (drive); } UDisksMDRaid *mdraid = udisks_object_peek_mdraid (object); if (mdraid) { return G_DBUS_INTERFACE (mdraid); } return NULL; }
static void on_examine_action_clicked (NotifyNotification *notification, const gchar *action, gpointer user_data) { GduSdMonitor *monitor = GDU_SD_MONITOR (user_data); const gchar *device_file = NULL; gchar *command_line = NULL; GAppInfo *app_info = NULL; GError *error = NULL; if (g_strcmp0 (action, "examine-smart") == 0) { if (monitor->ata_smart_problems != NULL) { UDisksObject *object = UDISKS_OBJECT (monitor->ata_smart_problems->data); if (object != NULL) { UDisksDrive *drive = udisks_object_peek_drive (object); if (drive != NULL) { UDisksBlock *block = udisks_client_get_block_for_drive (monitor->client, drive, TRUE); /* get_physical */ if (block != NULL) { device_file = udisks_block_get_device (block); g_object_ref (block); } } } } } else { g_assert_not_reached (); } if (device_file != NULL) command_line = g_strdup_printf ("gnome-disks --block-device %s", device_file); else command_line = g_strdup_printf ("gnome-disks"); app_info = g_app_info_create_from_commandline (command_line, NULL, /* application name */ G_APP_INFO_CREATE_SUPPORTS_STARTUP_NOTIFICATION, NULL); if (!g_app_info_launch (app_info, NULL, NULL, &error)) { g_warning ("Error launching gnome-disks: %s (%s, %d)", error->message, g_quark_to_string (error->domain), error->code); g_clear_error (&error); } g_clear_object (&app_info); g_free (command_line); }
const gchar * storage_provider_translate_path (StorageProvider *provider, const gchar *udisks_or_lvm_path) { StorageObject *object = NULL; if (udisks_or_lvm_path == NULL) udisks_or_lvm_path = "/"; gs_unref_object UDisksObject *udisks_object = udisks_client_get_object (provider->udisks_client, udisks_or_lvm_path); if (udisks_object != NULL) { UDisksDrive *udisks_drive = udisks_object_peek_drive (udisks_object); if (udisks_drive != NULL) object = storage_provider_lookup_for_udisks_drive (provider, udisks_drive); UDisksBlock *udisks_block = udisks_object_peek_block (udisks_object); if (udisks_block != NULL) object = storage_provider_lookup_for_udisks_block (provider, udisks_block); UDisksMDRaid *udisks_raid = udisks_object_peek_mdraid (udisks_object); if (udisks_raid != NULL) object = storage_provider_lookup_for_udisks_mdraid (provider, udisks_raid); } gs_unref_object LvmObject *lvm_object = LVM_OBJECT (g_dbus_object_manager_get_object (provider->lvm_objman, udisks_or_lvm_path)); if (lvm_object) { LvmVolumeGroup *lvm_volume_group = lvm_object_peek_volume_group (lvm_object); if (lvm_volume_group != NULL) object = storage_provider_lookup_for_lvm_volume_group (provider, lvm_volume_group); LvmLogicalVolume *lvm_logical_volume = lvm_object_peek_logical_volume (lvm_object); if (lvm_logical_volume != NULL) object = storage_provider_lookup_for_lvm_logical_volume (provider, lvm_logical_volume); } if (object != NULL) { // g_debug ("%s -> %s", udisks_or_lvm_path, g_dbus_object_get_object_path (G_DBUS_OBJECT (object))); return g_dbus_object_get_object_path (G_DBUS_OBJECT (object)); } else { // g_debug ("%s -> nothing", udisks_or_lvm_path); return "/"; } }