X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/4c2f2aa0d877022079e0670b9269cfe89c9ac8eb..b6c21aa27e2a782996c625bc6e85a466bd7c9932:/lib/python/Screens/NetworkSetup.py diff --git a/lib/python/Screens/NetworkSetup.py b/lib/python/Screens/NetworkSetup.py index be2a763d..1b054b52 100644 --- a/lib/python/Screens/NetworkSetup.py +++ b/lib/python/Screens/NetworkSetup.py @@ -1,50 +1,137 @@ from Screen import Screen from Components.ActionMap import ActionMap,NumberActionMap from Screens.MessageBox import MessageBox +from Screens.InputBox import InputBox from Screens.Standby import * -from Components.ConfigList import ConfigListScreen -from Components.config import config, getConfigListEntry from Components.Network import iNetwork -from Tools.Directories import resolveFilename 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, ConfigSelection, getConfigListEntry +from Components.config import config, ConfigYesNo, ConfigIP, NoSave, ConfigText, ConfigSelection, getConfigListEntry, ConfigNothing +from Components.ConfigList import ConfigListScreen from Components.PluginComponent import plugins +from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmapAlphaTest from Plugins.Plugin import PluginDescriptor from enigma import eTimer -from os import path as os_path +from os import path as os_path, system as os_system, unlink from re import compile as re_compile, search as re_search from Tools.Directories import resolveFilename, SCOPE_PLUGINS +from Tools.Directories import SCOPE_SKIN_IMAGE,SCOPE_PLUGINS, resolveFilename +from Tools.LoadPixmap import LoadPixmap +from enigma import RT_HALIGN_LEFT, eListboxPythonMultiContent, gFont + +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) ] + res.append(MultiContentEntryText(pos=(80, 5), size=(430, 25), font=0, text=name)) + 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): def __init__(self, session): Screen.__init__(self, session) - iNetwork.getInterfaces() + self.wlan_errortext = _("No working wireless networkadapter found.\nPlease verify that you have attached a compatible WLAN USB Stick and your Network is configured correctly.") self.lan_errortext = _("No working local networkadapter found.\nPlease verify that you have attached a network cable and your Network is configured correctly.") + + self["ButtonBluetext"] = Label(_("Set as default Interface")) + self["ButtonRedtext"] = Label(_("Close")) + self["introduction"] = Label(_("Press OK to edit the settings.")) + self.adapters = [(iNetwork.getFriendlyAdapterName(x),x) for x in iNetwork.getAdapterList()] + if len(self.adapters) == 0: self.onFirstExecBegin.append(self.NetworkFallback) - - self["adapterlist"] = MenuList(self.adapters) - self["actions"] = ActionMap(["OkCancelActions"], + + self.list = [] + self["list"] = InterfaceList(self.list) + self.updateList() + self["actions"] = ActionMap(["OkCancelActions", "ColorActions"], { "ok": self.okbuttonClick, - "cancel": self.close - }) + "cancel": self.close, + "blue": self.setDefaultInterface, + "red": self.close + }, -2) if len(self.adapters) == 1: self.onFirstExecBegin.append(self.okbuttonClick) + def updateList(self): + iNetwork.getInterfaces() + self.list = [] + default_gw = None + num_configured_if = len(iNetwork.configuredInterfaces) + if num_configured_if < 2 and os_path.exists("/etc/default_gw"): + unlink("/etc/default_gw") + + if os_path.exists("/etc/default_gw"): + fp = file('/etc/default_gw', 'r') + result = fp.read() + 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) + + def setDefaultInterface(self): + selection = self["list"].getCurrent() + num_if = len(self.list) + old_default_gw = None + if os_path.exists("/etc/default_gw"): + fp = open('/etc/default_gw', 'r') + old_default_gw = fp.read() + fp.close() + if num_if > 1 and (not old_default_gw or old_default_gw != selection[0]): + fp = open('/etc/default_gw', 'w+') + fp.write(selection[0]) + fp.close() + iNetwork.restartNetwork() + self.updateList() + elif old_default_gw and num_if < 2: + unlink("/etc/default_gw") + iNetwork.restartNetwork() + self.updateList() + def okbuttonClick(self): - selection = self["adapterlist"].getCurrent() + selection = self["list"].getCurrent() + print "selection",selection if selection is not None: - self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetupConfiguration, selection[1]) + self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetupConfiguration, selection[0]) def AdapterSetupClosed(self, *ret): if len(self.adapters) == 1: self.close() + else: + self.updateList() def NetworkFallback(self): if iNetwork.configuredInterfaces.has_key('wlan0') is True: @@ -143,61 +230,12 @@ class AdapterSetup(Screen, ConfigListScreen): self.essid = essid self.aplist = aplist self.extended = None + self.oldInterfaceState = iNetwork.getAdapterAttribute(self.iface, "up") iNetwork.getInterfaces() - if self.iface == "wlan0" or self.iface == "ath0" : - from Plugins.SystemPlugins.WirelessLan.Wlan import wpaSupplicant,Wlan - self.ws = wpaSupplicant() - list = [] - list.append(_("WEP")) - list.append(_("WPA")) - list.append(_("WPA2")) - if self.aplist is not None: - self.nwlist = self.aplist - self.nwlist.sort(key = lambda x: x[0]) - else: - self.nwlist = [] - self.w = None - self.aps = None - try: - self.w = Wlan(self.iface) - self.aps = self.w.getNetworkList() - if self.aps is not None: - print "[Wlan.py] got Accespoints!" - for ap in aps: - a = aps[ap] - if a['active']: - if a['essid'] == "": - a['essid'] = a['bssid'] - self.nwlist.append( a['essid']) - self.nwlist.sort(key = lambda x: x[0]) - except: - self.nwlist.append("No Networks found") - - wsconfig = self.ws.loadConfig() - default = self.essid or wsconfig['ssid'] - if default not in self.nwlist: - self.nwlist.append(default) - config.plugins.wlan.essid = NoSave(ConfigSelection(self.nwlist, default = default )) - config.plugins.wlan.encryption.enabled = NoSave(ConfigYesNo(default = wsconfig['encryption'] )) - config.plugins.wlan.encryption.type = NoSave(ConfigSelection(list, default = wsconfig['encryption_type'] )) - config.plugins.wlan.encryption.psk = NoSave(ConfigText(default = wsconfig['key'], fixed_size = False,visible_width = 30)) - - 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]) - self.netmaskConfigEntry = NoSave(ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "netmask") or [255,0,0,0])) - if iNetwork.getAdapterAttribute(self.iface, "gateway"): - self.dhcpdefault=True - else: - 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])) - nameserver = (iNetwork.getNameserverList() + [[0,0,0,0]] * 2)[0:2] - self.primaryDNS = NoSave(ConfigIP(default=nameserver[0])) - self.secondaryDNS = NoSave(ConfigIP(default=nameserver[1])) + self.createConfig() - self["actions"] = ActionMap(["SetupActions","ShortcutActions"], + self["actions"] = NumberActionMap(["SetupActions", "ColorActions"], { "ok": self.ok, "cancel": self.cancel, @@ -206,7 +244,7 @@ class AdapterSetup(Screen, ConfigListScreen): }, -2) self.list = [] - ConfigListScreen.__init__(self, self.list) + ConfigListScreen.__init__(self, self.list,session = self.session) self.createSetup() self.onLayoutFinish.append(self.layoutFinished) @@ -249,10 +287,79 @@ class AdapterSetup(Screen, ConfigListScreen): self["Gatewaytext"].hide() self["Adapter"].setText(iNetwork.getFriendlyAdapterName(self.iface)) + def createConfig(self): + self.InterfaceEntry = None + self.dhcpEntry = None + self.gatewayEntry = None + self.SSIDscan = None + self.wlanSSID = None + self.manualwlanSSID = None + self.encryptionEnabled = None + self.encryptionKey = None + self.nwlist = None + self.wsconfig = None + self.default = None + + if self.iface == "wlan0" or self.iface == "ath0" : + from Plugins.SystemPlugins.WirelessLan.Wlan import wpaSupplicant,Wlan + self.ws = wpaSupplicant() + list = [] + list.append(_("WEP")) + list.append(_("WPA")) + list.append(_("WPA2")) + if self.aplist is not None: + self.nwlist = self.aplist + self.nwlist.sort(key = lambda x: x[0]) + else: + self.nwlist = [] + self.w = None + self.aps = None + try: + self.w = Wlan(self.iface) + self.aps = self.w.getNetworkList() + if self.aps is not None: + print "[NetworkSetup.py] got Accespoints!" + for ap in aps: + a = aps[ap] + if a['active']: + if a['essid'] == "": + a['essid'] = a['bssid'] + self.nwlist.append( a['essid']) + self.nwlist.sort(key = lambda x: x[0]) + except: + self.nwlist.append("No Networks found") + + self.wsconfig = self.ws.loadConfig() + self.default = self.essid or self.wsconfig['ssid'] + if self.default not in self.nwlist: + self.nwlist.append(self.default) + config.plugins.wlan.essidscan = NoSave(ConfigYesNo(default = self.wsconfig['ssidscan'])) + if self.wsconfig['ssidscan'] is True: + config.plugins.wlan.essid = NoSave(ConfigSelection(self.nwlist, default = self.default )) + else: + config.plugins.wlan.essid = NoSave(ConfigText(default = self.default, visible_width = 50, fixed_size = False)) + config.plugins.wlan.encryption.enabled = NoSave(ConfigYesNo(default = self.wsconfig['encryption'] )) + config.plugins.wlan.encryption.type = NoSave(ConfigSelection(list, default = self.wsconfig['encryption_type'] )) + config.plugins.wlan.encryption.psk = NoSave(ConfigText(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]) + self.netmaskConfigEntry = NoSave(ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "netmask") or [255,0,0,0])) + if iNetwork.getAdapterAttribute(self.iface, "gateway"): + self.dhcpdefault=True + else: + 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])) + nameserver = (iNetwork.getNameserverList() + [[0,0,0,0]] * 2)[0:2] + self.primaryDNS = NoSave(ConfigIP(default=nameserver[0])) + self.secondaryDNS = NoSave(ConfigIP(default=nameserver[1])) 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) @@ -260,26 +367,32 @@ class AdapterSetup(Screen, ConfigListScreen): if not self.dhcpConfigEntry.value: self.list.append(getConfigListEntry(_('IP Address'), self.ipConfigEntry)) self.list.append(getConfigListEntry(_('Netmask'), self.netmaskConfigEntry)) - self.list.append(getConfigListEntry(_('Use a gateway'), self.hasGatewayConfigEntry)) + self.gatewayEntry = getConfigListEntry(_('Use a gateway'), self.hasGatewayConfigEntry) + self.list.append(self.gatewayEntry) if self.hasGatewayConfigEntry.value: self.list.append(getConfigListEntry(_('Gateway'), self.gatewayConfigEntry)) - + + self.extended = None for p in plugins.getPlugins(PluginDescriptor.WHERE_NETWORKSETUP): callFnc = p.__call__["ifaceSupported"](self.iface) if callFnc is not None: - self.extended = callFnc - if p.__call__.has_key("configStrings"): - self.configStrings = p.__call__["configStrings"] - else: - self.configStrings = None + if p.__call__.has_key("WlanPluginEntry"): # internally used only for WLAN Plugin + self.extended = callFnc + if p.__call__.has_key("configStrings"): + self.configStrings = p.__call__["configStrings"] + else: + self.configStrings = None + self.SSIDscan = getConfigListEntry(_("Automatic SSID lookup"), config.plugins.wlan.essidscan) + self.list.append(self.SSIDscan) + 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.list.append(getConfigListEntry(_("Network SSID"), config.plugins.wlan.essid)) - self.encryptionEnabled = getConfigListEntry(_("Encryption"), config.plugins.wlan.encryption.enabled) - self.list.append(self.encryptionEnabled) - - if config.plugins.wlan.encryption.enabled.value: - self.list.append(getConfigListEntry(_("Encryption Type"), config.plugins.wlan.encryption.type)) - self.list.append(getConfigListEntry(_("Encryption Key"), config.plugins.wlan.encryption.psk)) + if config.plugins.wlan.encryption.enabled.value: + self.list.append(getConfigListEntry(_("Encryption Type"), config.plugins.wlan.encryption.type)) + self.encryptionKey = getConfigListEntry(_("Encryption Key"), config.plugins.wlan.encryption.psk) + self.list.append(self.encryptionKey) self["config"].list = self.list self["config"].l.setList(self.list) @@ -289,43 +402,52 @@ class AdapterSetup(Screen, ConfigListScreen): def newConfig(self): print self["config"].getCurrent() + if self["config"].getCurrent() == self.InterfaceEntry: + self.createSetup() if self["config"].getCurrent() == self.dhcpEntry: self.createSetup() - + if self["config"].getCurrent() == self.gatewayEntry: + self.createSetup() + if self.iface == "wlan0" or self.iface == "ath0" : + if self["config"].getCurrent() == self.SSIDscan: + if config.plugins.wlan.essidscan.value is True: + config.plugins.wlan.essid = NoSave(ConfigSelection(self.nwlist, default = self.default )) + else: + config.plugins.wlan.essid = NoSave(ConfigText(default = self.default, visible_width = 50, fixed_size = False)) + self.createSetup() + if self["config"].getCurrent() == self.encryptionEnabled: + self.createSetup() + def keyLeft(self): ConfigListScreen.keyLeft(self) - self.createSetup() + self.newConfig() def keyRight(self): ConfigListScreen.keyRight(self) - self.createSetup() + self.newConfig() def ok(self): iNetwork.setAdapterAttribute(self.iface, "up", self.activateInterfaceEntry.value) - if self.activateInterfaceEntry.value is True: - iNetwork.setAdapterAttribute(self.iface, "dhcp", self.dhcpConfigEntry.value) - iNetwork.setAdapterAttribute(self.iface, "ip", self.ipConfigEntry.value) - iNetwork.setAdapterAttribute(self.iface, "netmask", self.netmaskConfigEntry.value) - if self.hasGatewayConfigEntry.value: - 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: - iNetwork.setAdapterAttribute(self.iface, "configStrings", self.configStrings(self.iface)) - self.ws.writeConfig() + iNetwork.setAdapterAttribute(self.iface, "dhcp", self.dhcpConfigEntry.value) + iNetwork.setAdapterAttribute(self.iface, "ip", self.ipConfigEntry.value) + iNetwork.setAdapterAttribute(self.iface, "netmask", self.netmaskConfigEntry.value) + if self.hasGatewayConfigEntry.value: + iNetwork.setAdapterAttribute(self.iface, "gateway", self.gatewayConfigEntry.value) else: - iNetwork.removeAdapterAttribute(self.iface, "ip") - iNetwork.removeAdapterAttribute(self.iface, "netmask") iNetwork.removeAdapterAttribute(self.iface, "gateway") + if self.extended is not None and self.configStrings is not None: + iNetwork.setAdapterAttribute(self.iface, "configStrings", self.configStrings(self.iface)) + self.ws.writeConfig() + if self.activateInterfaceEntry.value is False: iNetwork.deactivateInterface(self.iface) - - iNetwork.deactivateNetworkConfig() iNetwork.writeNetworkConfig() + iNetwork.deactivateNetworkConfig() iNetwork.activateNetworkConfig() self.close() def cancel(self): + iNetwork.setAdapterAttribute(self.iface, "up", self.oldInterfaceState) + self.activateInterfaceEntry.value = self.oldInterfaceState if self.activateInterfaceEntry.value is False: iNetwork.deactivateInterface(self.iface) iNetwork.getInterfaces() @@ -381,8 +503,6 @@ class AdapterSetupConfiguration(Screen): self.updateStatusbar() def ok(self): - print "SELF.iFACE im OK Klick",self.iface - print "self.menulist.getCurrent()[1]",self["menulist"].getCurrent()[1] if self["menulist"].getCurrent()[1] == 'edit': if self.iface == 'wlan0' or self.iface == 'ath0': try: @@ -428,7 +548,8 @@ class AdapterSetupConfiguration(Screen): ifobj = Wireless(self.iface) # a Wireless NIC Object self.wlanresponse = ifobj.getStatistics() if self.wlanresponse[0] != 19: - self.session.open(WlanStatus,self.iface) + self.session.openWithCallback(self.AdapterSetupClosed, WlanStatus,self.iface) + #self.session.open(WlanStatus,self.iface) else: # Display Wlan not available Message self.showErrorMessage() @@ -437,6 +558,9 @@ class AdapterSetupConfiguration(Screen): if self["menulist"].getCurrent()[1] == 'openwizard': from Plugins.SystemPlugins.NetworkWizard.NetworkWizard import NetworkWizard self.session.openWithCallback(self.AdapterSetupClosed, NetworkWizard) + if self["menulist"].getCurrent()[1][0] == 'extendedSetup': + self.extended = self["menulist"].getCurrent()[1][2] + self.extended(self.session, self.iface) def up(self): self["menulist"].up() @@ -474,7 +598,9 @@ class AdapterSetupConfiguration(Screen): self["description"].setText(_("Restart your network connection and interfaces.\n" ) + self.oktext ) if self["menulist"].getCurrent()[1] == 'openwizard': self["description"].setText(_("Use the Networkwizard to configure your Network\n" ) + self.oktext ) - + if self["menulist"].getCurrent()[1][0] == 'extendedSetup': + self["description"].setText(_(self["menulist"].getCurrent()[1][1]) + self.oktext ) + def updateStatusbar(self): self["IFtext"].setText(_("Network:")) self["IF"].setText(iNetwork.getFriendlyAdapterName(self.iface)) @@ -505,16 +631,33 @@ class AdapterSetupConfiguration(Screen): menu.append((_("Nameserver settings"), "dns")) menu.append((_("Network test"), "test")) menu.append((_("Restart network"), "lanrestart")) - + + self.extended = None + self.extendedSetup = None for p in plugins.getPlugins(PluginDescriptor.WHERE_NETWORKSETUP): callFnc = p.__call__["ifaceSupported"](self.iface) if callFnc is not None: - menu.append((_("Scan Wireless Networks"), "scanwlan")) - if iNetwork.getAdapterAttribute(self.iface, "up"): - menu.append((_("Show WLAN Status"), "wlanstatus")) - + 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"): + menu.append((_("Show WLAN Status"), "wlanstatus")) + else: + if p.__call__.has_key("menuEntryName"): + menuEntryName = p.__call__["menuEntryName"](self.iface) + else: + menuEntryName = _('Extended Setup...') + if p.__call__.has_key("menuEntryDescription"): + menuEntryDescription = p.__call__["menuEntryDescription"](self.iface) + else: + menuEntryDescription = _('Extended Networksetup Plugin...') + self.extendedSetup = ('extendedSetup',menuEntryDescription, self.extended) + menu.append((menuEntryName,self.extendedSetup)) + if os_path.exists(resolveFilename(SCOPE_PLUGINS, "SystemPlugins/NetworkWizard/networkwizard.xml")): - menu.append((_("NetworkWizard"), "openwizard")); + menu.append((_("NetworkWizard"), "openwizard")) + return menu def AdapterSetupClosed(self, *ret): @@ -695,6 +838,8 @@ class NetworkAdapterTest(Screen): def doStep1(self): self.steptimer = True self.nextStepTimer.start(3000) + self["ButtonYellow_Check"].show() + self["ButtonYellowtext"].show() def doStep2(self): self["Adapter"].setText(iNetwork.getFriendlyAdapterName(self.iface)) @@ -856,6 +1001,8 @@ class NetworkAdapterTest(Screen): self["EditSettingsButton"].hide() self["InfoText"].hide() self["InfoTextBorder"].hide() + self["ButtonYellow_Check"].hide() + self["ButtonYellowtext"].hide() def setLabels(self): self["Adaptertext"] = MultiColorLabel(_("LAN Adapter"))