-add Networkbrowser and Mountmanager to easy browse network for networkdevices and...
[vuplus_dvbapp-plugin] / networkbrowser / src / MountManager.py
diff --git a/networkbrowser/src/MountManager.py b/networkbrowser/src/MountManager.py
new file mode 100755 (executable)
index 0000000..8a17d7f
--- /dev/null
@@ -0,0 +1,137 @@
+# -*- coding: utf-8 -*-\r
+# for localized messages\r
+from __init__ import _\r
+from Screens.Screen import Screen\r
+from Screens.MessageBox import MessageBox\r
+from Screens.VirtualKeyBoard import VirtualKeyBoard\r
+from enigma import loadPNG, eListboxPythonMultiContent, gFont, eTimer\r
+from Components.Label import Label\r
+from Components.Pixmap import Pixmap\r
+from Components.ActionMap import ActionMap\r
+from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmapAlphaTest\r
+from Components.Network import iNetwork\r
+from Components.Sources.List import List\r
+from Tools.LoadPixmap import LoadPixmap\r
+from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE\r
+from os import system, popen, path as os_path, listdir\r
+\r
+from MountView import AutoMountView\r
+from MountEdit import AutoMountEdit\r
+from AutoMount import iAutoMount, AutoMount\r
+from UserManager import UserManager\r
+\r
+\r
+class AutoMountManager(Screen):\r
+       skin = """\r
+               <screen name="AutoMountManager" position="90,140" size="560,350" title="AutoMountManager">\r
+                       <widget source="config" render="Listbox" position="10,10" size="540,220" scrollbarMode="showOnDemand" >\r
+                               <convert type="TemplatedMultiContent">\r
+                                       {"template": [\r
+                                                       MultiContentEntryText(pos = (0, 3), size = (480, 25), font=0, flags = RT_HALIGN_LEFT, text = 0), # index 2 is the Menu Titel\r
+                                                       MultiContentEntryText(pos = (10, 29), size = (480, 17), font=1, flags = RT_HALIGN_LEFT, text = 2), # index 3 is the Description\r
+                                                       MultiContentEntryPixmapAlphaTest(pos = (500, 1), size = (48, 48), png = 3), # index 4 is the pixmap\r
+                                               ],\r
+                                       "fonts": [gFont("Regular", 20),gFont("Regular", 14)],\r
+                                       "itemHeight": 50\r
+                                       }\r
+                               </convert>\r
+                       </widget>\r
+                       <widget name="introduction" position="90,260" size="300,20" zPosition="10" font="Regular;21" halign="center" transparent="1" />\r
+                       <widget name="ButtonRedtext" position="410,305" size="140,21" zPosition="10" font="Regular;21" transparent="1" />\r
+                       <widget name="ButtonRed" pixmap="skin_default/buttons/button_red.png" position="390,305" zPosition="10" size="15,16" transparent="1" alphatest="on" />\r
+                       <ePixmap pixmap="skin_default/bottombar.png" position="10,250" size="540,120" zPosition="1" transparent="1" alphatest="on" />\r
+               </screen>"""\r
+       def __init__(self, session, iface ,plugin_path):\r
+               self.skin_path = plugin_path\r
+               self.session = session\r
+               self.hostname = None\r
+               self.restartLanRef = None\r
+               Screen.__init__(self, session)\r
+               self["shortcuts"] = ActionMap(["ShortcutActions", "WizardActions"],\r
+               {\r
+                       "ok": self.keyOK,\r
+                       "back": self.exit,\r
+                       "cancel": self.exit,\r
+                       "red": self.exit,\r
+               })\r
+               self["ButtonRed"] = Pixmap()\r
+               self["ButtonRedtext"] = Label(_("Close"))\r
+               self["introduction"] = Label(_("Press OK to select."))\r
+               \r
+               self.list = []\r
+               self["config"] = List(self.list)\r
+               self.updateList()\r
+               self.onClose.append(self.cleanup)       \r
+               self.onShown.append(self.setWindowTitle)\r
+\r
+       def setWindowTitle(self):\r
+               self.setTitle(_("MountManager"))\r
+               \r
+       def cleanup(self):\r
+               iNetwork.stopRestartConsole()\r
+               iNetwork.stopGetInterfacesConsole()\r
+\r
+       def updateList(self):\r
+               self.list = []\r
+               okpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_PLUGINS, "SystemPlugins/NetworkBrowser/icons/ok.png"))\r
+               self.list.append((_("Add new network mount point"),"add", _("Add a new NFS or CIFS mount point to your Dreambox."), okpng ))\r
+               self.list.append((_("Mountpoints management"),"view", _("View, edit or delete mountpoints on your Dreambox."), okpng ))\r
+               self.list.append((_("User management"),"user", _("View, edit or delete usernames and passwords for your network."), okpng))\r
+               self.list.append((_("Change hostname"),"hostname", _("Change the hostname of your Dreambox."), okpng))\r
+               self["config"].setList(self.list)\r
+\r
+\r
+       def exit(self):\r
+               self.close()\r
+               \r
+       def keyOK(self, returnValue = None):\r
+               if returnValue == None:\r
+                       returnValue = self["config"].getCurrent()[1]\r
+                       if returnValue is "add":\r
+                               self.addMount()\r
+                       elif returnValue is "view":\r
+                               self.viewMounts()\r
+                       elif returnValue is "user":\r
+                               self.userEdit()\r
+                       elif returnValue is "hostname":\r
+                               self.hostEdit()\r
+       def addMount(self):\r
+               self.session.open(AutoMountEdit, self.skin_path)\r
+\r
+       def viewMounts(self):\r
+               self.session.open(AutoMountView, self.skin_path)\r
+               \r
+       def userEdit(self):\r
+               self.session.open(UserManager, self.skin_path)\r
+\r
+       def hostEdit(self):\r
+               if os_path.exists("/etc/hostname"):\r
+                       fp = open('/etc/hostname', 'r')\r
+                       self.hostname = fp.read()\r
+                       fp.close()\r
+                       self.session.openWithCallback(self.hostnameCallback, VirtualKeyBoard, title = (_("Enter new hostname for your Dreambox")), text = self.hostname)\r
+       \r
+       def hostnameCallback(self, callback = None):\r
+               if callback is not None and len(callback):\r
+                       fp = open('/etc/hostname', 'w+')\r
+                       fp.write(callback)\r
+                       fp.close()\r
+                       self.restartLan()\r
+\r
+       def restartLan(self):\r
+               iNetwork.restartNetwork(self.restartLanDataAvail)\r
+               self.restartLanRef = self.session.openWithCallback(self.restartfinishedCB, MessageBox, _("Please wait while your network is restarting..."), type = MessageBox.TYPE_INFO, enable_input = False)\r
+                       \r
+       def restartLanDataAvail(self, data):\r
+               if data is True:\r
+                       iNetwork.getInterfaces(self.getInterfacesDataAvail)\r
+\r
+       def getInterfacesDataAvail(self, data):\r
+               if data is True:\r
+                       if self.restartLanRef.execing:\r
+                               self.restartLanRef.close(True)\r
+\r
+       def restartfinishedCB(self,data):\r
+               if data is True:\r
+                       self.session.open(MessageBox, _("Finished restarting your network"), type = MessageBox.TYPE_INFO, timeout = 10, default = False)\r
+\r