add ConfigurationBackup plugin
authorFelix Domke <tmbinc@elitedvb.net>
Sun, 5 Mar 2006 21:47:47 +0000 (21:47 +0000)
committerFelix Domke <tmbinc@elitedvb.net>
Sun, 5 Mar 2006 21:47:47 +0000 (21:47 +0000)
lib/python/Plugins/SystemPlugins/ConfigurationBackup/.cvsignore [new file with mode: 0644]
lib/python/Plugins/SystemPlugins/ConfigurationBackup/Makefile.am [new file with mode: 0644]
lib/python/Plugins/SystemPlugins/ConfigurationBackup/__init__.py [new file with mode: 0644]
lib/python/Plugins/SystemPlugins/ConfigurationBackup/backup.png [new file with mode: 0644]
lib/python/Plugins/SystemPlugins/ConfigurationBackup/blue.png [new file with mode: 0644]
lib/python/Plugins/SystemPlugins/ConfigurationBackup/green.png [new file with mode: 0644]
lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py [new file with mode: 0644]
lib/python/Plugins/SystemPlugins/ConfigurationBackup/red.png [new file with mode: 0644]
lib/python/Plugins/SystemPlugins/ConfigurationBackup/yellow.png [new file with mode: 0644]

diff --git a/lib/python/Plugins/SystemPlugins/ConfigurationBackup/.cvsignore b/lib/python/Plugins/SystemPlugins/ConfigurationBackup/.cvsignore
new file mode 100644 (file)
index 0000000..138b9cc
--- /dev/null
@@ -0,0 +1,4 @@
+*.pyc
+*.pyo
+Makefile
+Makefile.in
diff --git a/lib/python/Plugins/SystemPlugins/ConfigurationBackup/Makefile.am b/lib/python/Plugins/SystemPlugins/ConfigurationBackup/Makefile.am
new file mode 100644 (file)
index 0000000..6ad19f4
--- /dev/null
@@ -0,0 +1,7 @@
+installdir = $(LIBDIR)/enigma2/python/Plugins/SystemPlugins/ConfigurationBackup
+
+install_PYTHON =       \
+       __init__.py \
+       plugin.py       red.png yellow.png green.png blue.png backup.png
+
\ No newline at end of file
diff --git a/lib/python/Plugins/SystemPlugins/ConfigurationBackup/__init__.py b/lib/python/Plugins/SystemPlugins/ConfigurationBackup/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/lib/python/Plugins/SystemPlugins/ConfigurationBackup/backup.png b/lib/python/Plugins/SystemPlugins/ConfigurationBackup/backup.png
new file mode 100644 (file)
index 0000000..bb219a4
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/ConfigurationBackup/backup.png differ
diff --git a/lib/python/Plugins/SystemPlugins/ConfigurationBackup/blue.png b/lib/python/Plugins/SystemPlugins/ConfigurationBackup/blue.png
new file mode 100644 (file)
index 0000000..f75db7a
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/ConfigurationBackup/blue.png differ
diff --git a/lib/python/Plugins/SystemPlugins/ConfigurationBackup/green.png b/lib/python/Plugins/SystemPlugins/ConfigurationBackup/green.png
new file mode 100644 (file)
index 0000000..118c3f4
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/ConfigurationBackup/green.png differ
diff --git a/lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py b/lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py
new file mode 100644 (file)
index 0000000..162e61d
--- /dev/null
@@ -0,0 +1,227 @@
+from enigma import *
+from Screens.Screen import Screen
+from Screens.MessageBox import MessageBox
+from Screens.Console import Console
+from Components.ActionMap import ActionMap, NumberActionMap
+from Components.Pixmap import *
+from Components.Pixmap import Pixmap
+from Components.Label import Label
+from Components.MenuList import MenuList
+from Components.config import config, configSelection, configSelection, getConfigListEntry, configElement, ConfigSubsection, currentConfigSelectionElement
+from Components.ConfigList import ConfigList
+from Plugins.Plugin import PluginDescriptor
+
+from Tools.NumericalTextInput import *
+from Tools.Directories import *
+import os
+import string
+import time
+import datetime
+
+plugin_path = ""
+
+BackupPath = {
+               "hdd" : "/media/hdd/backup",
+               "usb" : "/media/usb/backup",
+               "cf" : "/media/cf/backup"
+       }
+
+class BackupSetup(Screen):
+       skin = """
+               <screen position="100,100" size="400,400" title="Backup and Restore" >
+                       <widget name="config" position="5,10" size="380,350" />
+                       <widget name="ok" position="10,365" size="53,30" pixmap="~/green.png" />
+                       <widget name="oktext" position="10,365" size="53,30" valign="center" halign="center" zPosition="2" font="Regular;20" transparent="1"  foregroundColor="black" />
+                       <widget name="cancel" position="73,365" size="100,30" pixmap="~/red.png" />
+                       <widget name="canceltext" position="73,365" size="100,30" valign="center" halign="center" zPosition="2" font="Regular;20" transparent="1" foregroundColor="black" />
+                       <widget name="restore" position="183,365" size="100,30" pixmap="~/yellow.png" />
+                       <widget name="restoretext" position="183,365" size="100,30" valign="center" halign="center" zPosition="2" font="Regular;20" transparent="1"  foregroundColor="black" />
+                       <widget name="backup" position="293,365" size="100,30" pixmap="~/blue.png" />
+                       <widget name="backuptext" position="293,365" size="100,30" valign="center" halign="center" zPosition="2" font="Regular;20" transparent="1"  foregroundColor="black" />
+               </screen>"""
+               
+       def keyLeft(self):
+               self["config"].handleKey(config.key["prevElement"])
+
+       def keyRight(self):
+               self["config"].handleKey(config.key["nextElement"])
+
+       def keyNumberGlobal(self, number):
+               print "You pressed number " + str(number)
+               if (self["config"].getCurrent()[1].parent.enabled == True):
+                       self["config"].handleKey(config.key[str(number)])
+
+       def keyCancel(self):
+               for x in self["config"].list:
+                       x[1].cancel()
+               self.close()
+               
+       def keySave(self):
+               for x in self["config"].list:
+                       x[1].save()
+               self.close()
+       
+       def __init__(self, session, args = None):
+               Screen.__init__(self, session)
+               self.skin_path = plugin_path
+               
+               self["oktext"] = Label(_("OK"))
+               self["canceltext"] = Label(_("Cancel"))
+               self["backuptext"] = Label(_("Backup"))
+               self["restoretext"] = Label(_("Restore"))
+               self["restore"] = Pixmap()
+               self["backup"] = Pixmap()
+               self["ok"] = Pixmap()
+               self["cancel"] = Pixmap()
+
+               self.path = ""
+               self.list = []
+               self["config"] = ConfigList(self.list)
+               self.createSetup()
+
+               self["actions"] = NumberActionMap(["SetupActions"],
+               {
+                       "ok": self.keySave,
+                       "cancel": self.keyCancel,
+                       "left": self.keyLeft,
+                       "right": self.keyRight
+               }, -1)
+               
+               self["shortcuts"] = ActionMap(["ShortcutActions"],
+               {
+                       "red": self.keyCancel,
+                       "green": self.keySave,
+                       "blue": self.Backup,
+                       "yellow": self.Restore,
+               })
+               
+
+       def createSetup(self):
+               print "Creating BackupSetup"
+               self.list = [ ]
+               self["config"] = ConfigList(self.list)
+               config.backup = ConfigSubsection()
+               config.backup.type = configElement("config.backup.type", configSelection, 0, (("full", _("full /etc directory")), ("settings", _("only /etc/enigma2 directory")), ("var", _("/var directory"))))
+               config.backup.location = configElement("config.backup.location", configSelection, 0, (("usb", _("USB Stick")), ("cf", _("CF Drive")), ("hdd", _("Harddisk"))))
+               self.list.append(getConfigListEntry(_("Backup Mode"), config.backup.type))
+               self.list.append(getConfigListEntry(_("Backup Location"), config.backup.location))
+               
+
+       def createBackupfolders(self):
+               self.path = BackupPath[str(currentConfigSelectionElement(config.backup.location))]
+               print "BackupPath: ", str(self.path)
+               print "Creating Backup Folder if not already there..."
+               cmd = "[ ! -e " + self.path + " ] && mkdir " + self.path
+               print "Commandstring: " + str(cmd)
+               os.system(cmd)
+
+       def Backup(self):
+               print "this will start the backup now!"
+               self.session.openWithCallback(self.runBackup, MessageBox, _("Do you want to backup now?\nAfter pressing OK, please wait!"))     
+
+       def Restore(self):
+               print "this will start the restore now!"
+               self.session.open(RestoreMenu)
+
+       def runBackup(self, result):
+               if result:
+                       self.createBackupfolders()
+                       d = time.localtime()
+                       dt = datetime.date(d.tm_year, d.tm_mon, d.tm_mday)
+                       print "Backup Time: " + str(dt)
+                       self.path = BackupPath[str(currentConfigSelectionElement(config.backup.location))]
+                       print "BackupPath: ", str(self.path)
+                       if currentConfigSelectionElement(config.backup.type) == "full":
+                               print "Backup Mode: Full"
+                               self.session.open(Console, ["Backup running", "tar -czvf " + self.path + "/" + str(dt) + "_full_backup.tar.gz /etc/"])
+                       if currentConfigSelectionElement(config.backup.type) == "settings":
+                               print "Backup Mode: Settings"
+                               self.session.open(Console, ["Backup running", "tar -czvf " + self.path + "/" + str(dt) + "_settings_backup.tar.gz /etc/enigma2/"])
+                       if currentConfigSelectionElement(config.backup.type) == "var":
+                               print "Backup Mode: var"
+                               self.session.open(Console, ["Backup running", "tar -czvf " + self.path + "/" + str(dt) + "_var_backup.tar.gz /var/"])
+
+
+class RestoreMenu(Screen):
+       skin = """
+               <screen position="100,100" size="400,400" title="Restore Backups" >
+               <widget name="filelist" position="5,10" size="380,350" scrollbarMode="showOnDemand" />
+               <widget name="cancel" position="73,365" size="100,30" pixmap="~/red.png" />
+               <widget name="canceltext" position="73,365" size="100,30" valign="center" halign="center" zPosition="2" font="Regular;20" transparent="1" foregroundColor="black" />
+               <widget name="restore" position="183,365" size="100,30" pixmap="~/yellow.png" />
+               <widget name="restoretext" position="183,365" size="100,30" valign="center" halign="center" zPosition="2" font="Regular;20" transparent="1"  foregroundColor="black" />
+               <widget name="text0" position="0,270" size="350,20" font="Regular;20" />
+               </screen>"""
+
+       def __init__(self, session, args = None):
+               Screen.__init__(self, session)
+               self.skin_path = plugin_path
+               
+               self['text0'] = Label("")
+               self["canceltext"] = Label(_("Cancel"))
+               self["restoretext"] = Label(_("Restore"))
+               self["restore"] = Pixmap()
+               self["cancel"] = Pixmap()
+               
+               self.sel = []
+               self.val = []
+               self.entry = False
+               self.exe = False
+               
+               self.path = ""
+
+               self["actions"] = NumberActionMap(["SetupActions"],
+               {
+                       "ok": self.KeyOk,
+                       "cancel": self.keyCancel
+               }, -1)
+               
+               self["shortcuts"] = ActionMap(["ShortcutActions"],
+               {
+                       "red": self.keyCancel,
+                       "yellow": self.KeyOk,
+               })
+               self.flist = []
+               self["filelist"] = MenuList(self.flist)
+               self.fill_list()
+
+       def fill_list(self):
+               self.flist = []
+               self.path = BackupPath[str(currentConfigSelectionElement(config.backup.location))]
+               print "BackupPath: ", str(self.path)
+               dir = os.listdir(self.path)
+               for x in dir:
+                       bla = string.find(x, ".tar.gz")
+                       if (bla > 1):
+                               self.flist.append((x))
+                               self.entry = True
+                               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\n") + self.sel)
+
+       def keyCancel(self):
+               self.close()
+
+       def startRestore(self, ret = False):
+               if (ret == True):
+                       self.exe = True
+                       self['text0'].setText(_('One moment please...'))
+                       print "Restore Location: " + str(self.path)
+                       self.session.open(Console, ["Restore running", "tar -xzvf " + self.path + "/" + self.sel + " -C /"])
+
+       def Exit(self):
+               self.close()
+
+def BackupMain(session, **kwargs):
+       session.open(BackupSetup)
+
+def Plugins(path, **kwargs):
+       global plugin_path
+       plugin_path = path
+       return PluginDescriptor(name="Backup/Restore", description="Backup and Restore your Settings", icon="backup.png", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=BackupMain)
diff --git a/lib/python/Plugins/SystemPlugins/ConfigurationBackup/red.png b/lib/python/Plugins/SystemPlugins/ConfigurationBackup/red.png
new file mode 100644 (file)
index 0000000..4f7e97f
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/ConfigurationBackup/red.png differ
diff --git a/lib/python/Plugins/SystemPlugins/ConfigurationBackup/yellow.png b/lib/python/Plugins/SystemPlugins/ConfigurationBackup/yellow.png
new file mode 100644 (file)
index 0000000..48b3e68
Binary files /dev/null and b/lib/python/Plugins/SystemPlugins/ConfigurationBackup/yellow.png differ