1
0
mirror of https://github.com/gryf/wicd.git synced 2025-12-20 12:58:07 +01:00
Files
wicd/edgy.py
imdano 2ed0c5cf75 Improved the behavior of threading in networking.py when an error occurs.
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)
2007-08-14 16:01:30 +00:00

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()