UDisks Versus UDisks2

Lawrence D'Oliveiro <ldo-kC51rjc0cqs1dNLGKZg6taU/[email protected]>
Newsgroups gmane.comp.freedesktop.dbus
Organization Geek Central
Message-ID <[email protected]>
A while back, I put together this D-Bus-based utility
<https://github.com/ldo/waitdisc> to get around the problem of
optical-disc-burning programs seemingly not being able to wait for
media to become ready for starting to write. I originally wrote it to
interface to the UDisks service. Then later I discovered this might not
be available by default, but there was thing called UDisks2, so perhaps
I should be using that instead.

And I must say, I wonder why we have UDisks2 at all. Did somebody have
something against the original UDisks? For comparison, here is the
routine I wrote to find available optical writer drives with UDisks:

    udisks_bus = "org.freedesktop.UDisks"
    udisks_device_interface = "org.freedesktop.UDisks.Device"
    udisks_devices_root = "/org/freedesktop/UDisks/devices"

    def find_optical_writer_drives() :
        try :
            udisks_devices = \
                dbus.SystemBus().get_object(udisks_bus, udisks_devices_root)
        except dbus.exceptions.DBusException :
            # assume udisks daemon not running
            # udisks_devices = None
            raise # don't bother recovering
        #end try
        if udisks_devices != None :
            for device_node in introspect(udisks_devices).findall("node") :
                device_name = udisks_devices_root + "/" + device_node.get("name")
                device = dbus.SystemBus().get_object(udisks_bus, device_name)
                if (
                        not get_prop(device, udisks_device_interface, "DeviceIsReadOnly", to_bool)
                    and
                        any
                          (
                            "optical" in str(s)
                            for s in
                                get_prop(device, udisks_device_interface, "DriveMediaCompatibility")
                          )
                ) :
                    yield device_name, device
                #end if
            #end for
        #end if
    #end find_optical_writer_drives

and here is the equivalent with UDisks2:

    udisks_bus = "org.freedesktop.UDisks2"
    udisks_block_device_interface = "org.freedesktop.UDisks2.Block"
    udisks_block_devices_root = "/org/freedesktop/UDisks2/block_devices"
    udisks_drive_interface = "org.freedesktop.UDisks2.Drive"
    udisks_drives_root = "/org/freedesktop/UDisks2/drives"

    def find_optical_writer_drives() :
        device_names = {}
        udisks_devices = dbus.SystemBus().get_object(udisks_bus, udisks_block_devices_root)
        for device_node in introspect(udisks_devices).findall("node") :
            device_name = udisks_block_devices_root + "/" + device_node.get("name")
            device = dbus.SystemBus().get_object(udisks_bus, device_name)
            props = {}
            for \
                name, cvt \
            in \
                (
                    ("Drive", str),
                    ("PreferredDevice", str_nullterm),
                ) \
            :
                props[name] = cvt(get_prop(device, udisks_block_device_interface, name))
            #end for
            device_names[props["Drive"]] = props["PreferredDevice"]
        #end for
        udisks_devices = dbus.SystemBus().get_object(udisks_bus, udisks_drives_root)
        for device_node in introspect(udisks_devices).findall("node") :
            device_name = udisks_drives_root + "/" + device_node.get("name")
            device = dbus.SystemBus().get_object(udisks_bus, device_name)
            if (
                any
                  (
                    str(s).startswith("optical")
                    for s in get_prop(device, udisks_drive_interface, "MediaCompatibility")
                  )
            ) :
                yield device_name, device, device_names[device_name]
            #end if
        #end for
    #end find_optical_writer_drives

Not only is the latter longer and more complicated, it also isn’t an
exact equivalent. Because I could not find any way to test that an
optical drive actually supports writing in UDisks2.

Have I missed something?
_______________________________________________
dbus mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dbus
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.