Screens/NetworkSetup.py, SystemPlugins/WirelessLan,Networkwizard: dont use "hidden...
[enigma2.git] / lib / python / Plugins / SystemPlugins / NetworkWizard / NetworkWizard.py
index 13e7fdde3f2afaeb65e9792f75b0f4b2f05f974c..9f2540665da857bf931d8c58641eefebfe164178 100755 (executable)
@@ -4,31 +4,10 @@ from Screens.Rc import Rc
 from Screens.MessageBox import MessageBox
 from Components.Pixmap import Pixmap, MovingPixmap, MultiPixmap
 from Components.Sources.Boolean import Boolean
 from Screens.MessageBox import MessageBox
 from Components.Pixmap import Pixmap, MovingPixmap, MultiPixmap
 from Components.Sources.Boolean import Boolean
-from Components.config import config, ConfigBoolean, configfile, ConfigYesNo, NoSave, ConfigSubsection, ConfigText, getConfigListEntry, ConfigSelection, ConfigPassword
 from Components.Network import iNetwork
 from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE
 from enigma import eTimer
 from Components.Network import iNetwork
 from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE
 from enigma import eTimer
-
-config.misc.firstrun = ConfigBoolean(default = True)
-list = []
-list.append("WEP")
-list.append("WPA")
-list.append("WPA2")
-list.append("WPA/WPA2")
-
-weplist = []
-weplist.append("ASCII")
-weplist.append("HEX")
-
-config.plugins.wlan = ConfigSubsection()
-config.plugins.wlan.essid = NoSave(ConfigText(default = "home", fixed_size = False))
-config.plugins.wlan.hiddenessid = NoSave(ConfigText(default = "home", fixed_size = False))
-
-config.plugins.wlan.encryption = ConfigSubsection()
-config.plugins.wlan.encryption.enabled = NoSave(ConfigYesNo(default = False))
-config.plugins.wlan.encryption.type = NoSave(ConfigSelection(list, default = "WPA/WPA2" ))
-config.plugins.wlan.encryption.wepkeytype = NoSave(ConfigSelection(weplist, default = "ASCII"))
-config.plugins.wlan.encryption.psk = NoSave(ConfigPassword(default = "mysecurewlan", fixed_size = False))
+from os import system
 
 class NetworkWizard(WizardLanguage, Rc):
        skin = """
 
 class NetworkWizard(WizardLanguage, Rc):
        skin = """
@@ -51,7 +30,7 @@ class NetworkWizard(WizardLanguage, Rc):
                        </widget>
                        <widget name="HelpWindow" pixmap="skin_default/buttons/key_text.png" position="125,170" zPosition="1" size="1,1" transparent="1" alphatest="on" />      
                </screen>"""
                        </widget>
                        <widget name="HelpWindow" pixmap="skin_default/buttons/key_text.png" position="125,170" zPosition="1" size="1,1" transparent="1" alphatest="on" />      
                </screen>"""
-       def __init__(self, session):
+       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.xmlfile = resolveFilename(SCOPE_PLUGINS, "SystemPlugins/NetworkWizard/networkwizard.xml")
                WizardLanguage.__init__(self, session, showSteps = False, showStepSlider = False)
                Rc.__init__(self)
@@ -65,9 +44,13 @@ class NetworkWizard(WizardLanguage, Rc):
                self.Adapterlist = None
                self.InterfaceState = None
                self.isInterfaceUp = None
                self.Adapterlist = None
                self.InterfaceState = None
                self.isInterfaceUp = None
-               self.WlanPluginInstalled = None
+               self.WlanPluginInstalled = False
                self.ap = None
                self.ap = None
-               self.selectedInterface = 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.NextStep = None
                self.resetRef = None
                self.checkRef = None
@@ -76,9 +59,8 @@ class NetworkWizard(WizardLanguage, Rc):
                self.newAPlist = None
                self.WlanList = None
                self.oldlist = None
                self.newAPlist = None
                self.WlanList = None
                self.oldlist = None
-               self.originalAth0State = None
-               self.originalEth0State = None
-               self.originalWlan0State = None
+               
+               self.originalInterfaceState = {}
                self.originalInterfaceStateChanged = False
                self.Text = None
                self.rescanTimer = eTimer()
                self.originalInterfaceStateChanged = False
                self.Text = None
                self.rescanTimer = eTimer()
@@ -92,32 +74,60 @@ class NetworkWizard(WizardLanguage, Rc):
                        self.close()
                
        def markDone(self):
                        self.close()
                
        def markDone(self):
-               self.rescanTimer.stop()
+               self.stopScan()
                del self.rescanTimer
                del self.rescanTimer
