#!/usr/bin/python
import dbus
import dbus.glib

class HalVolume(object):

    def __init__(self, volume_name):

        bus = dbus.SystemBus ()

        # get a HAL object and an interface to HAL to make function calls
        hal_obj = bus.get_object ('org.freedesktop.Hal',
                                  '/org/freedesktop/Hal/Manager')
        hal = dbus.Interface (hal_obj, 'org.freedesktop.Hal.Manager')

        # find all devices that have the capability 'volume'
        udis = hal.FindDeviceByCapability('volume')

        for udi in udis:
            # get a device object
            dev_obj = bus.get_object ('org.freedesktop.Hal', udi)

            # get an interface to the device
            dev = dbus.Interface (dev_obj, 'org.freedesktop.Hal.Device')

            if volume_name == dev.GetProperty ('volume.label'):
                self.dev = dev
                self.dev_iface = dbus.Interface (dev_obj, 
                           "org.freedesktop.Hal.Device.Volume")
                return None

    def mount(self, mountpoint, **kwargs):
        if 'fs' in kwargs:
            fs = kwargs['fs']
        else:
            fs = 'auto'

        if 'opts' in kwargs:
            opts = kwargs['opts']
        else:
            opts = ''

        self.dev_iface.Mount(mountpoint,fs,opts)

    def umount(self):
        self.dev_iface.Unmount('')

    def get_mount_point(self):
        return self.dev.GetProperty('volume.mount_point')

if __name__ == "__main__":
    v = HalVolume('MythDisk')
    if v.get_mount_point():
        print "Mounted at %s" % v.get_mount_point()
        v.umount()

    v.mount('newmount')
    print "Mounted at %s" % v.get_mount_point()

    v.umount()
    print "Unmounted."





