change hotplugNotifier to return correct state transition for cd-rom type and flash...
[enigma2.git] / lib / python / Plugins / SystemPlugins / Hotplug / plugin.py
index 89e536bab79c0123721b1857d717df1cb11122cc..e593e942b9338b708a574910ab00b4cf5d1714b9 100644 (file)
@@ -8,6 +8,8 @@ DEVICEDB =  \
          "/devices/pci0000:00/0000:00:14.2/usb1/1-1/1-1:1.0/host0/target1:0:0/0:0:0:0": "SD Slot"
        }
 
+hotplugNotifier = [ ]
+
 class Hotplug(Protocol):
        def getUserfriendlyDeviceName(self, phys):
                return DEVICEDB.get(phys, "USB Storage")
@@ -33,14 +35,27 @@ class Hotplug(Protocol):
                action = v.get("ACTION")
                device = v.get("DEVPATH")
                physdevpath = v.get("PHYSDEVPATH")
+               media_state = v.get("X_E2_MEDIA_STATUS")
 
                dev = device.split('/')[-1]
 
-               if action == "add":
+               if action is not None and action == "add":
                        print "Medium found in", self.getUserfriendlyDeviceName(dev)
                        harddiskmanager.addHotplugPartition(dev, self.getUserfriendlyDeviceName(physdevpath))
-               elif action == "remove":
+               elif action is not None and action == "remove":
                        harddiskmanager.removeHotplugPartition(dev)
+               elif media_state is not None:
+                       if media_state == '1':
+                               harddiskmanager.removeHotplugPartition(dev)
+                               harddiskmanager.addHotplugPartition(dev, self.getUserfriendlyDeviceName(physdevpath))
+                       elif media_state == '0':
+                               harddiskmanager.removeHotplugPartition(dev)
+               
+               for callback in hotplugNotifier:
+                       try:
+                               callback(dev, action or media_state)
+                       except AttributeError:
+                               hotplugNotifier.remove(callback)
 
 def autostart(reason, **kwargs):
        if reason == 0: