From 0095aef34f9bbfe7de0153b6bde1e7d0754f5f0f Mon Sep 17 00:00:00 2001 From: Grigori Goronzy <greg@hein> Date: Mon, 10 May 2010 00:51:41 +0200 Subject: [PATCH] Switch to new UDisks DBus interface for card reader HAL is gone and UDisks should be used now... --- EeeControl/tray.py | 31 ++++++++++++------------------- 1 files changed, 12 insertions(+), 19 deletions(-) diff --git a/EeeControl/tray.py b/EeeControl/tray.py index 671134e..b6170c2 100644 --- a/EeeControl/tray.py +++ b/EeeControl/tray.py @@ -482,30 +482,23 @@ class EeeControlTray: else: self.iface.cam_off() def unmount_reader(self): - remote = self.bus.get_object("org.freedesktop.Hal", "/org/freedesktop/Hal/Manager") - manager_if = dbus.Interface(remote, dbus_interface="org.freedesktop.Hal.Manager") - - # List all volumes - udis = manager_if.FindDeviceByCapability("volume") - for udi in udis: - remote = self.bus.get_object("org.freedesktop.Hal", udi) - device_if = dbus.Interface(remote, dbus_interface="org.freedesktop.Hal.Device") - - # Check if the volume is mounted and if its associated storage object is the card reader - # to find out the associated storage object, the following looks for the string "Single_Flash_reader" - # in the parent's udi. This works and has been tested on 1000H, not sure about other models - # a better way of doing it would be to walk up the chain of parent objects until we find the - # controller and check its IDs... but this involves traversing and checking more objects... - if device_if.GetPropertyString("volume.is_mounted") and (device_if.GetPropertyString("info.parent").find("Single_Flash_Reader") != -1 or - device_if.GetPropertyString("info.parent").find("USB2_0_CardReader") != -1): - vol_if = dbus.Interface(remote, dbus_interface="org.freedesktop.Hal.Device.Volume") + remote = self.bus.get_object("org.freedesktop.UDisks", "/org/freedesktop/UDisks") + udisks = dbus.Interface(remote, dbus_interface="org.freedesktop.UDisks") + for dev in udisks.EnumerateDevices(): + remote = self.bus.get_object("org.freedesktop.UDisks", dev) + device = dbus.Interface(remote, dbus_interface="org.freedesktop.DBus.Properties") + if not device.Get("org.freedesktop.UDisks.Device", "DeviceIsMounted"): continue + devname = device.Get("org.freedesktop.UDisks.Device", "DriveModel") + # Hopefully matching the device this way is Good Enough (tm) + if devname.find("Flash Reader") >= 0 or devname.find("CardReader") >= 0: + device = dbus.Interface(remote, "org.freedesktop.UDisks.Device") try: - vol_if.Unmount("") + device.FilesystemUnmount([]) except Exception, e: print _("Unmount failed with %s") % e return False return True - + def reader_toggled(self, widget): if widget.get_active(): self.iface.reader_on() else: -- 1.7.0.4