launcher/sys.py/libs/DBUS/__init__.py
2018-10-20 15:21:47 +08:00

135 lines
3.6 KiB
Python

# -*- coding: utf-8 -*-
import dbus
import dbus.service
import sys
from wicd import misc
##misc.to_bool
##misc.misc.noneToString
##misc.to_unicode
##misc.Noneify
from wicd.translations import _
from wicd import wpath
from wicd import dbusmanager
from wicd import misc
import time
import gobject
if getattr(dbus, 'version', (0, 0, 0)) < (0, 80, 0):
import dbus.glib
else:
from dbus.mainloop.glib import DBusGMainLoop
DBusGMainLoop(set_as_default=True)
bus = daemon = wireless = wired = None
manager = objects = adapter = None
devices = {}
def setup_dbus(force=True):
global bus,daemon,wireless,wired
global manager,objects,adapter,devices
try:
dbusmanager.connect_to_dbus()
except dbus.DBusException:
print >> sys.stderr,\
_("Can't connect to wicd daemon,trying to start it automatically...")
else:
bus = dbusmanager.get_bus()
dbus_ifaces = dbusmanager.get_dbus_ifaces()
daemon = dbus_ifaces["daemon"] ## @dbus.service.method('org.wicd.daemon')
wireless = dbus_ifaces["wireless"] ## @dbus.service.method('org.wicd.daemon.wireless')
wired = dbus_ifaces["wired"] ## @
### BlueZ
try:
proxy_obj = bus.get_object("org.bluez", "/")
manager = dbus.Interface(proxy_obj,"org.freedesktop.DBus.ObjectManager")
objects = manager.GetManagedObjects()
for path, interfaces in objects.iteritems():
if "org.bluez.Device1" in interfaces:
devices[path] = interfaces["org.bluez.Device1"] ## like /org/bluez/hci0/dev_xx_xx_xx_yy_yy_yy
proxy_obj = bus.get_object("org.bluez", "/org/bluez/hci0")
adapter = dbus.Interface(proxy_obj, "org.bluez.Adapter1")
except Exception as e:
print(str(e))
if not daemon:
print("Error connecting to wicd via D-Bus")
return True
def wifi_strength():
fast = not daemon.NeedsExternalCalls()
if not fast:
iwconfig = wireless.GetIwconfig()
else:
iwconfig = ''
if daemon.GetSignalDisplayType() == 0:
strength = wireless.GetCurrentSignalStrength(iwconfig)
else:
strength = wireless.GetCurrentDBMStrength(iwconfig)
return strength
def get_wifi_ip():
if wireless == None:
return None
return wireless.GetWirelessIP('')
def is_wifi_connected_now():
if wireless == None:
return False
wireless_connecting = wireless.CheckIfWirelessConnecting()
fast = not daemon.NeedsExternalCalls()
if wireless_connecting:
return False
else:
if not fast:
iwconfig = wireless.GetIwconfig()
else:
iwconfig = ''
if check_for_wireless(iwconfig,wireless.GetWirelessIP(''),None):
return True
else:
return False
def check_for_wireless(iwconfig,wireless_ip,set_status):
if not wireless_ip:
return False
network = wireless.GetCurrentNetwork(iwconfig)
if not network:
return False
network = misc.to_unicode(network)
if daemon.GetSignalDisplayType() == 0:
strength = wireless.GetCurrentSignalStrength(iwconfig)
else:
strength = wireless.GetCurrentDBMStrength(iwconfig)
if strength is None:
return False
strength = misc.to_unicode(daemon.FormatSignalForPrinting(strength))
ip = misc.to_unicode(wireless_ip)
"""
print(_('dbus Connected to $A at $B (IP: $C)').replace
('$A', network).replace
('$B', strength).replace
('$C', ip))
"""
return True