Add the org.freedesktop.UDisks.ProbedBlockDevice interface
authorDavid Zeuthen <davidz@redhat.com>
Thu, 2 Sep 2010 21:51:47 +0000 (17:51 -0400)
committerDavid Zeuthen <davidz@redhat.com>
Thu, 2 Sep 2010 21:51:47 +0000 (17:51 -0400)
Signed-off-by: David Zeuthen <davidz@redhat.com>
data/org.freedesktop.UDisks.xml
src/linuxblock.c
udisks/Makefile.am

index e0b0ba8..6f30987 100644 (file)
     <property name="Size" type="t" access="read"/>
   </interface>
 
+  <interface name="org.freedesktop.UDisks.ProbedBlockDevice">
+    <property name="Usage" type="s" access="read"/>
+    <property name="Kind" type="s" access="read"/>
+    <property name="Version" type="s" access="read"/>
+    <property name="Label" type="s" access="read"/>
+    <property name="UUID" type="s" access="read"/>
+  </interface>
+
 </node>
index a1e5017..f53f9cc 100644 (file)
@@ -44,6 +44,7 @@ typedef struct
   UDisksBlockDevice *iface_block_device;
 
   /* interfaces that may or may not be implemented */
+  UDisksProbedBlockDevice *iface_probed_block_device;
 } LinuxBlock;
 
 static void
@@ -57,6 +58,8 @@ linux_block_free (LinuxBlock *block)
     g_object_unref (block->iface_linux_sysfs_device);
   if (block->iface_block_device != NULL)
     g_object_unref (block->iface_block_device);
+  if (block->iface_probed_block_device != NULL)
+    g_object_unref (block->iface_probed_block_device);
   g_free (block);
 }
 
@@ -66,6 +69,8 @@ static void
 linux_block_update (LinuxBlock  *block,
                     const gchar *uevent_action)
 {
+  gboolean add_probed_block_device;
+
   /* org.freedesktop.UDisks.LinuxSysfsDevice */
   if (block->iface_linux_sysfs_device == NULL)
     {
@@ -98,6 +103,41 @@ linux_block_update (LinuxBlock  *block,
                                     g_udev_device_get_sysfs_attr_as_uint64 (block->device, "size") * 512);
       g_dbus_object_add_interface (block->object, G_DBUS_INTERFACE (block->iface_block_device));
     }
+
+  /* org.freedesktop.UDisks.ProbedBlockDevice */
+  add_probed_block_device = FALSE;
+  if (block->iface_probed_block_device == NULL)
+    {
+      if (g_udev_device_has_property (block->device, "ID_FS_USAGE"))
+        {
+          block->iface_probed_block_device = udisks_probed_block_device_stub_new ();
+          add_probed_block_device = TRUE;
+        }
+    }
+  else
+    {
+      if (!g_udev_device_has_property (block->device, "ID_FS_USAGE"))
+        {
+          g_dbus_object_remove_interface (block->object, G_DBUS_INTERFACE (block->iface_probed_block_device));
+          g_object_unref (block->iface_probed_block_device);
+          block->iface_probed_block_device = NULL;
+        }
+    }
+  if (block->iface_probed_block_device != NULL)
+    {
+      udisks_probed_block_device_set_usage (block->iface_probed_block_device,
+                                            g_udev_device_get_property (block->device, "ID_FS_USAGE"));
+      udisks_probed_block_device_set_kind (block->iface_probed_block_device,
+                                           g_udev_device_get_property (block->device, "ID_FS_TYPE"));
+      udisks_probed_block_device_set_version (block->iface_probed_block_device,
+                                              g_udev_device_get_property (block->device, "ID_FS_VERSION"));
+      udisks_probed_block_device_set_label (block->iface_probed_block_device,
+                                            g_udev_device_get_property (block->device, "ID_FS_LABEL_ENC"));
+      udisks_probed_block_device_set_uuid (block->iface_probed_block_device,
+                                           g_udev_device_get_property (block->device, "ID_FS_UUID_ENC"));
+      if (add_probed_block_device)
+        g_dbus_object_add_interface (block->object, G_DBUS_INTERFACE (block->iface_probed_block_device));
+    }
 }
 
 /* ---------------------------------------------------------------------------------------------------- */
index 72683c2..1e13f19 100644 (file)
@@ -35,6 +35,7 @@ BUILT_SOURCES =                                                                               \
        generated-marshallers.h                 generated-marshallers.c                 \
        generated-types.h                                                               \
        generated-udisksblockdevice.h           generated-udisksblockdevice.c           \
+       generated-udisksprobedblockdevice.h     generated-udisksprobedblockdevice.c     \
        generated-udiskslinuxsysfsdevice.h      generated-udiskslinuxsysfsdevice.c      \
        $(NULL)
 
@@ -44,7 +45,9 @@ libudisksincludedir=$(includedir)/udisks-1.2/udisks
 libudisksinclude_HEADERS=
        udisks.h                                        \
        generated-bindings.h                            \
+       generated-udiskslinuxsysfsdevice.h              \
        generated-udisksblockdevice.h                   \
+       generated-udisksprobedblockdevice.h             \
        $(NULL)
 
 libudisks_la_SOURCES =                                 \