BackupRestore.py: Fix untranslatable string (Patch by Benny De Tandt)
[enigma2.git] / lib / python / Plugins / SystemPlugins / SoftwareManager / BackupRestore.py
index f92472d31218756c140a839babcee4527dc8cd12..3db6e82d96e9a0e946be91cd61b6bb8ac84262c0 100755 (executable)
@@ -4,13 +4,14 @@ from Screens.Console import Console
 from Components.ActionMap import ActionMap, NumberActionMap
 from Components.Pixmap import Pixmap
 from Components.Label import Label
+from Components.Sources.StaticText import StaticText
 from Components.MenuList import MenuList
 from Components.config import getConfigListEntry, configfile, ConfigSelection, ConfigSubsection, ConfigText, ConfigLocations
 from Components.config import config
 from Components.ConfigList import ConfigList,ConfigListScreen
 from Components.FileList import MultiFileSelectList
 from Plugins.Plugin import PluginDescriptor
-from enigma import eTimer
+from enigma import eTimer, eEnv
 from Tools.Directories import *
 from os import popen, path, makedirs, listdir, access, stat, rename, remove, W_OK, R_OK
 from time import gmtime, strftime, localtime
@@ -19,7 +20,7 @@ from datetime import date
 
 config.plugins.configurationbackup = ConfigSubsection()
 config.plugins.configurationbackup.backuplocation = ConfigText(default = '/media/hdd/', visible_width = 50, fixed_size = False)
-config.plugins.configurationbackup.backupdirs = ConfigLocations(default=['/etc/enigma2/', '/etc/network/interfaces', '/etc/wpa_supplicant.conf'])
+config.plugins.configurationbackup.backupdirs = ConfigLocations(default=[eEnv.resolve('${sysconfdir}/enigma2/'), '/etc/network/interfaces', '/etc/wpa_supplicant.conf', '/etc/resolv.conf', '/etc/default_gw', '/etc/hostname'])
 
 def getBackupPath():
        backuppath = config.plugins.configurationbackup.backuplocation.value
@@ -34,7 +35,7 @@ def getBackupFilename():
 
 class BackupScreen(Screen, ConfigListScreen):
        skin = """
-               <screen position="135,144" size="350,310" title="Backup running..." >
+               <screen position="135,144" size="350,310" title="Backup is running" >
                <widget name="config" position="10,10" size="330,250" transparent="1" scrollbarMode="showOnDemand" />
                </screen>"""
                
@@ -62,9 +63,10 @@ class BackupScreen(Screen, ConfigListScreen):
                self.setWindowTitle()
 
        def setWindowTitle(self):
-               self.setTitle(_("Backup running..."))
+               self.setTitle(_("Backup is running..."))
 
        def doBackup(self):
+               configfile.save()
                try:
                        if (path.exists(self.backuppath) == False):
                                makedirs(self.backuppath)
@@ -76,14 +78,14 @@ class BackupScreen(Screen, ConfigListScreen):
                                        remove(self.newfilename)
                                rename(self.fullbackupfilename,self.newfilename)
                        if self.finished_cb:
-                               self.session.openWithCallback(self.finished_cb, Console, title = _("Backup running"), cmdlist = ["tar -czvf " + self.fullbackupfilename + " " + self.backupdirs],finishedCallback = self.backupFinishedCB,closeOnSuccess = True)
+                               self.session.openWithCallback(self.finished_cb, Console, title = _("Backup is running..."), cmdlist = ["tar -czvf " + self.fullbackupfilename + " " + self.backupdirs],finishedCallback = self.backupFinishedCB,closeOnSuccess = True)
                        else:
-                               self.session.open(Console, title = _("Backup running"), cmdlist = ["tar -czvf " + self.fullbackupfilename + " " + self.backupdirs],finishedCallback = self.backupFinishedCB, closeOnSuccess = True)
+                               self.session.open(Console, title = _("Backup is running..."), cmdlist = ["tar -czvf " + self.fullbackupfilename + " " + self.backupdirs],finishedCallback = self.backupFinishedCB, closeOnSuccess = True)
                except OSError:
                        if self.finished_cb:
-                               self.session.openWithCallback(self.finished_cb, MessageBox, _("Sorry your backup destination is not writeable.\nPlease choose an other one."), MessageBox.TYPE_INFO)
+                               self.session.openWithCallback(self.finished_cb, MessageBox, _("Sorry your backup destination is not writeable.\nPlease choose an other one."), MessageBox.TYPE_INFO, timeout = 10 )
                        else:
-                               self.session.openWithCallback(self.backupErrorCB,MessageBox, _("Sorry your backup destination is not writeable.\nPlease choose an other one."), MessageBox.TYPE_INFO)
+                               self.session.openWithCallback(self.backupErrorCB,MessageBox, _("Sorry your backup destination is not writeable.\nPlease choose an other one."), MessageBox.TYPE_INFO, timeout = 10 )
 
        def backupFinishedCB(self,retval = None):
                self.close(True)
