diff options
Diffstat (limited to 'lib/python/Plugins/SystemPlugins/CleanupWizard/CleanupWizard.py')
| -rwxr-xr-x | lib/python/Plugins/SystemPlugins/CleanupWizard/CleanupWizard.py | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/lib/python/Plugins/SystemPlugins/CleanupWizard/CleanupWizard.py b/lib/python/Plugins/SystemPlugins/CleanupWizard/CleanupWizard.py new file mode 100755 index 00000000..d8de3544 --- /dev/null +++ b/lib/python/Plugins/SystemPlugins/CleanupWizard/CleanupWizard.py @@ -0,0 +1,172 @@ +from Screens.Wizard import wizardManager, WizardSummary +from Screens.WizardLanguage import WizardLanguage +from Screens.Rc import Rc +from Screens.Console import Console +from Screens.MessageBox import MessageBox +from Components.Console import Console +from Components.Ipkg import IpkgComponent +from Components.Pixmap import Pixmap, MovingPixmap, MultiPixmap +from Components.config import config, getConfigListEntry, ConfigSubsection, ConfigText, ConfigLocations, ConfigBoolean +from Tools.Directories import fileExists, resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE +from os import system, statvfs, stat + + +def checkFreeSpaceAvailable(): + try: + stat = statvfs('/') + except OSError: + return None + return (stat.f_bfree * stat.f_bsize)/1024 #return free space in kiloBytes + + +class CleanupWizard(WizardLanguage, Rc): + + skin = """ + <screen name="CleanupWizard" position="0,0" size="720,576" title="Welcome..." flags="wfNoBorder" > + <widget name="text" position="153,40" size="380,330" font="Regular;22" /> + <widget source="list" render="Listbox" position="43,300" size="460,220" scrollbarMode="showOnDemand" > + <convert type="StringList" /> + </widget> + <widget name="config" position="53,340" zPosition="1" size="440,180" transparent="1" scrollbarMode="showOnDemand" /> + <ePixmap pixmap="skin_default/buttons/button_red.png" position="40,225" zPosition="0" size="15,16" transparent="1" alphatest="on" /> + <widget name="languagetext" position="55,225" size="95,30" font="Regular;18" /> + <widget name="wizard" pixmap="skin_default/wizard.png" position="40,50" zPosition="10" size="110,174" alphatest="on" /> + <widget name="rc" pixmaps="skin_default/rc.png,skin_default/rcold.png" position="530,50" zPosition="10" size="154,500" alphatest="on" /> + <widget name="arrowdown" pixmap="skin_default/arrowdown.png" position="-100,-100" zPosition="11" size="37,70" alphatest="on" /> + <widget name="arrowdown2" pixmap="skin_default/arrowdown.png" position="-100,-100" zPosition="11" size="37,70" alphatest="on" /> + <widget name="arrowup" pixmap="skin_default/arrowup.png" position="-100,-100" zPosition="11" size="37,70" alphatest="on" /> + <widget name="arrowup2" pixmap="skin_default/arrowup.png" position="-100,-100" zPosition="11" size="37,70" alphatest="on" /> + </screen>""" + + def __init__(self, session): + self.xmlfile = resolveFilename(SCOPE_PLUGINS, "SystemPlugins/CleanupWizard/cleanupwizard.xml") + WizardLanguage.__init__(self, session, showSteps = False, showStepSlider = False) + Rc.__init__(self) + self.session = session + self["wizard"] = Pixmap() + self.selectedAction = None + self.selectedPackage = None + self.NextStep = None + self.Text = None + self.buildListRef = None + self.RemoveRef = None + self.excluded_extensions = ('-skins', '-streamproxy', '-frontprocessorupgrade', '-crashlogautosubmit', '-hotplug', '-webinterface', '-mediascanner', '-genuinedreambox', '-mediaplayer', '-pictureplayer', '-dvdplayer', '-dvdburn', '-videotune', '-videomode', '-softwaremanager', '-skinselector', '-satfinder' ) + self.Console = Console() + self.installed_packetlist = [] + self.ipkg = IpkgComponent() + self.ipkg.addCallback(self.ipkgCallback) + + def markDone(self): + pass + + def listAction(self): + list = [] + list.append((_("OK, remove some extensions"), "removeextensions")) + list.append((_("Exit the cleanup wizard"), "end")) + return list + + def listAgainAction(self): + list = [] + list.append((_("OK, remove another extensions"), "removeextensions")) + list.append((_("Exit the cleanup wizard"), "end")) + return list + + def ActionSelectionMade(self, index): + self.selectedAction = index + self.ActionSelect(index) + + def ActionSelect(self, index): + if index == 'end': + self.NextStep = 'end' + else: + self.NextStep = 'removeextensions' + + def ActionSelectionMoved(self): + self.ActionSelect(self.selection) + + def buildList(self,action): + if self.NextStep is not 'end': + if not self.Console: + self.Console = Console() + cmd = "ipkg list_installed | grep enigma2" + self.Console.ePopen(cmd, self.buildListInstalled_Finished) + self.buildListRef = self.session.openWithCallback(self.buildListfinishedCB, MessageBox, _("Please wait while searching for removable packages..."), type = MessageBox.TYPE_INFO, enable_input = False) + else: + self.buildListfinishedCB(False) + + def buildListInstalled_Finished(self, result, retval, extra_args = None): + if len(result): + self.installed_packetlist = [] + for x in result.splitlines(): + split = x.split(' - ') + if not any(split[0].strip().endswith(x) for x in self.excluded_extensions): #ignore some base plugins + if split[0].strip() != 'enigma2': + self.installed_packetlist.append((split[0].strip())) + self.buildListRef.close(True) + + def buildListfinishedCB(self,data): + self.buildListRef = None + if data is True: + self.currStep = self.getStepWithID(self.NextStep) + self.afterAsyncCode() + else: + self.currStep = self.getStepWithID(self.NextStep) + self.afterAsyncCode() + + def listInstalledPackages(self): + list = [] + if self.installed_packetlist and len(self.installed_packetlist): + for x in self.installed_packetlist: + if x.startswith('enigma2-plugin-'): + pluginname = x.replace("enigma2-plugin-","") + elif x.startswith('enigma2-skin-'): + pluginname = x.replace("enigma2-","") + else: + pluginname = x + list.append( (pluginname,x) ) + return list + + def PackageSelectionMade(self, index): + self.PackageSelect(index) + + def PackageSelectionMoved(self): + self.PackageSelect(self.selection) + + def PackageSelect(self, package): + self.selectedPackage = package + + def ipkgCallback(self, event, param): + if event == IpkgComponent.EVENT_ERROR: + freeSpace = checkFreeSpaceAvailable() + txt_line1 = _("There was an error. The package:") + "\n" + str(self.selectedPackage) + "\n" + _("could not be removed") + "\n" + txt_line2 = _("There are now ") + str(freeSpace) + " kB " + _("available") + "\n\n" + txt_line3 = _("Please select an option below.") + self.Text = txt_line1 + txt_line2 + txt_line3 + self.NextStep = 'StatusRemoveERROR' + self.RemoveRef.close(True) + elif event == IpkgComponent.EVENT_DONE: + freeSpace = checkFreeSpaceAvailable() + txt_line1 = _("The package:") + "\n" + str(self.selectedPackage) + "\n" + _("was removed successfully") + "\n" + txt_line2 = _("There are now ") + str(freeSpace) + " kB " + _("available") + "\n\n" + txt_line3 = _("Please select an option below.") + self.Text = txt_line1 + txt_line2 + txt_line3 + self.NextStep = 'StatusRemoveOK' + self.RemoveRef.close(True) + pass + + def removeExtension(self,extension): + if self.NextStep is not 'end': + self.ipkg.startCmd(IpkgComponent.CMD_REMOVE, {'package': extension}) + self.RemoveRef = self.session.openWithCallback(self.removeExtensionFinishedCB, MessageBox, _("Please wait while removing selected package..."), type = MessageBox.TYPE_INFO, enable_input = False) + else: + self.buildListfinishedCB(False) + + def removeExtensionFinishedCB(self,data): + self.RemoveRef = None + if data is True: + self.currStep = self.getStepWithID(self.NextStep) + self.afterAsyncCode() + else: + self.currStep = self.getStepWithID(self.NextStep) + self.afterAsyncCode() + |
