[gvfs/wip/udisks2] Support floppy drives



commit e56eb56d445afc87f49971234736144d54e25bb6
Author: David Zeuthen <davidz redhat com>
Date:   Mon Oct 10 16:59:02 2011 -0400

    Support floppy drives
    
    Signed-off-by: David Zeuthen <davidz redhat com>

 monitor/udisks2/gvfsudisks2drive.c         |    8 ++++++--
 monitor/udisks2/gvfsudisks2volume.c        |   25 +++++++++++++++++++------
 monitor/udisks2/gvfsudisks2volumemonitor.c |   23 ++++++++++++++++++-----
 3 files changed, 43 insertions(+), 13 deletions(-)
---
diff --git a/monitor/udisks2/gvfsudisks2drive.c b/monitor/udisks2/gvfsudisks2drive.c
index 73ac0c1..ef99793 100644
--- a/monitor/udisks2/gvfsudisks2drive.c
+++ b/monitor/udisks2/gvfsudisks2drive.c
@@ -166,8 +166,12 @@ update_drive (GVfsUDisks2Drive *drive)
   drive->is_media_removable = udisks_drive_get_media_removable (drive->udisks_drive);
   if (drive->is_media_removable)
     {
-      drive->has_media = (udisks_drive_get_size (drive->udisks_drive) > 0);
-      drive->can_eject = TRUE;
+      drive->has_media = udisks_drive_get_media_available (drive->udisks_drive);
+      /* every drive except PC floppy drives are ejectable */
+      if (g_strcmp0 (udisks_drive_get_media (drive->udisks_drive), "floppy") != 0)
+        {
+          drive->can_eject = TRUE;
+        }
     }
   else
     {
diff --git a/monitor/udisks2/gvfsudisks2volume.c b/monitor/udisks2/gvfsudisks2volume.c
index 82e2660..5bc7465 100644
--- a/monitor/udisks2/gvfsudisks2volume.c
+++ b/monitor/udisks2/gvfsudisks2volume.c
@@ -242,12 +242,16 @@ update_volume (GVfsUDisks2Volume *volume)
         }
       else
         {
-          s = udisks_util_get_size_for_display (udisks_block_get_size (block), FALSE, FALSE);
-          /* Translators: This is used for volume with no filesystem label.
-           *              The first %s is the formatted size (e.g. "42.0 MB").
-           */
-          volume->name = g_strdup_printf (_("%s Volume"), s);
-          g_free (s);
+          guint64 size = udisks_block_get_size (block);
+          if (size > 0)
+            {
+              s = udisks_util_get_size_for_display (size, FALSE, FALSE);
+              /* Translators: This is used for volume with no filesystem label.
+               *              The first %s is the formatted size (e.g. "42.0 MB").
+               */
+              volume->name = g_strdup_printf (_("%s Volume"), s);
+              g_free (s);
+            }
         }
 
       udisks_drive = udisks_client_get_drive_for_block (gvfs_udisks2_volume_monitor_get_udisks_client (volume->monitor),
@@ -290,6 +294,15 @@ update_volume (GVfsUDisks2Volume *volume)
 
           volume->icon = media_icon != NULL ? g_object_ref (media_icon) : NULL;
 
+          /* use media_desc if we haven't figured out a name yet (applies to e.g.
+           * /dev/fd0 since its size is 0)
+           */
+          if (volume->name == NULL)
+            {
+              volume->name = media_desc;
+              media_desc = NULL;
+            }
+
           g_free (media_desc);
           if (media_icon != NULL)
             g_object_unref (media_icon);
diff --git a/monitor/udisks2/gvfsudisks2volumemonitor.c b/monitor/udisks2/gvfsudisks2volumemonitor.c
index 73b305f..8e117ac 100644
--- a/monitor/udisks2/gvfsudisks2volumemonitor.c
+++ b/monitor/udisks2/gvfsudisks2volumemonitor.c
@@ -631,6 +631,8 @@ should_include_volume (GVfsUDisks2VolumeMonitor *monitor,
                        gboolean                  allow_encrypted_cleartext)
 {
   gboolean ret = FALSE;
+  GDBusObject *object;
+  UDisksFilesystem *filesystem;
 
   /* show encrypted volumes... */
   if (g_strcmp0 (udisks_block_get_id_type (block), "crypto_LUKS") == 0)
@@ -668,8 +670,12 @@ should_include_volume (GVfsUDisks2VolumeMonitor *monitor,
   if (!should_include_volume_check_mount_points (monitor, block))
     goto out;
 
-  /* TODO: handle crypto, fstab and a bunch of other stuff */
-  if (g_strcmp0 (udisks_block_get_id_usage (block), "filesystem") != 0)
+  object = g_dbus_interface_get_object (G_DBUS_INTERFACE (block));
+  if (object == NULL)
+    goto out;
+
+  filesystem = udisks_object_peek_filesystem (UDISKS_OBJECT (object));
+  if (filesystem == NULL)
     goto out;
 
   ret = TRUE;
@@ -1206,10 +1212,17 @@ mount_point_has_device (GVfsUDisks2VolumeMonitor  *monitor,
   block = udisks_client_get_block_for_dev (monitor->client, statbuf.st_rdev);
   if (block != NULL)
     {
-      if (udisks_block_get_size (block) == 0)
+      UDisksDrive *drive;
+      drive = udisks_client_get_drive_for_block (monitor->client, block);
+      if (drive != NULL)
         {
-          g_object_unref (block);
-          goto out;
+          if (!udisks_drive_get_media_available (drive))
+            {
+              g_object_unref (drive);
+              g_object_unref (block);
+              goto out;
+            }
+          g_object_unref (drive);
         }
       g_object_unref (block);
     }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]