@@ -98,22 +100,21 @@ class BackupScreen(Screen, ConfigListScreen):
 
 class BackupSelection(Screen):
        skin = """
-       <screen position="135,125" size="450,310" title="Select files/folders to backup...">
-               <widget name="checkList" position="10,10" size="430,250" transparent="1" scrollbarMode="showOnDemand" />
-               <ePixmap position="0,265" zPosition="1" size="135,40" pixmap="skin_default/buttons/red.png" transparent="1" alphatest="on" />
-               <widget name="key_red" position="0,265" zPosition="2" size="135,40" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />       
-               <ePixmap position="135,265" zPosition="1" size="135,40" pixmap="skin_default/buttons/green.png" transparent="1" alphatest="on" />
-               <widget name="key_green" position="135,265" zPosition="2" size="135,40" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
-               <ePixmap position="270,265" zPosition="1" size="135,40" pixmap="skin_default/buttons/yellow.png" transparent="1" alphatest="on" />
-               <widget name="key_yellow" position="270,265" zPosition="2" size="135,40" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
-       </screen>"""
+               <screen name="BackupSelection" position="center,center" size="560,400" title="Select files/folders to backup">
+                       <ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
+                       <ePixmap pixmap="skin_default/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
+                       <ePixmap pixmap="skin_default/buttons/yellow.png" position="280,0" size="140,40" alphatest="on" />
+                       <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
+                       <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
+                       <widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
+                       <widget name="checkList" position="5,50" size="550,250" transparent="1" scrollbarMode="showOnDemand" />
+               </screen>"""
 
        def __init__(self, session):
                Screen.__init__(self, session)
-               self.skin_path = plugin_path
-               self["key_red"] = Label(_("Cancel"))
-               self["key_green"] = Label(_("Save"))
-               self["key_yellow"] = Label()
+               self["key_red"] = StaticText(_("Cancel"))
+               self["key_green"] = StaticText(_("Save"))
+               self["key_yellow"] = StaticText()
                
                self.selectedFiles = config.plugins.configurationbackup.backupdirs.value
                defaultDir = '/'
@@ -144,7 +145,7 @@ class BackupSelection(Screen):
                self.selectionChanged()
 
        def setWindowTitle(self):
-               self.setTitle(_("Select files/folders to backup..."))
+               self.setTitle(_("Select files/folders to backup"))
 
        def selectionChanged(self):
                current = self["checkList"].getCurrent()[0]
@@ -187,22 +188,23 @@ class BackupSelection(Screen):
 
 class RestoreMenu(Screen):
        skin = """
