X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fpython%2FScreens%2FNetworkSetup.py;h=c0037f810a15f63adca51da183ae3d87b74fc212;hp=aae7ef8c5d026a3cedef7aef5c808a3bc5ac2a10;hb=bd1476c4800f2d3d9025db14fcb8fc168d87006a;hpb=6d424e7cd304f215e1e40a135033321509db09ec diff --git a/lib/python/Screens/NetworkSetup.py b/lib/python/Screens/NetworkSetup.py index aae7ef8..e5eb740 100755 --- a/lib/python/Screens/NetworkSetup.py +++ b/lib/python/Screens/NetworkSetup.py @@ -5,15 +5,18 @@ from Screens.Standby import * from Screens.VirtualKeyBoard import VirtualKeyBoard from Screens.HelpMenu import HelpableScreen from Components.Network import iNetwork +from Components.Sources.StaticText import StaticText +from Components.Sources.Boolean import Boolean +from Components.Sources.List import List from Components.Label import Label,MultiColorLabel from Components.Pixmap import Pixmap,MultiPixmap from Components.MenuList import MenuList -from Components.config import config, ConfigYesNo, ConfigIP, NoSave, ConfigText, ConfigPassword, ConfigSelection, getConfigListEntry, ConfigNothing +from Components.config import config, ConfigYesNo, ConfigIP, NoSave, ConfigText, ConfigPassword, ConfigSelection, getConfigListEntry, ConfigNothing, ConfigBoolean from Components.ConfigList import ConfigListScreen from Components.PluginComponent import plugins from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmapAlphaTest from Components.ActionMap import ActionMap, NumberActionMap, HelpableActionMap -from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE +from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_CURRENT_SKIN from Tools.LoadPixmap import LoadPixmap from Plugins.Plugin import PluginDescriptor from enigma import eTimer, ePoint, eSize, RT_HALIGN_LEFT, eListboxPythonMultiContent, gFont @@ -21,32 +24,6 @@ from os import path as os_path, system as os_system, unlink from re import compile as re_compile, search as re_search -class InterfaceList(MenuList): - def __init__(self, list, enableWrapAround=False): - MenuList.__init__(self, list, enableWrapAround, eListboxPythonMultiContent) - self.l.setFont(0, gFont("Regular", 20)) - self.l.setItemHeight(30) - -def InterfaceEntryComponent(index,name,default,active ): - res = [ - (index), - MultiContentEntryText(pos=(80, 5), size=(430, 25), font=0, text=name) - ] - num_configured_if = len(iNetwork.getConfiguredAdapters()) - if num_configured_if >= 2: - if default is True: - png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/buttons/button_blue.png")) - if default is False: - png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/buttons/button_blue_off.png")) - res.append(MultiContentEntryPixmapAlphaTest(pos=(10, 5), size=(25, 25), png = png)) - if active is True: - png2 = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/lock_on.png")) - if active is False: - png2 = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/lock_error.png")) - res.append(MultiContentEntryPixmapAlphaTest(pos=(40, 1), size=(25, 25), png = png2)) - return res - - class NetworkAdapterSelection(Screen,HelpableScreen): def __init__(self, session): Screen.__init__(self, session) @@ -55,18 +32,16 @@ class NetworkAdapterSelection(Screen,HelpableScreen): self.wlan_errortext = _("No working wireless network adapter found.\nPlease verify that you have attached a compatible WLAN device and your network is configured correctly.") self.lan_errortext = _("No working local network adapter found.\nPlease verify that you have attached a network cable and your network is configured correctly.") self.oktext = _("Press OK on your remote control to continue.") + self.edittext = _("Press OK to edit the settings.") + self.defaulttext = _("Press yellow to set this interface as default interface.") self.restartLanRef = None - self["ButtonBluetext"] = Label(_("Set as default Interface")) - self["ButtonBlue"] = Pixmap() - self["ButtonRedtext"] = Label(_("Close")) - self["introduction"] = Label(_("Press OK to edit the settings.")) - - self.adapters = [(iNetwork.getFriendlyAdapterName(x),x) for x in iNetwork.getAdapterList()] + self["key_red"] = StaticText(_("Close")) + self["key_green"] = StaticText(_("Select")) + self["key_yellow"] = StaticText("") + self["key_blue"] = StaticText("") + self["introduction"] = StaticText(self.edittext) - if not self.adapters: - self.onFirstExecBegin.append(self.NetworkFallback) - self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions", { "cancel": (self.close, _("exit network interface list")), @@ -75,34 +50,80 @@ class NetworkAdapterSelection(Screen,HelpableScreen): self["ColorActions"] = HelpableActionMap(self, "ColorActions", { - "red": (self.close, _("exit network interface list")), + "red": (self.close, _("exit network interface list")), + "green": (self.okbuttonClick, _("select interface")), + "blue": (self.openNetworkWizard, _("Use the Networkwizard to configure selected network adapter")), }) self["DefaultInterfaceAction"] = HelpableActionMap(self, "ColorActions", { - "blue": (self.setDefaultInterface, [_("Set interface as default Interface"),_("* Only available if more than one interface is active.")] ), + "yellow": (self.setDefaultInterface, [_("Set interface as default Interface"),_("* Only available if more than one interface is active.")] ), }) - + + self.adapters = [(iNetwork.getFriendlyAdapterName(x),x) for x in iNetwork.getAdapterList()] + + if not self.adapters: + self.adapters = [(iNetwork.getFriendlyAdapterName(x),x) for x in iNetwork.getConfiguredAdapters()] + + if len(self.adapters) == 0: + self.adapters = [(iNetwork.getFriendlyAdapterName(x),x) for x in iNetwork.getInstalledAdapters()] + self.list = [] - self["list"] = InterfaceList(self.list) + self["list"] = List(self.list) self.updateList() - + if len(self.adapters) == 1: self.onFirstExecBegin.append(self.okbuttonClick) self.onClose.append(self.cleanup) + def buildInterfaceList(self,iface,name,default,active ): + divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/div-h.png")) + defaultpng = None + activepng = None + description = None + interfacepng = None + + if not iNetwork.isWirelessInterface(iface): + if active is True: + interfacepng = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/network_wired-active.png")) + elif active is False: + interfacepng = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/network_wired-inactive.png")) + else: + interfacepng = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/network_wired.png")) + elif iNetwork.isWirelessInterface(iface): + if active is True: + interfacepng = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/network_wireless-active.png")) + elif active is False: + interfacepng = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/network_wireless-inactive.png")) + else: + interfacepng = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/network_wireless.png")) + + num_configured_if = len(iNetwork.getConfiguredAdapters()) + if num_configured_if >= 2: + if default is True: + defaultpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/buttons/button_blue.png")) + elif default is False: + defaultpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/buttons/button_blue_off.png")) + if active is True: + activepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/lock_on.png")) + elif active is False: + activepng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/lock_error.png")) + + description = iNetwork.getFriendlyAdapterDescription(iface) + + return((iface, name, description, interfacepng, defaultpng, activepng, divpng)) def updateList(self): self.list = [] default_gw = None num_configured_if = len(iNetwork.getConfiguredAdapters()) if num_configured_if >= 2: - self["ButtonBlue"].show() - self["ButtonBluetext"].show() + self["key_yellow"].setText(_("Default")) + self["introduction"].setText(self.defaulttext) self["DefaultInterfaceAction"].setEnabled(True) else: - self["ButtonBlue"].hide() - self["ButtonBluetext"].hide() + self["key_yellow"].setText("") + self["introduction"].setText(self.edittext) self["DefaultInterfaceAction"].setEnabled(False) if num_configured_if < 2 and os_path.exists("/etc/default_gw"): @@ -114,20 +135,20 @@ class NetworkAdapterSelection(Screen,HelpableScreen): fp.close() default_gw = result - if len(self.adapters) == 0: # no interface available => display only eth0 - self.list.append(InterfaceEntryComponent("eth0",iNetwork.getFriendlyAdapterName('eth0'),True,True )) - else: - for x in self.adapters: - if x[1] == default_gw: - default_int = True - else: - default_int = False - if iNetwork.getAdapterAttribute(x[1], 'up') is True: - active_int = True - else: - active_int = False - self.list.append(InterfaceEntryComponent(index = x[1],name = _(x[0]),default=default_int,active=active_int )) - self["list"].l.setList(self.list) + for x in self.adapters: + if x[1] == default_gw: + default_int = True + else: + default_int = False + if iNetwork.getAdapterAttribute(x[1], 'up') is True: + active_int = True + else: + active_int = False + self.list.append(self.buildInterfaceList(x[1],_(x[0]),default_int,active_int )) + + if os_path.exists(resolveFilename(SCOPE_PLUGINS, "SystemPlugins/NetworkWizard/networkwizard.xml")): + self["key_blue"].setText(_("NetworkWizard")) + self["list"].setList(self.list) def setDefaultInterface(self): selection = self["list"].getCurrent() @@ -158,22 +179,6 @@ class NetworkAdapterSelection(Screen,HelpableScreen): else: self.updateList() - def NetworkFallback(self): - if iNetwork.configuredNetworkAdapters.has_key('wlan0') is True: - self.session.openWithCallback(self.ErrorMessageClosed, MessageBox, self.wlan_errortext, type = MessageBox.TYPE_INFO,timeout = 10) - if iNetwork.configuredNetworkAdapters.has_key('ath0') is True: - self.session.openWithCallback(self.ErrorMessageClosed, MessageBox, self.wlan_errortext, type = MessageBox.TYPE_INFO,timeout = 10) - else: - self.session.openWithCallback(self.ErrorMessageClosed, MessageBox, self.lan_errortext, type = MessageBox.TYPE_INFO,timeout = 10) - - def ErrorMessageClosed(self, *ret): - if iNetwork.configuredNetworkAdapters.has_key('wlan0') is True: - self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetupConfiguration, 'wlan0') - elif iNetwork.configuredNetworkAdapters.has_key('ath0') is True: - self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetupConfiguration, 'ath0') - else: - self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetupConfiguration, 'eth0') - def cleanup(self): iNetwork.stopLinkStateConsole() iNetwork.stopRestartConsole() @@ -196,6 +201,17 @@ class NetworkAdapterSelection(Screen,HelpableScreen): self.updateList() self.session.open(MessageBox, _("Finished configuring your network"), type = MessageBox.TYPE_INFO, timeout = 10, default = False) + def openNetworkWizard(self): + if os_path.exists(resolveFilename(SCOPE_PLUGINS, "SystemPlugins/NetworkWizard/networkwizard.xml")): + try: + from Plugins.SystemPlugins.NetworkWizard.NetworkWizard import NetworkWizard + except ImportError: + self.session.open(MessageBox, _("The NetworkWizard extension is not installed!\nPlease install it."), type = MessageBox.TYPE_INFO,timeout = 10 ) + else: + selection = self["list"].getCurrent() + if selection is not None: + self.session.openWithCallback(self.AdapterSetupClosed, NetworkWizard, selection[0]) + class NameserverSetup(Screen, ConfigListScreen, HelpableScreen): def __init__(self, session): @@ -204,34 +220,35 @@ class NameserverSetup(Screen, ConfigListScreen, HelpableScreen): self.backupNameserverList = iNetwork.getNameserverList()[:] print "backup-list:", self.backupNameserverList - self["ButtonGreentext"] = Label(_("Add")) - self["ButtonYellowtext"] = Label(_("Delete")) - self["ButtonRedtext"] = Label(_("Close")) - self["introduction"] = Label(_("Press OK to activate the settings.")) + self["key_red"] = StaticText(_("Cancel")) + self["key_green"] = StaticText(_("Add")) + self["key_yellow"] = StaticText(_("Delete")) + + self["introduction"] = StaticText(_("Press OK to activate the settings.")) self.createConfig() - + self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions", { "cancel": (self.cancel, _("exit nameserver configuration")), "ok": (self.ok, _("activate current configuration")), }) - + self["ColorActions"] = HelpableActionMap(self, "ColorActions", { "red": (self.cancel, _("exit nameserver configuration")), "green": (self.add, _("add a nameserver entry")), "yellow": (self.remove, _("remove a nameserver entry")), }) - + self["actions"] = NumberActionMap(["SetupActions"], { "ok": self.ok, - }, -2) - + }, -2) + self.list = [] ConfigListScreen.__init__(self, self.list) self.createSetup() - + def createConfig(self): self.nameservers = iNetwork.getNameserverList() self.nameserverEntries = [ NoSave(ConfigIP(default=nameserver)) for nameserver in self.nameservers] @@ -271,26 +288,25 @@ class NameserverSetup(Screen, ConfigListScreen, HelpableScreen): def remove(self): print "currentIndex:", self["config"].getCurrentIndex() - index = self["config"].getCurrentIndex() if index < len(self.nameservers): iNetwork.removeNameserver(self.nameservers[index]) self.createConfig() self.createSetup() - + + class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): - def __init__(self, session, networkinfo, essid=None, aplist=None): + def __init__(self, session, networkinfo, essid=None): Screen.__init__(self, session) HelpableScreen.__init__(self) self.session = session if isinstance(networkinfo, (list, tuple)): self.iface = networkinfo[0] self.essid = networkinfo[1] - self.aplist = networkinfo[2] else: self.iface = networkinfo self.essid = essid - self.aplist = aplist + self.extended = None self.applyConfigRef = None self.finished_cb = None @@ -301,60 +317,50 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions", { - "cancel": (self.cancel, _("exit network adapter setup menu")), - "ok": (self.ok, _("select menu entry")), + "cancel": (self.keyCancel, _("exit network adapter configuration")), + "ok": (self.keySave, _("activate network adapter configuration")), }) self["ColorActions"] = HelpableActionMap(self, "ColorActions", { - "red": (self.cancel, _("exit network adapter configuration")), - "blue": (self.KeyBlue, _("open nameserver configuration")), - }) - - self["VirtualKB"] = HelpableActionMap(self, "ColorActions", - { - "green": (self.KeyGreen, [_("open virtual keyboard input help"),_("* Only available when entering hidden SSID or network key")] ), + "red": (self.keyCancel, _("exit network adapter configuration")), }) self["actions"] = NumberActionMap(["SetupActions"], { - "ok": self.ok, + "ok": self.keySave, }, -2) - - + self.list = [] ConfigListScreen.__init__(self, self.list,session = self.session) self.createSetup() self.onLayoutFinish.append(self.layoutFinished) self.onClose.append(self.cleanup) - - self["DNS1text"] = Label(_("Primary DNS")) - self["DNS2text"] = Label(_("Secondary DNS")) - self["DNS1"] = Label() - self["DNS2"] = Label() - - self["introduction"] = Label(_("Current settings:")) - - self["IPtext"] = Label(_("IP Address")) - self["Netmasktext"] = Label(_("Netmask")) - self["Gatewaytext"] = Label(_("Gateway")) - - self["IP"] = Label() - self["Mask"] = Label() - self["Gateway"] = Label() - - self["BottomBG"] = Pixmap() - self["Adaptertext"] = Label(_("Network:")) - self["Adapter"] = Label() - self["introduction2"] = Label(_("Press OK to activate the settings.")) - self["ButtonRed"] = Pixmap() - self["ButtonRedtext"] = Label(_("Close")) - self["ButtonBlue"] = Pixmap() - self["ButtonBluetext"] = Label(_("Edit DNS")) - self["ButtonGreen"] = Pixmap() - self["VKeyIcon"] = Pixmap() - self["HelpWindow"] = Pixmap() + self["DNS1text"] = StaticText(_("Primary DNS")) + self["DNS2text"] = StaticText(_("Secondary DNS")) + self["DNS1"] = StaticText() + self["DNS2"] = StaticText() + self["introduction"] = StaticText(_("Current settings:")) + + self["IPtext"] = StaticText(_("IP Address")) + self["Netmasktext"] = StaticText(_("Netmask")) + self["Gatewaytext"] = StaticText(_("Gateway")) + + self["IP"] = StaticText() + self["Mask"] = StaticText() + self["Gateway"] = StaticText() + + self["Adaptertext"] = StaticText(_("Network:")) + self["Adapter"] = StaticText() + self["introduction2"] = StaticText(_("Press OK to activate the settings.")) + self["key_red"] = StaticText(_("Cancel")) + self["key_blue"] = StaticText() + + self["VKeyIcon"] = Boolean(False) + self["HelpWindow"] = Pixmap() + self["HelpWindow"].hide() + def layoutFinished(self): self["DNS1"].setText(self.primaryDNS.getText()) self["DNS2"].setText(self.secondaryDNS.getText()) @@ -374,83 +380,54 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): self["IP"].setText(_("N/A")) if iNetwork.getAdapterAttribute(self.iface, "gateway"): if self.gatewayConfigEntry.getText() == "0.0.0.0": + self["Gatewaytext"].setText(_("Gateway")) self["Gateway"].setText(_("N/A")) else: + self["Gatewaytext"].setText(_("Gateway")) self["Gateway"].setText(self.gatewayConfigEntry.getText()) else: - self["Gateway"].hide() - self["Gatewaytext"].hide() + self["Gateway"].setText("") + self["Gatewaytext"].setText("") self["Adapter"].setText(iNetwork.getFriendlyAdapterName(self.iface)) - self["ButtonGreen"].hide() - self["VKeyIcon"].hide() - self["VirtualKB"].setEnabled(False) - self["HelpWindow"].hide() def createConfig(self): self.InterfaceEntry = None self.dhcpEntry = None self.gatewayEntry = None + self.DNSConfigEntry = None self.hiddenSSID = None self.wlanSSID = None - self.encryptionEnabled = None - self.encryptionKey = None + self.encryption = None self.encryptionType = None - self.nwlist = None + self.encryptionKey = None self.encryptionlist = None self.weplist = None self.wsconfig = None self.default = None - - if self.iface == "wlan0" or self.iface == "ath0" : - from Plugins.SystemPlugins.WirelessLan.Wlan import wpaSupplicant,Wlan - self.w = Wlan(self.iface) + + if iNetwork.isWirelessInterface(self.iface): + from Plugins.SystemPlugins.WirelessLan.Wlan import wpaSupplicant self.ws = wpaSupplicant() self.encryptionlist = [] + self.encryptionlist.append(("Unencrypted", _("Unencrypted"))) self.encryptionlist.append(("WEP", _("WEP"))) self.encryptionlist.append(("WPA", _("WPA"))) - self.encryptionlist.append(("WPA2", _("WPA2"))) self.encryptionlist.append(("WPA/WPA2", _("WPA or WPA2"))) + self.encryptionlist.append(("WPA2", _("WPA2"))) self.weplist = [] self.weplist.append("ASCII") self.weplist.append("HEX") - if self.aplist is not None: - self.nwlist = self.aplist - self.nwlist.sort(key = lambda x: x[0]) - else: - self.nwlist = [] - self.aps = None - try: - self.aps = self.w.getNetworkList() - if self.aps is not None: - print "[NetworkSetup.py] got Accespoints!" - for ap in self.aps: - a = self.aps[ap] - if a['active']: - if a['essid'] == "": - a['essid'] = a['bssid'] - self.nwlist.append((a['essid'],a['essid'])) - self.nwlist.sort(key = lambda x: x[0]) - except: - self.nwlist.append(("No Networks found",_("No Networks found"))) - - self.wsconfig = self.ws.loadConfig() - if self.essid is not None: # ssid from wlan scan - self.default = self.essid - else: - self.default = self.wsconfig['ssid'] - - if "hidden..." not in self.nwlist: - self.nwlist.append(("hidden...",_("hidden network"))) - if self.default not in self.nwlist: - self.nwlist.append((self.default,self.default)) - config.plugins.wlan.essid = NoSave(ConfigSelection(self.nwlist, default = self.default )) - config.plugins.wlan.hiddenessid = NoSave(ConfigText(default = self.wsconfig['hiddenessid'], visible_width = 50, fixed_size = False)) - - config.plugins.wlan.encryption.enabled = NoSave(ConfigYesNo(default = self.wsconfig['encryption'] )) - config.plugins.wlan.encryption.type = NoSave(ConfigSelection(self.encryptionlist, default = self.wsconfig['encryption_type'] )) - config.plugins.wlan.encryption.wepkeytype = NoSave(ConfigSelection(self.weplist, default = self.wsconfig['encryption_wepkeytype'] )) - config.plugins.wlan.encryption.psk = NoSave(ConfigPassword(default = self.wsconfig['key'], visible_width = 50, fixed_size = False)) - + + self.wsconfig = self.ws.loadConfig(self.iface) + if self.essid is None: + self.essid = self.wsconfig['ssid'] + + config.plugins.wlan.hiddenessid = NoSave(ConfigYesNo(default = self.wsconfig['hiddenessid'])) + config.plugins.wlan.essid = NoSave(ConfigText(default = self.essid, visible_width = 50, fixed_size = False)) + config.plugins.wlan.encryption = NoSave(ConfigSelection(self.encryptionlist, default = self.wsconfig['encryption'] )) + config.plugins.wlan.wepkeytype = NoSave(ConfigSelection(self.weplist, default = self.wsconfig['wepkeytype'] )) + config.plugins.wlan.psk = NoSave(ConfigPassword(default = self.wsconfig['key'], visible_width = 50, fixed_size = False)) + self.activateInterfaceEntry = NoSave(ConfigYesNo(default=iNetwork.getAdapterAttribute(self.iface, "up") or False)) self.dhcpConfigEntry = NoSave(ConfigYesNo(default=iNetwork.getAdapterAttribute(self.iface, "dhcp") or False)) self.ipConfigEntry = NoSave(ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "ip")) or [0,0,0,0]) @@ -461,6 +438,14 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): self.dhcpdefault=False self.hasGatewayConfigEntry = NoSave(ConfigYesNo(default=self.dhcpdefault or False)) self.gatewayConfigEntry = NoSave(ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "gateway") or [0,0,0,0])) + if iNetwork.getAdapterAttribute(self.iface, "dns-nameservers"): + self.dnsconfigdefault=True + else: + self.dnsconfigdefault=False + self.hasDNSConfigEntry = NoSave(ConfigYesNo(default=self.dnsconfigdefault or False)) + manualNameservers = (iNetwork.getInterfacesNameserverList(self.iface) + [[0,0,0,0]] * 2)[0:2] + self.manualPrimaryDNS = NoSave(ConfigIP(default=manualNameservers[0])) + self.manualSecondaryDNS = NoSave(ConfigIP(default=manualNameservers[1])) nameserver = (iNetwork.getNameserverList() + [[0,0,0,0]] * 2)[0:2] self.primaryDNS = NoSave(ConfigIP(default=nameserver[0])) self.secondaryDNS = NoSave(ConfigIP(default=nameserver[1])) @@ -468,7 +453,7 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): def createSetup(self): self.list = [] self.InterfaceEntry = getConfigListEntry(_("Use Interface"), self.activateInterfaceEntry) - + self.list.append(self.InterfaceEntry) if self.activateInterfaceEntry.value: self.dhcpEntry = getConfigListEntry(_("Use DHCP"), self.dhcpConfigEntry) @@ -480,8 +465,16 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): self.list.append(self.gatewayEntry) if self.hasGatewayConfigEntry.value: self.list.append(getConfigListEntry(_('Gateway'), self.gatewayConfigEntry)) - - self.extended = None + + self.DNSConfigEntry = getConfigListEntry(_("Use Manual dns-nameserver"), self.hasDNSConfigEntry) + if self.dhcpConfigEntry.value: + self.list.append(self.DNSConfigEntry) + if self.hasDNSConfigEntry.value or not self.dhcpConfigEntry.value: + self.list.append(getConfigListEntry(_('Primary DNS'), self.manualPrimaryDNS)) + self.list.append(getConfigListEntry(_('Secondary DNS'), self.manualSecondaryDNS)) + + self.extended = None + self.configStrings = None for p in plugins.getPlugins(PluginDescriptor.WHERE_NETWORKSETUP): callFnc = p.__call__["ifaceSupported"](self.iface) if callFnc is not None: @@ -489,57 +482,24 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): self.extended = callFnc if p.__call__.has_key("configStrings"): self.configStrings = p.__call__["configStrings"] - else: - self.configStrings = None - if config.plugins.wlan.essid.value == 'hidden...': - self.wlanSSID = getConfigListEntry(_("Network SSID"), config.plugins.wlan.essid) - self.list.append(self.wlanSSID) - self.hiddenSSID = getConfigListEntry(_("Hidden network SSID"), config.plugins.wlan.hiddenessid) - self.list.append(self.hiddenSSID) - else: - self.wlanSSID = getConfigListEntry(_("Network SSID"), config.plugins.wlan.essid) - self.list.append(self.wlanSSID) - self.encryptionEnabled = getConfigListEntry(_("Encryption"), config.plugins.wlan.encryption.enabled) - self.list.append(self.encryptionEnabled) + + self.hiddenSSID = getConfigListEntry(_("Hidden network"), config.plugins.wlan.hiddenessid) + self.list.append(self.hiddenSSID) + self.wlanSSID = getConfigListEntry(_("Networkname (SSID)"), config.plugins.wlan.essid) + self.list.append(self.wlanSSID) + self.encryption = getConfigListEntry(_("Encryption"), config.plugins.wlan.encryption) + self.list.append(self.encryption) + + self.encryptionType = getConfigListEntry(_("Encryption Keytype"), config.plugins.wlan.wepkeytype) + self.encryptionKey = getConfigListEntry(_("Encryption Key"), config.plugins.wlan.psk) - if config.plugins.wlan.encryption.enabled.value: - self.encryptionType = getConfigListEntry(_("Encryption Type"), config.plugins.wlan.encryption.type) - self.list.append(self.encryptionType) - if config.plugins.wlan.encryption.type.value == 'WEP': - self.list.append(getConfigListEntry(_("Encryption Keytype"), config.plugins.wlan.encryption.wepkeytype)) - self.encryptionKey = getConfigListEntry(_("Encryption Key"), config.plugins.wlan.encryption.psk) - self.list.append(self.encryptionKey) - else: - self.encryptionKey = getConfigListEntry(_("Encryption Key"), config.plugins.wlan.encryption.psk) - self.list.append(self.encryptionKey) - - + if config.plugins.wlan.encryption.value != "Unencrypted": + if config.plugins.wlan.encryption.value == 'WEP': + self.list.append(self.encryptionType) + self.list.append(self.encryptionKey) self["config"].list = self.list self["config"].l.setList(self.list) - if not self.selectionChanged in self["config"].onSelectionChanged: - self["config"].onSelectionChanged.append(self.selectionChanged) - def KeyBlue(self): - self.session.openWithCallback(self.NameserverSetupClosed, NameserverSetup) - - def KeyGreen(self): - if self.iface == "wlan0" or self.iface == "ath0" : - if self["config"].getCurrent() == self.hiddenSSID: - if config.plugins.wlan.essid.value == 'hidden...': - self.session.openWithCallback(self.VirtualKeyBoardSSIDCallback, VirtualKeyBoard, title = (_("Enter WLAN network name/SSID:")), text = config.plugins.wlan.essid.value) - if self["config"].getCurrent() == self.encryptionKey: - self.session.openWithCallback(self.VirtualKeyBoardKeyCallback, VirtualKeyBoard, title = (_("Enter WLAN passphrase/key:")), text = config.plugins.wlan.encryption.psk.value) - - def VirtualKeyBoardSSIDCallback(self, callback = None): - if callback is not None and len(callback): - config.plugins.wlan.hiddenessid = NoSave(ConfigText(default = callback, visible_width = 50, fixed_size = False)) - self.createSetup() - - def VirtualKeyBoardKeyCallback(self, callback = None): - if callback is not None and len(callback): - config.plugins.wlan.encryption.psk = NoSave(ConfigPassword(default = callback, visible_width = 50, fixed_size = False)) - self.createSetup() - def newConfig(self): if self["config"].getCurrent() == self.InterfaceEntry: self.createSetup() @@ -547,13 +507,12 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): self.createSetup() if self["config"].getCurrent() == self.gatewayEntry: self.createSetup() - if self.iface == "wlan0" or self.iface == "ath0" : - if self["config"].getCurrent() == self.wlanSSID: - self.createSetup() - if self["config"].getCurrent() == self.encryptionEnabled: + if self["config"].getCurrent() == self.DNSConfigEntry: + self.createSetup() + if iNetwork.isWirelessInterface(self.iface): + if self["config"].getCurrent() == self.encryption: self.createSetup() - if self["config"].getCurrent() == self.encryptionType: - self.createSetup() + def keyLeft(self): ConfigListScreen.keyLeft(self) self.newConfig() @@ -561,40 +520,48 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): def keyRight(self): ConfigListScreen.keyRight(self) self.newConfig() + + def keySave(self): + self.hideInputHelp() + if self["config"].isChanged(): + self.session.openWithCallback(self.keySaveConfirm, MessageBox, (_("Are you sure you want to activate this network configuration?\n\n") + self.oktext ) ) + else: + if self.finished_cb: + self.finished_cb() + else: + self.close('cancel') - def selectionChanged(self): - current = self["config"].getCurrent() - if current == self.hiddenSSID and config.plugins.wlan.essid.value == 'hidden...': - helpwindowpos = self["HelpWindow"].getPosition() - if current[1].help_window.instance is not None: - current[1].help_window.instance.move(ePoint(helpwindowpos[0],helpwindowpos[1])) - self["ButtonGreen"].show() - self["VKeyIcon"].show() - self["VirtualKB"].setEnabled(True) - elif current == self.encryptionKey and config.plugins.wlan.encryption.enabled.value: - helpwindowpos = self["HelpWindow"].getPosition() - if current[1].help_window.instance is not None: - current[1].help_window.instance.move(ePoint(helpwindowpos[0],helpwindowpos[1])) - self["ButtonGreen"].show() - self["VKeyIcon"].show() - self["VirtualKB"].setEnabled(True) - else: - self["ButtonGreen"].hide() - self["VKeyIcon"].hide() - self["VirtualKB"].setEnabled(False) + def keySaveConfirm(self, ret = False): + if (ret == True): + num_configured_if = len(iNetwork.getConfiguredAdapters()) + if num_configured_if >= 1: + if self.iface in iNetwork.getConfiguredAdapters(): + self.applyConfig(True) + else: + self.session.openWithCallback(self.secondIfaceFoundCB, MessageBox, _("A second configured interface has been found.\n\nDo you want to disable the second network interface?"), default = True) + else: + self.applyConfig(True) + else: + self.keyCancel() - def ok(self): - current = self["config"].getCurrent() - if current == self.hiddenSSID and config.plugins.wlan.essid.value == 'hidden...': - if current[1].help_window.instance is not None: - current[1].help_window.instance.hide() - elif current == self.encryptionKey and config.plugins.wlan.encryption.enabled.value: - if current[1].help_window.instance is not None: - current[1].help_window.instance.hide() - self.session.openWithCallback(self.applyConfig, MessageBox, (_("Are you sure you want to activate this network configuration?\n\n") + self.oktext ) ) + def secondIfaceFoundCB(self,data): + if data is False: + self.applyConfig(True) + else: + configuredInterfaces = iNetwork.getConfiguredAdapters() + for interface in configuredInterfaces: + if interface == self.iface: + continue + iNetwork.setAdapterAttribute(interface, "up", False) + iNetwork.deactivateInterface(configuredInterfaces,self.deactivateSecondInterfaceCB) + + def deactivateSecondInterfaceCB(self, data): + if data is True: + self.applyConfig(True) def applyConfig(self, ret = False): if (ret == True): + self.applyConfigRef = None iNetwork.setAdapterAttribute(self.iface, "up", self.activateInterfaceEntry.value) iNetwork.setAdapterAttribute(self.iface, "dhcp", self.dhcpConfigEntry.value) iNetwork.setAdapterAttribute(self.iface, "ip", self.ipConfigEntry.value) @@ -603,17 +570,41 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): iNetwork.setAdapterAttribute(self.iface, "gateway", self.gatewayConfigEntry.value) else: iNetwork.removeAdapterAttribute(self.iface, "gateway") - if self.extended is not None and self.configStrings is not None: + + if self.hasDNSConfigEntry.value or not self.dhcpConfigEntry.value: + interfacesDnsLines = self.makeLineDnsNameservers([self.manualPrimaryDNS.value, self.manualSecondaryDNS.value]) + if interfacesDnsLines == "" : + interfacesDnsLines = False + iNetwork.setAdapterAttribute(self.iface, "dns-nameservers", interfacesDnsLines) + else: + iNetwork.setAdapterAttribute(self.iface, "dns-nameservers", False) + + if (self.extended is not None and self.configStrings is not None): iNetwork.setAdapterAttribute(self.iface, "configStrings", self.configStrings(self.iface)) - self.ws.writeConfig() + self.ws.writeConfig(self.iface) + if self.activateInterfaceEntry.value is False: - iNetwork.deactivateInterface(self.iface) - iNetwork.writeNetworkConfig() - iNetwork.restartNetwork(self.applyConfigDataAvail) - self.applyConfigRef = self.session.openWithCallback(self.applyConfigfinishedCB, MessageBox, _("Please wait for activation of your network configuration..."), type = MessageBox.TYPE_INFO, enable_input = False) + iNetwork.deactivateInterface(self.iface,self.deactivateInterfaceCB) + iNetwork.writeNetworkConfig() + self.applyConfigRef = self.session.openWithCallback(self.applyConfigfinishedCB, MessageBox, _("Please wait for activation of your network configuration..."), type = MessageBox.TYPE_INFO, enable_input = False) + else: + if self.oldInterfaceState is False: + iNetwork.activateInterface(self.iface,self.deactivateInterfaceCB) + else: + iNetwork.deactivateInterface(self.iface,self.activateInterfaceCB) + iNetwork.writeNetworkConfig() + self.applyConfigRef = self.session.openWithCallback(self.applyConfigfinishedCB, MessageBox, _("Please wait for activation of your network configuration..."), type = MessageBox.TYPE_INFO, enable_input = False) else: - self.cancel() - + self.keyCancel() + + def deactivateInterfaceCB(self, data): + if data is True: + self.applyConfigDataAvail(True) + + def activateInterfaceCB(self, data): + if data is True: + iNetwork.activateInterface(self.iface,self.applyConfigDataAvail) + def applyConfigDataAvail(self, data): if data is True: iNetwork.getInterfaces(self.getInterfacesDataAvail) @@ -624,47 +615,40 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): def applyConfigfinishedCB(self,data): if data is True: - num_configured_if = len(iNetwork.getConfiguredAdapters()) - if num_configured_if >= 2: - self.session.openWithCallback(self.secondIfaceFoundCB, MessageBox, _("Your network configuration has been activated.\nA second configured interface has been found.\n\nDo you want to disable the second network interface?"), default = True) + if self.finished_cb: + self.session.openWithCallback(lambda x : self.finished_cb(), MessageBox, _("Your network configuration has been activated."), type = MessageBox.TYPE_INFO, timeout = 10) else: - if self.finished_cb: - self.session.openWithCallback(lambda x : self.finished_cb(), MessageBox, _("Your network configuration has been activated."), type = MessageBox.TYPE_INFO, timeout = 10) - else: - self.session.openWithCallback(self.ConfigfinishedCB, MessageBox, _("Your network configuration has been activated."), type = MessageBox.TYPE_INFO, timeout = 10) - - def secondIfaceFoundCB(self,data): - if data is False: - self.close('ok') - else: - configuredInterfaces = iNetwork.getConfiguredAdapters() - for interface in configuredInterfaces: - if interface == self.iface: - continue - iNetwork.setAdapterAttribute(interface, "up", False) - iNetwork.deactivateInterface(interface) - self.applyConfig(True) - + self.session.openWithCallback(self.ConfigfinishedCB, MessageBox, _("Your network configuration has been activated."), type = MessageBox.TYPE_INFO, timeout = 10) + def ConfigfinishedCB(self,data): if data is not None: if data is True: self.close('ok') - def cancel(self): + def keyCancelConfirm(self, result): + if not result: + return if self.oldInterfaceState is False: - iNetwork.deactivateInterface(self.iface,self.cancelCB) + iNetwork.deactivateInterface(self.iface,self.keyCancelCB) + else: + self.close('cancel') + + def keyCancel(self): + self.hideInputHelp() + if self["config"].isChanged(): + self.session.openWithCallback(self.keyCancelConfirm, MessageBox, _("Really close without saving settings?")) else: self.close('cancel') - def cancelCB(self,data): + def keyCancelCB(self,data): if data is not None: if data is True: self.close('cancel') - + def runAsync(self, finished_cb): self.finished_cb = finished_cb - self.ok() - + self.keySave() + def NameserverSetupClosed(self, *ret): iNetwork.loadNameserverConfig() nameserver = (iNetwork.getNameserverList() + [[0,0,0,0]] * 2)[0:2] @@ -672,10 +656,25 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): self.secondaryDNS = NoSave(ConfigIP(default=nameserver[1])) self.createSetup() self.layoutFinished() - + def cleanup(self): iNetwork.stopLinkStateConsole() - + + def hideInputHelp(self): + current = self["config"].getCurrent() + if current == self.wlanSSID: + if current[1].help_window.instance is not None: + current[1].help_window.instance.hide() + elif current == self.encryptionKey and config.plugins.wlan.encryption.value is not "Unencrypted": + if current[1].help_window.instance is not None: + current[1].help_window.instance.hide() + + def makeLineDnsNameservers(self, nameservers = []): + line = "" + entry = ' '.join([("%d.%d.%d.%d" % tuple(x)) for x in nameservers if x != [0, 0, 0, 0] ]) + if len(entry): + line+="\tdns-nameservers %s\n" % entry + return line class AdapterSetupConfiguration(Screen, HelpableScreen): def __init__(self, session,iface): @@ -684,22 +683,21 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): self.session = session self.iface = iface self.restartLanRef = None + self.LinkState = None self.mainmenu = self.genMainMenu() self["menulist"] = MenuList(self.mainmenu) - self["description"] = Label() - self["IFtext"] = Label() - self["IF"] = Label() - self["BottomBG"] = Label() - self["Statustext"] = Label() + self["key_red"] = StaticText(_("Close")) + self["description"] = StaticText() + self["IFtext"] = StaticText() + self["IF"] = StaticText() + self["Statustext"] = StaticText() self["statuspic"] = MultiPixmap() self["statuspic"].hide() - self["BottomBG"] = Pixmap() - self["ButtonRed"] = Pixmap() - self["ButtonRedtext"] = Label(_("Close")) self.oktext = _("Press OK on your remote control to continue.") - self.reboottext = _("Your Dreambox will restart after pressing OK on your remote control.") - self.errortext = _("No working wireless network interface found.\n Please verify that you have attached a compatible WLAN device or enable your local network interface.") + self.reboottext = _("Your STB will restart after pressing OK on your remote control.") + self.errortext = _("No working wireless network interface found.\n Please verify that you have attached a compatible WLAN device or enable your local network interface.") + self.missingwlanplugintxt = _("The wireless LAN plugin is not installed!\nPlease install it.") self["WizardActions"] = HelpableActionMap(self, "WizardActions", { @@ -735,22 +733,39 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): self.onLayoutFinish.append(self.layoutFinished) self.onClose.append(self.cleanup) + + def queryWirelessDevice(self,iface): + try: + from pythonwifi.iwlibs import Wireless + import errno + except ImportError: + return False + else: + try: + ifobj = Wireless(iface) # a Wireless NIC Object + wlanresponse = ifobj.getAPaddr() + except IOError, (error_no, error_str): + if error_no in (errno.EOPNOTSUPP, errno.ENODEV, errno.EPERM): + return False + else: + print "error: ",error_no,error_str + return True + else: + return True + def ok(self): + self.cleanup() if self["menulist"].getCurrent()[1] == 'edit': - if self.iface == 'wlan0' or self.iface == 'ath0': + if iNetwork.isWirelessInterface(self.iface): try: from Plugins.SystemPlugins.WirelessLan.plugin import WlanScan - from Plugins.SystemPlugins.WirelessLan.iwlibs import Wireless except ImportError: - self.session.open(MessageBox, _("The wireless LAN plugin is not installed!\nPlease install it."), type = MessageBox.TYPE_INFO,timeout = 10 ) + self.session.open(MessageBox, self.missingwlanplugintxt, type = MessageBox.TYPE_INFO,timeout = 10 ) else: - ifobj = Wireless(self.iface) # a Wireless NIC Object - self.wlanresponse = ifobj.getStatistics() - if self.wlanresponse[0] != 19: # Wlan Interface found. + if self.queryWirelessDevice(self.iface): self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetup,self.iface) else: - # Display Wlan not available Message - self.showErrorMessage() + self.showErrorMessage() # Display Wlan not available Message else: self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetup,self.iface) if self["menulist"].getCurrent()[1] == 'test': @@ -760,36 +775,28 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): if self["menulist"].getCurrent()[1] == 'scanwlan': try: from Plugins.SystemPlugins.WirelessLan.plugin import WlanScan - from Plugins.SystemPlugins.WirelessLan.iwlibs import Wireless except ImportError: - self.session.open(MessageBox, _("The wireless LAN plugin is not installed!\nPlease install it."), type = MessageBox.TYPE_INFO,timeout = 10 ) + self.session.open(MessageBox, self.missingwlanplugintxt, type = MessageBox.TYPE_INFO,timeout = 10 ) else: - ifobj = Wireless(self.iface) # a Wireless NIC Object - self.wlanresponse = ifobj.getStatistics() - if self.wlanresponse[0] != 19: + if self.queryWirelessDevice(self.iface): self.session.openWithCallback(self.WlanScanClosed, WlanScan, self.iface) else: - # Display Wlan not available Message - self.showErrorMessage() + self.showErrorMessage() # Display Wlan not available Message if self["menulist"].getCurrent()[1] == 'wlanstatus': try: from Plugins.SystemPlugins.WirelessLan.plugin import WlanStatus - from Plugins.SystemPlugins.WirelessLan.iwlibs import Wireless except ImportError: - self.session.open(MessageBox, _("The wireless LAN plugin is not installed!\nPlease install it."), type = MessageBox.TYPE_INFO,timeout = 10 ) - else: - ifobj = Wireless(self.iface) # a Wireless NIC Object - self.wlanresponse = ifobj.getStatistics() - if self.wlanresponse[0] != 19: + self.session.open(MessageBox, self.missingwlanplugintxt, type = MessageBox.TYPE_INFO,timeout = 10 ) + else: + if self.queryWirelessDevice(self.iface): self.session.openWithCallback(self.WlanStatusClosed, WlanStatus,self.iface) else: - # Display Wlan not available Message - self.showErrorMessage() + self.showErrorMessage() # Display Wlan not available Message if self["menulist"].getCurrent()[1] == 'lanrestart': self.session.openWithCallback(self.restartLan, MessageBox, (_("Are you sure you want to restart your network interfaces?\n\n") + self.oktext ) ) if self["menulist"].getCurrent()[1] == 'openwizard': from Plugins.SystemPlugins.NetworkWizard.NetworkWizard import NetworkWizard - self.session.openWithCallback(self.AdapterSetupClosed, NetworkWizard) + self.session.openWithCallback(self.AdapterSetupClosed, NetworkWizard, self.iface) if self["menulist"].getCurrent()[1][0] == 'extendedSetup': self.extended = self["menulist"].getCurrent()[1][2] self.extended(self.session, self.iface) @@ -816,15 +823,14 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): self.loadDescription() def loadDescription(self): - print self["menulist"].getCurrent()[1] if self["menulist"].getCurrent()[1] == 'edit': - self["description"].setText(_("Edit the network configuration of your Dreambox.\n" ) + self.oktext ) + self["description"].setText(_("Edit the network configuration of your STB.\n" ) + self.oktext ) if self["menulist"].getCurrent()[1] == 'test': - self["description"].setText(_("Test the network configuration of your Dreambox.\n" ) + self.oktext ) + self["description"].setText(_("Test the network configuration of your STB.\n" ) + self.oktext ) if self["menulist"].getCurrent()[1] == 'dns': - self["description"].setText(_("Edit the Nameserver configuration of your Dreambox.\n" ) + self.oktext ) + self["description"].setText(_("Edit the Nameserver configuration of your STB.\n" ) + self.oktext ) if self["menulist"].getCurrent()[1] == 'scanwlan': - self["description"].setText(_("Scan your network for wireless Access Points and connect to them using your selected wireless device.\n" ) + self.oktext ) + self["description"].setText(_("Scan your network for wireless access points and connect to them using your selected wireless device.\n" ) + self.oktext ) if self["menulist"].getCurrent()[1] == 'wlanstatus': self["description"].setText(_("Shows the state of your wireless LAN connection.\n" ) + self.oktext ) if self["menulist"].getCurrent()[1] == 'lanrestart': @@ -835,16 +841,18 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): self["description"].setText(_(self["menulist"].getCurrent()[1][1]) + self.oktext ) def updateStatusbar(self, data = None): + self.mainmenu = self.genMainMenu() + self["menulist"].l.setList(self.mainmenu) self["IFtext"].setText(_("Network:")) self["IF"].setText(iNetwork.getFriendlyAdapterName(self.iface)) self["Statustext"].setText(_("Link:")) - if self.iface == 'wlan0' or self.iface == 'ath0': + if iNetwork.isWirelessInterface(self.iface): try: - from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus,Status + from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus except: - self["statuspic"].setPixmapNum(1) - self["statuspic"].show() + self["statuspic"].setPixmapNum(1) + self["statuspic"].show() else: iStatus.getDataForInterface(self.iface,self.getInfoCB) else: @@ -856,7 +864,7 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): def genMainMenu(self): menu = [] menu.append((_("Adapter settings"), "edit")) - menu.append((_("Nameserver settings"), "dns")) +# menu.append((_("Nameserver settings"), "dns")) menu.append((_("Network test"), "test")) menu.append((_("Restart network"), "lanrestart")) @@ -866,7 +874,6 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): callFnc = p.__call__["ifaceSupported"](self.iface) if callFnc is not None: self.extended = callFnc - print p.__call__ if p.__call__.has_key("WlanPluginEntry"): # internally used only for WLAN Plugin menu.append((_("Scan Wireless Networks"), "scanwlan")) if iNetwork.getAdapterAttribute(self.iface, "up"): @@ -890,45 +897,33 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): def AdapterSetupClosed(self, *ret): if ret is not None and len(ret): - if ret[0] == 'ok' and (self.iface == 'wlan0' or self.iface == 'ath0') and iNetwork.getAdapterAttribute(self.iface, "up") is True: + if ret[0] == 'ok' and (iNetwork.isWirelessInterface(self.iface) and iNetwork.getAdapterAttribute(self.iface, "up") is True): try: from Plugins.SystemPlugins.WirelessLan.plugin import WlanStatus - from Plugins.SystemPlugins.WirelessLan.iwlibs import Wireless except ImportError: - self.session.open(MessageBox, _("The wireless LAN plugin is not installed!\nPlease install it."), type = MessageBox.TYPE_INFO,timeout = 10 ) + self.session.open(MessageBox, self.missingwlanplugintxt, type = MessageBox.TYPE_INFO,timeout = 10 ) else: - ifobj = Wireless(self.iface) # a Wireless NIC Object - self.wlanresponse = ifobj.getStatistics() - if self.wlanresponse[0] != 19: + if self.queryWirelessDevice(self.iface): self.session.openWithCallback(self.WlanStatusClosed, WlanStatus,self.iface) else: - # Display Wlan not available Message - self.showErrorMessage() + self.showErrorMessage() # Display Wlan not available Message else: - self.mainmenu = self.genMainMenu() - self["menulist"].l.setList(self.mainmenu) self.updateStatusbar() else: - self.mainmenu = self.genMainMenu() - self["menulist"].l.setList(self.mainmenu) self.updateStatusbar() def WlanStatusClosed(self, *ret): if ret is not None and len(ret): - from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus,Status + from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus iStatus.stopWlanConsole() - self.mainmenu = self.genMainMenu() - self["menulist"].l.setList(self.mainmenu) self.updateStatusbar() def WlanScanClosed(self,*ret): if ret[0] is not None: - self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetup, self.iface,ret[0],ret[1]) + self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetup, self.iface,ret[0]) else: - from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus,Status + from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus iStatus.stopWlanConsole() - self.mainmenu = self.genMainMenu() - self["menulist"].l.setList(self.mainmenu) self.updateStatusbar() def restartLan(self, ret = False): @@ -950,15 +945,19 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): self.session.open(MessageBox, _("Finished restarting your network"), type = MessageBox.TYPE_INFO, timeout = 10, default = False) def dataAvail(self,data): - self.output = data.strip() - result = self.output.split('\n') - pattern = re_compile("Link detected: yes") - for item in result: - if re_search(pattern, item): - self["statuspic"].setPixmapNum(0) - else: - self["statuspic"].setPixmapNum(1) - self["statuspic"].show() + self.LinkState = None + for line in data.splitlines(): + line = line.strip() + if 'Link detected:' in line: + if "yes" in line: + self.LinkState = True + else: + self.LinkState = False + if self.LinkState == True: + iNetwork.checkNetworkState(self.checkNetworkCB) + else: + self["statuspic"].setPixmapNum(1) + self["statuspic"].show() def showErrorMessage(self): self.session.open(MessageBox, self.errortext, type = MessageBox.TYPE_INFO,timeout = 10 ) @@ -966,22 +965,45 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): def cleanup(self): iNetwork.stopLinkStateConsole() iNetwork.stopDeactivateInterfaceConsole() + iNetwork.stopActivateInterfaceConsole() + iNetwork.stopPingConsole() try: - from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus,Status + from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus except ImportError: pass else: iStatus.stopWlanConsole() def getInfoCB(self,data,status): + self.LinkState = None if data is not None: if data is True: if status is not None: - if status[self.iface]["acesspoint"] == "No Connection" or status[self.iface]["acesspoint"] == "Not-Associated" or status[self.iface]["acesspoint"] == False: + if status[self.iface]["essid"] == "off" or status[self.iface]["accesspoint"] == "Not-Associated" or status[self.iface]["accesspoint"] == False: + self.LinkState = False self["statuspic"].setPixmapNum(1) + self["statuspic"].show() else: + self.LinkState = True + iNetwork.checkNetworkState(self.checkNetworkCB) + + def checkNetworkCB(self,data): + try: + if iNetwork.getAdapterAttribute(self.iface, "up") is True: + if self.LinkState is True: + if data <= 2: self["statuspic"].setPixmapNum(0) + else: + self["statuspic"].setPixmapNum(1) self["statuspic"].show() + else: + self["statuspic"].setPixmapNum(1) + self["statuspic"].show() + else: + self["statuspic"].setPixmapNum(1) + self["statuspic"].show() + except: + pass class NetworkAdapterTest(Screen): def __init__(self, session,iface): @@ -1046,7 +1068,7 @@ class NetworkAdapterTest(Screen): self["infoshortcuts"].setEnabled(False) self["InfoText"].hide() self["InfoTextBorder"].hide() - self["ButtonRedtext"].setText(_("Close")) + self["key_red"].setText(_("Close")) def delTimer(self): del self.steptimer @@ -1134,8 +1156,7 @@ class NetworkAdapterTest(Screen): def doStep1(self): self.steptimer = True self.nextStepTimer.start(3000) - self["ButtonYellow_Check"].show() - self["ButtonYellowtext"].show() + self["key_yellow"].setText(_("Stop test")) def doStep2(self): self["Adapter"].setText(iNetwork.getFriendlyAdapterName(self.iface)) @@ -1185,8 +1206,8 @@ class NetworkAdapterTest(Screen): self["shortcutsgreen"].setEnabled(False) self["shortcutsyellow"].setEnabled(True) self["updown_actions"].setEnabled(False) - self["ButtonYellow_Check"].setPixmapNum(0) - self["ButtonGreen_Check"].setPixmapNum(1) + self["key_yellow"].setText("") + self["key_green"].setText("") self.steptimer = True self.nextStepTimer.start(1000) @@ -1207,8 +1228,8 @@ class NetworkAdapterTest(Screen): self["shortcutsgreen"].setEnabled(False) self["shortcutsyellow"].setEnabled(True) self["updown_actions"].setEnabled(False) - self["ButtonYellow_Check"].setPixmapNum(0) - self["ButtonGreen_Check"].setPixmapNum(1) + self["key_yellow"].setText("") + self["key_green"].setText("") self.steptimer = True self.nextStepTimer.start(1000) @@ -1219,27 +1240,27 @@ class NetworkAdapterTest(Screen): self["InfoText"].setText(_("This test detects your configured LAN-Adapter.")) self["InfoTextBorder"].show() self["InfoText"].show() - self["ButtonRedtext"].setText(_("Back")) + self["key_red"].setText(_("Back")) if self.activebutton == 2: #LAN Check self["InfoText"].setText(_("This test checks whether a network cable is connected to your LAN-Adapter.\nIf you get a \"disconnected\" message:\n- verify that a network cable is attached\n- verify that the cable is not broken")) self["InfoTextBorder"].show() self["InfoText"].show() - self["ButtonRedtext"].setText(_("Back")) + self["key_red"].setText(_("Back")) if self.activebutton == 3: #DHCP Check self["InfoText"].setText(_("This test checks whether your LAN Adapter is set up for automatic IP Address configuration with DHCP.\nIf you get a \"disabled\" message:\n - then your LAN Adapter is configured for manual IP Setup\n- verify thay you have entered correct IP informations in the AdapterSetup dialog.\nIf you get an \"enabeld\" message:\n-verify that you have a configured and working DHCP Server in your network.")) self["InfoTextBorder"].show() self["InfoText"].show() - self["ButtonRedtext"].setText(_("Back")) + self["key_red"].setText(_("Back")) if self.activebutton == 4: # IP Check self["InfoText"].setText(_("This test checks whether a valid IP Address is found for your LAN Adapter.\nIf you get a \"unconfirmed\" message:\n- no valid IP Address was found\n- please check your DHCP, cabling and adapter setup")) self["InfoTextBorder"].show() self["InfoText"].show() - self["ButtonRedtext"].setText(_("Back")) + self["key_red"].setText(_("Back")) if self.activebutton == 5: # DNS Check self["InfoText"].setText(_("This test checks for configured Nameservers.\nIf you get a \"unconfirmed\" message:\n- please check your DHCP, cabling and Adapter setup\n- if you configured your Nameservers manually please verify your entries in the \"Nameserver\" Configuration")) self["InfoTextBorder"].show() self["InfoText"].show() - self["ButtonRedtext"].setText(_("Back")) + self["key_red"].setText(_("Back")) if self.activebutton == 6: # Edit Settings self.session.open(AdapterSetup,self.iface) @@ -1248,13 +1269,13 @@ class NetworkAdapterTest(Screen): self["shortcutsgreen_restart"].setEnabled(True) self["shortcutsgreen"].setEnabled(False) self["shortcutsyellow"].setEnabled(False) - self["ButtonGreentext"].setText(_("Restart test")) - self["ButtonYellow_Check"].setPixmapNum(1) - self["ButtonGreen_Check"].setPixmapNum(0) + self["key_green"].setText(_("Restart test")) + self["key_yellow"].setText("") self.steptimer = False self.nextStepTimer.stop() def layoutFinished(self): + self.setTitle(_("Network test: ") + iNetwork.getFriendlyAdapterName(self.iface) ) self["shortcutsyellow"].setEnabled(False) self["AdapterInfo_OK"].hide() self["NetworkInfo_Check"].hide() @@ -1265,8 +1286,7 @@ class NetworkAdapterTest(Screen): self["EditSettingsButton"].hide() self["InfoText"].hide() self["InfoTextBorder"].hide() - self["ButtonYellow_Check"].hide() - self["ButtonYellowtext"].hide() + self["key_yellow"].setText("") def setLabels(self): self["Adaptertext"] = MultiColorLabel(_("LAN Adapter")) @@ -1275,7 +1295,7 @@ class NetworkAdapterTest(Screen): self["AdapterInfo_Text"] = MultiColorLabel(_("Show Info")) self["AdapterInfo_OK"] = Pixmap() - if self.iface == 'wlan0' or self.iface == 'ath0': + if self.iface in iNetwork.wlan_interfaces: self["Networktext"] = MultiColorLabel(_("Wireless Network")) else: self["Networktext"] = MultiColorLabel(_("Local Network")) @@ -1306,22 +1326,17 @@ class NetworkAdapterTest(Screen): self["EditSettings_Text"] = MultiColorLabel(_("Edit settings")) self["EditSettingsButton"] = MultiPixmap() - self["ButtonRedtext"] = Label(_("Close")) - self["ButtonRed"] = Pixmap() - - self["ButtonGreentext"] = Label(_("Start test")) - self["ButtonGreen_Check"] = MultiPixmap() - - self["ButtonYellowtext"] = Label(_("Stop test")) - self["ButtonYellow_Check"] = MultiPixmap() + self["key_red"] = StaticText(_("Close")) + self["key_green"] = StaticText(_("Start test")) + self["key_yellow"] = StaticText(_("Stop test")) self["InfoTextBorder"] = Pixmap() self["InfoText"] = Label() def getLinkState(self,iface): - if iface == 'wlan0' or iface == 'ath0': + if iface in iNetwork.wlan_interfaces: try: - from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus,Status + from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus except: self["Network"].setForegroundColorNum(1) self["Network"].setText(_("disconnected")) @@ -1334,7 +1349,7 @@ class NetworkAdapterTest(Screen): def LinkStatedataAvail(self,data): self.output = data.strip() - result = self.output.split('\n') + result = self.output.splitlines() pattern = re_compile("Link detected: yes") for item in result: if re_search(pattern, item): @@ -1376,9 +1391,8 @@ class NetworkAdapterTest(Screen): self["EditSettingsButton"].setPixmapNum(1) self["EditSettings_Text"].setForegroundColorNum(2) # active self["EditSettingsButton"].show() - self["ButtonYellow_Check"].setPixmapNum(1) - self["ButtonGreentext"].setText(_("Restart test")) - self["ButtonGreen_Check"].setPixmapNum(0) + self["key_yellow"].setText("") + self["key_green"].setText(_("Restart test")) self["shortcutsgreen"].setEnabled(False) self["shortcutsgreen_restart"].setEnabled(True) self["shortcutsyellow"].setEnabled(False) @@ -1389,7 +1403,7 @@ class NetworkAdapterTest(Screen): if data is not None: if data is True: if status is not None: - if status[self.iface]["acesspoint"] == "No Connection" or status[self.iface]["acesspoint"] == "Not-Associated" or status[self.iface]["acesspoint"] == False: + if status[self.iface]["essid"] == "off" or status[self.iface]["accesspoint"] == "Not-Associated" or status[self.iface]["accesspoint"] == False: self["Network"].setForegroundColorNum(1) self["Network"].setText(_("disconnected")) self["NetworkInfo_Check"].setPixmapNum(1) @@ -1404,9 +1418,9 @@ class NetworkAdapterTest(Screen): iNetwork.stopLinkStateConsole() iNetwork.stopDNSConsole() try: - from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus,Status + from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus except ImportError: pass else: iStatus.stopWlanConsole() - +