From 83d05f18f3255643cbaf887e8653ad36decc95e8 Mon Sep 17 00:00:00 2001 From: Tomeu Vizoso Date: Sat, 29 Nov 2008 17:59:24 +0000 Subject: Remove jarabe/model/volume.py and use gio instead --- (limited to 'extensions/deviceicon/volume.py') diff --git a/extensions/deviceicon/volume.py b/extensions/deviceicon/volume.py index 8342cf9..08c6c94 100644 --- a/extensions/deviceicon/volume.py +++ b/extensions/deviceicon/volume.py @@ -17,15 +17,18 @@ import os import statvfs from gettext import gettext as _ +import logging import gtk +import gio +import gconf from sugar.graphics.tray import TrayIcon from sugar.graphics.palette import Palette from sugar.graphics.menuitem import MenuItem from sugar.graphics.icon import Icon +from sugar.graphics.xocolor import XoColor -from jarabe.model import volume from jarabe.journal import journalactivity _icons = {} @@ -34,26 +37,35 @@ class DeviceView(TrayIcon): FRAME_POSITION_RELATIVE = 800 - def __init__(self, model): - TrayIcon.__init__(self, icon_name=model.icon_name, - xo_color=model.icon_color) - self._model = model + def __init__(self, mount): + TrayIcon.__init__(self) + self._mount = mount + + # TODO: fallback to the more generic icons when needed + self.get_icon().props.icon_name = self._mount.get_icon().props.names[0] + + # TODO: retrieve the colors from the owner of the device + client = gconf.client_get_default() + color = XoColor(client.get_string('/desktop/sugar/user/color')) + self.get_icon().props.xo_color = color + self.connect('button-release-event', self.__button_release_event_cb) def create_palette(self): - return VolumePalette(self._model) + return VolumePalette(self._mount) def __button_release_event_cb(self, widget, event): journal = journalactivity.get_journal() - journal.set_active_volume(self._model.mount_point) + journal.set_active_volume(self._mount) journal.present() return True class VolumePalette(Palette): - def __init__(self, model): - Palette.__init__(self, label=model.name, - secondary_text=model.mount_point) - self._model = model + def __init__(self, mount): + Palette.__init__(self, label=mount.get_name()) + self._mount = mount + + self.props.secondary_text = mount.get_root().get_path() vbox = gtk.VBox() self.set_content(vbox) @@ -81,10 +93,14 @@ class VolumePalette(Palette): menu_item.show() def __unmount_activate_cb(self, menu_item): - self._model.unmount() + self._mount.unmount(self.__unmount_cb) + + def __unmount_cb(self, source, result): + logging.debug('__unmount_cb %r %r' % (source, result)) def __popup_cb(self, palette): - stat = os.statvfs(self._model.mount_point) + mount_point = self._mount.get_root().get_path() + stat = os.statvfs(mount_point) free_space = stat[statvfs.F_BSIZE] * stat[statvfs.F_BAVAIL] total_space = stat[statvfs.F_BSIZE] * stat[statvfs.F_BLOCKS] @@ -94,28 +110,35 @@ class VolumePalette(Palette): {'free_space': free_space / (1024 * 1024)} def setup(tray): - volumes_manager = volume.get_volumes_manager() + volume_monitor = gio.volume_monitor_get() - for vol in volumes_manager.get_volumes(): - if vol.mount_point != '/': - _add_device(vol, tray) + for mount in volume_monitor.get_mounts(): + _add_device(mount, tray) - volumes_manager.connect('volume-added', _volume_added_cb, tray) - volumes_manager.connect('volume-removed', _volume_removed_cb, tray) + volume_monitor.connect('volume-added', _volume_added_cb, tray) + volume_monitor.connect('mount-added', _mount_added_cb, tray) + volume_monitor.connect('mount-removed', _mount_removed_cb, tray) -def _volume_added_cb(volumes_manager, vol, tray): - if vol.mount_point != '/': - _add_device(vol, tray) +def _volume_added_cb(volume_monitor, volume, tray): + #TODO: this should be done by some other process, like gvfs-hal-volume-monitor + #TODO: use volume.should_automount() when it gets into pygtk + if volume.get_mount() is None and volume.can_mount(): + #TODO: pass None as mount_operation, or better, SugarMountOperation + volume.mount(gtk.MountOperation(tray.get_toplevel()), _mount_cb) -def _volume_removed_cb(volumes_manager, vol, tray): - _remove_device(vol, tray) +def _mount_cb(source, result): + logging.debug('mount finished %r %r' % (source, result)) -def _add_device(vol, tray): - icon = DeviceView(vol) - _icons[vol] = icon - tray.add_device(icon) +def _mount_added_cb(volume_monitor, mount, tray): + _add_device(mount, tray) -def _remove_device(vol, tray): - icon = _icons[vol] +def _mount_removed_cb(volume_monitor, mount, tray): + icon = _icons[mount] tray.remove_device(icon) - del _icons[vol] + del _icons[mount] + +def _add_device(mount, tray): + icon = DeviceView(mount) + _icons[mount] = icon + tray.add_device(icon) + -- cgit v0.9.1