Merge commit 'origin/bug_448_fix_wlanscan' into experimental
[enigma2.git] / lib / python / Plugins / SystemPlugins / WirelessLan / plugin.py
index 6873ffa41411ce20204c1dac0173e009a9df9506..2df5814cc4ae80ad44194f96d485dcb34ef8e46d 100755 (executable)
@@ -151,6 +151,7 @@ class WlanStatus(Screen):
                                self["statuspic"].setPixmapNum(0)
                        self["statuspic"].show()                
 
+
 class WlanScan(Screen):
        skin = """
                <screen name="WlanScan" position="center,center" size="560,400" title="Choose a Wireless Network" >
@@ -189,8 +190,8 @@ class WlanScan(Screen):
                self.newAPList = None
                self.WlanList = None
                self.cleanList = None
-               self.oldlist = None
-               self.listLenght = None
+               self.oldlist = {}
+               self.listLength = None
                self.rescanTimer = eTimer()
                self.rescanTimer.callback.append(self.rescanTimerFired)
                
@@ -226,7 +227,10 @@ class WlanScan(Screen):
                        self.rescanTimer.stop()
                        del self.rescanTimer
                        if cur[1] is not None:
-                               essid = cur[1]
+                               if cur[1] == 'hidden...':
+                                       essid = cur[1]
+                               else:
+                                       essid = cur[0]
                                self.close(essid,self.getWlanList())
                        else:
                                self.close(None,None)
@@ -270,24 +274,18 @@ class WlanScan(Screen):
                        return((essid, bssid, _("Signal: ") + str(signal), _("Max. Bitrate: ") + str(maxrate), _("Encrypted: ") + encryption, _("Interface: ") + str(iface), divpng))
 
        def updateAPList(self):
-               self.oldlist = []
-               self.oldlist = self.cleanList
-               self.newAPList = []
                newList = []
+               newList = self.getAccessPoints(refresh = True)  
+               self.newAPList = []
                tmpList = []
                newListIndex = None
                currentListEntry = None
                currentListIndex = None
-               newList = self.getAccessPoints(refresh = True)
-               
-               for oldentry in self.oldlist:
-                       if oldentry not in newList:
-                               newList.append(oldentry)
 
-               for newentry in newList:
-                       if newentry[1] == "hidden...":
-                               continue
-                       tmpList.append(newentry)
+               for ap in self.oldlist.keys():
+                       data = self.oldlist[ap]['data']
+                       if data is not None:
+                               tmpList.append(data)
 
                if len(tmpList):
                        if "hidden..." not in tmpList:
@@ -299,13 +297,13 @@ class WlanScan(Screen):
                        currentListEntry = self["list"].getCurrent()
                        idx = 0
                        for entry in self.newAPList:
-                               if entry == currentListEntry:
+                               if entry[0] == currentListEntry[0]:
                                        newListIndex = idx
                                idx +=1
                        self['list'].setList(self.newAPList)
                        self["list"].setIndex(newListIndex)
                        self["list"].updateList(self.newAPList)
-                       self.listLenght = len(self.newAPList)
+                       self.listLength = len(self.newAPList)
                        self.buildWlanList()
                        self.setInfo()
 
@@ -315,7 +313,7 @@ class WlanScan(Screen):
                self.w = Wlan(self.iface)
                aps = self.w.getNetworkList()
                if aps is not None:
-                       print "[NetworkWizard.py] got Accespoints!"
+                       print "[WirelessLan.py] got Accespoints!"
                        tmpList = []
                        compList = []
                        for ap in aps:
@@ -331,6 +329,10 @@ class WlanScan(Screen):
                                                        compList.remove(compentry)
                        for entry in compList:
                                self.cleanList.append( ( entry[0], entry[1], entry[2], entry[3], entry[4], entry[5] ) )
+                               if not self.oldlist.has_key(entry[0]):
+                                       self.oldlist[entry[0]] = { 'data': entry }
+                               else:
+                                       self.oldlist[entry[0]]['data'] = entry
                
                if "hidden..." not in self.cleanList:
                        self.cleanList.append( ( _("enter hidden network SSID"), "hidden...", True, self.iface, _("unavailable"), "" ) )
@@ -340,31 +342,34 @@ class WlanScan(Screen):
                
                if refresh is False:
                        self['list'].setList(self.APList)
-               self.listLenght = len(self.APList)
+               self.listLength = len(self.APList)
                self.setInfo()
                self.rescanTimer.start(5000)
                return self.cleanList
 
        def setInfo(self):
                length = self.getLength()
-               if length == 0:
+               if length <= 1:
                        self["info"].setText(_("No wireless networks found! Please refresh."))
-               elif length == 1:
+               elif length == 2:
                        self["info"].setText(_("1 wireless network found!"))
                else:
-                       self["info"].setText(str(length)+_(" wireless networks found!"))
+                       self["info"].setText(str(length-1)+_(" wireless networks found!"))
 
        def buildWlanList(self):
                self.WlanList = []
-               currList = []
-               currList = self['list'].list
-               for entry in currList:
-                       self.WlanList.append( (entry[1], entry[0]) )            
+               for entry in self['list'].list:
+                       if entry[1] == "hidden...":
+                               self.WlanList.append(( "hidden...",_("enter hidden network SSID") ))#continue
+                       else:
+                               self.WlanList.append( (entry[0], entry[0]) )
 
        def getLength(self):
-               return self.listLenght          
+               return self.listLength          
 
        def getWlanList(self):
+               if self.WlanList is None:
+                       self.buildWlanList()
                return self.WlanList