+               self.checkOldInterfaceState()
                pass
 
                pass
 
-       def getInstalledInterfaceCount(self):
+       def stopScan(self):
                self.rescanTimer.stop()
                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)
                self.Adapterlist = iNetwork.getAdapterList()
                self.InstalledInterfaceCount = len(self.Adapterlist)
-               self.originalAth0State = iNetwork.getAdapterAttribute('ath0', 'up')
-               self.originalEth0State = iNetwork.getAdapterAttribute('eth0', 'up')
-               self.originalWlan0State = iNetwork.getAdapterAttribute('wlan0', 'up')
+               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.
 
        def checkOldInterfaceState(self):
                # disable up interface if it was originally down and config is unchanged.
-               if self.originalAth0State is False and self.originalInterfaceStateChanged is False:
-                       if iNetwork.checkforInterface('ath0') is True:
-                               iNetwork.deactivateInterface('ath0')            
-               if self.originalEth0State is False and self.originalInterfaceStateChanged is False:
-                       if iNetwork.checkforInterface('eth0') is True:
-                               iNetwork.deactivateInterface('eth0')
-               if self.originalWlan0State is False and self.originalInterfaceStateChanged is False:
-                       if iNetwork.checkforInterface('wlan0') is True:
-                               iNetwork.deactivateInterface('wlan0')
+               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):
 
        def listInterfaces(self):
-               self.rescanTimer.stop()
+               self.stopScan()
                self.checkOldInterfaceState()
                list = [(iNetwork.getFriendlyAdapterName(x),x) for x in iNetwork.getAdapterList()]
                list.append((_("Exit network wizard"), "end"))
                self.checkOldInterfaceState()
                list = [(iNetwork.getFriendlyAdapterName(x),x) for x in iNetwork.getAdapterList()]
                list.append((_("Exit network wizard"), "end"))
@@ -139,7 +149,7 @@ class NetworkWizard(WizardLanguage, Rc):
                self.InterfaceSelect(self.selection)
                
        def checkInterface(self,iface):
                self.InterfaceSelect(self.selection)
                
        def checkInterface(self,iface):
-               self.rescanTimer.stop()
+               self.stopScan()
                if self.Adapterlist is None:
                        self.Adapterlist = iNetwork.getAdapterList()
                if self.NextStep is not 'end':
                if self.Adapterlist is None:
                        self.Adapterlist = iNetwork.getAdapterList()
                if self.NextStep is not 'end':
@@ -147,7 +157,7 @@ class NetworkWizard(WizardLanguage, Rc):
                                #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)
                                #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 ('eth0', 'wlan0', 'ath0'):
+                       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
                                if iface in iNetwork.configuredNetworkAdapters and len(iNetwork.configuredNetworkAdapters) == 1:
                                        if iNetwork.getAdapterAttribute(iface, 'up') is True:
                                                self.isInterfaceUp = True
@@ -196,7 +206,7 @@ class NetworkWizard(WizardLanguage, Rc):
 
        def AdapterSetupEndCB(self,data):
                if data is True:
 
        def AdapterSetupEndCB(self,data):
                if data is True:
-                       if self.selectedInterface in ('wlan0', 'ath0'):
+                       if iNetwork.isWirelessInterface(self.selectedInterface):
                                if self.WlanPluginInstalled == True:
                                        from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus
                                        iStatus.getDataForInterface(self.selectedInterface,self.checkWlanStateCB)
                                if self.WlanPluginInstalled == True:
                                        from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus
                                        iStatus.getDataForInterface(self.selectedInterface,self.checkWlanStateCB)
@@ -219,16 +229,18 @@ class NetworkWizard(WizardLanguage, Rc):
                        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")
                        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" + status[self.selectedInterface]["acesspoint"] + "\n"
-                                       text3 = _('SSID:') + "\t" + status[self.selectedInterface]["essid"] + "\n"
-                                       text4 = _('Link Quality:') + "\t" + status[self.selectedInterface]["quality"]+"%" + "\n"
-                                       text5 = _('Signal Strength:') + "\t" + status[self.selectedInterface]["signal"] + "\n"
-                                       text6 = _('Bitrate:') + "\t" + status[self.selectedInterface]["bitrate"] + "\n"
-                                       text7 = _('Encryption:') + " " + status[self.selectedInterface]["encryption"] + "\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
                                        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):
                                        self.afterAsyncCode()
 
        def checkNetwork(self):
@@ -237,7 +249,7 @@ class NetworkWizard(WizardLanguage, Rc):
 
        def checkNetworkCB(self,data):
                if data is True:
 
        def checkNetworkCB(self,data):
                if data is True:
