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 = """ """ 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()