1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
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()
|