1
0
mirror of https://github.com/gryf/wicd.git synced 2025-12-20 04:48:00 +01:00
Files
wicd/dapper.py
metrics ca8810aa4a Centralise path configuration into a single file.
Path configuration was distributed throughout wicd, making it difficult
to move around project files. Centralise the configuration into
wpath.py.
2007-08-12 00:30:01 +00:00

218 lines
8.0 KiB
Python

########
## DO NOT RUN THIS FILE DIRECTLY
## USE TRAY.PY INSTEAD
## nothing bad will happen if you do
## but that is not the preferred method
import os
import sys
import wpath
if __name__ == '__main__':
wpath.chdir(__file__)
import gtk,locale,gettext,signal
import egg.trayicon
import gobject, dbus, dbus.service
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
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,time
misc.PromptToStartDaemon()
time.sleep(1)
try:
proxy_obj = bus.get_object('org.wicd.daemon', '/org/wicd/daemon')
except:
print 'daemon still not running, aborting.'
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')
#############
tooltip = gtk.Tooltips()
eb = gtk.EventBox()
t = egg.trayicon.TrayIcon("WicdTrayIcon")
pic = gtk.Image()
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 is initialized once before it gets used in the if statement below
if not daemon.GetDebugMode():
config.DisableLogging()
#Check if wired profile chooser should be launched
if daemon.GetNeedWiredProfileChooser() == True:
wired_profile_chooser()
daemon.SetNeedWiredProfileChooser(False)
#Are we using a wired connection?
wired_ip = wired.GetWiredIP()
if wired.CheckPluggedIn() == True and wired_ip:
if stillWired == False:
pic.set_from_file("images/wired.png")
tooltip.set_tip(eb,language['connected_to_wired'].replace('$A',wired_ip))
stillWired = True
lock = ''
#Check for wireless or no connection
else:
if stillWired == True: #wire must have gotten unplugged
pic.set_from_file("images/no-signal.png")
tooltip.set_tip(eb,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:
signal = int(wireless.GetCurrentSignalStrength())
else:
signal = 0
#only update if the signal strength has changed because doing I/O calls is expensive,
#and the icon flickers
if (signal != LastStrength or network != wireless.GetCurrentNetwork()) and wireless_ip != None:
LastStrength = signal
lock = '' #set the string to '' so that when it is put in "high-signal" + lock + ".png", there will be nothing
curNetID = wireless.GetCurrentNetworkID() #the network ID needs to be checked because a negative value here will break the tray
if signal > 0 and curNetID > -1 and wireless.GetWirelessProperty(curNetID,"encryption"):
lock = '-lock' #set the string to '-lock' so that it will display the lock picture
network = str(wireless.GetCurrentNetwork())
tooltip.set_tip(eb,language['connected_to_wireless'].replace('$A',network).replace('$B',str(signal)).replace('$C',str(wireless_ip)))
if signal > 75:
pic.set_from_file("images/high-signal" + lock + ".png")
elif signal > 50:
pic.set_from_file("images/good-signal" + lock + ".png")
elif signal > 25:
pic.set_from_file("images/low-signal" + lock + ".png")
elif signal > 0:
pic.set_from_file("images/bad-signal" + lock + ".png")
elif signal == 0:
pic.set_from_file("images/no-signal.png")
autoreconnect()
elif wireless_ip == None and wired_ip == None:
pic.set_from_file("images/no-signal")
tooltip.set_tip(eb,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 any network set to autoconnect.
if wireless.GetAutoReconnect() == True and daemon.CheckIfConnecting() == False and wireless.GetForcedDisconnect() == False:
curNetID = wireless.GetCurrentNetworkID()
print 'Trying to autoreconnect'
if curNetID > -1:
wireless.ConnectWireless(wireless.GetCurrentNetworkID())
while wireless.CheckIfWirelessConnecting() == True:
time.sleep(1)
if wireless.GetCurrentSignalStrength() != 0:
print "Successfully autoreconnected."
else:
print "Couldn't reconnect to last used network, scanning for an autoconnect network..."
print wireless.AutoConnect(True)
else:
daemon.AutoConnect(True)
def tray_clicked(widget,event):
if event.button == 1:
open_wicd_gui()
if event.button == 3:
menu.popup(None, None, None, event.button, event.time)
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 on_quit(widget):
sys.exit()
def on_preferences(data):
open_wicd_gui()
def on_about(data):
dialog = gtk.AboutDialog()
dialog.set_name('wicd tray icon')
dialog.set_version('0.2')
dialog.set_comments('an icon that shows your network connectivity')
dialog.set_website('http://wicd.sourceforge.net')
dialog.run()
dialog.destroy()
LastStrength = -2
stillWired = False
network = ''
lastWinId = 0
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', on_preferences),
('About', gtk.STOCK_ABOUT, '_About...', None, 'About wicd-tray-icon', on_about),
('Quit',gtk.STOCK_QUIT,'_Quit',None,'Quit wicd-tray-icon', on_quit),
]
ag = gtk.ActionGroup('Actions')
ag.add_actions(actions)
manager = gtk.UIManager()
manager.insert_action_group(ag, 0)
manager.add_ui_from_string(menu)
menu = manager.get_widget('/Menubar/Menu/About').props.parent
gobject.timeout_add(3000,set_signal_image)
tooltip.set_tip(eb, "Wicd Systray")
pic.set_from_file("images/no-signal.png")
eb.connect('button_press_event',tray_clicked)
eb.add(pic)
t.add(eb)
t.show_all()
gtk.main()