| 1 |
#! /usr/bin/env python |
| 2 |
import gobject |
| 3 |
import tinymail |
| 4 |
|
| 5 |
import dbus |
| 6 |
from dbus.mainloop.glib import DBusGMainLoop |
| 7 |
|
| 8 |
class NMDevice(gobject.GObject, tinymail.Device): |
| 9 |
""" |
| 10 |
An implementation of the tinymail device interface |
| 11 |
that uses Network manager. |
| 12 |
""" |
| 13 |
ACTIVE_NETWORK_CONNECTION = 3 |
| 14 |
|
| 15 |
def __init__(self): |
| 16 |
gobject.GObject.__init__(self) |
| 17 |
self.__online = False |
| 18 |
self.__forced = False |
| 19 |
|
| 20 |
DBusGMainLoop(set_as_default=True) |
| 21 |
bus = dbus.SystemBus() |
| 22 |
nm_object = bus.get_object( |
| 23 |
'org.freedesktop.NetworkManager', |
| 24 |
'/org/freedesktop/NetworkManager') |
| 25 |
nm_interface = dbus.Interface( |
| 26 |
nm_object, |
| 27 |
dbus_interface='org.freedesktop.NetworkManager') |
| 28 |
|
| 29 |
self.__state = nm_interface.get_dbus_method('state') |
| 30 |
nm_interface.connect_to_signal('StateChange', self.__update_state) |
| 31 |
self.__state(reply_handler=self.__update_state, |
| 32 |
error_handler=self.__dbus_error) |
| 33 |
|
| 34 |
def do_is_online(self): |
| 35 |
return self.online |
| 36 |
|
| 37 |
def do_force_online(self): |
| 38 |
self.__forced = True |
| 39 |
self.online = True |
| 40 |
|
| 41 |
def do_force_offline(self): |
| 42 |
self.__forced = True |
| 43 |
self.online = False |
| 44 |
|
| 45 |
def reset(self): |
| 46 |
self.__forced = False |
| 47 |
self.__state(reply_handler=self.__update_state, |
| 48 |
error_handler=self.__dbus_error) |
| 49 |
|
| 50 |
def __update_state(self, state): |
| 51 |
if not self.__forced: |
| 52 |
self.online = (state == ACTIVE_NETWORK_CONNECTION) |
| 53 |
|
| 54 |
def __dbus_error(self, error): |
| 55 |
raise error |
| 56 |
|
| 57 |
def __get_online(self): |
| 58 |
return self.__online |
| 59 |
|
| 60 |
def __set_online(self, online): |
| 61 |
if (online != self.__online): |
| 62 |
self.emit("connection-changed", online) |
| 63 |
self.__online = online |
| 64 |
|
| 65 |
online = property(__get_online, __set_online) |
| 66 |
|
| 67 |
gobject.type_register(NMDevice) |