-               <screen position="135,144" size="450,300" title="Restore backups..." >
-               <widget name="filelist" position="10,10" size="430,240" scrollbarMode="showOnDemand" />
-               <widget name="cancel" position="120,255" size="100,40" pixmap="~/red.png" transparent="1" alphatest="on" />             
-               <widget name="canceltext" position="0,0" size="0,0" valign="center" halign="center" zPosition="2" font="Regular;20" transparent="1" foregroundColor="black" />
-               <widget name="restore" position="230,255" size="100,40" pixmap="~/yellow.png" transparent="1" alphatest="on" />
-               <widget name="restoretext" position="0,0" size="0,0" valign="center" halign="center" zPosition="2" font="Regular;20" transparent="1"  foregroundColor="black" />
+               <screen name="RestoreMenu" position="center,center" size="560,400" title="Restore backups" >
+                       <ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
+                       <ePixmap pixmap="skin_default/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
+                       <ePixmap pixmap="skin_default/buttons/yellow.png" position="280,0" size="140,40" alphatest="on" />
+                       <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
+                       <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
+                       <widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
+                       <widget name="filelist" position="5,50" size="550,230" scrollbarMode="showOnDemand" />
                </screen>"""
 
        def __init__(self, session, plugin_path):
                Screen.__init__(self, session)
                self.skin_path = plugin_path
                
-               self["canceltext"] = Label(_("Cancel"))
-               self["restoretext"] = Label(_("Restore"))
-               self["restore"] = Pixmap()
-               self["cancel"] = Pixmap()
+               self["key_red"] = StaticText(_("Cancel"))
+               self["key_green"] = StaticText(_("Restore"))
+               self["key_yellow"] = StaticText(_("Delete"))
 
                self.sel = []
                self.val = []
@@ -220,7 +222,8 @@ class RestoreMenu(Screen):
                self["shortcuts"] = ActionMap(["ShortcutActions"],
                {
                        "red": self.keyCancel,
-                       "yellow": self.KeyOk,
+                       "green": self.KeyOk,
+                       "yellow": self.deleteFile,
                })
                self.flist = []
                self["filelist"] = MenuList(self.flist)
@@ -231,7 +234,7 @@ class RestoreMenu(Screen):
                self.setWindowTitle()
 
        def setWindowTitle(self):
-               self.setTitle(_("Restore backups..."))
+               self.setTitle(_("Restore backups"))
 
 
        def fill_list(self):
@@ -243,13 +246,14 @@ class RestoreMenu(Screen):
                        if (file.endswith(".tar.gz")):
                                self.flist.append((file))
                                self.entry = True
-                               self["filelist"].l.setList(self.flist)
+               self["filelist"].l.setList(self.flist)
 
        def KeyOk(self):
                if (self.exe == False) and (self.entry == True):
                        self.sel = self["filelist"].getCurrent()
-                       self.val = self.path + self.sel
-                       self.session.openWithCallback(self.startRestore, MessageBox, _("Are you sure you want to restore\nfollowing backup:\n" + self.sel + "\nSystem will restart after the restore!"))
+                       if self.sel:
+                               self.val = self.path + "/" + self.sel
+                               self.session.openWithCallback(self.startRestore, MessageBox, _("Are you sure you want to restore\nfollowing backup:\n") + self.sel + _("\nSystem will restart after the restore!"))
 
        def keyCancel(self):
                self.close()
@@ -259,12 +263,25 @@ class RestoreMenu(Screen):
                        self.exe = True
                        self.session.open(Console, title = _("Restore running"), cmdlist = ["tar -xzvf " + self.path + "/" + self.sel + " -C /", "killall -9 enigma2"])
 
-       def Exit(self):
-               self.close()
+       def deleteFile(self):
+               if (self.exe == False) and (self.entry == True):
+                       self.sel = self["filelist"].getCurrent()
+                       if self.sel:
+                               self.val = self.path + "/" + self.sel
+                               self.session.openWithCallback(self.startDelete, MessageBox, _("Are you sure you want to delete\nfollowing backup:\n") + self.sel)
+
+       def startDelete(self, ret = False):
+               if (ret == True):
+                       self.exe = True
+                       print "removing:",self.val
+                       if (path.exists(self.val) == True):
+                               remove(self.val)
+                       self.exe = False
+                       self.fill_list()
 
 class RestoreScreen(Screen, ConfigListScreen):
        skin = """
-               <screen position="135,144" size="350,310" title="Restore running..." >
+               <screen position="135,144" size="350,310" title="Restore is running..." >
                <widget name="config" position="10,10" size="330,250" transparent="1" scrollbarMode="showOnDemand" />
                </screen>"""
                
@@ -272,7 +289,7 @@ class RestoreScreen(Screen, ConfigListScreen):
                Screen.__init__(self, session)
                self.session = session
                self.runRestore = runRestore
-               self["actions"] = ActionMap(["WizardActions", "DirectionActions"], 
+               self["actions"] = ActionMap(["WizardActions", "DirectionActions"],
                {
                        "ok": self.close,
                        "back": self.close,
@@ -292,13 +309,17 @@ class RestoreScreen(Screen, ConfigListScreen):
                self.setWindowTitle()
 
        def setWindowTitle(self):
-               self.setTitle(_("Restore running..."))
+               self.setTitle(_("Restore is running..."))
 
        def doRestore(self):
+               if path.exists("/proc/stb/vmpeg/0/dst_width"):
+                       restorecmdlist = ["tar -xzvf " + self.fullbackupfilename + " -C /", "echo 0 > /proc/stb/vmpeg/0/dst_height", "echo 0 > /proc/stb/vmpeg/0/dst_left", "echo 0 > /proc/stb/vmpeg/0/dst_top", "echo 0 > /proc/stb/vmpeg/0/dst_width", "killall -9 enigma2"]
+               else:
+                       restorecmdlist = ["tar -xzvf " + self.fullbackupfilename + " -C /", "killall -9 enigma2"]
                if self.finished_cb:
-                       self.session.openWithCallback(self.finished_cb, Console, title = _("Restore running"), cmdlist = ["tar -xzvf " + self.fullbackupfilename + " -C /", "killall -9 enigma2"])
+                       self.session.openWithCallback(self.finished_cb, Console, title = _("Restore is running..."), cmdlist = restorecmdlist)
                else:
-                       self.session.open(Console, title = _("Restore running"), cmdlist = ["tar -xzvf " + self.fullbackupfilename + " -C /", "killall -9 enigma2"])
+                       self.session.open(Console, title = _("Restore is running..."), cmdlist = restorecmdlist)
 
        def backupFinishedCB(self,retval = None):
                self.close(True)
@@ -309,5 +330,3 @@ class RestoreScreen(Screen, ConfigListScreen):
        def runAsync(self, finished_cb):
                self.finished_cb = finished_cb
                self.doRestore()
-               
-       
\ No newline at end of file