from enigma import RT_HALIGN_LEFT, RT_VALIGN_CENTER, eListboxPythonMultiContent, eListbox, eTimer, gFont
from Screens.Screen import Screen
from Screens.MessageBox import MessageBox
from Components.ActionMap import ActionMap
from Components.ScrollLabel import ScrollLabel
from Components.GUIComponent import GUIComponent
from Plugins.Plugin import PluginDescriptor
from os import popen
class Upgrade(Screen):
skin = """
"""
def __init__(self, session, args = None):
self.skin = Upgrade.skin
Screen.__init__(self, session)
self["text"] = ScrollLabel(_("Please press OK!"))
self["actions"] = ActionMap(["WizardActions"],
{
"ok": self.go,
"back": self.close,
"up": self["text"].pageUp,
"down": self["text"].pageDown
}, -1)
self.update = True
self.delayTimer = eTimer()
self.delayTimer.callback.append(self.doUpdateDelay)
def go(self):
if self.update:
self.session.openWithCallback(self.doUpdate, MessageBox, _("Do you want to update your Dreambox?\nAfter pressing OK, please wait!"))
else:
self.close()
def doUpdateDelay(self):
lines = popen("opkg update && opkg upgrade -force-defaults -force-overwrite", "r").readlines()
string = ""
for x in lines:
string += x
self["text"].setText(_("Updating finished. Here is the result:") + "\n\n" + string)
self.update = False
def doUpdate(self, val = False):
if val == True:
self["text"].setText(_("Updating... Please wait... This can take some minutes..."))
self.delayTimer.start(0, 1)
else:
self.close()
def PacketEntryComponent(packet):
res = [ packet ]
res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 0,250, 30, 0, RT_HALIGN_LEFT|RT_VALIGN_CENTER, packet[0]))
res.append((eListboxPythonMultiContent.TYPE_TEXT, 250, 0, 200, 30, 1, RT_HALIGN_LEFT|RT_VALIGN_CENTER, packet[1]))
res.append((eListboxPythonMultiContent.TYPE_TEXT, 450, 0, 100, 30, 1, RT_HALIGN_LEFT|RT_VALIGN_CENTER, packet[2]))
return res
class PacketList(GUIComponent):
def __init__(self, list):
GUIComponent.__init__(self)
self.l = eListboxPythonMultiContent()
self.l.setList(list)
self.l.setFont(0, gFont("Regular", 20))
self.l.setFont(1, gFont("Regular", 18))
def getCurrent(self):
return self.l.getCurrentSelection()
def GUIcreate(self, parent):
self.instance = eListbox(parent)
self.instance.setContent(self.l)
self.instance.setItemHeight(30)
def GUIdelete(self):
self.instance.setContent(None)
self.instance = None
def invalidate(self):
self.l.invalidate()
class Ipkg(Screen):
skin = """
"""
def __init__(self, session, args = None):
self.skin = Ipkg.skin
Screen.__init__(self, session)
list = []
self.list = list
self.fillPacketList()
self["list"] = PacketList(self.list)
self["actions"] = ActionMap(["WizardActions"],
{
"ok": self.close,
"back": self.close
}, -1)
def fillPacketList(self):
lines = popen("opkg list", "r").readlines()
packetlist = []
for x in lines:
split = x.split(' - ')
packetlist.append([split[0].strip(), split[1].strip()])
lines = popen("opkg list_installed", "r").readlines()
installedlist = {}
for x in lines:
split = x.split(' - ')
installedlist[split[0].strip()] = split[1].strip()
for x in packetlist:
status = ""
if installedlist.has_key(x[0]):
if installedlist[x[0]] == x[1]:
status = "installed"
else:
status = "upgradable"
self.list.append(PacketEntryComponent([x[0], x[1], status]))
def go(self):
if self.update:
self.session.openWithCallback(self.doUpdate, MessageBox, _("Do you want to update your Dreambox?\nAfter pressing OK, please wait!"))
else:
self.close()
def doUpdateDelay(self):
lines = popen("opkg update && opkg upgrade", "r").readlines()
string = ""
for x in lines:
string += x
self["text"].setText(_("Updating finished. Here is the result:") + "\n\n" + string)
self.update = False
def doUpdate(self, val = False):
if val == True:
self["text"].setText(_("Updating... Please wait... This can take some minutes..."))
self.delayTimer.start(0, 1)
else:
self.close()
def UpgradeMain(session, **kwargs):
session.open(Upgrade)
def IpkgMain(session, **kwargs):
session.open(Ipkg)
def Plugins(**kwargs):
return [PluginDescriptor(name="Old Softwareupdate", description="Updates your receiver's software", icon="update.png", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=UpgradeMain),
PluginDescriptor(name="opkg", description="opkg frontend", icon="update.png", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=IpkgMain)]