add automatic downloading of latest image and possibility of backing up configuration...
[enigma2.git] / lib / python / Plugins / SystemPlugins / NFIFlash / downloader.py
index 7e34d2b..160620f 100644 (file)
@@ -120,10 +120,10 @@ class NFIDownload(Screen):
                        <ePixmap pixmap="skin_default/buttons/green.png" position="140,0" zPosition="0" size="140,40" transparent="1" alphatest="on" />
                        <ePixmap pixmap="skin_default/buttons/yellow.png" position="280,0" zPosition="0" size="140,40" transparent="1" alphatest="on" />
                        <ePixmap pixmap="skin_default/buttons/blue.png" position="420,0" zPosition="0" size="140,40" transparent="1" alphatest="on" />
-                       <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#9f1313" transparent="1" />
-                       <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#1f771f" transparent="1" />
-                       <widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#a08500" transparent="1" />
-                       <widget source="key_blue" render="Label" position="420,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#18188b" transparent="1" />
+                       <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;19" valign="center" halign="center" backgroundColor="#9f1313" transparent="1" />
+                       <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;19" valign="center" halign="center" backgroundColor="#1f771f" transparent="1" />
+                       <widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" font="Regular;19" valign="center" halign="center" backgroundColor="#a08500" transparent="1" />
+                       <widget source="key_blue" render="Label" position="420,0" zPosition="1" size="140,40" font="Regular;19" valign="center" halign="center" backgroundColor="#18188b" transparent="1" />
                        
                        <widget source="label_top" render="Label" position="10,44" size="240,20" font="Regular;16" />
                        <widget name="feedlist" position="10,66" size="250,222" scrollbarMode="showOnDemand" />
@@ -170,6 +170,7 @@ class NFIDownload(Screen):
                self.box = HardwareInfo().get_device_name()
                self.feed_base = "http://www.dreamboxupdate.com/opendreambox/1.5/%s/images/" % self.box
                self.nfi_filter = "" # "release" # only show NFIs containing this string, or all if ""
