1 from Screens.Screen import Screen
2 from Screens.MessageBox import MessageBox
3 from Screens.Console import Console
4 from Components.ActionMap import ActionMap, NumberActionMap
5 from Components.Pixmap import Pixmap
6 from Components.Label import Label
7 from Components.MenuList import MenuList
8 from Components.config import ConfigSelection, ConfigSubsection, KEY_LEFT, KEY_RIGHT, KEY_0, getConfigListEntry
9 from Components.ConfigList import ConfigList
10 from Plugins.Plugin import PluginDescriptor
12 from Tools.Directories import *
13 from os import path, makedirs, listdir
14 from time import localtime
15 from datetime import date
19 # FIXME: harddiskmanager has a better overview about available mointpoints!
21 "hdd" : "/media/hdd/backup",
22 "usb" : "/media/usb/backup",
23 "cf" : "/media/cf/backup"
32 class BackupSetup(Screen):
34 <screen position="135,144" size="450,300" title="Backup and Restore" >
35 <widget name="config" position="10,10" size="430,240" />
36 <widget name="cancel" position="10,255" size="100,40" pixmap="~/red.png" transparent="1" alphatest="on" />
37 <widget name="canceltext" position="0,0" size="0,0" valign="center" halign="center" zPosition="2" font="Regular;20" transparent="1" foregroundColor="black" />
38 <widget name="ok" position="120,255" size="100,40" pixmap="~/green.png" transparent="1" alphatest="on" />
39 <widget name="oktext" position="0,0" size="0,0" valign="center" halign="center" zPosition="2" font="Regular;20" transparent="1" foregroundColor="black" />
40 <widget name="restore" position="230,255" size="100,40" pixmap="~/yellow.png" transparent="1" alphatest="on" />
41 <widget name="restoretext" position="0,0" size="0,0" valign="center" halign="center" zPosition="2" font="Regular;20" transparent="1" foregroundColor="black" />
42 <widget name="backup" position="340,255" size="100,40" pixmap="~/blue.png" transparent="1" alphatest="on" />
43 <widget name="backuptext" position="0,0" size="0,0" valign="center" halign="center" zPosition="2" font="Regular;20" transparent="1" foregroundColor="black" />
47 self["config"].handleKey(KEY_LEFT)
50 self["config"].handleKey(KEY_RIGHT)
52 def keyNumberGlobal(self, number):
53 print "You pressed number", number
54 if (self["config"].getCurrent()[1].parent.enabled == True):
55 self["config"].handleKey(KEY_0+number)
58 for x in self["config"].list:
63 for x in self["config"].list:
67 def __init__(self, session, args = None):
68 Screen.__init__(self, session)
69 self.skin_path = plugin_path
71 self["oktext"] = Label(_("OK"))
72 self["canceltext"] = Label(_("Cancel"))
73 self["backuptext"] = Label(_("Backup"))
74 self["restoretext"] = Label(_("Restore"))
75 self["restore"] = Pixmap()
76 self["backup"] = Pixmap()
78 self["cancel"] = Pixmap()
82 self["config"] = ConfigList(self.list)
85 self["actions"] = NumberActionMap(["SetupActions"],
88 "cancel": self.keyCancel,
90 "right": self.keyRight
93 self["shortcuts"] = ActionMap(["ShortcutActions"],
95 "red": self.keyCancel,
96 "green": self.keySave,
98 "yellow": self.Restore,
102 def createSetup(self):
103 print "Creating BackupSetup"
105 self["config"] = ConfigList(self.list)
106 self.backup = ConfigSubsection()
107 self.backup.type = ConfigSelection(choices = [("settings", _("enigma2 and network")), ("var", _("/var directory")), ("skin", _("/usr/share/enigma2 directory"))], default="settings")
108 self.backup.location = ConfigSelection(choices = [("hdd", _("Harddisk")), ("usb", _("USB Stick")), ("cf", _("CF Drive"))])
109 self.list.append(getConfigListEntry(_("Backup Mode"), self.backup.type))
110 self.list.append(getConfigListEntry(_("Backup Location"), self.backup.location))
112 def createBackupfolders(self):
113 self.path = BackupPath[self.backup.location.value]
114 print "Creating Backup Folder if not already there..."
115 if (path.exists(self.path) == False):
119 print "this will start the backup now!"
120 self.session.openWithCallback(self.runBackup, MessageBox, _("Do you want to backup now?\nAfter pressing OK, please wait!"))
123 print "this will start the restore now!"
124 self.session.open(RestoreMenu, self.backup)
126 def runBackup(self, result):
128 if path.ismount(MountPoints[self.backup.location.value]):
129 self.createBackupfolders()
131 dt = date(d.tm_year, d.tm_mon, d.tm_mday)
132 self.path = BackupPath[self.backup.location.value]
133 if self.backup.type.value == "settings":
134 print "Backup Mode: Settings"
135 self.session.open(Console, title = "Backup running", cmdlist = ["tar -czvf " + self.path + "/" + str(dt) + "_settings_backup.tar.gz /etc/enigma2/ /etc/network/interfaces /etc/wpa_supplicant.conf"])
136 elif self.backup.type.value == "var":
137 print "Backup Mode: var"
138 self.session.open(Console, title = "Backup running", cmdlist = [ "tar -czvf " + self.path + "/" + str(dt) + "_var_backup.tar.gz /var/"])
139 elif self.backup.type.value == "skin":
140 print "Backup Mode: skin"
141 self.session.open(Console, title ="Backup running", cmdlist = [ "tar -czvf " + self.path + "/" + str(dt) + "_skin_backup.tar.gz /usr/share/enigma2/"])
143 self.session.open(MessageBox, _("Sorry your Backup destination does not exist\n\nPlease choose an other one."), MessageBox.TYPE_INFO)
145 class RestoreMenu(Screen):
147 <screen position="135,144" size="450,300" title="Restore Backups" >
148 <widget name="filelist" position="10,10" size="430,240" scrollbarMode="showOnDemand" />
149 <widget name="cancel" position="120,255" size="100,40" pixmap="~/red.png" transparent="1" alphatest="on" />
150 <widget name="canceltext" position="0,0" size="0,0" valign="center" halign="center" zPosition="2" font="Regular;20" transparent="1" foregroundColor="black" />
151 <widget name="restore" position="230,255" size="100,40" pixmap="~/yellow.png" transparent="1" alphatest="on" />
152 <widget name="restoretext" position="0,0" size="0,0" valign="center" halign="center" zPosition="2" font="Regular;20" transparent="1" foregroundColor="black" />
155 def __init__(self, session, backup):
156 Screen.__init__(self, session)
157 self.skin_path = plugin_path
160 self["canceltext"] = Label(_("Cancel"))
161 self["restoretext"] = Label(_("Restore"))
162 self["restore"] = Pixmap()
163 self["cancel"] = Pixmap()
172 self["actions"] = NumberActionMap(["SetupActions"],
175 "cancel": self.keyCancel
178 self["shortcuts"] = ActionMap(["ShortcutActions"],
180 "red": self.keyCancel,
181 "yellow": self.KeyOk,
184 self["filelist"] = MenuList(self.flist)
189 self.path = BackupPath[self.backup.location.value]
190 if (path.exists(self.path) == False):
192 for file in listdir(self.path):
193 if (file.endswith(".tar.gz")):
194 self.flist.append((file))
196 self["filelist"].l.setList(self.flist)
199 if (self.exe == False) and (self.entry == True):
200 self.sel = self["filelist"].getCurrent()
201 self.val = self.path + self.sel
202 self.session.openWithCallback(self.startRestore, MessageBox, _("are you sure you want to restore\nfollowing backup:\n" + self.sel + "\nEnigma2 will restart after the restore"))
207 def startRestore(self, ret = False):
210 self.session.open(Console, title = "Restore running", cmdlist = ["tar -xzvf " + self.path + "/" + self.sel + " -C /", "killall -9 enigma2"])
215 def BackupMain(session, **kwargs):
216 session.open(BackupSetup)
218 def Plugins(path, **kwargs):
221 return PluginDescriptor(name="Backup/Restore", description="Backup and Restore your Settings", icon="backup.png", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=BackupMain)