Merge branch 'bug_178_update_meta_files'
[enigma2.git] / lib / python / Plugins / SystemPlugins / NetworkWizard / NetworkWizard.py
1 from Screens.Wizard import wizardManager, WizardSummary
2 from Screens.WizardLanguage import WizardLanguage
3 from Screens.Rc import Rc
4 from Screens.MessageBox import MessageBox
5
6 from Components.Pixmap import Pixmap, MovingPixmap, MultiPixmap
7 from Components.Sources.Boolean import Boolean
8 from Components.config import config, ConfigBoolean, configfile, ConfigYesNo, NoSave, ConfigSubsection, ConfigText, getConfigListEntry, ConfigSelection, ConfigPassword
9 from Components.Network import iNetwork
10
11 from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE
12
13
14 config.misc.firstrun = ConfigBoolean(default = True)
15 list = []
16 list.append("WEP")
17 list.append("WPA")
18 list.append("WPA2")
19 list.append("WPA/WPA2")
20
21 weplist = []
22 weplist.append("ASCII")
23 weplist.append("HEX")
24
25 config.plugins.wlan = ConfigSubsection()
26 config.plugins.wlan.essid = NoSave(ConfigText(default = "home", fixed_size = False))
27 config.plugins.wlan.hiddenessid = NoSave(ConfigText(default = "home", fixed_size = False))
28
29 config.plugins.wlan.encryption = ConfigSubsection()
30 config.plugins.wlan.encryption.enabled = NoSave(ConfigYesNo(default = False))
31 config.plugins.wlan.encryption.type = NoSave(ConfigSelection(list, default = "WPA/WPA2" ))
32 config.plugins.wlan.encryption.wepkeytype = NoSave(ConfigSelection(weplist, default = "ASCII"))
33 config.plugins.wlan.encryption.psk = NoSave(ConfigPassword(default = "mysecurewlan", fixed_size = False))
34
35 class NetworkWizard(WizardLanguage, Rc):
36         skin = """
37                 <screen position="0,0" size="720,576" title="Welcome..." flags="wfNoBorder" >
38                         <widget name="text" position="153,40" size="340,300" font="Regular;22" />
39                         <widget source="list" render="Listbox" position="53,340" size="440,180" scrollbarMode="showOnDemand" >
40                                 <convert type="StringList" />
41                         </widget>
42                         <widget name="config" position="53,340" zPosition="1" size="440,180" transparent="1" scrollbarMode="showOnDemand" />
43                         <ePixmap pixmap="skin_default/buttons/button_red.png" position="40,225" zPosition="0" size="15,16" transparent="1" alphatest="on" />
44                         <widget name="languagetext" position="55,225" size="95,30" font="Regular;18" />
45                         <widget name="wizard" pixmap="skin_default/wizard.png" position="40,50" zPosition="10" size="110,174" alphatest="on" />
46                         <widget name="rc" pixmaps="skin_default/rc.png,skin_default/rcold.png" position="500,50" zPosition="10" size="154,500" alphatest="on" />
47                         <widget name="arrowdown" pixmap="skin_default/arrowdown.png" position="-100,-100" zPosition="11" size="37,70" alphatest="on" />
48                         <widget name="arrowdown2" pixmap="skin_default/arrowdown.png" position="-100,-100" zPosition="11" size="37,70" alphatest="on" />
49                         <widget name="arrowup" pixmap="skin_default/arrowup.png" position="-100,-100" zPosition="11" size="37,70" alphatest="on" />
50                         <widget name="arrowup2" pixmap="skin_default/arrowup.png" position="-100,-100" zPosition="11" size="37,70" alphatest="on" />
51                         <widget source="VKeyIcon" render="Pixmap" pixmap="skin_default/buttons/key_text.png" position="40,260" zPosition="0" size="35,25" transparent="1" alphatest="on" >
52                                 <convert type="ConditionalShowHide" />
53                         </widget>
54                         <widget name="HelpWindow" pixmap="skin_default/buttons/key_text.png" position="125,170" zPosition="1" size="1,1" transparent="1" alphatest="on" />      
55                 </screen>"""
56         def __init__(self, session):
57                 self.xmlfile = resolveFilename(SCOPE_PLUGINS, "SystemPlugins/NetworkWizard/networkwizard.xml")
58                 WizardLanguage.__init__(self, session, showSteps = False, showStepSlider = False)
59                 Rc.__init__(self)
60                 self.session = session
61                 self["wizard"] = Pixmap()
62                 self["HelpWindow"] = Pixmap()
63                 self["HelpWindow"].hide()
64                 self["VKeyIcon"] = Boolean(False)
65
66                 self.InterfaceState = None
67                 self.isInterfaceUp = None
68                 self.WlanPluginInstalled = None
69                 self.ap = None
70                 self.selectedInterface = None
71                 self.NextStep = None
72                 self.myref = None
73                 self.checkRef = None
74                 self.AdapterRef = None
75                 self.WlanList = None
76                 self.isWlanPluginInstalled()
77
78         def listInterfaces(self):
79                 list = [(iNetwork.getFriendlyAdapterName(x),x) for x in iNetwork.getAdapterList()]
80                 list.append((_("Exit network wizard"), "end"))
81                 return list
82
83         def InterfaceSelectionMade(self, index):
84                 self.selectedInterface = index
85                 self.InterfaceSelect(index)
86
87         def InterfaceSelect(self, index):
88                 if index == 'end':
89                         self.NextStep = 'end'
90                 elif index == 'eth0':
91                         self.NextStep = 'nwconfig'
92                 else:
93                         self.NextStep = 'scanwlan'
94
95         def InterfaceSelectionMoved(self):
96                 self.InterfaceSelect(self.selection)
97                 
98         def checkInterface(self,iface):
99                 self.Adapterlist = iNetwork.getAdapterList()
100                 if self.NextStep is not 'end':
101                         if len(self.Adapterlist) == 0:
102                                 #Reset Network to defaults if network broken
103                                 iNetwork.resetNetworkConfig('lan', self.checkInterfaceCB)
104                                 self.myref = self.session.openWithCallback(self.resetfinishedCB, MessageBox, _("Please wait while we prepare your network interfaces..."), type = MessageBox.TYPE_INFO, enable_input = False)
105                         if iface == 'eth0':
106                                 if iface in iNetwork.configuredNetworkAdapters and len(iNetwork.configuredNetworkAdapters) == 1:
107                                         if iNetwork.getAdapterAttribute(iface, 'up') is True:
108                                                 self.isInterfaceUp = True
109                                         else:
110                                                 self.isInterfaceUp = False
111                                         self.resetfinishedCB(False)
112                                 else:
113                                         iNetwork.resetNetworkConfig('lan',self.checkInterfaceCB)
114                                         self.myref = self.session.openWithCallback(self.resetfinishedCB, MessageBox, _("Please wait while we prepare your network interfaces..."), type = MessageBox.TYPE_INFO, enable_input = False)
115                         elif iface == 'wlan0':
116                                 if iface in iNetwork.configuredNetworkAdapters and len(iNetwork.configuredNetworkAdapters) == 1:
117                                         if iNetwork.getAdapterAttribute(iface, 'up') is True:
118                                                 self.isInterfaceUp = True
119                                         else:
120                                                 self.isInterfaceUp = False
121                                         self.resetfinishedCB(False)
122                                 else:
123                                         iNetwork.resetNetworkConfig('wlan',self.checkInterfaceCB)
124                                         self.myref = self.session.openWithCallback(self.resetfinishedCB, MessageBox, _("Please wait while we prepare your network interfaces..."), type = MessageBox.TYPE_INFO, enable_input = False)
125                         elif iface == 'ath0':
126                                 if iface in iNetwork.configuredNetworkAdapters and len(iNetwork.configuredNetworkAdapters) == 1:
127                                         if iNetwork.getAdapterAttribute(iface, 'up') is True:
128                                                 self.isInterfaceUp = True
129                                         else:
130                                                 self.isInterfaceUp = False
131                                         self.resetfinishedCB(False)
132                                 else:
133                                         iNetwork.resetNetworkConfig('wlan-mpci',self.checkInterfaceCB)
134                                         self.myref = self.session.openWithCallback(self.resetfinishedCB, MessageBox, _("Please wait while we prepare your network interfaces..."), type = MessageBox.TYPE_INFO, enable_input = False)
135                 else:
136                         self.resetfinishedCB(False)
137                         
138         def resetfinishedCB(self,data):
139                 if data is True:
140                         self.currStep = self.getStepWithID(self.NextStep)
141                         self.afterAsyncCode()
142                 else:
143                         self.currStep = self.getStepWithID(self.NextStep)
144                         self.afterAsyncCode()
145
146         def checkInterfaceCB(self,callback,iface):
147                 if callback is not None:
148                         if callback is True:
149                                 iNetwork.getInterfaces(self.getInterfacesDataAvail)
150                                 
151
152         def getInterfacesDataAvail(self, data):
153                 if data is True:
154                         if iNetwork.getAdapterAttribute(self.selectedInterface, 'up') is True:
155                                 self.isInterfaceUp = True
156                         else:
157                                 self.isInterfaceUp = False
158                         self.myref.close(True)
159
160         def AdapterSetupEnd(self, iface):
161                 if iNetwork.getAdapterAttribute(iface, "dhcp") is True:
162                         iNetwork.checkNetworkState(self.AdapterSetupEndFinished)
163                         self.AdapterRef = self.session.openWithCallback(self.AdapterSetupEndCB, MessageBox, _("Please wait while we test your network..."), type = MessageBox.TYPE_INFO, enable_input = False)
164
165                 else:
166                         self.currStep = self.getStepWithID("confdns")
167                         self.afterAsyncCode()
168
169         def AdapterSetupEndCB(self,data):
170                 if data is True:
171                         self.currStep = self.getStepWithID("checklanstatusend")
172                         self.afterAsyncCode()
173
174         def AdapterSetupEndFinished(self,data):
175                 if data <= 2:
176                         self.InterfaceState = True
177                 else:
178                         self.InterfaceState = False
179                 self.AdapterRef.close(True)
180                         
181         def checkNetwork(self):
182                 iNetwork.checkNetworkState(self.checkNetworkStateFinished)
183                 self.checkRef = self.session.openWithCallback(self.checkNetworkCB, MessageBox, _("Please wait while we test your network..."), type = MessageBox.TYPE_INFO, enable_input = False)
184
185         def checkNetworkCB(self,data):
186                 if data is True:
187                         self.currStep = self.getStepWithID("checklanstatusend")
188                         self.afterAsyncCode()
189
190         def checkNetworkStateFinished(self,data):
191                 if data <= 2:
192                         self.InterfaceState = True
193                 else:
194                         self.InterfaceState = False
195                 self.checkRef.close(True)
196         
197         def markDone(self):
198                 pass
199
200         def listModes(self):
201                 list = []
202                 self.WlanList = []
203                 try:
204                         from Plugins.SystemPlugins.WirelessLan.Wlan import Wlan
205                 except ImportError:
206                         list.append( ( _("No networks found"),_("unavailable") ) )
207                         self.WlanList.append(_("No networks found"))
208                         return list
209                 else:   
210                         self.w = Wlan(self.selectedInterface)
211                         aps = self.w.getNetworkList()
212                         if aps is not None:
213                                 print "[NetworkWizard.py] got Accespoints!"
214                                 for ap in aps:
215                                         a = aps[ap]
216                                         if a['active']:
217                                                 if a['essid'] != "":
218                                                         #a['essid'] = a['bssid']
219                                                         list.append( (a['essid'], a['essid']) )
220                                                         self.WlanList.append(a['essid'])        
221                         if "hidden..." not in list:
222                                 list.append( ( _("enter hidden network SSID"),_("hidden...") ) )
223                                 self.WlanList.append(_("hidden..."))    
224                         return list
225
226         def modeSelectionMade(self, index):
227                 self.modeSelect(index)
228                 
229         def modeSelectionMoved(self):
230                 self.modeSelect(self.selection)
231                 
232         def modeSelect(self, mode):
233                 self.ap = mode
234                 print "ModeSelected:", mode
235
236         def restartNetwork(self):
237                 iNetwork.restartNetwork()
238                 self.checkNetwork()
239         
240         def isWlanPluginInstalled(self):                
241                 try:
242                         from Plugins.SystemPlugins.WirelessLan.Wlan import Wlan
243                 except ImportError:
244                         self.WlanPluginInstalled = False
245                 else:
246                         self.WlanPluginInstalled = True
247