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, ConfigSubsection
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"
}
MountPoints = {
"hdd" : "/media/hdd",
"usb" : "/media/usb",
"cf" : "/media/cf"
}
class BackupSetup(Screen):
skin = """
"""
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 = ConfigSelection(choices = [("full", _("full /etc directory")), ("settings", _("only /etc/enigma2 directory")), ("var", _("/var directory")), ("skin", _("/usr/share/enigma2 directory"))])
config.backup.location = ConfigSelection(choices = [("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 "Creating Backup Folder if not already there..."
if (os.path.exists(str(self.path)) == False):
os.makedirs(str(self.path))
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:
if os.path.ismount(MountPoints[str(currentConfigSelectionElement(config.backup.location))]):
self.createBackupfolders()
d = time.localtime()
dt = datetime.date(d.tm_year, d.tm_mon, d.tm_mday)
self.path = BackupPath[str(currentConfigSelectionElement(config.backup.location))]
if currentConfigSelectionElement(config.backup.type) == "full":
print "Backup Mode: Full"
self.session.open(Console, title = "Backup running", cmdlist = ["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, title = "Backup running", cmdlist = ["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, title = "Backup running", cmdlist = [ "tar -czvf " + self.path + "/" + str(dt) + "_var_backup.tar.gz /var/"])
if currentConfigSelectionElement(config.backup.type) == "skin":
print "Backup Mode: skin"
self.session.open(Console, title ="Backup running", cmdlist = [ "tar -czvf " + self.path + "/" + str(dt) + "_skin_backup.tar.gz /usr/share/enigma2/"])
else:
self.session.open(MessageBox, _("Sorry your Backup destination does not exist\n\nPlease choose an other one."), MessageBox.TYPE_INFO)
class RestoreMenu(Screen):
skin = """
"""
def __init__(self, session, args = None):
Screen.__init__(self, session)
self.skin_path = plugin_path
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[config.backup.location.value]
if (os.path.exists(str(self.path)) == False):
os.makedirs(str(self.path))
for file in os.listdir(str(self.path)):
if (file.endswith(".tar.gz")):
self.flist.append((file))
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" + self.sel + "\nEnigma2 will restart after the restore"))
def keyCancel(self):
self.close()
def startRestore(self, ret = False):
if (ret == True):
self.exe = True
self.session.open(Console, title = "Restore running", cmdlist = ["tar -xzvf " + self.path + "/" + self.sel + " -C /", "killall enigma2"])
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)