from Screens.Wizard import wizardManager, WizardSummary from Screens.WizardLanguage import WizardLanguage from Screens.Rc import Rc from Screens.MessageBox import MessageBox from Components.Pixmap import Pixmap, MovingPixmap, MultiPixmap from Components.Sources.Boolean import Boolean from Components.Network import iNetwork from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE from enigma import eTimer from os import system class NetworkWizard(WizardLanguage, Rc): skin = """ """ def __init__(self, session, interface = None): self.xmlfile = resolveFilename(SCOPE_PLUGINS, "SystemPlugins/NetworkWizard/networkwizard.xml") WizardLanguage.__init__(self, session, showSteps = False, showStepSlider = False) Rc.__init__(self) self.session = session self["wizard"] = Pixmap() self["HelpWindow"] = Pixmap() self["HelpWindow"].hide() self["VKeyIcon"] = Boolean(False) self.InstalledInterfaceCount = None self.Adapterlist = None self.InterfaceState = None self.isInterfaceUp = None self.WlanPluginInstalled = False self.ap = None self.w = None if interface is not None: self.selectedInterface = interface else: self.selectedInterface = None self.NextStep = None self.resetRef = None self.checkRef = None self.AdapterRef = None self.APList = None self.newAPlist = None self.WlanList = None self.oldlist = None self.originalInterfaceState = {} self.originalInterfaceStateChanged = False self.Text = None self.rescanTimer = eTimer() self.rescanTimer.callback.append(self.rescanTimerFired) self.getInstalledInterfaceCount() self.isWlanPluginInstalled() def exitWizardQuestion(self, ret = False): if (ret): self.markDone() self.close() def markDone(self): self.stopScan() del self.rescanTimer self.checkOldInterfaceState() pass def stopScan(self): self.rescanTimer.stop() if self.w is not None: from Plugins.SystemPlugins.WirelessLan.Wlan import iWlan iWlan.stopGetNetworkList() self.w = None def getInstalledInterfaceCount(self): self.originalInterfaceState = {} self.stopScan() self.Adapterlist = iNetwork.getAdapterList() self.InstalledInterfaceCount = len(self.Adapterlist) if self.Adapterlist is not None: if self.InstalledInterfaceCount == 1 and self.selectedInterface is None: self.selectedInterface = self.Adapterlist[0] for interface in iNetwork.getAdapterList(): self.originalInterfaceState[interface] = {} self.originalInterfaceState[interface]["up"] = iNetwork.getAdapterAttribute(interface, 'up') def selectInterface(self): self.InterfaceState = None if self.selectedInterface is None: if self.InstalledInterfaceCount <= 1: if not iNetwork.isWirelessInterface(self.selectedInterface): self.NextStep = 'nwconfig' else: self.NextStep = 'scanwlan' self.checkInterface(self.selectedInterface) else: self.NextStep = 'selectinterface' self.currStep = self.getStepWithID(self.NextStep) self.afterAsyncCode() else: if not iNetwork.isWirelessInterface(self.selectedInterface): self.NextStep = 'nwconfig' else: self.NextStep = 'scanwlan' self.checkInterface(self.selectedInterface) def checkOldInterfaceState(self): # disable up interface if it was originally down and config is unchanged. if self.originalInterfaceStateChanged is False: for interface in self.originalInterfaceState.keys(): if self.originalInterfaceState[interface]["up"] is False: if iNetwork.checkforInterface(interface) is True: system("ifconfig " + interface + " down") def listInterfaces(self): self.stopScan() self.checkOldInterfaceState() list = [(iNetwork.getFriendlyAdapterName(x),x) for x in iNetwork.getAdapterList()] list.append((_("Exit network wizard"), "end")) return list def InterfaceSelectionMade(self, index): self.selectedInterface = index self.InterfaceSelect(index) def InterfaceSelect(self, index): if index == 'end': self.NextStep = 'end' elif index == 'eth0': self.NextStep = 'nwconfig' else: self.NextStep = 'scanwlan' def InterfaceSelectionMoved(self): self.InterfaceSelect(self.selection) def checkInterface(self,iface): self.stopScan() if self.Adapterlist is None: self.Adapterlist = iNetwork.getAdapterList() if self.NextStep is not 'end': if len(self.Adapterlist) == 0: #Reset Network to defaults if network broken iNetwork.resetNetworkConfig('lan', self.resetNetworkConfigCB) self.resetRef = self.session.openWithCallback(self.resetNetworkConfigFinished, MessageBox, _("Please wait while we prepare your network interfaces..."), type = MessageBox.TYPE_INFO, enable_input = False) if iface in iNetwork.getInstalledAdapters(): if iface in iNetwork.configuredNetworkAdapters and len(iNetwork.configuredNetworkAdapters) == 1: if iNetwork.getAdapterAttribute(iface, 'up') is True: self.isInterfaceUp = True else: self.isInterfaceUp = False self.currStep = self.getStepWithID(self.NextStep) self.afterAsyncCode() else: self.isInterfaceUp = iNetwork.checkforInterface(iface) self.currStep = self.getStepWithID(self.NextStep) self.afterAsyncCode() else: self.resetNetworkConfigFinished(False) def resetNetworkConfigFinished(self,data): if data is True: self.currStep = self.getStepWithID(self.NextStep) self.afterAsyncCode() else: self.currStep = self.getStepWithID(self.NextStep) self.afterAsyncCode() def resetNetworkConfigCB(self,callback,iface): if callback is not None: if callback is True: iNetwork.getInterfaces(self.getInterfacesFinished) def getInterfacesFinished(self, data): if data is True: if iNetwork.getAdapterAttribute(self.selectedInterface, 'up') is True: self.isInterfaceUp = True else: self.isInterfaceUp = False self.resetRef.close(True) else: print "we should never come here!" def AdapterSetupEnd(self, iface): self.originalInterfaceStateChanged = True if iNetwork.getAdapterAttribute(iface, "dhcp") is True: iNetwork.checkNetworkState(self.AdapterSetupEndFinished) self.AdapterRef = self.session.openWithCallback(self.AdapterSetupEndCB, MessageBox, _("Please wait while we test your network..."), type = MessageBox.TYPE_INFO, enable_input = False) else: self.currStep = self.getStepWithID("confdns") self.afterAsyncCode() def AdapterSetupEndCB(self,data): if data is True: if iNetwork.isWirelessInterface(self.selectedInterface): if self.WlanPluginInstalled == True: from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus iStatus.getDataForInterface(self.selectedInterface,self.checkWlanStateCB) else: self.currStep = self.getStepWithID("checklanstatusend") self.afterAsyncCode() else: self.currStep = self.getStepWithID("checklanstatusend") self.afterAsyncCode() def AdapterSetupEndFinished(self,data): if data <= 2: self.InterfaceState = True else: self.InterfaceState = False self.AdapterRef.close(True) def checkWlanStateCB(self,data,status): if data is not None: if data is True: if status is not None: text1 = _("Your Dreambox is now ready to use.\n\nYour internet connection is working now.\n\n") text2 = _('Accesspoint:') + "\t" + str(status[self.selectedInterface]["acesspoint"]) + "\n" text3 = _('SSID:') + "\t" + str(status[self.selectedInterface]["essid"]) + "\n" text4 = _('Link Quality:') + "\t" + str(status[self.selectedInterface]["quality"])+ "\n" text5 = _('Signal Strength:') + "\t" + str(status[self.selectedInterface]["signal"]) + "\n" text6 = _('Bitrate:') + "\t" + str(status[self.selectedInterface]["bitrate"]) + "\n" text7 = _('Encryption:') + " " + str(status[self.selectedInterface]["encryption"]) + "\n" text8 = _("Please press OK to continue.") infotext = text1 + text2 + text3 + text4 + text5 + text7 +"\n" + text8 self.currStep = self.getStepWithID("checkWlanstatusend") self.Text = infotext if str(status[self.selectedInterface]["acesspoint"]) == "Not-Associated": self.InterfaceState = False self.afterAsyncCode() def checkNetwork(self): iNetwork.checkNetworkState(self.checkNetworkStateCB) self.checkRef = self.session.openWithCallback(self.checkNetworkCB, MessageBox, _("Please wait while we test your network..."), type = MessageBox.TYPE_INFO, enable_input = False) def checkNetworkCB(self,data): if data is True: if iNetwork.isWirelessInterface(self.selectedInterface): if self.WlanPluginInstalled == True: from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus iStatus.getDataForInterface(self.selectedInterface,self.checkWlanStateCB) else: self.currStep = self.getStepWithID("checklanstatusend") self.afterAsyncCode() else: self.currStep = self.getStepWithID("checklanstatusend") self.afterAsyncCode() def checkNetworkStateCB(self,data): if data <= 2: self.InterfaceState = True else: self.InterfaceState = False self.checkRef.close(True) def rescanTimerFired(self): self.rescanTimer.stop() self.updateAPList() def updateAPList(self): self.oldlist = self.APList self.newAPlist = [] newList = [] newListIndex = None currentListEntry = None newList = self.listAccessPoints() for oldentry in self.oldlist: if oldentry not in newList: newList.append(oldentry) for newentry in newList: if newentry[1] == "": continue self.newAPlist.append(newentry) if len(self.newAPlist): if "" not in self.newAPlist: self.newAPlist.append(( _("enter hidden network SSID"), "" )) if (self.wizard[self.currStep].has_key("dynamiclist")): currentListEntry = self["list"].getCurrent() idx = 0 for entry in self.newAPlist: if entry == currentListEntry: newListIndex = idx idx +=1 self.wizard[self.currStep]["evaluatedlist"] = self.newAPlist self['list'].setList(self.newAPlist) self["list"].setIndex(newListIndex) self["list"].updateList(self.newAPlist) def listAccessPoints(self): self.APList = [] if self.WlanPluginInstalled is False: self.APList.append( ( _("No networks found"),_("unavailable") ) ) return self.APList else: try: from Plugins.SystemPlugins.WirelessLan.Wlan import iWlan iWlan.setInterface(self.selectedInterface) self.w = iWlan.getInterface() aps = iWlan.getNetworkList() except ValueError: self.APList = [] self.APList.append( ( _("No networks found"),_("unavailable") ) ) return self.APList if aps is not None: print "[NetworkWizard.py] got Accespoints!" tmplist = [] complist = [] for ap in aps: a = aps[ap] if a['active']: tmplist.append( (a['bssid'], a['essid']) ) complist.append( (a['bssid'], a['essid']) ) for entry in tmplist: if entry[1] == "": for compentry in complist: if compentry[0] == entry[0]: complist.remove(compentry) for entry in complist: self.APList.append( (entry[1], entry[1]) ) if "" not in self.APList: self.APList.append(( _("enter hidden network SSID"), "" )) self.rescanTimer.start(5000) return self.APList def AccessPointsSelectionMade(self, index): self.ap = index self.WlanList = [] if (self.wizard[self.currStep].has_key("dynamiclist")): for entry in self['list'].list: if entry[1] == "": continue self.WlanList.append( (entry[1], entry[0]) ) self.AccessPointsSelect(index) def AccessPointsSelect(self, index): self.NextStep = 'wlanconfig' def AccessPointsSelectionMoved(self): self.AccessPointsSelect(self.selection) def checkWlanSelection(self): self.stopScan() self.currStep = self.getStepWithID(self.NextStep) def isWlanPluginInstalled(self): try: from Plugins.SystemPlugins.WirelessLan.Wlan import iWlan except ImportError: self.WlanPluginInstalled = False else: self.WlanPluginInstalled = True def listChoices(self): self.stopScan() list = [] if self.WlanPluginInstalled == True: list.append((_("Configure your wireless LAN again"), "scanwlan")) list.append((_("Configure your internal LAN"), "nwconfig")) list.append((_("Exit network wizard"), "end")) return list def ChoicesSelectionMade(self, index): self.ChoicesSelect(index) def ChoicesSelect(self, index): if index == 'end': self.NextStep = 'end' elif index == 'nwconfig': self.selectedInterface = "eth0" self.NextStep = 'nwconfig' else: self.NextStep = 'scanwlan' def ChoicesSelectionMoved(self): pass