Sophie

Sophie

distrib > Mandriva > current > x86_64 > by-pkgid > ac91a2f911bd118a56858d88ea05d1c9 > files > 11

eee-control-0.9.4-4.1mdv2010.1.src.rpm

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