Пример #1
0
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;
}
Пример #2
0
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);
}
Пример #3
0
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 "/";
    }
}