+               self.wizard_mode = False
 
                self["actions"] = ActionMap(["OkCancelActions", "ColorActions", "DirectionActions", "EPGSelectActions"],
                {
@@ -206,7 +207,7 @@ class NFIDownload(Screen):
                                        self["key_yellow"].text = (_("Change dir."))
                                else:
                                        self["key_yellow"].text = (_("Select image"))
-                       self["key_blue"].text = (_("Fix USB stick"))
+                       self["key_blue"].text = (_("USB stick wizard"))
 
        def switchList(self,to_where=None):
                if self.download or not self["feedlist"].isValid():
@@ -400,7 +401,7 @@ class NFIDownload(Screen):
                                print "couldn't save nfo file " + self.nfofilename
 
                        pos = self.nfo.find("MD5:")
-                       if pos > 0 and len(self.nfo) >= pos+5+32:                                       
+                       if pos > 0 and len(self.nfo) >= pos+5+32:
                                self["statusbar"].text = ("Please wait for md5 signature verification...")
                                cmd = "md5sum -c -"
                                md5 = self.nfo[pos+5:pos+5+32] + "  " + self.nfilocal
@@ -416,6 +417,8 @@ class NFIDownload(Screen):
                else:
                        self["statusbar"].text = "Download completed."
                        self.downloading(False)
+                       if self.wizard_mode:
+                               self.configBackup()
 
        def md5ready(self, retval):
                self.download_container.sendEOF()
@@ -424,9 +427,12 @@ class NFIDownload(Screen):
                print "[md5finished]: " + str(retval)
                self.download_container.appClosed.remove(self.md5finished)
                if retval==0:
-                       self["statusbar"].text = _(".NFI file passed md5sum signature check. You can safely flash this image!")
-                       self.switchList(self.LIST_SOURCE)
                        self.downloading(False)
+                       if self.wizard_mode:
+                               self.configBackup()
+                       else:
+                               self["statusbar"].text = _(".NFI file passed md5sum signature check. You can safely flash this image!")
+                               self.switchList(self.LIST_SOURCE)
                else:
                        self.session.openWithCallback(self.nfi_remove, MessageBox, (_("The md5sum validation failed, the file may be downloaded incompletely or be corrupted!") + "\n" + _("Remove the broken .NFI file?")), MessageBox.TYPE_YESNO)
 
@@ -613,10 +619,11 @@ class NFIDownload(Screen):
                        self["job_progressbar"].value = 1000
                        self["job_progresslabel"].text = "100.00%"
                        self["statusbar"].text = (".NFI Flasher bootable USB stick successfully created.")
-                       self.session.openWithCallback(self.remove_img, MessageBox, _("The .NFI Image flasher USB stick is now ready to use. Please download an .NFI image file from the feed server and save it on the stick. Then reboot and hold the 'Down' key on the front panel to boot the .NFI flasher from the stick!"), MessageBox.TYPE_INFO)
+                       self.session.openWithCallback(self.flasherFinishedCB, MessageBox, _("The USB stick is now bootable. Do you want to download the latest image from the feed server and save it on the stick?"), type = MessageBox.TYPE_YESNO)
                        self["destlist"].changeDir("/mnt/usb")
                else:
-                       self.session.openWithCallback(self.remove_img, MessageBox, (self.cmd + " " + _("failed") + ":\n" + str(self.taskstring)), MessageBox.TYPE_ERROR)
+                       self.session.openWithCallback(self.flasherFinishedCB, MessageBox, (self.cmd + " " + _("failed") + ":\n" + str(self.taskstring)), MessageBox.TYPE_ERROR)
+                       self.remove_img(True)
 
        def remove_img(self, answer):
                if fileExists("/tmp/nfiflasher_image.tar.bz2"):
@@ -626,6 +633,39 @@ class NFIDownload(Screen):
                self.downloading(False)
                self.switchList(self.LIST_SOURCE)
 
+       def flasherFinishedCB(self, answer):
+               if answer == True:
+                       self.wizard_mode = True
+                       self["feedlist"].moveSelection(0)
+                       self["path_bottom"].text = str(self["destlist"].getCurrentDirectory())
+                       self.nfo_download()
+                       self.nfi_download()
+
+       def configBackup(self):
+               self.session.openWithCallback(self.runBackup, MessageBox, _("The wizard can backup your current settings. Do you want to do a backup now?"))
+
+       def runBackup(self, result=None):
+               from Tools.Directories import createDir, isMount, pathExists
+               from time import localtime
+               from datetime import date
+               from Screens.Console import Console
+               if result:
+                       if isMount("/mnt/usb/"):
+                               if (pathExists("/mnt/usb/backup") == False):
+                                       createDir("/mnt/usb/backup", True)
+                               d = localtime()
+                               dt = date(d.tm_year, d.tm_mon, d.tm_mday)
+                               self.backup_file = "backup/" + str(dt) + "_settings_backup.tar.gz"
+                               self.session.open(Console, title = "Backup running", cmdlist = ["tar -czvf " + "/mnt/usb/" + self.backup_file + " /etc/enigma2/ /etc/network/interfaces /etc/wpa_supplicant.conf"], finishedCallback = self.backup_finished, closeOnSuccess = True)
+
+       def backup_finished(self):
+               wizardfd = open("/mnt/usb/wizard.nfo", "w")
+               if wizardfd:
+                       wizardfd.write("image: "+self["feedlist"].getNFIname()+'\n')
+                       wizardfd.write("configuration: "+self.backup_file+'\n')
+                       wizardfd.close()
+               self.session.open(MessageBox, _("To update your Dreambox firmware, please follow these steps:\n1) Turn off your box with the rear power switch and plug in the bootable USB stick.\n2) Turn mains back on and hold the DOWN button on the front panel pressed for 10 seconds.\n3) Wait for bootup and follow instructions of the wizard."), type = MessageBox.TYPE_INFO)
+
        def closeCB(self):
                if self.download:
                        self.download.stop()