diff --git a/wicd_support/__init__.py b/wicd_support/__init__.py new file mode 100644 index 0000000..4697a8d --- /dev/null +++ b/wicd_support/__init__.py @@ -0,0 +1 @@ +from wicd_support import WicdPlugin diff --git a/wicd_support/manifest.ini b/wicd_support/manifest.ini new file mode 100644 index 0000000..c2efe4f --- /dev/null +++ b/wicd_support/manifest.ini @@ -0,0 +1,8 @@ +[info] +name: Wicd support +short_name: wicd_support +version: 0.1 +description: Support for autodetection of network status for Wicd Network Manager. + Requires wicd and python-dbus. +authors = Denis Fomin +homepage = http://trac-plugins.gajim.org/wiki/WicdSupportPlugin diff --git a/wicd_support/wicd_support.png b/wicd_support/wicd_support.png new file mode 100644 index 0000000..5d946ff Binary files /dev/null and b/wicd_support/wicd_support.png differ diff --git a/wicd_support/wicd_support.py b/wicd_support/wicd_support.py new file mode 100644 index 0000000..0bf9034 --- /dev/null +++ b/wicd_support/wicd_support.py @@ -0,0 +1,66 @@ +# -*- coding: utf-8 -*- + +import gobject + +from common import gajim +from plugins import GajimPlugin +from plugins.helpers import log_calls +from common import dbus_support + + +class WicdPlugin(GajimPlugin): + @log_calls('WicdPlugin') + def init(self): + self.description = _('Support for autodetection of network status ' + 'for Wicd Network Manager.\nRequires wicd and python-dbus.') + self.config_dialog = None + self.test_activatable() + + def test_activatable(self): + self.available_text = '' + if not dbus_support.supported: + self.activatable = False + self.available_text += _('python-dbus is missing! ' + 'Install python-dbus.') + + @log_calls('WicdPlugin') + def activate(self): + try: + import dbus + from common.dbus_support import system_bus + + self.bus = system_bus.bus() + + if 'org.wicd.daemon' not in self.bus.list_names(): + return + wicd_object = self.bus.get_object('org.wicd.daemon', + '/org/wicd/daemon') + self.props = dbus.Interface(wicd_object, + "org.freedesktop.DBus.Properties") + self.bus.add_signal_receiver(self.state_changed, 'StatusChanged', + 'org.wicd.daemon', 'org.wicd.daemon', '/org/wicd/daemon') + except dbus.DBusException: + pass + + @log_calls('WicdPlugin') + def deactivate(self): + self.bus.remove_signal_receiver(self.state_changed, 'StatusChanged', + 'org.wicd.daemon', 'org.wicd.daemon','/org/wicd/daemon') + + def state_changed(self, state, info): + # Connection state constants + #NOT_CONNECTED = 0 + #CONNECTING = 1 + #WIRELESS = 2 + #WIRED = 3 + #SUSPENDED = 4 + if state == 2 or state == 3: + for connection in gajim.connections.itervalues(): + if gajim.config.get_per('accounts', connection.name, + 'listen_to_network_manager') and connection.time_to_reconnect: + connection._reconnect() + else: + for connection in gajim.connections.itervalues(): + if gajim.config.get_per('accounts', connection.name, + 'listen_to_network_manager') and connection.connected > 1: + connection._disconnectedReconnCB()