use MultiPixmaps and MultiColorLabels in Network Setup
[vuplus_dvbapp] / lib / python / Screens / NetworkSetup.py
1 from Screen import Screen
2 from Components.ActionMap import ActionMap,NumberActionMap
3 from Screens.MessageBox import MessageBox
4 from Screens.Standby import *
5 from Components.ConfigList import ConfigListScreen
6 from Components.config import config, getConfigListEntry
7 from Components.Network import iNetwork
8 from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE
9 from Components.Label import Label,MultiColorLabel
10 from Components.Pixmap import Pixmap,MultiPixmap
11 from Tools.LoadPixmap import LoadPixmap
12 from Components.MenuList import MenuList
13 from Components.config import config, ConfigYesNo, ConfigIP, NoSave, ConfigNothing, ConfigSubsection, ConfigText, ConfigSelection, getConfigListEntry
14 from Components.PluginComponent import plugins
15 from Plugins.Plugin import PluginDescriptor
16 from enigma import eTimer, eConsoleAppContainer,gRGB
17 import time, os, re
18 from Tools.Directories import resolveFilename, SCOPE_PLUGINS
19
20 def getColor(str):
21         return gRGB(int(str[1:], 0x10))
22
23 class NetworkAdapterSelection(Screen):
24         def __init__(self, session):
25                 Screen.__init__(self, session)
26                 iNetwork.getInterfaces()
27                 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.")
28                 self.lan_errortext = _("No working local networkadapter found.\nPlease verify that you have attached a network cable and your Network is configured correctly.")
29                 self.adapters = [(iNetwork.getFriendlyAdapterName(x),x) for x in iNetwork.getAdapterList()]
30                 if len(self.adapters) == 0:
31                         self.onFirstExecBegin.append(self.NetworkFallback)
32                         
33                 self["adapterlist"] = MenuList(self.adapters)
34                 self["actions"] = ActionMap(["OkCancelActions"],
35                 {
36                         "ok": self.okbuttonClick,
37                         "cancel": self.close
38                 })
39
40                 if len(self.adapters) == 1:
41                         self.onFirstExecBegin.append(self.okbuttonClick)
42
43         def okbuttonClick(self):
44                 selection = self["adapterlist"].getCurrent()
45                 if selection is not None:
46                         self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetupConfiguration, selection[1])
47
48         def AdapterSetupClosed(self, *ret):
49                 self.close()
50
51         def NetworkFallback(self):
52                 if iNetwork.configuredInterfaces.has_key('wlan0') is True:
53                         self.session.openWithCallback(self.ErrorMessageClosed, MessageBox, self.wlan_errortext, type = MessageBox.TYPE_INFO,timeout = 10)
54                 else:
55                         self.session.openWithCallback(self.ErrorMessageClosed, MessageBox, self.lan_errortext, type = MessageBox.TYPE_INFO,timeout = 10)
56
57         def ErrorMessageClosed(self, *ret):
58                 if iNetwork.configuredInterfaces.has_key('wlan0') is True:
59                         self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetupConfiguration, 'wlan0')
60                 else:
61                         self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetupConfiguration, 'eth0')
62
63 class NameserverSetup(Screen, ConfigListScreen):
64         def __init__(self, session):
65                 Screen.__init__(self, session)
66                 iNetwork.getInterfaces()
67                 self.backupNameserverList = iNetwork.getNameserverList()[:]
68                 print "backup-list:", self.backupNameserverList
69                 
70                 self["ButtonGreentext"] = Label(_("Add"))
71                 self["ButtonYellowtext"] = Label(_("Delete"))
72                 self["ButtonRedtext"] = Label(_("Close"))
73                 self.createConfig()
74                 
75                 self["actions"] = ActionMap(["OkCancelActions", "ColorActions"],
76                 {
77                         "ok": self.ok,
78                         "cancel": self.cancel,
79                         "red": self.cancel,
80                         "green": self.add,
81                         "yellow": self.remove
82                 }, -2)
83                 
84                 self.list = []
85                 ConfigListScreen.__init__(self, self.list)
86                 self.createSetup()
87
88         def createConfig(self):
89                 self.nameservers = iNetwork.getNameserverList()
90                 self.nameserverEntries = []
91                 
92                 for nameserver in self.nameservers:
93                         self.nameserverEntries.append(NoSave(ConfigIP(default=nameserver)))
94
95         def createSetup(self):
96                 self.list = []
97                 
98                 for i in range(len(self.nameserverEntries)):
99                         self.list.append(getConfigListEntry(_("Nameserver %d") % (i + 1), self.nameserverEntries[i]))
100                 
101                 self["config"].list = self.list
102                 self["config"].l.setList(self.list)
103
104         def ok(self):
105                 iNetwork.clearNameservers()
106                 for nameserver in self.nameserverEntries:
107                         iNetwork.addNameserver(nameserver.value)
108                 iNetwork.writeNameserverConfig()
109                 self.close()
110
111         def cancel(self):
112                 iNetwork.clearNameservers()
113                 print "backup-list:", self.backupNameserverList
114                 for nameserver in self.backupNameserverList:
115                         iNetwork.addNameserver(nameserver)
116                 self.close()
117
118         def add(self):
119                 iNetwork.addNameserver([0,0,0,0])
120                 self.createConfig()
121                 self.createSetup()
122
123         def remove(self):
124                 print "currentIndex:", self["config"].getCurrentIndex()
125                 
126                 index = self["config"].getCurrentIndex()
127                 if index < len(self.nameservers):
128                         iNetwork.removeNameserver(self.nameservers[index])
129                         self.createConfig()
130                         self.createSetup()
131
132 class AdapterSetup(Screen, ConfigListScreen):
133         def __init__(self, session, iface):
134                 Screen.__init__(self, session)
135                 self.session = session
136                 iNetwork.getInterfaces()
137                 ## FIXME , workaround against current wizzard not able to send arguments
138                 if iface == 0:
139                         self.iface = "eth0"
140                 elif iface == 1:
141                         self.iface = "wlan0"
142                 else:
143                         self.iface = iface
144                 
145                 if self.iface == 'wlan0':
146                         from Plugins.SystemPlugins.WirelessLan.Wlan import wpaSupplicant,Wlan
147                         self.ws = wpaSupplicant()
148                         list = []
149                         list.append(_("WEP"))
150                         list.append(_("WPA"))
151                         list.append(_("WPA2"))
152                         if iNetwork.getAdapterAttribute('wlan0', 'up') is True:
153                                 try:
154                                         self.w = Wlan('wlan0')
155                                         aps = self.w.getNetworkList()
156                                         nwlist = []
157                                         if aps is not None:
158                                                 print "[Wlan.py] got Accespoints!"
159                                                 for ap in aps:
160                                                         a = aps[ap]
161                                                         if a['active']:
162                                                                 if a['essid'] == "":
163                                                                         a['essid'] = a['bssid']
164                                                                 nwlist.append( a['essid'])
165                                         nwlist.sort(key = lambda x: x[0])
166                                 except:
167                                         nwlist = []
168                                         nwlist.append("No Networks found")
169                                         
170                         if nwlist is None:
171                                 nwlist = []
172                                 nwlist.append("No Networks found")
173                         
174                         config.plugins.wlan.essid = NoSave(ConfigSelection(nwlist, default = nwlist[0]))
175                         config.plugins.wlan.encryption.enabled = NoSave(ConfigYesNo(default = False))
176                         config.plugins.wlan.encryption.type = NoSave(ConfigSelection(list, default = _("WPA")))
177                         config.plugins.wlan.encryption.psk = NoSave(ConfigText(default = "mysecurewlan", fixed_size = False))
178                         self.ws.loadConfig()
179                 
180                 self.dhcpConfigEntry = NoSave(ConfigYesNo(default=iNetwork.getAdapterAttribute(self.iface, "dhcp") or False))
181                 self.hasGatewayConfigEntry = NoSave(ConfigYesNo(default=True))
182                 self.ipConfigEntry = NoSave(ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "ip")) or [0,0,0,0])
183                 self.netmaskConfigEntry = NoSave(ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "netmask") or [255,0,0,0]))
184                 self.gatewayConfigEntry = NoSave(ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "gateway") or [0,0,0,0]))
185                 nameserver = (iNetwork.getNameserverList() + [[0,0,0,0]] * 2)[0:2]
186                 self.primaryDNS = NoSave(ConfigIP(default=nameserver[0]))
187                 self.secondaryDNS = NoSave(ConfigIP(default=nameserver[1]))
188                 
189                 self["actions"] = ActionMap(["SetupActions","ShortcutActions"],
190                 {
191                         "ok": self.ok,
192                         "cancel": self.cancel,
193                         "red": self.cancel,
194                         "blue": self.KeyBlue,
195                 }, -2)
196                 
197                 self.list = []
198                 ConfigListScreen.__init__(self, self.list)
199                 self.createSetup()
200                 self.onLayoutFinish.append(self.layoutFinished)
201                 
202                 self["DNS1text"] = Label(_("Primary DNS"))
203                 self["DNS2text"] = Label(_("Secondary DNS"))
204                 self["DNS1"] = Label()
205                 self["DNS2"] = Label()
206                 
207                 self["introduction"] = Label(_("Current settings:"))
208                 
209                 self["IPtext"] = Label(_("IP Address"))
210                 self["Netmasktext"] = Label(_("Netmask"))
211                 self["Gatewaytext"] = Label(_("Gateway"))
212                 
213                 self["IP"] = Label()
214                 self["Mask"] = Label()
215                 self["Gateway"] = Label()
216                 
217                 self["BottomBG"] = Pixmap()
218                 self["Adaptertext"] = Label(_("Network:"))
219                 self["Adapter"] = Label()
220                 self["introduction2"] = Label(_("Press OK to activate the settings."))
221                 self["ButtonRed"] = Pixmap()
222                 self["ButtonRedtext"] = Label(_("Close"))
223                 self["ButtonBlue"] = Pixmap()
224                 self["ButtonBluetext"] = Label(_("Edit DNS"))
225
226         def layoutFinished(self):
227                 self["DNS1"].setText(self.primaryDNS.getText())
228                 self["DNS2"].setText(self.secondaryDNS.getText())
229                 if self.ipConfigEntry.getText() is not None:
230                         self["IP"].setText(self.ipConfigEntry.getText())
231                 else:
232                         self["IP"].setText([0,0,0,0])
233                 self["Mask"].setText(self.netmaskConfigEntry.getText())
234                 self["Gateway"].setText(self.gatewayConfigEntry.getText())
235                 self["Adapter"].setText(iNetwork.getFriendlyAdapterName(self.iface))
236
237         def createSetup(self):
238                 self.list = []
239                 
240                 self.dhcpEntry = getConfigListEntry(_("Use DHCP"), self.dhcpConfigEntry)
241                 self.list.append(self.dhcpEntry)
242                 if not self.dhcpConfigEntry.value:
243                         self.list.append(getConfigListEntry(_('IP Address'), self.ipConfigEntry))
244                         self.list.append(getConfigListEntry(_('Netmask'), self.netmaskConfigEntry))
245                         self.list.append(getConfigListEntry(_('Use a gateway'), self.hasGatewayConfigEntry))
246                         if self.hasGatewayConfigEntry.value:
247                                 self.list.append(getConfigListEntry(_('Gateway'), self.gatewayConfigEntry))
248                 
249                 self.extended = None
250                 self.extendedSetup = None
251                 for p in plugins.getPlugins(PluginDescriptor.WHERE_NETWORKSETUP):
252                         callFnc = p.__call__["ifaceSupported"](self.iface)
253                         if callFnc is not None:
254                                 self.extended = callFnc
255                                 print p.__call__
256                                 if p.__call__.has_key("configStrings"):
257                                         self.configStrings = p.__call__["configStrings"]
258                                 else:
259                                         self.configStrings = None
260                                 
261                                 self.list.append(getConfigListEntry(_("Network SSID"), config.plugins.wlan.essid))
262                                 self.encryptionEnabled = getConfigListEntry(_("Encryption"), config.plugins.wlan.encryption.enabled)
263                                 self.list.append(self.encryptionEnabled)
264                                 
265                                 if config.plugins.wlan.encryption.enabled.value:
266                                         self.list.append(getConfigListEntry(_("Encryption Type"), config.plugins.wlan.encryption.type))
267                                         self.list.append(getConfigListEntry(_("Encryption Key"), config.plugins.wlan.encryption.psk))
268                 
269                 self["config"].list = self.list
270                 self["config"].l.setList(self.list)
271
272         def KeyBlue(self):
273                 self.session.open(NameserverSetup)
274
275         def newConfig(self):
276                 print self["config"].getCurrent()
277                 if self["config"].getCurrent() == self.dhcpEntry:
278                         self.createSetup()
279
280         def keyLeft(self):
281                 ConfigListScreen.keyLeft(self)
282                 self.createSetup()
283
284         def keyRight(self):
285                 ConfigListScreen.keyRight(self)
286                 self.createSetup()
287
288         def ok(self):
289                 selection = self["config"].getCurrent()
290                 if selection == self.extendedSetup:
291                         self.extended(self.session, self.iface)
292                 else:
293                         iNetwork.setAdapterAttribute(self.iface, "dhcp", self.dhcpConfigEntry.value)
294                         iNetwork.setAdapterAttribute(self.iface, "ip", self.ipConfigEntry.value)
295                         iNetwork.setAdapterAttribute(self.iface, "netmask", self.netmaskConfigEntry.value)
296                         if self.hasGatewayConfigEntry.value:
297                                 iNetwork.setAdapterAttribute(self.iface, "gateway", self.gatewayConfigEntry.value)
298                         else:
299                                 iNetwork.removeAdapterAttribute(self.iface, "gateway")
300                         
301                         if self.extended is not None and self.configStrings is not None:
302                                 iNetwork.setAdapterAttribute(self.iface, "configStrings", self.configStrings(self.iface))
303                                 self.ws.writeConfig()
304                         
305                         iNetwork.deactivateNetworkConfig()
306                         iNetwork.writeNetworkConfig()
307                         iNetwork.activateNetworkConfig()
308                         self.close()
309
310         def cancel(self):
311                 iNetwork.getInterfaces()
312                 self.close()
313
314         def run(self):
315                 self.ok()
316
317
318 class AdapterSetupConfiguration(Screen):
319         def __init__(self, session,iface):
320                 Screen.__init__(self, session)
321                 self.iface = iface
322                 self.session = session
323                 self.mainmenu = self.genMainMenu()
324                 self["menulist"] = MenuList(self.mainmenu)
325                 self["description"] = Label()
326                 self["IFtext"] = Label()
327                 self["IF"] = Label()
328                 self["BottomBG"] = Label()
329                 self["Statustext"] = Label()
330                 self["statuspic"] = MultiPixmap()
331                 self["statuspic"].hide()
332                 self["BottomBG"] = Pixmap()
333                 self["ButtonRed"] = Pixmap()
334                 self["ButtonRedtext"] = Label(_("Close"))
335                 
336                 self.oktext = _("Press OK on your remote control to continue.")
337                 self.reboottext = _("Your Dreambox will restart after pressing OK on your remote control.")
338                 self.errortext = _("No working wireless interface found.\n Please verify that you have attached a compatible WLAN USB Stick or enable you local network interface.")    
339                 
340                 self["actions"] = NumberActionMap(["WizardActions","ShortcutActions"],
341                 {
342                         "ok": self.ok,
343                         "back": self.close,
344                         "up": self.up,
345                         "down": self.down,
346                         "red": self.close,
347                         "left": self.left,
348                         "right": self.right,
349                 }, -2)
350                 
351                 iNetwork.getInterfaces()
352                 self.onLayoutFinish.append(self.layoutFinished)
353                 self.updateStatusbar()
354
355         def ok(self):
356                 if self["menulist"].getCurrent()[1] == 'edit':
357                         if self.iface == 'wlan0':
358                                 from Plugins.SystemPlugins.WirelessLan.iwlibs import Wireless
359                                 ifobj = Wireless(self.iface) # a Wireless NIC Object
360                                 self.wlanresponse = ifobj.getStatistics()
361                                 if self.wlanresponse[0] != 19: # Wlan Interface found.
362                                         self.session.open(AdapterSetup,self.iface)
363                                 else:
364                                         # Display Wlan not available Message
365                                         self.showErrorMessage()
366                         else:
367                                 self.session.open(AdapterSetup,self.iface)
368                 if self["menulist"].getCurrent()[1] == 'test':
369                         self.session.open(NetworkAdapterTest,self.iface)
370                 if self["menulist"].getCurrent()[1] == 'dns':
371                         self.session.open(NameserverSetup)
372                 if self["menulist"].getCurrent()[1] == 'scanwlan':
373                         from Plugins.SystemPlugins.WirelessLan.iwlibs import Wireless
374                         ifobj = Wireless(self.iface) # a Wireless NIC Object
375                         self.wlanresponse = ifobj.getStatistics()
376                         if self.wlanresponse[0] != 19:
377                                 from Plugins.SystemPlugins.WirelessLan.plugin import WlanScan
378                                 self.session.open(WlanScan,self.iface)
379                         else:
380                                 # Display Wlan not available Message
381                                 self.showErrorMessage()
382                 if self["menulist"].getCurrent()[1] == 'wlanstatus':
383                         from Plugins.SystemPlugins.WirelessLan.iwlibs import Wireless
384                         ifobj = Wireless(self.iface) # a Wireless NIC Object
385                         self.wlanresponse = ifobj.getStatistics()
386                         if self.wlanresponse[0] != 19:
387                                 from Plugins.SystemPlugins.WirelessLan.plugin import WlanStatus
388                                 self.session.open(WlanStatus,self.iface)
389                         else:
390                                 # Display Wlan not available Message
391                                 self.showErrorMessage()
392                 if self["menulist"].getCurrent()[1] == 'lanrestart':
393                         self.session.openWithCallback(self.restartLan, MessageBox, (_("Are you sure you want to restart your network interfaces?\n\n") + self.oktext ) )
394                 if self["menulist"].getCurrent()[1] == 'enablewlan':
395                         self.session.openWithCallback(self.enableWlan, MessageBox, _("Are you sure you want to enable WLAN support?\nConnect your Wlan USB Stick to your Dreambox and press OK.\n\n") )
396                 if self["menulist"].getCurrent()[1] == 'enablelan':
397                         self.session.openWithCallback(self.enableLan, MessageBox, (_("Are you sure you want to enable your local network?\n\n") + self.oktext ) )
398                 if self["menulist"].getCurrent()[1] == 'openwizard':
399                         from Plugins.SystemPlugins.NetworkWizard.NetworkWizard import NetworkWizard
400                         self.session.openWithCallback(self.AdapterSetupClosed, NetworkWizard)
401         
402         def up(self):
403                 self["menulist"].up()
404                 self.loadDescription()
405
406         def down(self):
407                 self["menulist"].down()
408                 self.loadDescription()
409
410         def left(self):
411                 self["menulist"].pageUp()
412                 self.loadDescription()
413
414         def right(self):
415                 self["menulist"].pageDown()
416                 self.loadDescription()
417
418         def layoutFinished(self):
419                 idx = 0
420                 self["menulist"].moveToIndex(idx)
421                 self.loadDescription()
422
423         def loadDescription(self):
424                 if self["menulist"].getCurrent()[1] == 'edit':
425                         self["description"].setText(_("Edit the network configuration of your Dreambox.\n" ) + self.oktext )
426                 if self["menulist"].getCurrent()[1] == 'test':
427                         self["description"].setText(_("Test the network configuration of your Dreambox.\n" ) + self.oktext )
428                 if self["menulist"].getCurrent()[1] == 'enablelan':
429                         self["description"].setText(_("Enable the local network of your Dreambox.\n\n" ) + self.oktext )
430                 if self["menulist"].getCurrent()[1] == 'dns':
431                         self["description"].setText(_("Edit the Nameserver configuration of your Dreambox.\n" ) + self.oktext )
432                 if self["menulist"].getCurrent()[1] == 'scanwlan':
433                         self["description"].setText(_("Scan your network for wireless Access Points and connect to them using your WLAN USB Stick\n" ) + self.oktext )
434                 if self["menulist"].getCurrent()[1] == 'wlanstatus':
435                         self["description"].setText(_("Shows the state of your wireless LAN connection.\n" ) + self.oktext )
436                 if self["menulist"].getCurrent()[1] == 'lanrestart':
437                         self["description"].setText(_("Restart your network connection and interfaces.\n" ) + self.oktext )
438                 if self["menulist"].getCurrent()[1] == 'enablewlan':
439                         self["description"].setText(_("Pressing OK enables the built in wireless LAN support of your Dreambox.\nWlan USB Sticks with Zydas ZD1211B and RAlink RT73 Chipset are supported.\nConnect your Wlan USB Stick to your Dreambox before pressing OK.\n\n" ) + self.reboottext )
440                 if self["menulist"].getCurrent()[1] == 'openwizard':
441                         self["description"].setText(_("Use the Networkwizard to configure your Network\n" ) + self.oktext )
442
443         def updateStatusbar(self):
444                 self["IFtext"].setText(_("Network:"))
445                 self["IF"].setText(iNetwork.getFriendlyAdapterName(self.iface))
446                 self["Statustext"].setText(_("Link:"))
447                 
448                 if self.iface == 'wlan0':
449                         try:
450                                 from Plugins.SystemPlugins.WirelessLan.Wlan import Wlan, WlanList, wpaSupplicant
451                                 w = Wlan(self.iface)
452                                 stats = w.getStatus()
453                                 if stats['BSSID'] == "00:00:00:00:00:00":
454                                         self["statuspic"].setPixmapNum(1)
455                                 else:
456                                         self["statuspic"].setPixmapNum(0)
457                                 self["statuspic"].show()
458                         except:
459                                         self["statuspic"].setPixmapNum(1)
460                                         self["statuspic"].show()
461                 else:
462                         self.getLinkState(self.iface)
463
464         def doNothing(self):
465                 pass
466
467         def genMainMenu(self):
468                 menu = []
469                 menu.append((_("Adapter settings"), "edit"))
470                 menu.append((_("Nameserver settings"), "dns"))
471                 menu.append((_("Network test"), "test"))
472                 menu.append((_("Restart network"), "lanrestart"))
473                 
474                 self.extended = None
475                 self.extendedSetup = None
476                 for p in plugins.getPlugins(PluginDescriptor.WHERE_NETWORKSETUP):
477                         callFnc = p.__call__["ifaceSupported"](self.iface)
478                         if callFnc is not None:
479                                 menu.append((_("Scan Wireless Networks"), "scanwlan"))
480                                 menu.append((_("Show WLAN Status"), "wlanstatus"))
481                                 menu.append((_("Enable LAN"), "enablelan"))
482                         if callFnc is None and iNetwork.ifaces.has_key('wlan0') is False:
483                                 menu.append((_("Enable WLAN"), "enablewlan"))
484                         if callFnc is None and iNetwork.ifaces.has_key('wlan0') is True:
485                                 menu.append((_("Enable LAN"), "enablelan"))
486                                 
487                 if os.path.exists(resolveFilename(SCOPE_PLUGINS, "SystemPlugins/NetworkWizard/networkwizard.xml")):
488                         menu.append((_("NetworkWizard"), "openwizard"));
489                 return menu
490
491         def AdapterSetupClosed(self, *ret):
492                 self.mainmenu = self.genMainMenu()
493                 self["menulist"].l.setList(self.mainmenu)
494
495         def enableWlan(self, ret = False):
496                 if (ret == True):
497                         iNetwork.resetNetworkConfig('wlan')
498                         iNetwork.getInterfaces()
499                         if iNetwork.getAdapterAttribute('wlan0', 'up') is True:
500                                 self.iface = 'wlan0'
501                                 self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetup, 'wlan0')
502                         else:
503                                 self.session.openWithCallback(self.restartDreambox, MessageBox, _("Your wireless LAN Adapter could not be started.\nDo you want to reboot your Dreambox to apply the new configuration?\n"))
504
505         def enableLan(self, ret = False):
506                 if (ret == True):
507                         iNetwork.resetNetworkConfig('lan')
508                         iNetwork.getInterfaces()
509                         if iNetwork.getAdapterAttribute('eth0', 'up') is True:
510                                 self.iface = 'eth0'
511                                 self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetup, 'eth0')
512                         else:
513                                 self.session.openWithCallback(self.restartDreambox, MessageBox, _("Your wired LAN Adapter could not be started.\nDo you want to reboot your Dreambox to apply the new configuration?\n"))
514
515         def restartLan(self, ret = False):
516                 if (ret == True):
517                         iNetwork.restartNetwork()
518
519         def restartDreambox(self, ret = False):
520                 if (ret == True):
521                         TryQuitMainloop(self.session,2)
522
523         def getLinkState(self,iface):
524                 iNetwork.getLinkState(iface,self.dataAvail)
525
526         def dataAvail(self,data):
527                 self.output = data.strip()
528                 result = self.output.split('\n')
529                 pattern = re.compile("Link detected: yes")
530                 for item in result:
531                         if re.search(pattern, item):
532                                 self["statuspic"].setPixmapNum(0)
533                         else:
534                                 self["statuspic"].setPixmapNum(1)
535                 self["statuspic"].show()
536
537         def showErrorMessage(self):
538                 self.session.open(MessageBox, self.errortext, type = MessageBox.TYPE_INFO,timeout = 10 )
539
540
541 class NetworkAdapterTest(Screen):       
542         def __init__(self, session,iface):
543                 Screen.__init__(self, session)
544                 self.iface = iface
545                 iNetwork.getInterfaces()
546                 self.setLabels()
547                 
548                 self["updown_actions"] = NumberActionMap(["WizardActions","ShortcutActions"],
549                 {
550                         "ok": self.KeyOK,
551                         "blue": self.KeyOK,
552                         "up": lambda: self.updownhandler('up'),
553                         "down": lambda: self.updownhandler('down'),
554                 
555                 }, -2)
556                 
557                 self["shortcuts"] = ActionMap(["ShortcutActions","WizardActions"],
558                 {
559                         "red": self.close,
560                         "back": self.close,
561                 }, -2)
562                 self["infoshortcuts"] = ActionMap(["ShortcutActions","WizardActions"],
563                 {
564                         "red": self.closeInfo,
565                         "back": self.closeInfo,
566                 }, -2)
567                 self["shortcutsgreen"] = ActionMap(["ShortcutActions"],
568                 {
569                         "green": self.KeyGreen,
570                 }, -2)
571                 self["shortcutsgreen_restart"] = ActionMap(["ShortcutActions"],
572                 {
573                         "green": self.KeyGreenRestart,
574                 }, -2)
575                 self["shortcutsyellow"] = ActionMap(["ShortcutActions"],
576                 {
577                         "yellow": self.KeyYellow,
578                 }, -2)
579                 
580                 self["shortcutsgreen_restart"].setEnabled(False)
581                 self["updown_actions"].setEnabled(False)
582                 self["infoshortcuts"].setEnabled(False)
583                 self.onClose.append(self.delTimer)      
584                 self.onLayoutFinish.append(self.layoutFinished)
585                 self.steptimer = False
586                 self.nextstep = 0
587                 self.activebutton = 0
588                 self.nextStepTimer = eTimer()
589                 self.nextStepTimer.callback.append(self.nextStepTimerFire)
590
591         def closeInfo(self):
592                 self["shortcuts"].setEnabled(True)              
593                 self["infoshortcuts"].setEnabled(False)
594                 self["InfoText"].hide()
595                 self["InfoTextBorder"].hide()
596                 self["ButtonRedtext"].setText(_("Close"))
597
598         def delTimer(self):
599                 del self.steptimer
600                 del self.nextStepTimer
601
602         def nextStepTimerFire(self):
603                 self.nextStepTimer.stop()
604                 self.steptimer = False
605                 self.runTest()
606
607         def updownhandler(self,direction):
608                 if direction == 'up':
609                         if self.activebutton >=2:
610                                 self.activebutton -= 1
611                         else:
612                                 self.activebutton = 6
613                         self.setActiveButton(self.activebutton)
614                 if direction == 'down':
615                         if self.activebutton <=5:
616                                 self.activebutton += 1
617                         else:
618                                 self.activebutton = 1
619                         self.setActiveButton(self.activebutton)
620
621         def setActiveButton(self,button):
622                 if button == 1:
623                         self["EditSettingsButton"].setPixmapNum(0)
624                         self["NetworkInfo"].setPixmapNum(0)
625                         self["AdapterInfo"].setPixmapNum(1)
626                 if button == 2:
627                         self["AdapterInfo"].setPixmapNum(0)
628                         self["DhcpInfo"].setPixmapNum(0)
629                         self["NetworkInfo"].setPixmapNum(1)
630                 if button == 3:
631                         self["NetworkInfo"].setPixmapNum(0)
632                         self["IPInfo"].setPixmapNum(0)
633                         self["DhcpInfo"].setPixmapNum(1)
634                 if button == 4:
635                         self["DhcpInfo"].setPixmapNum(0)
636                         self["DNSInfo"].setPixmapNum(0)
637                         self["IPInfo"].setPixmapNum(1)
638                 if button == 5:
639                         self["IPInfo"].setPixmapNum(0)
640                         self["EditSettingsButton"].setPixmapNum(0)
641                         self["DNSInfo"].setPixmapNum(1)
642                 if button == 6:
643                         self["DNSInfo"].setPixmapNum(0)
644                         self["EditSettingsButton"].setPixmapNum(1)
645                         self["AdapterInfo"].setPixmapNum(0)
646
647         def runTest(self):
648                 self.nextstep += 1
649                 if next == 0:
650                         self.doStep1()
651                 elif next == 1:
652                         self.doStep2()
653                 elif next == 2:
654                         self.doStep3()
655                 elif next == 3:
656                         self.doStep4()
657                 elif next == 4:
658                         self.doStep5()
659                 elif next == 5:
660                         self.doStep6()
661
662         def doStep1(self):
663                 self.steptimer = True
664                 self.nextStepTimer.start(3000)
665
666         def doStep2(self):
667                 self["Adapter"].setText(iNetwork.getFriendlyAdapterName(self.iface))
668                 self["Adapter"].setForegroundColorNum(2)
669                 self["Adaptertext"].setForegroundColorNum(1)
670                 self["AdapterInfo_Text"].setForegroundColorNum(1)
671                 self["AdapterInfo_OK"].show()
672                 self.steptimer = True
673                 self.nextStepTimer.start(3000)
674
675         def doStep3(self):
676                 self["Networktext"].setForegroundColorNum(1)
677                 self.getLinkState(self.iface)
678                 self["NetworkInfo_Text"].setForegroundColorNum(1)
679                 self.steptimer = True
680                 self.nextStepTimer.start(3000)
681
682         def doStep4(self):
683                 self["Dhcptext"].setForegroundColorNum(1)
684                 if iNetwork.getAdapterAttribute(self.iface, 'dhcp') is True:
685                         self["Dhcp"].setForegroundColorNum(2)
686                         self["Dhcp"].setText(_("enabled"))
687                         self["DhcpInfo_Check"].setPixmapNum(0)
688                 else:
689                         self["Dhcp"].setForegroundColorNum(1)
690                         self["Dhcp"].setText(_("disabled"))
691                         self["DhcpInfo_Check"].setPixmapNum(1)
692                 self["DhcpInfo_Check"].show()
693                 self["DhcpInfo_Text"].setForegroundColorNum(1)
694                 self.steptimer = True
695                 self.nextStepTimer.start(3000)
696
697         def doStep5(self):
698                 self["IPtext"].setForegroundColorNum(1)
699                 ret = iNetwork.checkNetworkState()
700                 if ret == True:
701                         self["IP"].setForegroundColorNum(2)
702                         self["IP"].setText(_("confirmed"))
703                         self["IPInfo_Check"].setPixmapNum(0)
704                 else:
705                         self["IP"].setForegroundColorNum(1)
706                         self["IP"].setText(_("unconfirmed"))
707                         self["IPInfo_Check"].setPixmapNum(1)
708                 self["IPInfo_Check"].show()
709                 self["IPInfo_Text"].setForegroundColorNum(1)
710                 self.steptimer = True
711                 self.nextStepTimer.start(3000)
712
713         def doStep6(self):
714                 self.steptimer = False
715                 self.nextStepTimer.stop()
716                 self["DNStext"].setForegroundColorNum(1)
717                 ret = iNetwork.checkDNSLookup()
718                 if ret == True:
719                         self["DNS"].setForegroundColorNum(2)
720                         self["DNS"].setText(_("confirmed"))
721                         self["DNSInfo_Check"].setPixmapNum(0)
722                 else:
723                         self["DNS"].setForegroundColorNum(1)
724                         self["DNS"].setText(_("unconfirmed"))
725                         self["DNSInfo_Check"].setPixmapNum(1)
726                 self["DNSInfo_Check"].show()
727                 self["DNSInfo_Text"].setForegroundColorNum(1)
728                 
729                 self["EditSettings_Text"].show()
730                 self["EditSettingsButton"].setPixmapNum(1)
731                 self["EditSettingsButton"].show()
732                 self["ButtonYellow_Check"].setPixmapNum(1)
733                 self["ButtonGreentext"].setText(_("Restart test"))
734                 self["ButtonGreen_Check"].setPixmapNum(0)
735                 self["shortcutsgreen"].setEnabled(False)
736                 self["shortcutsgreen_restart"].setEnabled(True)
737                 self["shortcutsyellow"].setEnabled(False)
738                 self["updown_actions"].setEnabled(True)
739                 self.activebutton = 6
740
741         def KeyGreen(self):
742                 self["shortcutsgreen"].setEnabled(False)
743                 self["shortcutsyellow"].setEnabled(True)
744                 self["updown_actions"].setEnabled(False)
745                 self["ButtonYellow_Check"].setPixmapNum(0)
746                 self["ButtonGreen_Check"].setPixmapNum(1)
747                 self.steptimer = True
748                 self.nextStepTimer.start(1000)
749
750         def KeyGreenRestart(self):
751                 self.nextstep = 0
752                 self.layoutFinished()
753                 self["Adapter"].setText((""))
754                 self["Network"].setText((""))
755                 self["Dhcp"].setText((""))
756                 self["IP"].setText((""))
757                 self["DNS"].setText((""))
758                 self["AdapterInfo_Text"].setForegroundColorNum(0)
759                 self["NetworkInfo_Text"].setForegroundColorNum(0)
760                 self["DhcpInfo_Text"].setForegroundColorNum(0)
761                 self["IPInfo_Text"].setForegroundColorNum(0)
762                 self["DNSInfo_Text"].setForegroundColorNum(0)
763                 self["shortcutsgreen_restart"].setEnabled(False)
764                 self["shortcutsgreen"].setEnabled(False)
765                 self["shortcutsyellow"].setEnabled(True)
766                 self["updown_actions"].setEnabled(False)
767                 self["ButtonYellow_Check"].setPixmapNum(0)
768                 self["ButtonGreen_Check"].setPixmapNum(1)
769                 self.steptimer = True
770                 self.nextStepTimer.start(1000)
771
772         def KeyOK(self):
773                 self["infoshortcuts"].setEnabled(True)
774                 self["shortcuts"].setEnabled(False)
775                 if self.activebutton == 1: # Adapter Check
776                         self["InfoText"].setText(_("This test detects your configured LAN-Adapter."))
777                         self["InfoTextBorder"].show()
778                         self["InfoText"].show()
779                         self["ButtonRedtext"].setText(_("Back"))
780                 if self.activebutton == 2: #LAN Check
781                         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"))
782                         self["InfoTextBorder"].show()
783                         self["InfoText"].show()
784                         self["ButtonRedtext"].setText(_("Back"))
785                 if self.activebutton == 3: #DHCP Check
786                         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."))
787                         self["InfoTextBorder"].show()
788                         self["InfoText"].show()
789                         self["ButtonRedtext"].setText(_("Back"))
790                 if self.activebutton == 4: # IP Check
791                         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"))
792                         self["InfoTextBorder"].show()
793                         self["InfoText"].show()
794                         self["ButtonRedtext"].setText(_("Back"))
795                 if self.activebutton == 5: # DNS Check
796                         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"))
797                         self["InfoTextBorder"].show()
798                         self["InfoText"].show()
799                         self["ButtonRedtext"].setText(_("Back"))
800                 if self.activebutton == 6: # Edit Settings
801                         self.session.open(AdapterSetup,self.iface)
802
803         def KeyYellow(self):
804                 self.nextstep = 0
805                 self["shortcutsgreen_restart"].setEnabled(True)
806                 self["shortcutsgreen"].setEnabled(False)
807                 self["shortcutsyellow"].setEnabled(False)
808                 self["ButtonGreentext"].setText(_("Restart test"))
809                 self["ButtonYellow_Check"].setPixmapNum(1)
810                 self["ButtonGreen_Check"].setPixmapNum(0)
811                 self.steptimer = False
812                 self.nextStepTimer.stop()
813
814         def layoutFinished(self):
815                 self["shortcutsyellow"].setEnabled(False)
816                 self["AdapterInfo_OK"].hide()
817                 self["NetworkInfo_Check"].hide()
818                 self["DhcpInfo_Check"].hide()
819                 self["IPInfo_Check"].hide()
820                 self["DNSInfo_Check"].hide()
821                 self["EditSettings_Text"].hide()
822                 self["EditSettingsButton"].hide()
823                 self["InfoText"].hide()
824                 self["InfoTextBorder"].hide()
825
826         def setLabels(self):
827                 self["Adaptertext"] = MultiColorLabel(_("LAN Adapter"))
828                 self["Adapter"] = MultiColorLabel()
829                 self["AdapterInfo"] = MultiPixmap()
830                 self["AdapterInfo_Text"] = MultiColorLabel(_("Show Info"))
831                 self["AdapterInfo_OK"] = Pixmap()
832                 
833                 if self.iface == 'wlan0':
834                         self["Networktext"] = MultiColorLabel(_("Wireless Network"))
835                 else:
836                         self["Networktext"] = MultiColorLabel(_("Local Network"))
837                 
838                 self["Network"] = MultiColorLabel()
839                 self["NetworkInfo"] = MultiPixmap()
840                 self["NetworkInfo_Text"] = MultiColorLabel(_("Show Info"))
841                 self["NetworkInfo_Check"] = MultiPixmap()
842                 
843                 self["Dhcptext"] = MultiColorLabel(_("DHCP"))
844                 self["Dhcp"] = MultiColorLabel()
845                 self["DhcpInfo"] = MultiPixmap()
846                 self["DhcpInfo_Text"] = MultiColorLabel(_("Show Info"))
847                 self["DhcpInfo_Check"] = MultiPixmap()
848                 
849                 self["IPtext"] = MultiColorLabel(_("IP Address"))
850                 self["IP"] = MultiColorLabel()
851                 self["IPInfo"] = MultiPixmap()
852                 self["IPInfo_Text"] = MultiColorLabel(_("Show Info"))
853                 self["IPInfo_Check"] = MultiPixmap()
854                 
855                 self["DNStext"] = MultiColorLabel(_("Nameserver"))
856                 self["DNS"] = MultiColorLabel()
857                 self["DNSInfo"] = MultiPixmap()
858                 self["DNSInfo_Text"] = MultiColorLabel(_("Show Info"))
859                 self["DNSInfo_Check"] = MultiPixmap()
860                 
861                 self["EditSettings_Text"] = Label(_("Edit settings"))
862                 self["EditSettingsButton"] = MultiPixmap()
863                 
864                 self["ButtonRedtext"] = Label(_("Close"))
865                 self["ButtonRed"] = Pixmap()
866
867                 self["ButtonGreentext"] = Label(_("Start test"))
868                 self["ButtonGreen_Check"] = MultiPixmap()
869                 
870                 self["ButtonYellowtext"] = Label(_("Stop test"))
871                 self["ButtonYellow_Check"] = MultiPixmap()
872                 
873                 self["InfoTextBorder"] = Pixmap()
874                 self["InfoText"] = Label()
875
876         def getLinkState(self,iface):
877                 if iface == 'wlan0':
878                         try:
879                                 from Plugins.SystemPlugins.WirelessLan.Wlan import Wlan
880                                 w = Wlan(iface)
881                                 stats = w.getStatus()
882                                 if stats['BSSID'] == "00:00:00:00:00:00":
883                                         self["Network"].setForegroundColorNum(1)
884                                         self["Network"].setText(_("disconnected"))
885                                         self["NetworkInfo_Check"].setPixmapNum(1)
886                                         self["NetworkInfo_Check"].show()
887                                 else:
888                                         self["Network"].setForegroundColorNum(2)
889                                         self["Network"].setText(_("connected"))
890                                         self["NetworkInfo_Check"].setPixmapNum(0)
891                                         self["NetworkInfo_Check"].show()
892                         except:
893                                         self["Network"].setForegroundColorNum(1)
894                                         self["Network"].setText(_("disconnected"))
895                                         self["NetworkInfo_Check"].setPixmapNum(1)
896                                         self["NetworkInfo_Check"].show()
897                 else:
898                         iNetwork.getLinkState(iface,self.dataAvail)
899
900         def dataAvail(self,data):
901                 self.output = data.strip()
902                 result = self.output.split('\n')
903                 pattern = re.compile("Link detected: yes")
904                 for item in result:
905                         if re.search(pattern, item):
906                                 self["Network"].setForegroundColorNum(2)
907                                 self["Network"].setText(_("connected"))
908                                 self["NetworkInfo_Check"].setPixmapNum(0)
909                         else:
910                                 self["Network"].setForegroundColorNum(1)
911                                 self["Network"].setText(_("disconnected"))
912                                 self["NetworkInfo_Check"].setPixmapNum(1)
913                 self["NetworkInfo_Check"].show()
914
915