diff options
author | Marco Pesenti Gritti <mpg@redhat.com> | 2007-02-25 11:36:44 (GMT) |
---|---|---|
committer | Marco Pesenti Gritti <mpg@redhat.com> | 2007-02-25 11:36:44 (GMT) |
commit | 7c135804bc53708a23c808640145e37ae3b22f6b (patch) | |
tree | 5bc743c667bed4341e97adf41e5a277d722b85dc /shell/model | |
parent | 38ac42d6650154659dd2f1c354c023f29f07de7d (diff) |
Handle device removal
Diffstat (limited to 'shell/model')
-rw-r--r-- | shell/model/devices/devicesmodel.py | 45 | ||||
-rw-r--r-- | shell/model/devices/wirednetwork.py | 3 | ||||
-rw-r--r-- | shell/model/devices/wirelessnetwork.py | 5 |
3 files changed, 41 insertions, 12 deletions
diff --git a/shell/model/devices/devicesmodel.py b/shell/model/devices/devicesmodel.py index 01db871..dd53596 100644 --- a/shell/model/devices/devicesmodel.py +++ b/shell/model/devices/devicesmodel.py @@ -20,7 +20,7 @@ class DevicesModel(gobject.GObject): def __init__(self): gobject.GObject.__init__(self) - self._devices = [] + self._devices = {} self.add_device(battery.Device()) self._observe_network_manager() @@ -32,21 +32,44 @@ class DevicesModel(gobject.GObject): self._check_network_device(device) network_manager.connect('device-activated', - self._network_device_added_cb) + self._network_device_activated_cb) + network_manager.connect('device-removed', + self._network_device_removed_cb) - def _network_device_added_cb(self, network_manager, device): - self._check_network_device(device) + def _network_device_activated_cb(self, network_manager, nm_device): + self._check_network_device(nm_device) - def _check_network_device(self, device): - if not device.is_valid(): + def _network_device_removed_cb(self, nm_device): + self._remove_network_device(nm_device) + + def _network_device_deactivated_cb(self, nm_device): + self._remove_network_device(nm_device) + + def _check_network_device(self, nm_device): + if not nm_device.is_valid(): return - if device.get_type() == nmclient.DEVICE_TYPE_802_11_WIRELESS: - self.add_device(wirelessnetwork.Device(device)) - + if nm_device.get_type() == nmclient.DEVICE_TYPE_802_11_WIRELESS: + self._add_network_device(nm_device) + + def _get_network_device(self, nm_device): + return self._devices[nm_device.get_op()] + + def _add_network_device(self, nm_device): + self.add_device(wirelessnetwork.Device(nm_device)) + nm_device.connect('deactivated', + self._network_device_deactivated_cb) + + def _remove_network_device(self, nm_device): + self.remove_device(self._get_network_device(nm_device)) + def __iter__(self): - return iter(self._devices) + return iter(self._devices.values()) def add_device(self, device): - self._devices.append(device) + self._devices[device.get_id()] = device self.emit('device-appeared', device) + + def remove_device(self, device): + self.emit('device-disappeared', self._devices[device.get_id()]) + del self._devices[device.get_id()] diff --git a/shell/model/devices/wirednetwork.py b/shell/model/devices/wirednetwork.py index 871a552..5ea0bb6 100644 --- a/shell/model/devices/wirednetwork.py +++ b/shell/model/devices/wirednetwork.py @@ -5,5 +5,8 @@ class Device(device.Device): device.Device.__init__(self) self._nm_device = device + def get_id(self): + return self._nm_device.get_op() + def get_type(self): return 'wirednetwork' diff --git a/shell/model/devices/wirelessnetwork.py b/shell/model/devices/wirelessnetwork.py index 6a53d34..97f16cd 100644 --- a/shell/model/devices/wirelessnetwork.py +++ b/shell/model/devices/wirelessnetwork.py @@ -3,10 +3,13 @@ from model.devices import device class Device(device.Device): def __init__(self, nm_device): device.Device.__init__(self) - self._nm_device = device + self._nm_device = nm_device def get_type(self): return 'wirelessnetwork' + def get_id(self): + return self._nm_device.get_op() + def get_level(self): return self._nm_device.get_strength() |