-                       if self.selectedInterface in ('wlan0', 'ath0'):
+                       if iNetwork.isWirelessInterface(self.selectedInterface):
                                if self.WlanPluginInstalled == True:
                                        from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus
                                        iStatus.getDataForInterface(self.selectedInterface,self.checkWlanStateCB)
                                if self.WlanPluginInstalled == True:
                                        from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus
                                        iStatus.getDataForInterface(self.selectedInterface,self.checkWlanStateCB)
@@ -272,13 +284,13 @@ class NetworkWizard(WizardLanguage, Rc):
                                newList.append(oldentry)
                                
                for newentry in newList:
                                newList.append(oldentry)
                                
                for newentry in newList:
-                       if newentry[1] == "hidden...":
+                       if newentry[1] == "<hidden>":
                                continue
                        self.newAPlist.append(newentry)
                
                if len(self.newAPlist):
                                continue
                        self.newAPlist.append(newentry)
                
                if len(self.newAPlist):
-                       if "hidden..." not in self.newAPlist:
-                               self.newAPlist.append(( _("enter hidden network SSID"), "hidden..." ))
+                       if "<hidden>" not in self.newAPlist:
+                               self.newAPlist.append(( _("enter hidden network SSID"), "<hidden>" ))
 
                        if (self.wizard[self.currStep].has_key("dynamiclist")):
                                currentListEntry = self["list"].getCurrent()
 
                        if (self.wizard[self.currStep].has_key("dynamiclist")):
                                currentListEntry = self["list"].getCurrent()
@@ -294,14 +306,20 @@ class NetworkWizard(WizardLanguage, Rc):
 
        def listAccessPoints(self):
                self.APList = []
 
        def listAccessPoints(self):
                self.APList = []
-               try:
-                       from Plugins.SystemPlugins.WirelessLan.Wlan import Wlan
-               except ImportError:
+               if self.WlanPluginInstalled is False:
                        self.APList.append( ( _("No networks found"),_("unavailable") ) )
                        return self.APList
                        self.APList.append( ( _("No networks found"),_("unavailable") ) )
                        return self.APList
-               else:   
-                       self.w = Wlan(self.selectedInterface)
-                       aps = self.w.getNetworkList()
+               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 = []
                        if aps is not None:
                                print "[NetworkWizard.py] got Accespoints!"
                                tmplist = []
@@ -320,19 +338,19 @@ class NetworkWizard(WizardLanguage, Rc):
                                for entry in complist:
                                        self.APList.append( (entry[1], entry[1]) )
 
                                for entry in complist:
                                        self.APList.append( (entry[1], entry[1]) )
 
-                       if "hidden..." not in self.APList:
-                               self.APList.append(( _("enter hidden network SSID"), "hidden..." ))
-               
-                       self.rescanTimer.start(3000)
+                       if "<hidden>" not in self.APList:
+                               self.APList.append(( _("enter hidden network SSID"), "<hidden>" ))
+                       
+                       self.rescanTimer.start(5000)
                        return self.APList
 
        def AccessPointsSelectionMade(self, index):
                self.ap = index
                self.WlanList = []
                        return self.APList
 
        def AccessPointsSelectionMade(self, index):
                self.ap = index
                self.WlanList = []
-               currList = []
                if (self.wizard[self.currStep].has_key("dynamiclist")):
                if (self.wizard[self.currStep].has_key("dynamiclist")):
-                       currList = self['list'].list
-                       for entry in currList:
+                       for entry in self['list'].list:
+                               if entry[1] == "<hidden>":
+                                       continue
                                self.WlanList.append( (entry[1], entry[0]) )
                self.AccessPointsSelect(index)
 
                                self.WlanList.append( (entry[1], entry[0]) )
                self.AccessPointsSelect(index)
 
@@ -343,14 +361,37 @@ class NetworkWizard(WizardLanguage, Rc):
                self.AccessPointsSelect(self.selection)
 
        def checkWlanSelection(self):
                self.AccessPointsSelect(self.selection)
 
        def checkWlanSelection(self):
-               self.rescanTimer.stop()
+               self.stopScan()
                self.currStep = self.getStepWithID(self.NextStep)
 
        def isWlanPluginInstalled(self):
                try:
                self.currStep = self.getStepWithID(self.NextStep)
 
        def isWlanPluginInstalled(self):
                try:
-                       from Plugins.SystemPlugins.WirelessLan.Wlan import Wlan
+                       from Plugins.SystemPlugins.WirelessLan.Wlan import iWlan
                except ImportError:
                        self.WlanPluginInstalled = False
                else:
                        self.WlanPluginInstalled = True
 
                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