aboutsummaryrefslogtreecommitdiff
path: root/lib/python/Plugins
diff options
context:
space:
mode:
authorFraxinas <andreas.frisch@multimedia-labs.de>2010-04-09 08:25:08 +0200
committerFraxinas <andreas.frisch@multimedia-labs.de>2010-04-09 08:25:08 +0200
commit98c7a787df63a93f868548c2b1e357c0d873ebbe (patch)
treee8258f3e175e540e6106e0b7202abcf550b825d1 /lib/python/Plugins
parentae60e9e3642949a91b7ea4f77374495fec9a51ed (diff)
parent76250cdc36d0f0e84505d5654066229b846f035f (diff)
downloadenigma2-98c7a787df63a93f868548c2b1e357c0d873ebbe.tar.gz
enigma2-98c7a787df63a93f868548c2b1e357c0d873ebbe.zip
Merge branch 'experimental' of git.opendreambox.org:/git/enigma2 into experimental
Diffstat (limited to 'lib/python/Plugins')
-rw-r--r--lib/python/Plugins/Extensions/DVDBurn/DVDProject.py102
-rw-r--r--lib/python/Plugins/Extensions/DVDBurn/DVDTitle.py28
-rwxr-xr-xlib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py23
-rw-r--r--lib/python/Plugins/Extensions/DVDBurn/TitleCutter.py22
-rwxr-xr-xlib/python/Plugins/Extensions/DVDBurn/TitleList.py115
-rwxr-xr-xlib/python/Plugins/Extensions/DVDBurn/TitleProperties.py13
-rw-r--r--lib/python/Plugins/Extensions/DVDBurn/plugin.py2
-rw-r--r--lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp47
-rw-r--r--lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.h2
-rwxr-xr-xlib/python/Plugins/Extensions/MediaPlayer/plugin.py2
-rw-r--r--lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py84
-rwxr-xr-xlib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py1
-rwxr-xr-xlib/python/Plugins/SystemPlugins/SoftwareManager/SoftwareTools.py23
-rwxr-xr-xlib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py27
-rw-r--r--lib/python/Plugins/SystemPlugins/TempFanControl/plugin.py22
-rwxr-xr-xlib/python/Plugins/SystemPlugins/WirelessLan/plugin.py27
16 files changed, 388 insertions, 152 deletions
diff --git a/lib/python/Plugins/Extensions/DVDBurn/DVDProject.py b/lib/python/Plugins/Extensions/DVDBurn/DVDProject.py
index 83672460..7f755db4 100644
--- a/lib/python/Plugins/Extensions/DVDBurn/DVDProject.py
+++ b/lib/python/Plugins/Extensions/DVDBurn/DVDProject.py
@@ -1,5 +1,7 @@
from Tools.Directories import fileExists
from Components.config import config, ConfigSubsection, ConfigInteger, ConfigText, ConfigSelection, getConfigListEntry, ConfigSequence, ConfigSubList
+import DVDTitle
+import xml.dom.minidom
class ConfigColor(ConfigSequence):
def __init__(self, default = [128,128,128]):
@@ -10,7 +12,10 @@ class ConfigFilename(ConfigText):
ConfigText.__init__(self, default = "", fixed_size = True, visible_width = False)
def getMulti(self, selected):
- filename = (self.text.rstrip("/").rsplit("/",1))[1].encode("utf-8")[:40] + " "
+ if self.text == "":
+ return ("mtext"[1-selected:], "", 0)
+ cut_len = min(len(self.text),40)
+ filename = (self.text.rstrip("/").rsplit("/",1))[1].encode("utf-8")[:cut_len] + " "
if self.allmarked:
mark = range(0, len(filename))
else:
@@ -34,10 +39,11 @@ class DVDProject:
self.settings.vmgm = ConfigFilename()
self.filekeys = ["vmgm", "isopath", "menutemplate"]
self.menutemplate = MenuTemplate()
+ self.error = ""
+ self.session = None
def addService(self, service):
- import DVDTitle
- title = DVDTitle.DVDTitle()
+ title = DVDTitle.DVDTitle(self)
title.addService(service)
self.titles.append(title)
return title
@@ -100,47 +106,78 @@ class DVDProject:
return ret
def loadProject(self, filename):
- import xml.dom.minidom
- try:
+ #try:
if not fileExists(filename):
self.error = "xml file not found!"
- raise AttributeError
- else:
- self.error = ""
+ #raise AttributeError
file = open(filename, "r")
data = file.read().decode("utf-8").replace('&',"&amp;").encode("ascii",'xmlcharrefreplace')
file.close()
projectfiledom = xml.dom.minidom.parseString(data)
- for project in projectfiledom.childNodes[0].childNodes:
- if project.nodeType == xml.dom.minidom.Element.nodeType:
- if project.tagName == 'settings':
- i = 0
- if project.attributes.length < len(self.settings.dict())-1:
- self.error = "project attributes missing"
- raise AttributeError
- while i < project.attributes.length:
- item = project.attributes.item(i)
- key = item.name.encode("utf-8")
- try:
- val = eval(item.nodeValue)
- except (NameError, SyntaxError):
- val = item.nodeValue.encode("utf-8")
- try:
- self.settings.dict()[key].setValue(val)
- except (KeyError):
- self.error = "unknown attribute '%s'" % (key)
- raise AttributeError
- i += 1
+ for node in projectfiledom.childNodes[0].childNodes:
+ print "node:", node
+ if node.nodeType == xml.dom.minidom.Element.nodeType:
+ if node.tagName == 'settings':
+ self.xmlAttributesToConfig(node, self.settings)
+ elif node.tagName == 'titles':
+ self.xmlGetTitleNodeRecursive(node)
+
for key in self.filekeys:
val = self.settings.dict()[key].getValue()
if not fileExists(val):
self.error += "\n%s '%s' not found" % (key, val)
- if len(self.error):
- raise AttributeError
+ #except AttributeError:
+ #print "loadProject AttributeError", self.error
+ #self.error += (" in project '%s'") % (filename)
+ #return False
+ return True
+
+ def xmlAttributesToConfig(self, node, config):
+ try:
+ i = 0
+ #if node.attributes.length < len(config.dict())-1:
+ #self.error = "project attributes missing"
+ #raise AttributeError
+ while i < node.attributes.length:
+ item = node.attributes.item(i)
+ key = item.name.encode("utf-8")
+ try:
+ val = eval(item.nodeValue)
+ except (NameError, SyntaxError):
+ val = item.nodeValue.encode("utf-8")
+ try:
+ print "config[%s].setValue(%s)" % (key, val)
+ config.dict()[key].setValue(val)
+ except (KeyError):
+ self.error = "unknown attribute '%s'" % (key)
+ print "KeyError", self.error
+ raise AttributeError
+ i += 1
except AttributeError:
- self.error += (" in project '%s'") % (filename)
+ self.error += (" XML attribute error '%s'") % node.toxml()
return False
- return True
+
+ def xmlGetTitleNodeRecursive(self, node, title_idx = -1):
+ print "[xmlGetTitleNodeRecursive]", title_idx, node
+ print node.childNodes
+ for subnode in node.childNodes:
+ print "xmlGetTitleNodeRecursive subnode:", subnode
+ if subnode.nodeType == xml.dom.minidom.Element.nodeType:
+ if subnode.tagName == 'title':
+ title_idx += 1
+ title = DVDTitle.DVDTitle(self)
+ self.titles.append(title)
+ self.xmlGetTitleNodeRecursive(subnode, title_idx)
+ if subnode.tagName == 'path':
+ print "path:", subnode.firstChild.data
+ filename = subnode.firstChild.data
+ self.titles[title_idx].addFile(filename.encode("utf-8"))
+ if subnode.tagName == 'properties':
+ self.xmlAttributesToConfig(node, self.titles[title_idx].properties)
+ if subnode.tagName == 'audiotracks':
+ self.xmlGetTitleNodeRecursive(subnode, title_idx)
+ if subnode.tagName == 'audiotrack':
+ print "audiotrack...", subnode.toxml()
def getSize(self):
totalsize = 0
@@ -187,6 +224,7 @@ class MenuTemplate(DVDProject):
self.filekeys = ["menubg", "menuaudio", "fontface_headline", "fontface_title", "fontface_subtitle"]
from TitleProperties import languageChoices
self.settings.menulang = ConfigSelection(choices = languageChoices.choices, default=languageChoices.choices[1][0])
+ self.error = ""
def loadTemplate(self, filename):
ret = DVDProject.loadProject(self, filename)
diff --git a/lib/python/Plugins/Extensions/DVDBurn/DVDTitle.py b/lib/python/Plugins/Extensions/DVDBurn/DVDTitle.py
index 660005e6..6dff00d6 100644
--- a/lib/python/Plugins/Extensions/DVDBurn/DVDTitle.py
+++ b/lib/python/Plugins/Extensions/DVDBurn/DVDTitle.py
@@ -1,4 +1,5 @@
from Components.config import config, ConfigSubsection, ConfigSubList, ConfigInteger, ConfigText, ConfigSelection, getConfigListEntry, ConfigSequence, ConfigYesNo
+import TitleCutter
class ConfigFixedText(ConfigText):
def __init__(self, text, visible_width=60):
@@ -7,17 +8,17 @@ class ConfigFixedText(ConfigText):
pass
class DVDTitle:
- def __init__(self):
+ def __init__(self, project):
self.properties = ConfigSubsection()
self.properties.menutitle = ConfigText(fixed_size = False, visible_width = 80)
self.properties.menusubtitle = ConfigText(fixed_size = False, visible_width = 80)
- self.DVBname = _("Title")
- self.DVBdescr = _("Description")
- self.DVBchannel = _("Channel")
self.properties.aspect = ConfigSelection(choices = [("4:3", _("4:3")), ("16:9", _("16:9"))])
self.properties.widescreen = ConfigSelection(choices = [("nopanscan", "nopanscan"), ("noletterbox", "noletterbox")])
self.properties.autochapter = ConfigInteger(default = 0, limits = (0, 60))
self.properties.audiotracks = ConfigSubList()
+ self.DVBname = _("Title")
+ self.DVBdescr = _("Description")
+ self.DVBchannel = _("Channel")
self.cuesheet = [ ]
self.source = None
self.filesize = 0
@@ -27,6 +28,8 @@ class DVDTitle:
self.chaptermarks = [ ]
self.timeCreate = None
self.VideoType = -1
+ self.project = project
+ self.length = 0
def addService(self, service):
from os import path
@@ -36,7 +39,7 @@ class DVDTitle:
self.source = service
serviceHandler = eServiceCenter.getInstance()
info = serviceHandler.info(service)
- sDescr = info and " " + info.getInfoString(service, iServiceInformation.sDescription) or ""
+ sDescr = info and info.getInfoString(service, iServiceInformation.sDescription) or ""
self.DVBdescr = sDescr
sTimeCreate = info.getInfo(service, iServiceInformation.sTimeCreate)
if sTimeCreate > 1:
@@ -49,9 +52,20 @@ class DVDTitle:
self.filesize = path.getsize(self.inputfile)
self.estimatedDiskspace = self.filesize
self.length = info.getLength(service)
+
+ def addFile(self, filename):
+ from enigma import eServiceReference
+ ref = eServiceReference(1, 0, filename)
+ self.addService(ref)
+ self.project.session.openWithCallback(self.titleEditDone, TitleCutter.CutlistReader, self)
+
+ def titleEditDone(self, cutlist):
+ self.initDVDmenuText(len(self.project.titles))
+ self.cuesheet = cutlist
+ self.produceFinalCuesheet()
- def initDVDmenuText(self, project, track):
- s = project.menutemplate.settings
+ def initDVDmenuText(self, track):
+ s = self.project.menutemplate.settings
self.properties.menutitle.setValue(self.formatDVDmenuText(s.titleformat.getValue(), track))
self.properties.menusubtitle.setValue(self.formatDVDmenuText(s.subtitleformat.getValue(), track))
diff --git a/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py b/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py
index a1c38842..39d7277e 100755
--- a/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py
+++ b/lib/python/Plugins/Extensions/DVDBurn/ProjectSettings.py
@@ -92,10 +92,10 @@ class ProjectSettings(Screen,ConfigListScreen):
<ePixmap pixmap="skin_default/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
<ePixmap pixmap="skin_default/buttons/yellow.png" position="280,0" size="140,40" alphatest="on" />
<ePixmap pixmap="skin_default/buttons/blue.png" position="420,0" size="140,40" alphatest="on" />
- <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
- <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
- <widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
- <widget source="key_blue" render="Label" position="420,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
+ <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;19" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
+ <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;19" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
+ <widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" font="Regular;19" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
+ <widget source="key_blue" render="Label" position="420,0" zPosition="1" size="140,40" font="Regular;19" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
<widget name="config" position="5,50" size="550,276" scrollbarMode="showOnDemand" />
<ePixmap pixmap="skin_default/div-h.png" position="0,350" zPosition="1" size="560,2" />
<widget source="info" render="Label" position="10,360" size="550,80" font="Regular;18" halign="center" valign="center" />
@@ -233,10 +233,19 @@ class ProjectSettings(Screen,ConfigListScreen):
else:
self.session.open(MessageBox,self.project.error,MessageBox.TYPE_ERROR)
elif scope == "project":
- if self.project.loadProject(path):
- self.initConfigList()
+ self.path = path
+ print "len(self.titles)", len(self.project.titles)
+ if len(self.project.titles):
+ self.session.openWithCallback(self.askLoadCB, MessageBox,text = _("Your current collection will get lost!") + "\n" + _("Do you want to restore your settings?"), type = MessageBox.TYPE_YESNO)
else:
- self.session.open(MessageBox,self.project.error,MessageBox.TYPE_ERROR)
+ self.askLoadCB(True)
elif scope:
configRef.setValue(path)
self.initConfigList()
+
+ def askLoadCB(self, answer):
+ if answer is not None and answer:
+ if self.project.loadProject(self.path):
+ self.initConfigList()
+ else:
+ self.session.open(MessageBox,self.project.error,MessageBox.TYPE_ERROR) \ No newline at end of file
diff --git a/lib/python/Plugins/Extensions/DVDBurn/TitleCutter.py b/lib/python/Plugins/Extensions/DVDBurn/TitleCutter.py
index 61152e8a..a52fad9f 100644
--- a/lib/python/Plugins/Extensions/DVDBurn/TitleCutter.py
+++ b/lib/python/Plugins/Extensions/DVDBurn/TitleCutter.py
@@ -52,13 +52,35 @@ class TitleCutter(CutListEditor):
CutListEditor.grabFrame(self)
def exit(self):
+ if self.t.VideoType == -1:
+ self.getPMTInfo()
self.checkAndGrabThumb()
self.session.nav.stopService()
self.close(self.cut_list[:])
class CutlistReader(TitleCutter):
+ skin = """
+ <screen position="0,0" size="720,576">
+ <eLabel position="0,0" size="720,576" zPosition="1" backgroundColor="#000000" />
+ <widget name="Video" position="0,0" size="100,75" />
+ <widget name="SeekState" position="0,0" />
+ <widget source="cutlist" position="0,0" render="Listbox" >
+ <convert type="TemplatedMultiContent">
+ {"template": [
+ MultiContentEntryText(text = 1),
+ MultiContentEntryText(text = 2)
+ ],
+ "fonts": [gFont("Regular", 18)],
+ "itemHeight": 20
+ }
+ </convert>
+ </widget>
+ <widget name="Timeline" position="0,0" />
+ </screen>"""
+
def __init__(self, session, t):
TitleCutter.__init__(self, session, t)
+ self.skin = CutlistReader.skin
def getPMTInfo(self):
TitleCutter.getPMTInfo(self)
diff --git a/lib/python/Plugins/Extensions/DVDBurn/TitleList.py b/lib/python/Plugins/Extensions/DVDBurn/TitleList.py
index dbc988b1..2cbeb633 100755
--- a/lib/python/Plugins/Extensions/DVDBurn/TitleList.py
+++ b/lib/python/Plugins/Extensions/DVDBurn/TitleList.py
@@ -11,38 +11,46 @@ from Components.Sources.List import List
from Components.Sources.StaticText import StaticText
from Components.Sources.Progress import Progress
from Components.MultiContent import MultiContentEntryText
+from Components.Label import MultiColorLabel
from enigma import gFont, RT_HALIGN_LEFT, RT_HALIGN_RIGHT
from Tools.Directories import resolveFilename, SCOPE_PLUGINS
class TitleList(Screen, HelpableScreen):
skin = """
- <screen name="TitleList" position="center,center" size="560,445" title="DVD Tool" >
+ <screen name="TitleList" position="center,center" size="560,470" title="DVD Tool" >
<ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
<ePixmap pixmap="skin_default/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
<ePixmap pixmap="skin_default/buttons/yellow.png" position="280,0" size="140,40" alphatest="on" />
<ePixmap pixmap="skin_default/buttons/blue.png" position="420,0" size="140,40" alphatest="on" />
- <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
- <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
- <widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
- <widget source="key_blue" render="Label" position="420,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
+ <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;19" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
+ <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;19" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
+ <widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" font="Regular;19" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
+ <widget source="key_blue" render="Label" position="420,0" zPosition="1" size="140,40" font="Regular;19" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
<widget source="title_label" render="Label" position="10,48" size="540,38" font="Regular;18" transparent="1" />
- <widget source="error_label" render="Label" position="10,48" size="540,395" zPosition="3" font="Regular;20" transparent="1" />
- <widget source="titles" render="Listbox" scrollbarMode="showOnDemand" position="10,86" size="540,312" zPosition="3" transparent="1" >
+ <widget source="error_label" render="Label" position="10,48" size="540,296" zPosition="3" font="Regular;20" transparent="1" />
+ <widget source="titles" render="Listbox" scrollbarMode="showOnDemand" position="10,86" size="546,296" zPosition="3" transparent="1" >
<convert type="TemplatedMultiContent">
{"template": [
- MultiContentEntryText(pos = (0, 0), size = (420, 20), font = 0, flags = RT_HALIGN_LEFT, text = 1), # index 1 Title,
- MultiContentEntryText(pos = (0, 20), size = (328, 17), font = 1, flags = RT_HALIGN_LEFT, text = 2), # index 2 description,
- MultiContentEntryText(pos = (420, 6), size = (120, 20), font = 1, flags = RT_HALIGN_RIGHT, text = 3), # index 3 begin time,
- MultiContentEntryText(pos = (328, 20), size = (154, 17), font = 1, flags = RT_HALIGN_RIGHT, text = 4), # index 4 channel,
- MultiContentEntryText(pos = (482, 20), size = (58, 20), font = 1, flags = RT_HALIGN_RIGHT, text = 5), # index 4 channel,
+ MultiContentEntryText(pos = (0, 0), size = (360, 20), font = 0, flags = RT_HALIGN_LEFT, text = 1), # index 1 Title,
+ MultiContentEntryText(pos = (0, 20), size = (360, 17), font = 1, flags = RT_HALIGN_LEFT, text = 2), # index 2 description,
+ MultiContentEntryText(pos = (366, 6), size = (152, 20), font = 1, flags = RT_HALIGN_RIGHT, text = 3), # index 3 channel,
+ MultiContentEntryText(pos = (366, 20), size = (102, 17), font = 1, flags = RT_HALIGN_RIGHT, text = 4), # index 4 begin time,
+ MultiContentEntryText(pos = (470, 20), size = (48, 20), font = 1, flags = RT_HALIGN_RIGHT, text = 5), # index 5 duration,
],
"fonts": [gFont("Regular", 20), gFont("Regular", 14)],
"itemHeight": 37
}
</convert>
</widget>
- <widget source="space_bar" render="Progress" position="10,410" size="540,26" borderWidth="1" backgroundColor="#254f7497" />
- <widget source="space_label" render="Label" position="40,414" size="480,22" zPosition="2" font="Regular;18" halign="center" transparent="1" foregroundColor="#000000" />
+ <ePixmap pixmap="skin_default/div-h.png" position="0,390" zPosition="10" size="560,2" />
+ <ePixmap pixmap="skin_default/buttons/key_menu.png" position="10,394" size="35,25" alphatest="on" />
+ <widget source="hint" render="Label" position="50,396" size="540,22" font="Regular;18" halign="left" />
+ <widget name="medium_label" position="10,420" size="540,22" font="Regular;18" halign="left" foregroundColors="#FFFFFF,#FFFF00,#FF0000" />
+ <widget source="space_bar_single" render="Progress" position="10,446" size="270,24" borderWidth="1" zPosition="2" backgroundColor="#254f7497" />
+ <widget source="space_label_single" render="Label" position="10,449" size="270,22" zPosition="3" font="Regular;18" halign="center" transparent="1" foregroundColor="#000000" />
+ <widget source="space_bar_dual" render="Progress" position="10,446" size="540,24" borderWidth="1" backgroundColor="#254f7497" />
+ <widget source="space_label_dual" render="Label" position="10,449" size="540,22" zPosition="2" font="Regular;18" halign="center" transparent="1" foregroundColor="#000000" />
+
</screen>"""
def __init__(self, session, project = None):
@@ -75,17 +83,19 @@ class TitleList(Screen, HelpableScreen):
self["title_label"] = StaticText()
self["error_label"] = StaticText()
- self["space_label"] = StaticText()
- self["space_bar"] = Progress()
+ self["space_label_single"] = StaticText()
+ self["space_label_dual"] = StaticText()
+ self["hint"] = StaticText(_("Advanced Options"))
+ self["medium_label"] = MultiColorLabel()
+ self["space_bar_single"] = Progress()
+ self["space_bar_dual"] = Progress()
+ self["titles"] = List([])
+ self.previous_size = 0
if project is not None:
self.project = project
else:
self.newProject()
-
- self["titles"] = List([])
- self.updateTitleList()
- self.previous_size = 0
self.onLayoutFinish.append(self.layoutFinished)
def layoutFinished(self):
@@ -107,15 +117,16 @@ class TitleList(Screen, HelpableScreen):
j = self.backgroundJob
menu.append(("%s: %s (%d%%)" % (j.getStatustext(), j.name, int(100*j.progress/float(j.end))), self.showBackgroundJob))
menu.append((_("DVD media toolbox"), self.toolbox))
- menu.append((_("Preview menu"), self.previewMenu))
if self.project.settings.output.getValue() == "dvd":
if len(self["titles"].list):
menu.append((_("Burn DVD"), self.burnProject))
elif self.project.settings.output.getValue() == "iso":
menu.append((_("Create DVD-ISO"), self.burnProject))
menu.append((_("Burn existing image to DVD"), self.selectImage))
- menu.append((_("Edit chapters of current title"), self.editTitle))
- menu.append((_("Reset and renumerate title names"), self.resetTitles))
+ if len(self["titles"].list):
+ menu.append((_("Preview menu"), self.previewMenu))
+ menu.append((_("Edit chapters of current title"), self.editTitle))
+ menu.append((_("Reset and renumerate title names"), self.resetTitles))
menu.append((_("Exit"), self.leave))
self.session.openWithCallback(self.menuCallback, ChoiceBox, title="", list=menu)
@@ -149,9 +160,9 @@ class TitleList(Screen, HelpableScreen):
<ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
<ePixmap pixmap="skin_default/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
<ePixmap pixmap="skin_default/buttons/yellow.png" position="280,0" size="140,40" alphatest="on" />
- <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
- <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
- <widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
+ <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;19" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
+ <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;19" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
+ <widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" font="Regular;19" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
<widget name="waitingtext" position="0,45" size="560,395" zPosition="4" font="Regular;22" halign="center" valign="center" />
<widget name="list" position="5,40" size="550,375" zPosition="2" scrollbarMode="showOnDemand" />
<widget name="DescriptionBorder" pixmap="skin_default/border_eventinfo.png" position="0,316" zPosition="1" size="560,103" transparent="1" alphatest="on" />
@@ -197,7 +208,7 @@ class TitleList(Screen, HelpableScreen):
self.close(current)
self.session.openWithCallback(self.selectedSource, DVDMovieSelection)
- def selectedSource(self, source):
+ def selectedSource(self, source = None):
if source is None:
return None
if not source.getPath().endswith(".ts"):
@@ -228,7 +239,7 @@ class TitleList(Screen, HelpableScreen):
def settingsCB(self, update=True):
if not update:
return
- self["title_label"].text = _("Table of content for collection") + " \"" + self.project.settings.name.getValue() + "\":"
+ self.updateTitleList()
def loadTemplate(self):
filename = resolveFilename(SCOPE_PLUGINS)+"Extensions/DVDBurn/DreamboxDVD.ddvdp.xml"
@@ -281,9 +292,11 @@ class TitleList(Screen, HelpableScreen):
if len(list):
self["key_red"].text = _("Remove title")
self["key_yellow"].text = _("Title properties")
+ self["title_label"].text = _("Table of content for collection") + " \"" + self.project.settings.name.getValue() + "\":"
else:
self["key_red"].text = ""
self["key_yellow"].text = ""
+ self["title_label"].text = _("Please add titles to the compilation.")
def updateSize(self):
size = self.project.size/(1024*1024)
@@ -292,20 +305,32 @@ class TitleList(Screen, HelpableScreen):
print "updateSize:", size, "MAX_DL:", MAX_DL, "MAX_SL:", MAX_SL
if size > MAX_DL:
percent = 100 * size / float(MAX_DL)
- self["space_label"].text = "%d MB - " % size + _("exceeds dual layer medium!") + " (%.2f%% " % (100-percent) + _("free") + ")"
- self["space_bar"].value = int(percent)
+ self["space_label_dual"].text = "%d MB (%.2f%%)" % (size, percent)
+ self["space_bar_dual"].value = int(percent)
+ self["space_bar_single"].value = 100
+ self["space_label_single"].text = ""
+ self["medium_label"].setText(_("Exceeds dual layer medium!"))
+ self["medium_label"].setForegroundColorNum(2)
if self.previous_size < MAX_DL:
- self.session.open(MessageBox,text = _("exceeds dual layer medium!"), type = MessageBox.TYPE_ERROR)
+ self.session.open(MessageBox,text = _("Exceeds dual layer medium!"), type = MessageBox.TYPE_ERROR)
elif size > MAX_SL:
percent = 100 * size / float(MAX_DL)
- self["space_label"].text = "%d MB " % size + _("of a DUAL layer medium used.") + " (%.2f%% " % (100-percent) + _("free") + ")"
- self["space_bar"].value = int(percent)
+ self["space_label_dual"].text = "%d MB (%.2f%%)" % (size, percent)
+ self["space_bar_dual"].value = int(percent)
+ self["space_bar_single"].value = 100
+ self["space_label_single"].text = ""
+ self["medium_label"].setText(_("Required medium type:") + " " + _("DUAL LAYER DVD") + ", %d MB " % (MAX_DL - size) + _("free"))
+ self["medium_label"].setForegroundColorNum(1)
if self.previous_size < MAX_SL:
- self.session.open(MessageBox,text = _("Your collection exceeds the size of a single layer medium, you will need a blank dual layer DVD!"), type = MessageBox.TYPE_INFO)
+ self.session.open(MessageBox, text = _("Your collection exceeds the size of a single layer medium, you will need a blank dual layer DVD!"), timeout = 10, type = MessageBox.TYPE_INFO)
elif size < MAX_SL:
percent = 100 * size / float(MAX_SL)
- self["space_label"].text = "%d MB " % size + _("of a SINGLE layer medium used.") + " (%.2f%% " % (100-percent) + _("free") + ")"
- self["space_bar"].value = int(percent)
+ self["space_label_single"].text = "%d MB (%.2f%%)" % (size, percent)
+ self["space_bar_single"].value = int(percent)
+ self["space_bar_dual"].value = 0
+ self["space_label_dual"].text = ""
+ self["medium_label"].setText(_("Required medium type:") + " " + _("SINGLE LAYER DVD") + ", %d MB " % (MAX_SL - size) + _("free"))
+ self["medium_label"].setForegroundColorNum(0)
self.previous_size = size
def getCurrentTitle(self):
@@ -323,9 +348,7 @@ class TitleList(Screen, HelpableScreen):
def titleEditDone(self, cutlist):
t = self.current_edit_title
- t.initDVDmenuText(self.project,len(self.project.titles))
- t.cuesheet = cutlist
- t.produceFinalCuesheet()
+ t.titleEditDone(cutlist)
if t.VideoType != 0:
self.session.openWithCallback(self.DVDformatCB,MessageBox,text = _("The DVD standard doesn't support H.264 (HDTV) video streams. Do you want to create a Dreambox format data DVD (which will not play in stand-alone DVD players) instead?"), type = MessageBox.TYPE_YESNO)
else:
@@ -335,7 +358,7 @@ class TitleList(Screen, HelpableScreen):
count = 0
for title in self.project.titles:
count += 1
- title.initDVDmenuText(self.project,count)
+ title.initDVDmenuText(count)
self.updateTitleList()
def DVDformatCB(self, answer):
@@ -346,5 +369,13 @@ class TitleList(Screen, HelpableScreen):
else:
self.removeTitle(t)
- def leave(self):
- self.close()
+ def leave(self, close = False):
+ if not len(self["titles"].list) or close:
+ self.close()
+ else:
+ self.session.openWithCallback(self.exitCB, MessageBox,text = _("Your current collection will get lost!") + "\n" + _("Do you really want to exit?"), type = MessageBox.TYPE_YESNO)
+
+ def exitCB(self, answer):
+ print "exitCB", answer
+ if answer is not None and answer:
+ self.close() \ No newline at end of file
diff --git a/lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py b/lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py
index 0a664eba..956f054d 100755
--- a/lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py
+++ b/lib/python/Plugins/Extensions/DVDBurn/TitleProperties.py
@@ -21,10 +21,12 @@ class TitleProperties(Screen,ConfigListScreen):
<screen name="TitleProperties" position="center,center" size="560,445" title="Properties of current title" >
<ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
<ePixmap pixmap="skin_default/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
+ <ePixmap pixmap="skin_default/buttons/yellow.png" position="280,0" size="140,40" alphatest="on" />
<ePixmap pixmap="skin_default/buttons/blue.png" position="420,0" size="140,40" alphatest="on" />
- <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
- <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
- <widget source="key_blue" render="Label" position="420,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
+ <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;19" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
+ <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;19" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
+ <widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" font="Regular;19" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
+ <widget source="key_blue" render="Label" position="420,0" zPosition="1" size="140,40" font="Regular;19" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
<widget source="serviceinfo" render="Label" position="10,46" size="350,144" font="Regular;18" />
<widget name="thumbnail" position="370,46" size="180,144" alphatest="on" />
<widget name="config" position="10,206" size="540,228" scrollbarMode="showOnDemand" />
@@ -38,7 +40,8 @@ class TitleProperties(Screen,ConfigListScreen):
self["key_red"] = StaticText(_("Cancel"))
self["key_green"] = StaticText(_("OK"))
- self["key_blue"] = StaticText(_("Edit Title"))
+ self["key_yellow"] = StaticText(_("Edit Title"))
+ self["key_blue"] = StaticText()
self["serviceinfo"] = StaticText()
self["thumbnail"] = Pixmap()
@@ -57,7 +60,7 @@ class TitleProperties(Screen,ConfigListScreen):
{
"green": self.exit,
"red": self.cancel,
- "blue": self.editTitle,
+ "yellow": self.editTitle,
"cancel": self.cancel,
"ok": self.ok,
}, -2)
diff --git a/lib/python/Plugins/Extensions/DVDBurn/plugin.py b/lib/python/Plugins/Extensions/DVDBurn/plugin.py
index 45f438da..bd856b47 100644
--- a/lib/python/Plugins/Extensions/DVDBurn/plugin.py
+++ b/lib/python/Plugins/Extensions/DVDBurn/plugin.py
@@ -12,6 +12,6 @@ def main_add(session, service, **kwargs):
dvdburn.selectedSource(service)
def Plugins(**kwargs):
- descr = _("Burn to DVD...")
+ descr = _("Burn to DVD")
return [PluginDescriptor(name="DVD Burn", description=descr, where = PluginDescriptor.WHERE_MOVIELIST, fnc=main_add, icon="dvdburn.png"),
PluginDescriptor(name="DVD Burn", description=descr, where = PluginDescriptor.WHERE_PLUGINMENU, fnc=main, icon="dvdburn.png") ]
diff --git a/lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp b/lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp
index 0372c497..2ba53927 100644
--- a/lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp
+++ b/lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp
@@ -85,12 +85,9 @@ RESULT eServiceFactoryDVD::offlineOperations(const eServiceReference &, ePtr<iSe
DEFINE_REF(eServiceDVD);
eServiceDVD::eServiceDVD(eServiceReference ref):
- m_ref(ref),
- m_ddvdconfig(ddvd_create()),
- m_subtitle_widget(0),
- m_state(stIdle),
- m_current_trick(0),
- m_pump(eApp, 1)
+ m_ref(ref), m_ddvdconfig(ddvd_create()), m_subtitle_widget(0), m_state(stIdle),
+ m_current_trick(0), m_pump(eApp, 1), m_width(-1), m_height(-1),
+ m_aspect(-1), m_framerate(-1), m_progressive(-1)
{
int aspect = DDVD_16_9;
int policy = DDVD_PAN_SCAN;
@@ -309,6 +306,32 @@ void eServiceDVD::gotMessage(int /*what*/)
m_event(this, evSeekableStatusChanged);
m_event(this, evUser+12);
break;
+#ifdef DDVD_SUPPORTS_PICTURE_INFO
+ case DDVD_SIZE_CHANGED:
+ {
+ int changed = m_width != -1 && m_height != -1 && m_aspect != -1;
+ ddvd_get_last_size(m_ddvdconfig, &m_width, &m_height, &m_aspect);
+ if (changed)
+ m_event((iPlayableService*)this, evVideoSizeChanged);
+ break;
+ }
+ case DDVD_PROGRESSIVE_CHANGED:
+ {
+ int changed = m_progressive != -1;
+ ddvd_get_last_progressive(m_ddvdconfig, &m_progressive);
+ if (changed)
+ m_event((iPlayableService*)this, evVideoProgressiveChanged);
+ break;
+ }
+ case DDVD_FRAMERATE_CHANGED:
+ {
+ int changed = m_framerate != -1;
+ ddvd_get_last_framerate(m_ddvdconfig, &m_framerate);
+ if (changed)
+ m_event((iPlayableService*)this, evVideoFramerateChanged);
+ break;
+ }
+#endif
default:
break;
}
@@ -500,6 +523,18 @@ int eServiceDVD::getInfo(int w)
case sUser+7:
case sUser+8:
return resIsPyObject;
+#ifdef DDVD_SUPPORTS_PICTURE_INFO
+ case sVideoWidth:
+ return m_width;
+ case sVideoHeight:
+ return m_height;
+ case sAspect:
+ return m_aspect;
+ case sProgressive:
+ return m_progressive;
+ case sFrameRate:
+ return m_framerate;
+#endif
default:
return resNA;
}
diff --git a/lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.h b/lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.h
index c730d501..c751a394 100644
--- a/lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.h
+++ b/lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.h
@@ -127,6 +127,8 @@ private:
void loadCuesheet();
void saveCuesheet();
+
+ int m_width, m_height, m_aspect, m_framerate, m_progressive;
};
#endif
diff --git a/lib/python/Plugins/Extensions/MediaPlayer/plugin.py b/lib/python/Plugins/Extensions/MediaPlayer/plugin.py
index 036bbbb9..0fc78fb1 100755
--- a/lib/python/Plugins/Extensions/MediaPlayer/plugin.py
+++ b/lib/python/Plugins/Extensions/MediaPlayer/plugin.py
@@ -110,7 +110,7 @@ class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoB
# 'None' is magic to start at the list of mountpoints
defaultDir = config.mediaplayer.defaultDir.getValue()
- self.filelist = FileList(defaultDir, matchingPattern = "(?i)^.*\.(mp2|mp3|ogg|ts|wav|wave|m3u|pls|e2pls|mpg|vob|avi|divx|m4v|mkv|mp4|m4a|dat|flac|mov)", useServiceRef = True, additionalExtensions = "4098:m3u 4098:e2pls 4098:pls")
+ self.filelist = FileList(defaultDir, matchingPattern = "(?i)^.*\.(mp2|mp3|ogg|ts|m2ts|wav|wave|m3u|pls|e2pls|mpg|vob|avi|divx|m4v|mkv|mp4|m4a|dat|flac|mov)", useServiceRef = True, additionalExtensions = "4098:m3u 4098:e2pls 4098:pls")
self["filelist"] = self.filelist
self.playlist = MyPlayList()
diff --git a/lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py b/lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py
index 860efc02..8986560b 100644
--- a/lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py
+++ b/lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py
@@ -63,10 +63,10 @@ class NFIFlash(Screen):
<ePixmap pixmap="skin_default/buttons/green.png" position="140,0" zPosition="0" size="140,40" transparent="1" alphatest="on" />
<ePixmap pixmap="skin_default/buttons/yellow.png" position="280,0" zPosition="0" size="140,40" transparent="1" alphatest="on" />
<ePixmap pixmap="skin_default/buttons/blue.png" position="420,0" zPosition="0" size="140,40" transparent="1" alphatest="on" />
- <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#1f771f" transparent="1" />
- <widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#a08500" transparent="1" />
- <widget source="key_blue" render="Label" position="420,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#18188b" transparent="1" />
- <widget source="listlabel" render="Label" position="16,44" size="200,21" valign="center" font="Regular;18" />
+ <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;19" valign="center" halign="center" backgroundColor="#1f771f" transparent="1" />
+ <widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" font="Regular;19" valign="center" halign="center" backgroundColor="#a08500" transparent="1" />
+ <widget source="key_blue" render="Label" position="420,0" zPosition="1" size="140,40" font="Regular;19" valign="center" halign="center" backgroundColor="#18188b" transparent="1" />
+ <widget source="listlabel" render="Label" position="10,44" size="250,20" font="Regular;16" />
<widget name="filelist" position="0,68" size="260,260" scrollbarMode="showOnDemand" />
<widget source="infolabel" render="Label" position="270,44" size="280,284" font="Regular;16" />
<widget source="job_progressbar" render="Progress" position="10,374" size="540,26" borderWidth="1" backgroundColor="#254f7497" />
@@ -95,6 +95,7 @@ class NFIFlash(Screen):
{
"green": self.ok,
"yellow": self.reboot,
+ "blue": self.runWizard,
"ok": self.ok,
"left": self.left,
"right": self.right,
@@ -109,6 +110,43 @@ class NFIFlash(Screen):
self.md5sum = ""
self.job = None
self.box = HardwareInfo().get_device_name()
+ self.configuration_restorable = None
+ self.wizard_mode = False
+ from enigma import eTimer
+ self.delayTimer = eTimer()
+ self.delayTimer.callback.append(self.runWizard)
+ self.delayTimer.start(50,1)
+
+ def check_for_wizard(self):
+ if self["filelist"].getCurrentDirectory() is not None and fileExists(self["filelist"].getCurrentDirectory()+"wizard.nfo"):
+ self["key_blue"].text = _("USB stick wizard")
+ return True
+ else:
+ self["key_blue"].text = ""
+ return False
+
+ def runWizard(self):
+ if not self.check_for_wizard():
+ self.wizard_mode = False
+ return
+ wizardcontent = open(self["filelist"].getCurrentDirectory()+"/wizard.nfo", "r").readlines()
+ nfifile = None
+ for line in wizardcontent:
+ line = line.strip()
+ if line.startswith("image: "):
+ nfifile = self["filelist"].getCurrentDirectory()+line[7:]
+ if line.startswith("configuration: "):
+ backupfile = self["filelist"].getCurrentDirectory()+line[15:]
+ if fileExists(backupfile):
+ print "wizard configuration:", backupfile
+ self.configuration_restorable = backupfile
+ else:
+ self.configuration_restorable = None
+ if nfifile and fileExists(nfifile):
+ self.wizard_mode = True
+ print "wizard image:", nfifile
+ self.check_for_NFO(nfifile)
+ self.queryFlash()
def closeCB(self):
if ( self.job is None or self.job.status is not self.job.IN_PROGRESS ) and not self.no_autostart:
@@ -133,12 +171,16 @@ class NFIFlash(Screen):
self["filelist"].pageUp()
self.check_for_NFO()
- def check_for_NFO(self):
+ def check_for_NFO(self, nfifile=None):
self.session.summary.setText(self["filelist"].getFilename())
- if self["filelist"].getFilename() is None:
- return
- if self["filelist"].getCurrentDirectory() is not None:
- self.nfifile = self["filelist"].getCurrentDirectory()+self["filelist"].getFilename()
+ if nfifile is None:
+ self.session.summary.setText(self["filelist"].getFilename())
+ if self["filelist"].getFilename() is None:
+ return
+ if self["filelist"].getCurrentDirectory() is not None:
+ self.nfifile = self["filelist"].getCurrentDirectory()+self["filelist"].getFilename()
+ else:
+ self.nfifile = nfifile
if self.nfifile.upper().endswith(".NFI"):
self["key_green"].text = _("Flash")
@@ -152,7 +194,7 @@ class NFIFlash(Screen):
else:
self.md5sum = ""
else:
- self["infolabel"].text = _("No details for this image file") + ":\n" + self["filelist"].getFilename()
+ self["infolabel"].text = _("No details for this image file") + (self["filelist"].getFilename() or "")
self.md5sum = ""
else:
self["infolabel"].text = ""
@@ -164,6 +206,7 @@ class NFIFlash(Screen):
self["filelist"].descent()
self.session.summary.setText(self["filelist"].getFilename())
self.check_for_NFO()
+ self.check_for_wizard()
else:
self.queryFlash()
@@ -192,7 +235,10 @@ class NFIFlash(Screen):
def md5finished(self, retval):
if retval==0:
- self.session.openWithCallback(self.queryCB, MessageBox, _("This .NFI file has a valid md5 signature. Continue programming this image to flash memory?"), MessageBox.TYPE_YESNO)
+ if self.wizard_mode:
+ self.session.openWithCallback(self.queryCB, MessageBox, _("Shall the USB stick wizard proceed and program the image file %s into flash memory?" % self.nfifile.rsplit('/',1)[-1]), MessageBox.TYPE_YESNO)
+ else:
+ self.session.openWithCallback(self.queryCB, MessageBox, _("This .NFI file has a valid md5 signature. Continue programming this image to flash memory?"), MessageBox.TYPE_YESNO)
else:
self.session.openWithCallback(self.queryCB, MessageBox, _("The md5sum validation failed, the file may be corrupted! Are you sure that you want to burn this image to flash memory? You are doing this at your own risk!"), MessageBox.TYPE_YESNO)
@@ -201,6 +247,7 @@ class NFIFlash(Screen):
self.createJob()
else:
self["statusbar"].text = _("Please select .NFI flash image file from medium")
+ self.wizard_mode = False
def createJob(self):
self.job = Job("Image flashing job")
@@ -240,6 +287,8 @@ class NFIFlash(Screen):
elif j.status == j.FINISHED:
self["statusbar"].text = _("Writing NFI image file to flash completed")
self.session.summary.setText(_("NFI image flashing completed. Press Yellow to Reboot!"))
+ if self.wizard_mode:
+ self.restoreConfiguration()
self["key_yellow"].text = _("Reboot")
elif j.status == j.FAILED:
@@ -250,10 +299,19 @@ class NFIFlash(Screen):
print "[jobcb] %s %s %s" % (jobref, fasel, blubber)
self["key_green"].text = _("Flash")
- def reboot(self):
+ def reboot(self, ret=None):
if self.job.status == self.job.FINISHED:
self["statusbar"].text = ("rebooting...")
TryQuitMainloop(self.session,2)
-
+
+ def restoreConfiguration(self):
+ if self.configuration_restorable:
+ from Screens.Console import Console
+ cmdlist = [ "mount /dev/mtdblock/3 /mnt/realroot -t jffs2", "tar -xzvf " + self.configuration_restorable + " -C /mnt/realroot/" ]
+ self.session.open(Console, title = "Restore running", cmdlist = cmdlist, finishedCallback = self.restore_finished, closeOnSuccess = True)
+
+ def restore_finished(self):
+ self.session.openWithCallback(self.reboot, MessageBox, _("USB stick wizard finished. Your dreambox will now restart with your new image!"), MessageBox.TYPE_INFO)
+
def createSummary(self):
return NFISummary
diff --git a/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py b/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py
index 6096ca8b..a8b34acd 100755
--- a/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py
+++ b/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py
@@ -421,3 +421,4 @@ class NetworkWizard(WizardLanguage, Rc):
def ChoicesSelectionMoved(self):
pass
+
diff --git a/lib/python/Plugins/SystemPlugins/SoftwareManager/SoftwareTools.py b/lib/python/Plugins/SystemPlugins/SoftwareManager/SoftwareTools.py
index e8cf6dc2..d4653cca 100755
--- a/lib/python/Plugins/SystemPlugins/SoftwareManager/SoftwareTools.py
+++ b/lib/python/Plugins/SystemPlugins/SoftwareManager/SoftwareTools.py
@@ -7,6 +7,7 @@ from Components.Sources.List import List
from Components.Ipkg import IpkgComponent
from Components.Network import iNetwork
from Tools.Directories import pathExists, fileExists, resolveFilename, SCOPE_METADIR
+from Tools.HardwareInfo import HardwareInfo
from time import time
@@ -29,6 +30,7 @@ class SoftwareTools(DreamInfoHandler):
self.language = language.getLanguage()[:2] # getLanguage returns e.g. "fi_FI" for "language_country"
DreamInfoHandler.__init__(self, self.statusCallback, blocking = False, neededTag = 'ALL_TAGS', neededFlag = self.ImageVersion, language = self.language)
self.directory = resolveFilename(SCOPE_METADIR)
+ self.hardware_info = HardwareInfo()
self.list = List([])
self.NotifierCallback = None
self.Console = Console()
@@ -78,9 +80,12 @@ class SoftwareTools(DreamInfoHandler):
def ipkgCallback(self, event, param):
if event == IpkgComponent.EVENT_ERROR:
SoftwareTools.list_updating = False
+ if self.NotifierCallback is not None:
+ self.NotifierCallback(False)
elif event == IpkgComponent.EVENT_DONE:
if SoftwareTools.list_updating:
self.startIpkgListAvailable()
+ #print event, "-", param
pass
def startIpkgListAvailable(self, callback = None):
@@ -164,6 +169,14 @@ class SoftwareTools(DreamInfoHandler):
l = len(tokens)
version = l > 1 and tokens[1].strip() or ""
SoftwareTools.installed_packetlist[name] = version
+ for package in self.packagesIndexlist[:]:
+ if not self.verifyPrerequisites(package[0]["prerequisites"]):
+ self.packagesIndexlist.remove(package)
+ for package in self.packagesIndexlist[:]:
+ attributes = package[0]["attributes"]
+ if attributes.has_key("packagetype"):
+ if attributes["packagetype"] == "internal":
+ self.packagesIndexlist.remove(package)
if callback is None:
self.countUpdates()
else:
@@ -228,4 +241,14 @@ class SoftwareTools(DreamInfoHandler):
for name in self.UpdateConsole.appContainers.keys():
self.UpdateConsole.kill(name)
+ def verifyPrerequisites(self, prerequisites):
+ if prerequisites.has_key("hardware"):
+ hardware_found = False
+ for hardware in prerequisites["hardware"]:
+ if hardware == self.hardware_info.device_name:
+ hardware_found = True
+ if not hardware_found:
+ return False
+ return True
+
iSoftwareTools = SoftwareTools() \ No newline at end of file
diff --git a/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py b/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py
index 4dbe7f70..1e0ed4d5 100755
--- a/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py
+++ b/lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py
@@ -307,8 +307,8 @@ class PluginManager(Screen, DreamInfoHandler):
<convert type="TemplatedMultiContent">
{"templates":
{"default": (51,[
- MultiContentEntryText(pos = (30, 1), size = (470, 24), font=0, flags = RT_HALIGN_LEFT, text = 0), # index 0 is the name
- MultiContentEntryText(pos = (30, 25), size = (470, 24), font=1, flags = RT_HALIGN_LEFT, text = 2), # index 2 is the description
+ MultiContentEntryText(pos = (0, 1), size = (470, 24), font=0, flags = RT_HALIGN_LEFT, text = 0), # index 0 is the name
+ MultiContentEntryText(pos = (0, 25), size = (470, 24), font=1, flags = RT_HALIGN_LEFT, text = 2), # index 2 is the description
MultiContentEntryPixmapAlphaTest(pos = (475, 0), size = (48, 48), png = 5), # index 5 is the status pixmap
MultiContentEntryPixmapAlphaTest(pos = (0, 49), size = (550, 2), png = 6), # index 6 is the div pixmap
]),
@@ -405,22 +405,19 @@ class PluginManager(Screen, DreamInfoHandler):
if status == 'update':
statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/upgrade.png"))
self.statuslist.append(( _("Updating software catalog"), '', _("Searching for available updates. Please wait..." ),'', '', statuspng, divpng, None, '' ))
- self["list"].style = "default"
- self['list'].setList(self.statuslist)
elif status == 'sync':
statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/upgrade.png"))
self.statuslist.append(( _("Package list update"), '', _("Searching for new installed or removed packages. Please wait..." ),'', '', statuspng, divpng, None, '' ))
- self["list"].style = "default"
- self['list'].setList(self.statuslist)
elif status == 'error':
statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/remove.png"))
self.statuslist.append(( _("Error"), '', _("There was an error downloading the packetlist. Please try again." ),'', '', statuspng, divpng, None, '' ))
- self["list"].style = "default"
- self['list'].setList(self.statuslist)
+ self["list"].style = "default"
+ self['list'].setList(self.statuslist)
+
def getUpdateInfos(self):
self.setState('update')
- iSoftwareTools.getUpdates(self.getUpdateInfosCB)
+ iSoftwareTools.startSoftwareTools(self.getUpdateInfosCB)
def getUpdateInfosCB(self, retval = None):
if retval is not None:
@@ -429,9 +426,13 @@ class PluginManager(Screen, DreamInfoHandler):
self["status"].setText(_("There are at least ") + str(iSoftwareTools.available_updates) + _(" updates available."))
else:
self["status"].setText(_("There are no updates available."))
+ self.rebuildList()
elif retval is False:
- self["status"].setText(_("No network connection available."))
- self.rebuildList()
+ self.setState('error')
+ if iSoftwareTools.NetworkConnectionAvailable:
+ self["status"].setText(_("Updatefeed not available."))
+ else:
+ self["status"].setText(_("No network connection available."))
def rebuildList(self, retval = None):
if self.currentSelectedTag is None:
@@ -1701,15 +1702,11 @@ def startSetup(menuid):
return [ ]
return [(_("Software management"), UpgradeMain, "software_manager", 50)]
-def autostart(reason, **kwargs):
- if reason is True:
- iSoftwareTools.startSoftwareTools()
def Plugins(path, **kwargs):
global plugin_path
plugin_path = path
list = [
- PluginDescriptor(where = [PluginDescriptor.WHERE_NETWORKCONFIG_READ], fnc = autostart),
PluginDescriptor(name=_("Software management"), description=_("Manage your receiver's software"), where = PluginDescriptor.WHERE_MENU, fnc=startSetup),
PluginDescriptor(name=_("Ipkg"), where = PluginDescriptor.WHERE_FILESCAN, fnc = filescan)
]
diff --git a/lib/python/Plugins/SystemPlugins/TempFanControl/plugin.py b/lib/python/Plugins/SystemPlugins/TempFanControl/plugin.py
index 38e343f9..c8af9cdd 100644
--- a/lib/python/Plugins/SystemPlugins/TempFanControl/plugin.py
+++ b/lib/python/Plugins/SystemPlugins/TempFanControl/plugin.py
@@ -12,7 +12,7 @@ from Components.FanControl import fancontrol
class TempFanControl(Screen, ConfigListScreen):
skin = """
- <screen position="90,100" size="570,420" title="Fan Control" >
+ <screen position="center,center" size="570,420" title="Fan Control" >
<ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
<ePixmap pixmap="skin_default/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
<ePixmap pixmap="skin_default/buttons/yellow.png" position="280,0" size="140,40" alphatest="on" />
@@ -22,7 +22,7 @@ class TempFanControl(Screen, ConfigListScreen):
<widget source="yellow" render="Label" position="280,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
<widget source="blue" render="Label" position="420,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
- <widget name="config" position="10,50" size="550,90" scrollbarMode="showOnDemand" />
+ <widget name="config" position="10,50" size="550,120" scrollbarMode="showOnDemand" />
<widget source="SensorTempText0" render="Label" position="10,150" zPosition="1" size="90,40" font="Regular;20" halign="left" valign="top" backgroundColor="#9f1313" transparent="1" />
<widget source="SensorTemp0" render="Label" position="100,150" zPosition="1" size="100,20" font="Regular;19" halign="right">
@@ -90,7 +90,7 @@ class TempFanControl(Screen, ConfigListScreen):
<convert type="SensorToText"></convert>
</widget>
</screen>"""
-
+
def __init__(self, session, args = None):
Screen.__init__(self, session)
@@ -125,6 +125,9 @@ class TempFanControl(Screen, ConfigListScreen):
for count in range(fancontrol.getFanCount()):
self.list.append(getConfigListEntry(_("Fan %d Voltage") % (count + 1), fancontrol.getConfig(count).vlt))
self.list.append(getConfigListEntry(_("Fan %d PWM") % (count + 1), fancontrol.getConfig(count).pwm))
+ self.list.append(getConfigListEntry(_("Standby Fan %d Voltage") % (count + 1), fancontrol.getConfig(count).vlt_standby))
+ self.list.append(getConfigListEntry(_("Standby Fan %d PWM") % (count + 1), fancontrol.getConfig(count).pwm_standby))
+
ConfigListScreen.__init__(self, self.list, session = self.session)
#self["config"].list = self.list
#self["config"].setList(self.list)
@@ -136,28 +139,31 @@ class TempFanControl(Screen, ConfigListScreen):
"red": self.revert,
"green": self.save
}, -1)
-
+
def save(self):
for count in range(fancontrol.getFanCount()):
fancontrol.getConfig(count).vlt.save()
fancontrol.getConfig(count).pwm.save()
+ fancontrol.getConfig(count).vlt_standby.save()
+ fancontrol.getConfig(count).pwm_standby.save()
self.close()
-
+
def revert(self):
for count in range(fancontrol.getFanCount()):
fancontrol.getConfig(count).vlt.load()
fancontrol.getConfig(count).pwm.load()
+ fancontrol.getConfig(count).vlt_standby.load()
+ fancontrol.getConfig(count).pwm_standby.load()
self.close()
-
+
def main(session, **kwargs):
session.open(TempFanControl)
def startMenu(menuid):
if menuid != "system":
return []
-
return [(_("Temperature and Fan control"), main, "tempfancontrol", 80)]
def Plugins(**kwargs):
return PluginDescriptor(name = "Temperature and Fan control", description = _("Temperature and Fan control"), where = PluginDescriptor.WHERE_MENU, fnc = startMenu)
- \ No newline at end of file
+
diff --git a/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py b/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py
index a9f7bf43..2df5814c 100755
--- a/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py
+++ b/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py
@@ -190,7 +190,7 @@ class WlanScan(Screen):
self.newAPList = None
self.WlanList = None
self.cleanList = None
- self.oldlist = None
+ self.oldlist = {}
self.listLength = None
self.rescanTimer = eTimer()
self.rescanTimer.callback.append(self.rescanTimerFired)
@@ -274,24 +274,18 @@ class WlanScan(Screen):
return((essid, bssid, _("Signal: ") + str(signal), _("Max. Bitrate: ") + str(maxrate), _("Encrypted: ") + encryption, _("Interface: ") + str(iface), divpng))
def updateAPList(self):
- self.oldlist = []
- self.oldlist = self.cleanList
- self.newAPList = []
newList = []
+ newList = self.getAccessPoints(refresh = True)
+ self.newAPList = []
tmpList = []
newListIndex = None
currentListEntry = None
currentListIndex = None
- newList = self.getAccessPoints(refresh = True)
-
- for oldentry in self.oldlist:
- if oldentry not in newList:
- newList.append(oldentry)
- for newentry in newList:
- if newentry[1] == "hidden...":
- continue
- tmpList.append(newentry)
+ for ap in self.oldlist.keys():
+ data = self.oldlist[ap]['data']
+ if data is not None:
+ tmpList.append(data)
if len(tmpList):
if "hidden..." not in tmpList:
@@ -303,7 +297,7 @@ class WlanScan(Screen):
currentListEntry = self["list"].getCurrent()
idx = 0
for entry in self.newAPList:
- if entry == currentListEntry:
+ if entry[0] == currentListEntry[0]:
newListIndex = idx
idx +=1
self['list'].setList(self.newAPList)
@@ -335,6 +329,10 @@ class WlanScan(Screen):
compList.remove(compentry)
for entry in compList:
self.cleanList.append( ( entry[0], entry[1], entry[2], entry[3], entry[4], entry[5] ) )
+ if not self.oldlist.has_key(entry[0]):
+ self.oldlist[entry[0]] = { 'data': entry }
+ else:
+ self.oldlist[entry[0]]['data'] = entry
if "hidden..." not in self.cleanList:
self.cleanList.append( ( _("enter hidden network SSID"), "hidden...", True, self.iface, _("unavailable"), "" ) )
@@ -401,4 +399,3 @@ def configStrings(iface):
def Plugins(**kwargs):
return PluginDescriptor(name=_("Wireless LAN"), description=_("Connect to a Wireless Network"), where = PluginDescriptor.WHERE_NETWORKSETUP, fnc={"ifaceSupported": callFunction, "configStrings": configStrings, "WlanPluginEntry": lambda x: "Wireless Network Configuartion..."})
- \ No newline at end of file