70 lines
2.5 KiB
Python
70 lines
2.5 KiB
Python
import os
|
|
|
|
from gajim.common import app
|
|
from gajim.plugins import GajimPlugin
|
|
from gajim.plugins.helpers import log_calls
|
|
from gajim.plugins.plugins_i18n import _
|
|
from gajim.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 os.name == 'nt':
|
|
self.available_text = _('Plugin can\'t be run under Windows.')
|
|
self.activatable = False
|
|
return
|
|
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 gajim.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 app.connections.values():
|
|
if app.config.get_per('accounts', connection.name,
|
|
'listen_to_network_manager') and connection.time_to_reconnect:
|
|
connection._reconnect()
|
|
else:
|
|
for connection in app.connections.values():
|
|
if app.config.get_per('accounts', connection.name,
|
|
'listen_to_network_manager') and connection.connected > 1:
|
|
connection._disconnectedReconnCB()
|