network setup rewrite... adds support for multiple devices and an extended setup...
[vuplus_dvbapp] / lib / python / Screens / NetworkSetup.py
index 278c660..640da61 100644 (file)
@@ -4,11 +4,114 @@ from Components.ConfigList import ConfigList, ConfigListScreen
 from Components.config import config, getConfigListEntry
 from Components.Network import iNetwork
 from Components.Label import Label
+from Components.MenuList import MenuList
+from Components.config import config, ConfigYesNo, ConfigIP, NoSave, ConfigSubsection, ConfigNothing
+from Components.PluginComponent import plugins
+from Plugins.Plugin import PluginDescriptor
 
-class NetworkSetup(Screen, ConfigListScreen):
+
+class NetworkAdapterSelection(Screen):
        def __init__(self, session):
                Screen.__init__(self, session)
+               
+               self["adapterlist"] = MenuList(iNetwork.getAdapterList())
+               
+               self["actions"] = ActionMap(["OkCancelActions"],
+               {
+                       "ok": self.okbuttonClick ,
+                       "cancel": self.close
+               })
+
+       def okbuttonClick(self):
+               selection = self["adapterlist"].getCurrent()
+               print "selection:", selection
+               if selection is not None:
+                       self.session.open(AdapterSetup, selection)
+                       
+class NameserverSetup(Screen, ConfigListScreen):
+       def __init__(self, session):
+               Screen.__init__(self, session)
+               self.backupNameserverList = iNetwork.getNameserverList()[:]
+               print "backup-list:", self.backupNameserverList
+               
+               self["red"] = Label(_("Delete"))
+               self["green"] = Label(_("Add"))
+               
+               self.createConfig()
+               
+               self["actions"] = ActionMap(["OkCancelActions", "ColorActions"],
+               {
+                       "ok": self.ok,
+                       "cancel": self.cancel,
+                       "green": self.add,
+                       "red": self.remove
+               }, -2)
+
+               self.list = []
+               ConfigListScreen.__init__(self, self.list)
+               self.createSetup()
+               
+       def createConfig(self):
+               self.nameservers = iNetwork.getNameserverList()
+               self.nameserverEntries = []
+               
+               for nameserver in self.nameservers:
+                       self.nameserverEntries.append(NoSave(ConfigIP(default=nameserver)))
+                       
+       def createSetup(self):
+               self.list = []
+
+               #self.nameserverConfigEntries = []
+               for i in range(len(self.nameserverEntries)):
+                       self.list.append(getConfigListEntry(_("Nameserver %d") % (i + 1), self.nameserverEntries[i]))
+               
+               self["config"].list = self.list
+               self["config"].l.setList(self.list)
+
+       def ok(self):
+               iNetwork.clearNameservers()
+               for nameserver in self.nameserverEntries:
+                       iNetwork.addNameserver(nameserver.value)
+               iNetwork.writeNameserverConfig()
+               self.close()
+       
+       def cancel(self):
+               iNetwork.clearNameservers()
+               print "backup-list:", self.backupNameserverList
+               for nameserver in self.backupNameserverList:
+                       iNetwork.addNameserver(nameserver)
+               self.close()
+       
+       def add(self):
+               iNetwork.addNameserver([0,0,0,0])
+               self.createConfig()
+               self.createSetup()
+       
+       def remove(self):
+               print "currentIndex:", self["config"].getCurrentIndex()
+               
+               index = self["config"].getCurrentIndex()
+               if index < len(self.nameservers):
+                       iNetwork.removeNameserver(self.nameservers[index])
+                       self.createConfig()
+                       self.createSetup()
+
+               
+class AdapterSetup(Screen, ConfigListScreen):
+       def __init__(self, session, iface):
+               Screen.__init__(self, session)
+               
+               self.iface = iface
+
+               print iNetwork.getAdapterAttribute(self.iface, "dhcp")
+               self.dhcpConfigEntry = NoSave(ConfigYesNo(default=iNetwork.getAdapterAttribute(self.iface, "dhcp")))
+               self.hasGatewayConfigEntry = NoSave(ConfigYesNo(default=True))
+               self.ipConfigEntry = NoSave(ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "ip")))
+               self.netmaskConfigEntry = NoSave(ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "netmask")))
+               self.gatewayConfigEntry = NoSave(ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "gateway")))
         
