mirror of
https://github.com/gryf/wicd.git
synced 2025-12-20 12:58:07 +01:00
Fixed typo in the wpa_supplicant string in networking.py. Changed formatting in dapper.py, edgy.py, and networking.py to conform closer to python coding conventions (and hopefully improve readability in general)
266 lines
9.7 KiB
Python
Executable File
266 lines
9.7 KiB
Python
Executable File
########
|
|
## DO NOT RUN THIS FILE DIRECTLY
|
|
## USE TRAY.PY INSTEAD
|
|
## nothing bad will happen if you do
|
|
## but that is not the preferred method
|
|
## tray.py automatically picks the correct version
|
|
## of the tray icon to use
|
|
########
|
|
|
|
########
|
|
##thanks to Arne Brix for programming most of this
|
|
##released under the GNU Public License
|
|
##see http://www.gnu.org/copyleft/gpl.html for details
|
|
##this will only work in Edgy and above because of gtk requirements
|
|
##to run the tray icon
|
|
########
|
|
import os
|
|
import sys
|
|
import wpath
|
|
if __name__ == '__main__':
|
|
wpath.chdir(__file__)
|
|
import gtk, gobject, dbus, dbus.service, os, sys, locale, gettext, signal, time
|
|
if getattr(dbus, 'version', (0,0,0)) >= (0,41,0):
|
|
import dbus.glib
|
|
|
|
#############
|
|
# Declare the connections to our daemon.
|
|
# Without them nothing useful will happen.
|
|
# The daemon should be running as root.
|
|
# Some connections aren't used so they are commented.
|
|
bus = dbus.SystemBus()
|
|
try:
|
|
print 'attempting to connect daemon...'
|
|
proxy_obj = bus.get_object('org.wicd.daemon', '/org/wicd/daemon')
|
|
print 'success'
|
|
except:
|
|
print 'daemon not running...'
|
|
import misc
|
|
misc.PromptToStartDaemon()
|
|
sys.exit(0)
|
|
daemon = dbus.Interface(proxy_obj, 'org.wicd.daemon')
|
|
wireless = dbus.Interface(proxy_obj, 'org.wicd.daemon.wireless')
|
|
wired = dbus.Interface(proxy_obj, 'org.wicd.daemon.wired')
|
|
config = dbus.Interface(proxy_obj, 'org.wicd.daemon.config')
|
|
#############
|
|
|
|
local_path = os.path.realpath(os.path.dirname(sys.argv[0])) + '/translations'
|
|
langs = []
|
|
lc, encoding = locale.getdefaultlocale()
|
|
if (lc):
|
|
langs = [lc]
|
|
osLanguage = os.environ.get('LANGUAGE', None)
|
|
if (osLanguage):
|
|
langs += osLanguage.split(":")
|
|
langs += ["en_US"]
|
|
lang = gettext.translation('wicd', local_path, languages=langs, fallback = True)
|
|
_ = lang.gettext
|
|
language = {}
|
|
language['connected_to_wireless'] = _('Connected to $A at $B% (IP: $C)')
|
|
language['connected_to_wired'] = _('Connected to wired network (IP: $A)')
|
|
language['not_connected'] = _('Not connected')
|
|
|
|
tr=None
|
|
tooltip = gtk.Tooltips()
|
|
pic=None
|
|
lastWinId = 0
|
|
|
|
def open_wicd_gui():
|
|
global lastWinId
|
|
ret = 0
|
|
if lastWinId != 0:
|
|
os.kill(lastWinId,signal.SIGQUIT)
|
|
ret = os.waitpid(lastWinId,0)[1]
|
|
lastWinId = 0
|
|
if ret == 0:
|
|
lastWinId = os.spawnlpe(os.P_NOWAIT, './gui.py', os.environ)
|
|
|
|
def wired_profile_chooser():
|
|
print 'profile chooser is running'
|
|
os.spawnlpe(os.P_WAIT, './gui.py', os.environ)
|
|
|
|
def set_signal_image():
|
|
global LastStrength
|
|
global stillWired # Keeps us from resetting the wired info over and over
|
|
global network # Declared as global so it gets initialized before first use
|
|
|
|
# Disable logging if debugging isn't on to prevent log spam
|
|
if not daemon.GetDebugMode():
|
|
config.DisableLogging()
|
|
|
|
# Check if wired profile chooser should be launched
|
|
if daemon.GetNeedWiredProfileChooser() == True:
|
|
wired_profile_chooser()
|
|
daemon.SetNeedWiredProfileChooser(False)
|
|
|
|
# Check for active wired connection
|
|
wired_ip = wired.GetWiredIP()
|
|
if wired.CheckPluggedIn() == True and wired_ip != None:
|
|
# Only set image/tooltip if it hasn't been set already
|
|
if stillWired == False:
|
|
tr.set_from_file("images/wired.png")
|
|
tr.set_tooltip(language['connected_to_wired'].replace('$A',
|
|
wired_ip))
|
|
stillWired = True
|
|
lock = ''
|
|
else:
|
|
# Check to see if we were using a wired connection that has now become
|
|
# unplugged or disabled.
|
|
if stillWired == True:
|
|
tr.set_from_file("images/no-signal.png")
|
|
tr.set_tooltip(language['not_connected'])
|
|
stillWired = False
|
|
|
|
wireless_ip = wireless.GetWirelessIP()
|
|
# If ip returns as None, we are probably returning from hibernation
|
|
# and need to force signal to 0 to avoid crashing.
|
|
if wireless_ip != None:
|
|
wireless_signal = int(wireless.GetCurrentSignalStrength())
|
|
else:
|
|
wireless_signal = 0
|
|
|
|
# Only update if the signal strength has changed because doing I/O
|
|
# calls is expensive, and the icon flickers
|
|
if (wireless_signal != LastStrength or
|
|
network != wireless.GetCurrentNetwork() or wireless_signal == 0) \
|
|
and wireless_ip != None:
|
|
LastStrength = wireless_signal
|
|
# Set the string to '' so that when it is put in "high-signal" +
|
|
# lock + ".png", there will be nothing
|
|
lock = ''
|
|
# curNetID needs to be checked because a negative value
|
|
# will break the tray when passed to GetWirelessProperty.
|
|
curNetID = wireless.GetCurrentNetworkID()
|
|
if wireless_signal > 0 and curNetID > -1 and \
|
|
wireless.GetWirelessProperty(curNetID,"encryption"):
|
|
# Set the string to '-lock' so that it will display the
|
|
# lock picture
|
|
lock = '-lock'
|
|
network = str(wireless.GetCurrentNetwork())
|
|
tr.set_tooltip(language['connected_to_wireless'].replace
|
|
('$A',network).replace
|
|
('$B',str(wireless_signal)).replace
|
|
('$C',str(wireless_ip)))
|
|
if wireless_signal > 75:
|
|
tr.set_from_file("images/high-signal" + lock + ".png")
|
|
elif wireless_signal > 50:
|
|
tr.set_from_file("images/good-signal" + lock + ".png")
|
|
elif wireless_signal > 25:
|
|
tr.set_from_file("images/low-signal" + lock + ".png")
|
|
elif wireless_signal > 0:
|
|
tr.set_from_file("images/bad-signal" + lock + ".png")
|
|
elif wireless_signal == 0:
|
|
tr.set_from_file("images/no-signal.png")
|
|
auto_reconnect()
|
|
|
|
elif wireless_ip is None and wired_ip is None:
|
|
tr.set_from_file("images/no-signal.png")
|
|
tr.set_tooltip(language['not_connected'])
|
|
auto_reconnect()
|
|
|
|
if not daemon.GetDebugMode():
|
|
config.EnableLogging()
|
|
|
|
return True
|
|
|
|
def auto_reconnect():
|
|
# Auto-reconnect code - not sure how well this works. I know that
|
|
# without the ForcedDisconnect check it reconnects you when a
|
|
# disconnect is forced. People who have disconnection problems need
|
|
# to test it to determine if it actually works.
|
|
#
|
|
# First it will attempt to reconnect to the last known wireless network
|
|
# and if that fails it should run a scan and try to connect to a wired
|
|
# network or any wireless network set to autoconnect.
|
|
global triedReconnect
|
|
|
|
if wireless.GetAutoReconnect() == True and \
|
|
daemon.CheckIfConnecting() == False:
|
|
curNetID = wireless.GetCurrentNetworkID()
|
|
if curNetID > -1: # Needs to be a valid network to try to connect to
|
|
if triedReconnect == False:
|
|
print 'Trying to autoreconnect to last used network'
|
|
wireless.ConnectWireless(curNetID)
|
|
triedReconnect = True
|
|
elif wireless.CheckIfWirelessConnecting() == False:
|
|
print "Couldn't reconnect to last used network,\
|
|
scanning for an autoconnect network..."
|
|
daemon.AutoConnect(True)
|
|
else:
|
|
daemon.AutoConnect(True)
|
|
|
|
class TrackerStatusIcon(gtk.StatusIcon):
|
|
def __init__(self):
|
|
gtk.StatusIcon.__init__(self)
|
|
menu = '''
|
|
<ui>
|
|
<menubar name="Menubar">
|
|
<menu action="Menu">
|
|
<menuitem action="Connect"/>
|
|
<separator/>
|
|
<menuitem action="About"/>
|
|
<menuitem action="Quit"/>
|
|
</menu>
|
|
</menubar>
|
|
</ui>
|
|
'''
|
|
actions = [
|
|
('Menu', None, 'Menu'),
|
|
('Connect', gtk.STOCK_CONNECT, '_Connect...', None,
|
|
'Connect to network', self.on_preferences),
|
|
('About', gtk.STOCK_ABOUT, '_About...', None,
|
|
'About wicd-tray-icon', self.on_about),
|
|
('Quit',gtk.STOCK_QUIT,'_Quit',None,'Quit wicd-tray-icon',
|
|
self.on_quit),
|
|
]
|
|
ag = gtk.ActionGroup('Actions')
|
|
ag.add_actions(actions)
|
|
self.manager = gtk.UIManager()
|
|
self.manager.insert_action_group(ag, 0)
|
|
self.manager.add_ui_from_string(menu)
|
|
self.menu = self.manager.get_widget('/Menubar/Menu/About').props.parent
|
|
self.current_icon_path = ''
|
|
self.set_from_file("images/no-signal.png")
|
|
self.set_visible(True)
|
|
self.connect('activate', self.on_activate)
|
|
self.connect('popup-menu', self.on_popup_menu)
|
|
self.set_from_file("images/no-signal.png")
|
|
self.set_tooltip("Initializing wicd...")
|
|
|
|
wireless.SetForcedDisconnect(False)
|
|
|
|
def on_activate(self, data):
|
|
open_wicd_gui()
|
|
|
|
def on_quit(self,widget):
|
|
sys.exit()
|
|
|
|
def on_popup_menu(self, status, button, time):
|
|
self.menu.popup(None, None, None, button, time)
|
|
|
|
def on_preferences(self, data):
|
|
open_wicd_gui()
|
|
|
|
def on_about(self, data):
|
|
dialog = gtk.AboutDialog()
|
|
dialog.set_name('wicd tray icon')
|
|
dialog.set_version('0.2') # Might be time to move the version number up?
|
|
dialog.set_comments('an icon that shows your network connectivity')
|
|
dialog.set_website('http://wicd.sourceforge.net')
|
|
dialog.run()
|
|
dialog.destroy()
|
|
|
|
def set_from_file(self,path):
|
|
if path != self.current_icon_path:
|
|
self.current_icon_path = path
|
|
gtk.StatusIcon.set_from_file(self,path)
|
|
|
|
LastStrength = -2
|
|
stillWired = False
|
|
network = ''
|
|
triedReconnect = False
|
|
|
|
tr=TrackerStatusIcon()
|
|
gobject.timeout_add(3000,set_signal_image)
|
|
gtk.main()
|