Add a sorting key for drives
authorDavid Zeuthen <davidz@redhat.com>
Mon, 15 Aug 2011 14:57:29 +0000 (10:57 -0400)
committerDavid Zeuthen <davidz@redhat.com>
Mon, 15 Aug 2011 14:57:29 +0000 (10:57 -0400)
Signed-off-by: David Zeuthen <davidz@redhat.com>
data/org.freedesktop.UDisks2.xml
doc/udisks2-sections.txt
src/udiskslinuxdrive.c

index 005e223..fe9b395 100644 (file)
     -->
     <property name="ConnectionBus" type="s" access="read"/>
 
+    <!-- SortKey:
+         A string that can be used for sorting drive objects.
+    -->
+    <property name="SortKey" type="s" access="read"/>
+
     <!--
         Eject:
         @options: Options (currently unused except for <link linkend="udisks-std-options">standard options</link>).
index bec3d72..17cabce 100644 (file)
@@ -447,6 +447,7 @@ udisks_drive_get_serial
 udisks_drive_get_size
 udisks_drive_get_vendor
 udisks_drive_get_wwn
+udisks_drive_get_sort_key
 udisks_drive_set_connection_bus
 udisks_drive_set_media
 udisks_drive_set_media_compatibility
@@ -458,6 +459,7 @@ udisks_drive_set_serial
 udisks_drive_set_size
 udisks_drive_set_vendor
 udisks_drive_set_wwn
+udisks_drive_set_sort_key
 UDisksDriveProxy
 UDisksDriveProxyClass
 udisks_drive_proxy_new
index 408828e..81ef377 100644 (file)
@@ -68,6 +68,8 @@ struct _UDisksLinuxDrive
   gboolean ata_smart_failing;
   gdouble ata_smart_temperature;
   guint64 ata_smart_power_on_seconds;
+
+  guint64 detection_time_at_construction;
 };
 
 G_LOCK_DEFINE_STATIC (drive_lock);
@@ -772,6 +774,8 @@ drive_update (UDisksLinuxDrive      *drive,
 {
   UDisksDrive *iface = UDISKS_DRIVE (_iface);
   GUdevDevice *device;
+  gchar *sort_key;
+  const gchar *name;
 
   if (drive->devices == NULL)
     goto out;
@@ -916,6 +920,19 @@ drive_update (UDisksLinuxDrive      *drive,
   drive_set_media (drive, iface, device);
   drive_set_rotation_rate (drive, iface, device);
   drive_set_connection_bus (drive, iface, device);
+
+  /* This is pretty lame but works for now
+   *
+   * TODO: we probably want to make it so devices inserted last sorts
+   * last in the list etc.
+   */
+  name = g_udev_device_get_name (device);
+  if (g_str_has_prefix (name, "sd"))
+    sort_key = g_strdup_printf ("z_%s", name);
+  else
+    sort_key = g_strdup (name);
+  udisks_drive_set_sort_key (iface, sort_key);
+  g_free (sort_key);
  out:
   ;
 }