From cc6a576d175cf5fd90cef8be0bd27a8559e539c2 Mon Sep 17 00:00:00 2001 From: David Zeuthen Date: Thu, 2 Sep 2010 17:51:47 -0400 Subject: [PATCH] Add the org.freedesktop.UDisks.ProbedBlockDevice interface Signed-off-by: David Zeuthen --- data/org.freedesktop.UDisks.xml | 8 ++++++++ src/linuxblock.c | 40 ++++++++++++++++++++++++++++++++++++++++ udisks/Makefile.am | 3 +++ 3 files changed, 51 insertions(+) diff --git a/data/org.freedesktop.UDisks.xml b/data/org.freedesktop.UDisks.xml index e0b0ba8..6f30987 100644 --- a/data/org.freedesktop.UDisks.xml +++ b/data/org.freedesktop.UDisks.xml @@ -20,4 +20,12 @@ + + + + + + + + diff --git a/src/linuxblock.c b/src/linuxblock.c index a1e5017..f53f9cc 100644 --- a/src/linuxblock.c +++ b/src/linuxblock.c @@ -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)); + } } /* ---------------------------------------------------------------------------------------------------- */ diff --git a/udisks/Makefile.am b/udisks/Makefile.am index 72683c2..1e13f19 100644 --- a/udisks/Makefile.am +++ b/udisks/Makefile.am @@ -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 = \ -- 2.7.4