3333from Screens .Processing import Processing
3434from Screens .Screen import Screen
3535from Screens .Setup import Setup
36- from Tools .Directories import SCOPE_SKINS , SCOPE_GUISKIN , fileReadLines , fileReadXML , fileWriteLine , fileWriteLines , resolveFilename
36+ from Tools .Directories import SCOPE_SKINS , SCOPE_GUISKIN , SCOPE_PLUGINS , fileReadLines , fileReadXML , fileWriteLine , fileWriteLines , resolveFilename
3737from Tools .LoadPixmap import LoadPixmap
3838
3939MODULE_NAME = __name__ .split ("." )[- 1 ]
4040BASE_GROUP = "packagegroup-base"
4141
4242
43+ def queryWirelessDevice (iface ):
44+ try :
45+ from wifi .scan import Cell
46+ import errno
47+ except ImportError :
48+ return False
49+ else :
50+ from wifi .exceptions import InterfaceError
51+ try :
52+ system (f"ifconfig { iface } up" )
53+ wlanresponse = list (Cell .all (iface )) # noqa F841
54+ except InterfaceError as ie :
55+ print (f"[NetworkSetup] queryWirelessDevice InterfaceError: { str (ie )} " )
56+ return False
57+ except OSError as xxx_todo_changeme :
58+ (error_no , error_str ) = xxx_todo_changeme .args
59+ if error_no in (errno .EOPNOTSUPP , errno .ENODEV , errno .EPERM ):
60+ return False
61+ else :
62+ print (f"[NetworkSetup] queryWirelessDevice OSError: { error_no } '{ error_str } '" )
63+ return True
64+ else :
65+ return True
66+
67+
4368class NetworkAdapterSelection (Screen ):
4469 def __init__ (self , session ):
4570 Screen .__init__ (self , session , enableHelp = True )
@@ -53,12 +78,13 @@ def __init__(self, session):
5378 self ["key_yellow" ] = StaticText ("" )
5479 self ["key_blue" ] = StaticText (_ ("Network Restart" ))
5580 self ["introduction" ] = StaticText (self .edittext )
56- self ["OkCancelActions" ] = HelpableActionMap (self , ["OkCancelActions" , "ColorActions" ], {
81+ self ["OkCancelActions" ] = HelpableActionMap (self , ["OkCancelActions" , "ColorActions" , "MenuActions" ], {
5782 "cancel" : (self .close , _ ("Exit network interface list" )),
5883 "ok" : (self .okbuttonClick , _ ("Select interface" )),
5984 "red" : (self .close , _ ("Exit network interface list" )),
6085 "green" : (self .okbuttonClick , _ ("Select interface" )),
61- "blue" : (self .restartLanAsk , _ ("Restart network to with current setup" ))
86+ "blue" : (self .restartLanAsk , _ ("Restart network to with current setup" )),
87+ "menu" : (self .menubuttonClick , _ ("Select interface" ))
6288 }, prio = 0 , description = _ ("Network Adapter Actions" ))
6389 self .adapters = [(iNetwork .getFriendlyAdapterName (x ), x ) for x in iNetwork .getAdapterList ()]
6490 if not self .adapters :
@@ -122,11 +148,24 @@ def updateList(self):
122148 self .list .append (self .buildInterfaceList (adapter [1 ], _ (adapter [0 ]), 0 , active_int ))
123149 self ["list" ].setList (self .list )
124150
125- def okbuttonClick (self ):
151+ def menubuttonClick (self ):
126152 selection = self ["list" ].getCurrent ()
127- if selection is not None :
153+ if selection :
128154 self .session .openWithCallback (self .AdapterSetupClosed , AdapterSetupConfiguration , selection [0 ])
129155
156+ def okbuttonClick (self ):
157+ selection = self ["list" ].getCurrent ()
158+ if selection :
159+ if iNetwork .isWirelessInterface (selection [0 ]):
160+ try :
161+ from Plugins .SystemPlugins .WirelessLan .plugin import WlanScan
162+ if queryWirelessDevice (selection [0 ]):
163+ self .session .openWithCallback (self .AdapterSetupClosed , AdapterSetup , selection [0 ])
164+ except ImportError :
165+ self .session .open (MessageBox , _ ("No working wireless network interface found.\n Please verify that you have attached a compatible WLAN device or enable your local network interface." ), type = MessageBox .TYPE_INFO , timeout = 10 )
166+ else :
167+ self .session .openWithCallback (self .AdapterSetupClosed , AdapterSetup , selection [0 ])
168+
130169 def AdapterSetupClosed (self , * ret ):
131170 if len (self .adapters ) == 1 :
132171 self .close ()
@@ -823,30 +862,6 @@ def __init__(self, session, iface):
823862 self ["menulist" ].onSelectionChanged .append (self .selectionChanged )
824863 self .selectionChanged ()
825864
826- def queryWirelessDevice (self , iface ):
827- try :
828- from wifi .scan import Cell
829- import errno
830- except ImportError :
831- return False
832- else :
833- from wifi .exceptions import InterfaceError
834- try :
835- system (f"ifconfig { self .iface } up" )
836- wlanresponse = list (Cell .all (iface )) # noqa F841
837- except InterfaceError as ie :
838- print (f"[NetworkSetup] queryWirelessDevice InterfaceError: { str (ie )} " )
839- return False
840- except OSError as xxx_todo_changeme :
841- (error_no , error_str ) = xxx_todo_changeme .args
842- if error_no in (errno .EOPNOTSUPP , errno .ENODEV , errno .EPERM ):
843- return False
844- else :
845- print (f"[NetworkSetup] queryWirelessDevice OSError: { error_no } '{ error_str } '" )
846- return True
847- else :
848- return True
849-
850865 def ok (self ):
851866 self .cleanup ()
852867 if self ["menulist" ].getCurrent ()[1 ] == "edit" :
@@ -856,7 +871,7 @@ def ok(self):
856871 except ImportError :
857872 self .session .open (MessageBox , self .missingwlanplugintxt , type = MessageBox .TYPE_INFO , timeout = 10 )
858873 else :
859- if self . queryWirelessDevice (self .iface ):
874+ if queryWirelessDevice (self .iface ):
860875 self .session .openWithCallback (self .AdapterSetupClosed , AdapterSetup , self .iface )
861876 else :
862877 self .showErrorMessage () # Display Wlan not available message.
@@ -872,7 +887,7 @@ def ok(self):
872887 except ImportError :
873888 self .session .open (MessageBox , self .missingwlanplugintxt , type = MessageBox .TYPE_INFO , timeout = 10 )
874889 else :
875- if self . queryWirelessDevice (self .iface ):
890+ if queryWirelessDevice (self .iface ):
876891 self .session .openWithCallback (self .WlanScanClosed , WlanScan , self .iface )
877892 else :
878893 self .showErrorMessage () # Display Wlan not available message.
@@ -882,10 +897,15 @@ def ok(self):
882897 except ImportError :
883898 self .session .open (MessageBox , self .missingwlanplugintxt , type = MessageBox .TYPE_INFO , timeout = 10 )
884899 else :
885- if self . queryWirelessDevice (self .iface ):
900+ if queryWirelessDevice (self .iface ):
886901 self .session .openWithCallback (self .WlanStatusClosed , WlanStatus , self .iface )
887902 else :
888903 self .showErrorMessage () # Display Wlan not available message.
904+ if self ["menulist" ].getCurrent ()[1 ] == "lanrestart" :
905+ self .session .openWithCallback (self .restartLan , MessageBox , "%s\n \n %s" % (_ ("Are you sure you want to restart your network interfaces?" ), self .oktext ))
906+ if self ["menulist" ].getCurrent ()[1 ] == "openwizard" :
907+ from Plugins .SystemPlugins .NetworkWizard .NetworkWizard import NetworkWizard
908+ self .session .openWithCallback (self .AdapterSetupClosed , NetworkWizard , self .iface )
889909 if self ["menulist" ].getCurrent ()[1 ][0 ] == "extendedSetup" :
890910 self .extended = self ["menulist" ].getCurrent ()[1 ][2 ]
891911 self .extended (self .session , self .iface )
@@ -905,6 +925,10 @@ def selectionChanged(self):
905925 self ["description" ].setText ("%s\n \n %s" % (_ ("Scan your network for wireless access points and connect to them using your selected wireless device." ), self .oktext ))
906926 if self ["menulist" ].getCurrent ()[1 ] == "wlanstatus" :
907927 self ["description" ].setText ("%s\n \n %s" % (_ ("Shows the state of your wireless LAN connection." ), self .oktext ))
928+ if self ["menulist" ].getCurrent ()[1 ] == "lanrestart" :
929+ self ["description" ].setText ("%s\n \n %s" % (_ ("Restart your network connection and interfaces." ), self .oktext ))
930+ if self ["menulist" ].getCurrent ()[1 ] == "openwizard" :
931+ self ["description" ].setText ("%s\n \n %s" % (_ ("Use the network wizard to configure your Network." ), self .oktext ))
908932 if self ["menulist" ].getCurrent ()[1 ][0 ] == "extendedSetup" :
909933 self ["description" ].setText ("%s\n \n %s" % (_ (self ["menulist" ].getCurrent ()[1 ][1 ]), self .oktext ))
910934 item = self ["menulist" ].getCurrent ()
@@ -942,6 +966,7 @@ def genMainMenu(self):
942966 (_ ("Adapter Settings" ), "edit" ),
943967 (_ ("Nameserver settings" ), "dns" ),
944968 (_ ("Network test" ), "test" ),
969+ (_ ("Restart Network" ), "lanrestart" )
945970 ]
946971 self .extended = None
947972 self .extendedSetup = None
@@ -958,6 +983,8 @@ def genMainMenu(self):
958983 menuEntryDescription = p .__call__ ["menuEntryDescription" ](self .iface ) if "menuEntryDescription" in p .__call__ else _ ("Extended Networksetup Plugin..." )
959984 self .extendedSetup = ("extendedSetup" , menuEntryDescription , self .extended )
960985 menu .append ((menuEntryName , self .extendedSetup ))
986+ if exists (resolveFilename (SCOPE_PLUGINS , "SystemPlugins/NetworkWizard/networkwizard.xml" )):
987+ menu .append ((_ ("Network Wizard" ), "openwizard" ))
961988 return menu
962989
963990 def AdapterSetupClosed (self , * ret ):
@@ -968,7 +995,7 @@ def AdapterSetupClosed(self, *ret):
968995 except ImportError :
969996 self .session .open (MessageBox , self .missingwlanplugintxt , type = MessageBox .TYPE_INFO , timeout = 10 )
970997 else :
971- if self . queryWirelessDevice (self .iface ):
998+ if queryWirelessDevice (self .iface ):
972999 self .session .openWithCallback (self .WlanStatusClosed , WlanStatus , self .iface )
9731000 else :
9741001 self .showErrorMessage () # Display Wlan not available message.
@@ -996,6 +1023,13 @@ def WlanScanClosed(self, *ret):
9961023 iStatus .stopWlanConsole ()
9971024 self .updateStatusbar ()
9981025
1026+ def restartLan (self , ret = False ):
1027+ if ret is True :
1028+ def restartfinishedCB ():
1029+ self .updateStatusbar ()
1030+ self .session .open (MessageBox , _ ("Finished configuring your network" ), type = MessageBox .TYPE_INFO , timeout = 10 , default = False )
1031+ RestartNetworkNew .start (callback = restartfinishedCB )
1032+
9991033 def dataAvail (self , data ):
10001034 self .LinkState = None
10011035 for line in data .splitlines ():
0 commit comments