+               self["iface"] = Label(iNetwork.getAdapterName(self.iface))
+                       
                self["actions"] = ActionMap(["SetupActions"],
                {
                        "ok": self.ok,
@@ -24,13 +127,22 @@ class NetworkSetup(Screen, ConfigListScreen):
        def createSetup(self):
                self.list = []
 
-               self.dhcpEntry = getConfigListEntry(_("Use DHCP"), config.network.dhcp)
+               self.dhcpEntry = getConfigListEntry(_("Use DHCP"), self.dhcpConfigEntry)
                self.list.append(self.dhcpEntry)
-               self.list.append(getConfigListEntry(_('IP Address'), config.network.ip))
-               if not config.network.dhcp.value:
-                       self.list.append(getConfigListEntry(_('Netmask'), config.network.netmask))
-                       self.list.append(getConfigListEntry(_('Gateway'), config.network.gateway))
-                       self.list.append(getConfigListEntry(_('Nameserver'), config.network.dns))
+               if not self.dhcpConfigEntry.value:
+                       self.list.append(getConfigListEntry(_('IP Address'), self.ipConfigEntry))
+                       self.list.append(getConfigListEntry(_('Netmask'), self.netmaskConfigEntry))
+                       self.list.append(getConfigListEntry(_('Use a gateway'), self.hasGatewayConfigEntry))
+                       if self.hasGatewayConfigEntry.value:
+                               self.list.append(getConfigListEntry(_('Gateway'), self.gatewayConfigEntry))
+               
+               self.extended = None
+               for p in plugins.getPlugins(PluginDescriptor.WHERE_NETWORKSETUP):
+                       callFnc = p.__call__(self.iface)
+                       if callFnc is not None:
+                               self.extended = callFnc
+                               self.extendedSetup = getConfigListEntry(_('Extended Setup...'), NoSave(ConfigNothing()))
+                               self.list.append(self.extendedSetup)
 
                self["config"].list = self.list
                self["config"].l.setList(self.list)
@@ -49,16 +161,24 @@ class NetworkSetup(Screen, ConfigListScreen):
                self.createSetup()
 
        def ok(self):
-               #for x in self["config"].list:
-                       #x[1].save()
-               
-               iNetwork.deactivateNetworkConfig()
-               iNetwork.writeNetworkConfig()    
-               iNetwork.activateNetworkConfig()
-               self.close()
+               selection = self["config"].getCurrent()
+               if selection == self.extendedSetup:
+                       self.extended(self.session, self.iface)
+               else:
+                       iNetwork.setAdapterAttribute(self.iface, "dhcp", self.dhcpConfigEntry.value)
+                       iNetwork.setAdapterAttribute(self.iface, "ip", self.ipConfigEntry.value)
+                       iNetwork.setAdapterAttribute(self.iface, "netmask", self.netmaskConfigEntry.value)
+                       if self.hasGatewayConfigEntry.value:
+                               iNetwork.setAdapterAttribute(self.iface, "gateway", self.gatewayConfigEntry.value)
+                       else:
+                               iNetwork.removeAdapterAttribute(self.iface, "gateway")
+                                       
+                                       
+                       iNetwork.deactivateNetworkConfig()
+                       iNetwork.writeNetworkConfig()    
+                       iNetwork.activateNetworkConfig()
+                       self.close()
 
        def cancel(self):
-               for x in self["config"].list:
-                       x[1].cancel()
-               iNetwork.loadNetworkConfig()
+               iNetwork.getInterfaces()
                self.close()