aboutsummaryrefslogtreecommitdiff
path: root/lib/python
diff options
context:
space:
mode:
authorFelix Domke <tmbinc@elitedvb.net>2008-11-18 13:28:27 +0100
committerFelix Domke <tmbinc@elitedvb.net>2008-11-18 13:28:27 +0100
commit09565fe7720e8e042712b42a9dc7aac2949130cb (patch)
tree485a75275b6ab329837e6a5f2e1409ae3be43f98 /lib/python
parent71c070aafe23537ee96a68dbff46246d44476869 (diff)
parentb925b5213ddc05911ca9736cc22628c876f604f6 (diff)
downloadenigma2-09565fe7720e8e042712b42a9dc7aac2949130cb.tar.gz
enigma2-09565fe7720e8e042712b42a9dc7aac2949130cb.zip
Merge branch 'master' of git.opendreambox.org:/git/enigma2
Diffstat (limited to 'lib/python')
-rw-r--r--lib/python/Components/AVSwitch.py23
-rw-r--r--lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py8
-rw-r--r--lib/python/Plugins/Extensions/DVDBurn/Process.py9
-rw-r--r--lib/python/Plugins/Extensions/DVDBurn/TitleList.py22
-rw-r--r--lib/python/Plugins/Extensions/DVDPlayer/plugin.py21
-rw-r--r--lib/python/Plugins/Extensions/MediaPlayer/plugin.py27
-rw-r--r--lib/python/Plugins/Extensions/PicturePlayer/plugin.py905
-rw-r--r--lib/python/Plugins/SystemPlugins/Hotplug/plugin.py2
-rw-r--r--lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py110
-rw-r--r--lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py10
-rw-r--r--lib/python/Plugins/SystemPlugins/Videomode/VideoHardware.py29
-rw-r--r--lib/python/Screens/Console.py3
-rw-r--r--lib/python/Screens/InfoBarGenerics.py1
-rw-r--r--lib/python/Tools/Directories.py3
-rw-r--r--lib/python/enigma_python.i1
15 files changed, 655 insertions, 519 deletions
diff --git a/lib/python/Components/AVSwitch.py b/lib/python/Components/AVSwitch.py
index 8f99b98e..00350cbb 100644
--- a/lib/python/Components/AVSwitch.py
+++ b/lib/python/Components/AVSwitch.py
@@ -1,5 +1,5 @@
from config import config, ConfigSlider, ConfigSelection, ConfigYesNo, ConfigEnableDisable, ConfigSubsection, ConfigBoolean
-from enigma import eAVSwitch
+from enigma import eAVSwitch, getDesktop
from SystemInfo import SystemInfo
class AVSwitch:
@@ -28,6 +28,27 @@ class AVSwitch:
def setSystem(self, value):
eAVSwitch.getInstance().setVideomode(value)
+ def getOutputAspect(self):
+ if valstr in ("4_3_letterbox", "4_3_panscan"): # 4:3
+ return (4,3)
+ elif valstr == "16_9": # auto ... 4:3 or 16:9
+ try:
+ aspect_str = open("/proc/stb/vmpeg/0/aspect", "r").read()
+ if aspect_str == "1": # 4:3
+ return (4,3)
+ except IOError:
+ pass
+ elif valstr in ("16_9_always", "16_9_letterbox"): # 16:9
+ pass
+ elif valstr in ("16_10_letterbox", "16_10_panscan"): # 16:10
+ return (16,10)
+ return (16,9)
+
+ def getFramebufferScale(self):
+ aspect = self.getOutputAspect()
+ fb_size = getDesktop(0).size()
+ return (aspect[0] * fb_size.height(), aspect[1] * fb_size.width())
+
def getAspectRatioSetting(self):
valstr = config.av.aspectratio.value
if valstr == "4_3_letterbox":
diff --git a/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py b/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py
index 836c9fbd..ce16259e 100644
--- a/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py
+++ b/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py
@@ -50,7 +50,7 @@ class DVDToolbox(Screen):
"green": self.update,
"yellow": self.format,
#"blue": self.eject,
- "cancel": self.close,
+ "cancel": self.exit,
"pageUp": self.pageUp,
"pageDown": self.pageDown
})
@@ -63,7 +63,7 @@ class DVDToolbox(Screen):
def pageDown(self):
self["details"].pageDown()
- def update(self, dev="", media_state=""):
+ def update(self, dev="", action=""):
self["space_label"].text = _("Please wait... Loading list...")
self["info"].text = ""
self["details"].setText("")
@@ -89,7 +89,7 @@ class DVDToolbox(Screen):
for line in mediuminfo.splitlines():
if line.find("Mounted Media:") > -1:
mediatype = line.rsplit(',',1)[1][1:]
- if mediatype.find("RW") > 0:
+ if mediatype.find("RW") > 0 or mediatype.find("RAM") > 0:
self.formattable = True
else:
self.formattable = False
@@ -186,7 +186,7 @@ class DVDformatTask(Task):
if line.startswith("- media is already formatted"):
self.error = self.ERROR_ALREADYFORMATTED
self.retryargs = [ "-force" ]
- if line.startswith("- media is not blank"):
+ if line.startswith("- media is not blank") or line.startswith(" -format=full to perform full (lengthy) reformat;"):
self.error = self.ERROR_ALREADYFORMATTED
self.retryargs = [ "-blank" ]
if line.startswith(":-( mounted media doesn't appear to be"):
diff --git a/lib/python/Plugins/Extensions/DVDBurn/Process.py b/lib/python/Plugins/Extensions/DVDBurn/Process.py
index 89ca90fd..750e9d9b 100644
--- a/lib/python/Plugins/Extensions/DVDBurn/Process.py
+++ b/lib/python/Plugins/Extensions/DVDBurn/Process.py
@@ -165,7 +165,7 @@ class DemuxTask(Task):
def cleanup(self, failed):
if failed:
import os
- for file in self.generated_files.itervalues():
+ for file in self.generated_files:
os.remove(file)
class MplexTaskPostcondition(Condition):
@@ -220,7 +220,7 @@ class RemoveESFiles(Task):
def prepare(self):
self.args += ["-f"]
- self.args += self.demux_task.generated_files.values()
+ self.args += self.demux_task.generated_files
self.args += [self.demux_task.cutfile]
class DVDAuthorTask(Task):
@@ -368,6 +368,9 @@ class CheckDiskspaceTask(Task):
self.global_preconditions.append(DiskspacePrecondition(diskSpaceNeeded))
self.weighting = 5
+ def abort(self):
+ self.finish(aborted = True)
+
def run(self, callback):
failed_preconditions = self.checkPreconditions(True) + self.checkPreconditions(False)
if len(failed_preconditions):
@@ -791,7 +794,7 @@ class DVDJob(Job):
demux = DemuxTask(self, link_name)
self.mplextask = MplexTask(self, outputfile=title_filename, demux_task=demux)
self.mplextask.end = self.estimateddvdsize
- #RemoveESFiles(self, demux)
+ RemoveESFiles(self, demux)
WaitForResidentTasks(self)
PreviewTask(self, self.workspace + "/dvd/VIDEO_TS/")
output = self.project.settings.output.getValue()
diff --git a/lib/python/Plugins/Extensions/DVDBurn/TitleList.py b/lib/python/Plugins/Extensions/DVDBurn/TitleList.py
index 345af877..537da0dd 100644
--- a/lib/python/Plugins/Extensions/DVDBurn/TitleList.py
+++ b/lib/python/Plugins/Extensions/DVDBurn/TitleList.py
@@ -74,9 +74,22 @@ class TitleList(Screen, HelpableScreen):
self["titles"] = List(list = [ ], enableWrapAround = True, item_height=30, fonts = [gFont("Regular", 20)])
self.updateTitleList()
-
+
+ def checkBackgroundJobs(self):
+ for job in job_manager.getPendingJobs():
+ print "type(job):", type(job)
+ print "Process.DVDJob:", Process.DVDJob
+ if type(job) == Process.DVDJob:
+ self.backgroundJob = job
+ return
+ self.backgroundJob = None
+
def showMenu(self):
menu = []
+ self.checkBackgroundJobs()
+ if self.backgroundJob:
+ j = self.backgroundJob
+ menu.append(("%s: %s (%d%%)" % (j.getStatustext(), j.name, int(100*j.progress/float(j.end))), self.showBackgroundJob))
if self.project.settings.output.getValue() == "dvd":
menu.append((_("Burn DVD"), self.burnProject))
elif self.project.settings.output.getValue() == "iso":
@@ -97,6 +110,11 @@ class TitleList(Screen, HelpableScreen):
if choice:
choice[1]()
+ def showBackgroundJob(self):
+ job_manager.in_background = False
+ self.session.openWithCallback(self.JobViewCB, JobView, self.backgroundJob)
+ self.backgroundJob = None
+
def titleProperties(self):
if self.getCurrentTitle():
self.session.openWithCallback(self.updateTitleList, TitleProperties.TitleProperties, self, self.project, self["titles"].getIndex())
@@ -217,7 +235,7 @@ class TitleList(Screen, HelpableScreen):
totalsize += title.estimatedDiskspace
self["titles"].list = res
self.updateSize(totalsize)
-
+
def updateSize(self, totalsize):
size = int((totalsize/1024)/1024)
max_SL = 4370
diff --git a/lib/python/Plugins/Extensions/DVDPlayer/plugin.py b/lib/python/Plugins/Extensions/DVDPlayer/plugin.py
index cb5f0e0d..593d4d2e 100644
--- a/lib/python/Plugins/Extensions/DVDPlayer/plugin.py
+++ b/lib/python/Plugins/Extensions/DVDPlayer/plugin.py
@@ -491,7 +491,7 @@ class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarP
def askLeavePlayer(self):
choices = [(_("Continue playing"), "play"), (_("Exit"), "exit")]
if not self.physicalDVD:
- choices.insert(1,(_("Return to file browser"), "browser"))
+ choices.insert(1,(_("Return to file browser"), "browser"))
self.session.openWithCallback(self.exitCB, ChoiceBox, title=_("Leave DVD Player?"), list = choices)
def sendKey(self, key):
@@ -590,19 +590,16 @@ class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarP
print "cur_dlg", self.session.current_dialog
def exitCB(self, answer):
- if answer is not None:
- if answer[1] == "exit":
- if self.service:
- self.service = None
- self.close()
- if answer[1] == "browser":
+ if not answer or answer and answer[1] == "exit":
+ if self.service:
+ self.service = None
+ self.close()
+ if answer and answer[1] == "browser":
#TODO check here if a paused dvd playback is already running... then re-start it...
#else
- if self.service:
- self.service = None
- self.showFileBrowser()
- else:
- pass
+ if self.service:
+ self.service = None
+ self.showFileBrowser()
def __onClose(self):
for i in (("/proc/stb/video/aspect", self.old_aspect), ("/proc/stb/video/policy", self.old_policy), ("/proc/stb/denc/0/wss", self.old_wss)):
diff --git a/lib/python/Plugins/Extensions/MediaPlayer/plugin.py b/lib/python/Plugins/Extensions/MediaPlayer/plugin.py
index 0d5305d7..babef3e7 100644
--- a/lib/python/Plugins/Extensions/MediaPlayer/plugin.py
+++ b/lib/python/Plugins/Extensions/MediaPlayer/plugin.py
@@ -863,17 +863,22 @@ class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoB
self.session.open(Subtitles)
def hotplugCB(self, dev, media_state):
- if dev == harddiskmanager.getCD():
- from Components.Scanner import scanDevice
- devpath = harddiskmanager.getAutofsMountpoint(harddiskmanager.getCD())
- self.cdAudioTrackFiles = []
- res = scanDevice(devpath)
- list = [ (r.description, r, res[r], self.session) for r in res ]
- if list:
- (desc, scanner, files, session) = list[0]
- for file in files:
- if file.mimetype == "audio/x-cda":
- self.cdAudioTrackFiles.append(file.path)
+ if dev == harddiskmanager.getCD():
+ if media_state == "1":
+ from Components.Scanner import scanDevice
+ devpath = harddiskmanager.getAutofsMountpoint(harddiskmanager.getCD())
+ self.cdAudioTrackFiles = []
+ res = scanDevice(devpath)
+ list = [ (r.description, r, res[r], self.session) for r in res ]
+ if list:
+ (desc, scanner, files, session) = list[0]
+ for file in files:
+ if file.mimetype == "audio/x-cda":
+ self.cdAudioTrackFiles.append(file.path)
+ else:
+ self.cdAudioTrackFiles = []
+ if self.isAudioCD:
+ self.clear_playlist()
class MediaPlayerLCDScreen(Screen):
skin = """
diff --git a/lib/python/Plugins/Extensions/PicturePlayer/plugin.py b/lib/python/Plugins/Extensions/PicturePlayer/plugin.py
index ea906f0d..aeca12dc 100644
--- a/lib/python/Plugins/Extensions/PicturePlayer/plugin.py
+++ b/lib/python/Plugins/Extensions/PicturePlayer/plugin.py
@@ -1,384 +1,150 @@
-from enigma import eTimer, loadPic, getExif
+from enigma import ePicLoad, eTimer, getDesktop
+
from Screens.Screen import Screen
-from Screens.ServiceInfo import ServiceInfoList, ServiceInfoListEntry
-from Components.ActionMap import ActionMap, NumberActionMap
+from Tools.Directories import resolveFilename, pathExists, SCOPE_MEDIA
+from Plugins.Plugin import PluginDescriptor
+
from Components.Pixmap import Pixmap, MovingPixmap
+from Components.ActionMap import ActionMap, NumberActionMap
from Components.Label import Label
-
-from Components.ConfigList import ConfigList
-from Components.config import *
-
-from Tools.Directories import resolveFilename, fileExists, pathExists, createDir, SCOPE_MEDIA
+from Components.Button import Button
from Components.FileList import FileList
from Components.AVSwitch import AVSwitch
+from Components.Sources.List import List
+from Components.ConfigList import ConfigList
-from Plugins.Plugin import PluginDescriptor
+from Components.config import config, ConfigSubsection, ConfigInteger, ConfigSelection, ConfigText, ConfigEnableDisable, KEY_LEFT, KEY_RIGHT, KEY_0, getConfigListEntry
+
+def getScale():
+ return AVSwitch().getFramebufferScale()
config.pic = ConfigSubsection()
-config.pic.slidetime = ConfigInteger(default=10, limits=(5, 60))
-config.pic.resize = ConfigSelection(default="0", choices = [("0", _("simple")), ("1", _("better"))])
+config.pic.framesize = ConfigInteger(default=30, limits=(5, 99))
+config.pic.slidetime = ConfigInteger(default=10, limits=(10, 60))
+config.pic.resize = ConfigSelection(default="1", choices = [("0", _("simple")), ("1", _("better"))])
config.pic.cache = ConfigEnableDisable(default=True)
config.pic.lastDir = ConfigText(default=resolveFilename(SCOPE_MEDIA))
-config.pic.rotate = ConfigSelection(default="0", choices = [("0", _("none")), ("1", _("manual")), ("2", _("by Exif"))])
-
-def getAspect():
- val = AVSwitch().getAspectRatioSetting()
- return val/2
+config.pic.infoline = ConfigEnableDisable(default=True)
+config.pic.loop = ConfigEnableDisable(default=True)
+config.pic.bgcolor = ConfigSelection(default="#00000000", choices = [("#00000000", _("black")),("#009eb9ff", _("blue")),("#00ff5a51", _("red")), ("#00ffe875", _("yellow")), ("#0038FF48", _("green"))])
+config.pic.textcolor = ConfigSelection(default="#0038FF48", choices = [("#00000000", _("black")),("#009eb9ff", _("blue")),("#00ff5a51", _("red")), ("#00ffe875", _("yellow")), ("#0038FF48", _("green"))])
-#------------------------------------------------------------------------------------------
+class picshow(Screen):
+ def __init__(self, session):
+ self.skin = """<screen position="80,80" size="560,440" title="PicturePlayer" >
+ <ePixmap position="0,0" size="140,40" pixmap="skin_default/buttons/red.png" alphatest="on" />
+ <ePixmap position="140,0" size="140,40" pixmap="skin_default/buttons/green.png" alphatest="on" />
+ <ePixmap position="280,0" size="140,40" pixmap="skin_default/buttons/yellow.png" alphatest="on" />
+ <ePixmap position="420,0" size="140,40" pixmap="skin_default/buttons/blue.png" alphatest="on" />
+ <widget name="key_red" position="0,0" size="140,40" font="Regular;20" backgroundColor="#9f1313" zPosition="2" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
+ <widget name="key_green" position="140,0" size="140,40" font="Regular;20" backgroundColor="#1f771f" zPosition="2" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
+ <widget name="key_yellow" position="280,0" size="140,40" font="Regular;20" backgroundColor="#a08500" zPosition="2" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
+ <widget name="key_blue" position="420,0" size="140,40" font="Regular;20" backgroundColor="#18188b" zPosition="2" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
+ <widget name="label" position="5,55" size="350,140" font="Regular;19" />
+ <widget name="thn" position="360,40" size="180,160" alphatest="on" />
+ <widget name="filelist" position="5,205" zPosition="2" size="550,230" scrollbarMode="showOnDemand" />
+ </screen>"""
-class ThumbView(Screen):
- skin = """
- <screen position="0,0" size="720,576" flags="wfNoBorder" title="ThumbView" >
- <eLabel position="0,0" zPosition="0" size="720,576" backgroundColor="black" />
- <widget name="frame" position="50,63" size="190,200" pixmap="pic_frame.png" zPosition="1" alphatest="on" />
- <widget name="label0" position="55,240" size="180,20" font="Regular;13" halign="center" zPosition="2" transparent="1" />
- <widget name="label1" position="270,240" size="180,20" font="Regular;13" halign="center" zPosition="2" transparent="1" />
- <widget name="label2" position="485,240" size="180,20" font="Regular;13" halign="center" zPosition="2" transparent="1" />
- <widget name="label3" position="55,465" size="180,20" font="Regular;13" halign="center" zPosition="2" transparent="1" />
- <widget name="label4" position="270,465" size="180,20" font="Regular;13" halign="center" zPosition="2" transparent="1" />
- <widget name="label5" position="485,465" size="180,20" font="Regular;13" halign="center" zPosition="2" transparent="1" />
- <widget name="thumb0" position="55,68" size="180,160" zPosition="2" transparent="1" />
- <widget name="thumb1" position="270,68" size="180,160" zPosition="2" transparent="1" />
- <widget name="thumb2" position="485,68" size="180,160" zPosition="2" transparent="1" />
- <widget name="thumb3" position="55,293" size="180,160" zPosition="2" transparent="1" />
- <widget name="thumb4" position="270,293" size="180,160" zPosition="2" transparent="1" />
- <widget name="thumb5" position="485,293" size="180,160" zPosition="2" transparent="1" />
- </screen>"""
-
- def __init__(self, session, filelist, name, path):
- self.skin = ThumbView.skin
Screen.__init__(self, session)
- self["actions"] = ActionMap(["OkCancelActions", "DirectionActions", "MovieSelectionActions"],
+ self["actions"] = ActionMap(["OkCancelActions", "ColorActions", "DirectionActions"],
{
- "cancel": self.Exit,
- "ok": self.KeyOk,
- "showEventInfo": self.StartExif,
- "right": self.key_right,
- "left": self.key_left,
- "up": self.key_up,
- "down": self.key_down
+ "cancel": self.KeyExit,
+ "red": self.KeyRed,
+ "yellow": self.KeyYellow,
+ "blue": self.KeyBlue,
+ "ok": self.KeyOk
}, -1)
-
- for x in range(6):
- self["label"+str(x)] = Label()
- self["thumb"+str(x)] = Pixmap()
- self["frame"] = MovingPixmap()
-
- self.aspect = getAspect()
- self.path = path
- self.filelist = filelist
- self.currPage = -1
- self.index = 0
- self.old_index = 0
- self.thumblist = []
- self.thumbindex = 0
- self.list = []
- self.poslist = [[50,63],[265,63],[480,63],[50,288],[265,288],[480,288]]
-
- count=0
- pos=0
- for x in self.filelist:
- if x[0][1] == False:
- self.list.append((x[0][0], self.path + x[0][0], count/6, pos, "(" + str(count+1) + ") "))
- pos += 1
- if pos == 6:
- pos = 0
- if x[0][0] == name:
- self.index = count
- count += 1
- self.maxentry = len(self.list)-1
-
- if self.maxentry < 0:
- self["label0"].setText(_("no Picture found"))
+
+ self["key_red"] = Button(_("Thumbnails"))
+ self["key_green"] = Button()
+ self["key_yellow"] = Button(_("Exif"))
+ self["key_blue"] = Button(_("Setup"))
+ self["label"] = Label()
+ self["thn"] = Pixmap()
+
+ currDir = config.pic.lastDir.value
+ if not pathExists(currDir):
+ currDir = "/"
+
+ self.filelist = FileList(currDir, matchingPattern = "(?i)^.*\.(jpeg|jpg|jpe|png|bmp|gif)")
+ self["filelist"] = self.filelist
+ self["filelist"].onSelectionChanged.append(self.selectionChanged)
self.ThumbTimer = eTimer()
self.ThumbTimer.callback.append(self.showThumb)
- self.fillPage()
-
- def key_left(self):
- self.index -= 1
- if self.index < 0:
- self.index = self.maxentry
- self.fillPage()
-
- def key_right(self):
- self.index += 1
- if self.index > self.maxentry:
- self.index = 0
- self.fillPage()
-
- def key_up(self):
- self.index -= 3
- if self.index < 0:
- self.index = 0
- self.fillPage()
-
- def key_down(self):
- self.index += 3
- if self.index > self.maxentry:
- self.index = self.maxentry
- self.fillPage()
+ self.picload = ePicLoad()
+ self.picload.PictureData.get().append(self.showPic)
- def fillPage(self):
- if self.maxentry < 0:
- return
+ self.onLayoutFinish.append(self.setConf)
- self["frame"].moveTo(self.poslist[self.list[self.index][3]][0], self.poslist[self.list[self.index][3]][1], 1)
- self["frame"].startMoving()
-
- if self.list[self.index][2] != self.currPage:
- self.currPage = self.list[self.index][2]
- textlist = ["","","","","",""]
- self.thumblist = ["","","","","",""]
-
- for x in self.list:
- if x[2] == self.currPage:
- textlist[x[3]] = x[4] + x[0]
- self.thumblist[x[3]] = x[0]
-
- for x in range(6):
- self["label"+str(x)].setText(textlist[x])
- self["thumb"+str(x)].hide()
-
- self.ThumbTimer.start(500, True)
+ def showPic(self, picInfo=""):
+ ptr = self.picload.getData()
+ if ptr != None:
+ self["thn"].instance.setPixmap(ptr.__deref__())
+ self["thn"].show()
+
+ text = picInfo.split('\n',1)
+ self["label"].setText(text[1])
+ self["label"].show()
def showThumb(self):
- if self.thumblist[self.thumbindex] != "":
- cachefile = ""
- if config.pic.cache.value:
- cachedir = self.path + ".Thumbnails/"
- cachefile = cachedir + self.thumblist[self.thumbindex] + str(180) + str(160) + str(self.aspect)
- if not pathExists(cachedir):
- if not createDir(cachedir):
- cachefile = ""
-
- ptr = loadPic(self.path + self.thumblist[self.thumbindex], 180, 160, self.aspect, int(config.pic.resize.value), int(config.pic.rotate.value), 1, cachefile, 1)
- if ptr != None:
- self["thumb"+str(self.thumbindex)].show()
- self["thumb"+str(self.thumbindex)].instance.setPixmap(ptr)
-
- self.thumbindex += 1
- if self.thumbindex < 6:
+ if not self.filelist.canDescent():
+ if self.picload.getThumbnail(self.filelist.getCurrentDirectory() + self.filelist.getFilename()) == 1:
self.ThumbTimer.start(500, True)
- else:
- self.thumbindex = 0
- else:
- self.thumbindex = 0
-
- def StartExif(self):
- if self.maxentry < 0:
- return
-
- self.session.open(ExifView, self.list[self.index][1], self.list[self.index][0])
- def KeyOk(self):
- if self.maxentry < 0:
- return
-
- self.old_index = self.index
- self.session.openWithCallback(self.returnView ,PicView, self.filelist, self.list[self.index][0], self.path)
-
- def returnView(self, val=0):
- self.index = val
- if self.old_index != self.index:
- self.fillPage()
+ def selectionChanged(self):
+ if not self.filelist.canDescent():
+ self.ThumbTimer.start(500, True)
+ else:
+ self["label"].hide()
+ self["thn"].hide()
- def Exit(self):
- self.close(self.index)
-
-#------------------------------------------------------------------------------------------
-
-class PicView(Screen):
- skin = """
- <screen position="0,0" size="720,576" flags="wfNoBorder" title="PicturePlayer" >
- <eLabel position="0,0" zPosition="0" size="720,576" backgroundColor="black" />
- <widget name="picture" position="80,50" size="560,450" zPosition="1" transparent="1" />
- <widget name="point" position="80,515" size="14,14" zPosition="1" pixmap="skin_default/icons/record.png" alphatest="on" />
- <widget name="file" position="150,510" size="350,30" font="Regular;20" halign="center" zPosition="1" transparent="1" />
- <ePixmap position="500,515" size="36,20" pixmap="skin_default/buttons/key_info.png" zPosition="1" alphatest="on" />
- <ePixmap position="550,515" size="20,20" pixmap="skin_default/icons/ico_mp_rewind.png" zPosition="1" alphatest="on" />
- <widget name="play" position="575,515" size="20,20" pixmap="skin_default/icons/ico_mp_play.png" zPosition="1" alphatest="on" />
- <widget name="pause" position="600,515" size="20,20" pixmap="skin_default/icons/ico_mp_pause.png" zPosition="1" alphatest="on" />
- <ePixmap position="625,515" size="20,20" pixmap="skin_default/icons/ico_mp_forward.png" zPosition="1" alphatest="on" />
- </screen>"""
+ def KeyRed(self):
+ #if not self.filelist.canDescent():
+ self.session.openWithCallback(self.callbackView, Pic_Thumb, self.filelist.getFileList(), self.filelist.getSelectionIndex(), self.filelist.getCurrentDirectory())
- def __init__(self, session, filelist, name, path):
- self.skin = PicView.skin
- Screen.__init__(self, session)
-
- self["actions"] = ActionMap(["OkCancelActions", "ColorActions", "MovieSelectionActions"],
- {
- "cancel": self.Exit,
- "showEventInfo": self.StartExif,
- "green": self.Play,
- "yellow": self.Pause,
- "blue": self.nextPic,
- "red": self.prevPic
- }, -1)
-
- self.aspect = getAspect()
- self.blinking = False
- self.autoShow = True
- self.slideOn = False
- self.pauseOn = False
- self.index = 0
- self.old = 0
- self.list = []
-
- count=0
- for x in filelist:
- if x[0][1] == False:
- self.list.append((x[0][0], path + x[0][0], 0))
- if x[0][0] == name:
- self.index = count
- count += 1
- self.maxentry = len(self.list)-1
-
- self["file"] = Label(_("please wait, loading picture..."))
- self["picture"] = Pixmap()
- self["point"] = Pixmap()
- self["play"] = Pixmap()
- self["pause"] = Pixmap()
-
- self.decodeTimer = eTimer()
- self.decodeTimer.callback.append(self.decodePic)
- self.decodeTimer.start(300, True)
-
- self.slideTimer = eTimer()
- self.slideTimer.callback.append(self.slidePic)
-
-
- def Pause(self):
- if self.slideOn:
- if self.pauseOn:
- self.pauseOn=False
- self["pause"].show()
- else:
- self.pauseOn=True
- self["play"].show()
- self.slideValue = 0
-
- def Play(self):
- if self.pauseOn == False:
- if self.slideOn:
- self.slideOn=False
- self["play"].show()
- else:
- self.slideOn=True
- self.slideTimer.start(1000, True)
-
- self.slideValue = int(config.pic.slidetime.value)
-
- def slidePic(self):
- if self.slideOn == True and self.pauseOn == False:
- self.blinkingWidget("play")
- self.slideValue -= 1
- if self.slideValue <= 0:
- self.slideValue = int(config.pic.slidetime.value)
- self.nextPic()
-
- self.slideTimer.start(1000, True)
-
- if self.pauseOn:
- self.blinkingWidget("pause")
- self.slideTimer.start(1000, True)
-
- def decodePic(self):
- self.currPic = loadPic(self.list[self.index][1], 560, 450, self.aspect, int(config.pic.resize.value), int(config.pic.rotate.value),1)
- self["point"].hide()
- if self.autoShow:
- self.showPic()
- self.autoShow = False
-
- def showPic(self):
- if self.currPic != None:
- self.old = self.index
- self["file"].setText(self.list[self.old][0] + " (" + str(self.old+1) + "/" + str(self.maxentry+1) + ")")
- self["picture"].instance.setPixmap(self.currPic)
-
- self.next()
- self["point"].show()
- self.decodeTimer.start(300, True)
-
- def nextPic(self):
- self.showPic()
-
- def prevPic(self):
- self.index = self.old
- self.prev()
- self.autoShow = True
- self["point"].show()
- self.decodeTimer.start(300, True)
-
- def next(self):
- self.index += 1
- if self.index > self.maxentry:
- self.index = 0
+ def KeyYellow(self):
+ if not self.filelist.canDescent():
+ self.session.open(Pic_Exif, self.picload.getInfo(self.filelist.getCurrentDirectory() + self.filelist.getFilename()))
+
+ def KeyBlue(self):
+ self.session.openWithCallback(self.setConf ,Pic_Setup)
- def prev(self):
- self.index -= 1
- if self.index < 0:
- self.index = self.maxentry
-
- def blinkingWidget(self, name):
- if self.blinking:
- self.blinking=False
- self[name].show()
+ def KeyOk(self):
+ if self.filelist.canDescent():
+ self.filelist.descent()
else:
- self.blinking=True
- self[name].hide()
+ self.session.openWithCallback(self.callbackView, Pic_Full_View, self.filelist.getFileList(), self.filelist.getSelectionIndex(), self.filelist.getCurrentDirectory())
- def StartExif(self):
- if self.pauseOn == False:
- self.Pause()
- self.session.openWithCallback(self.StopExif ,ExifView, self.list[self.old][1], self.list[self.old][0])
+ def setConf(self):
+ sc = getScale()
+ #0=Width 1=Height 2=Aspect 3=use_cache 4=resize_type 5=Background(#AARRGGBB)
+ self.picload.setPara((self["thn"].instance.size().width(), self["thn"].instance.size().height(), sc[0], sc[1], config.pic.cache.value, int(config.pic.resize.value), "#00000000"))
- def StopExif(self):
- if self.pauseOn:
- self.Pause()
-
- def Exit(self):
- self.close(self.old)
+ def callbackView(self, val=0):
+ if val > 0:
+ self.filelist.moveToIndex(val)
-#------------------------------------------------------------------------------------------
+ def KeyExit(self):
+ del self.picload
-class ExifView(Screen):
- skin = """
- <screen position="80,130" size="560,320" title="Exif-Data" >
- <widget name="exiflist" position="5,5" size="550,310" selectionDisabled="1" />
- </screen>"""
-
- def __init__(self, session, fullname, name):
- self.skin = ExifView.skin
- Screen.__init__(self, session)
+ if self.filelist.getCurrentDirectory() is None:
+ config.pic.lastDir.value = "/"
+ else:
+ config.pic.lastDir.value = self.filelist.getCurrentDirectory()
- self["actions"] = ActionMap(["OkCancelActions"],
- {
- "cancel": self.close
- }, -1)
-
- dlist = ["Name:", "EXIF-Version:", "Camera-Make:", "Camera-Model:", "Date/Time:", "User Comments:", "Width / Height:", "Orientation:", "Metering Mode:", "Exposure Program:", "Light Source:", "Flash used:", "CompressedBitsPerPixel:", "ISO Speed Rating:", "X-Resolution:", "Y-Resolution:", "Resolution Unit:", "Brightness:", "Exposure Time:", "Exposure Bias:", "Distance:", "CCD-Width:", "ApertureFNumber:"]
- tlist = [ ]
- self["exiflist"] = ServiceInfoList(tlist)
- tlist.append(ServiceInfoListEntry(dlist[0], name))
- count=1
- for x in getExif(fullname):
- tlist.append(ServiceInfoListEntry(dlist[count], x))
- count += 1
+ config.pic.save()
+ self.close()
#------------------------------------------------------------------------------------------
-class PicSetup(Screen):
- skin = """
- <screen position="160,220" size="400,120" title="Settings" >
- <widget name="liste" position="10,10" size="380,100" />
- </screen>"""
-
+class Pic_Setup(Screen):
def __init__(self, session):
- self.skin = PicSetup.skin
+ self.skin = """<screen position="120,180" size="480,210" title="Settings" >
+ <widget name="liste" position="5,5" size="470,200" />
+ </screen>"""
Screen.__init__(self, session)
self["actions"] = NumberActionMap(["SetupActions"],
@@ -398,12 +164,16 @@ class PicSetup(Screen):
"9": self.keyNumber
}, -1)
- self.list = []
- self["liste"] = ConfigList(self.list)
- self.list.append(getConfigListEntry(_("Slideshow Interval (sec.)"), config.pic.slidetime))
- self.list.append(getConfigListEntry(_("Scaling Mode"), config.pic.resize))
- self.list.append(getConfigListEntry(_("Cache Thumbnails"), config.pic.cache))
- #self.list.append(getConfigListEntry(_("Rotate Picture"), config.pic.rotate))
+ list = []
+ self["liste"] = ConfigList(list)
+ list.append(getConfigListEntry(_("Slideshow Interval (sec.)"), config.pic.slidetime))
+ list.append(getConfigListEntry(_("Scaling Mode"), config.pic.resize))
+ list.append(getConfigListEntry(_("Cache Thumbnails"), config.pic.cache))
+ list.append(getConfigListEntry(_("show Infoline"), config.pic.infoline))
+ list.append(getConfigListEntry(_("Frame size in full view"), config.pic.framesize))
+ list.append(getConfigListEntry(_("slide picture in loop"), config.pic.loop))
+ list.append(getConfigListEntry(_("backgroundcolor"), config.pic.bgcolor))
+ list.append(getConfigListEntry(_("textcolor"), config.pic.textcolor))
def keyLeft(self):
self["liste"].handleKey(KEY_LEFT)
@@ -414,126 +184,385 @@ class PicSetup(Screen):
def keyNumber(self, number):
self["liste"].handleKey(KEY_0 + number)
+#---------------------------------------------------------------------------
+
+class Pic_Exif(Screen):
+ def __init__(self, session, exiflist):
+ self.skin = """<screen position="80,120" size="560,360" title="Info" >
+ <widget source="menu" render="Listbox" position="0,0" size="560,360" scrollbarMode="showOnDemand" selectionDisabled="1" >
+ <convert type="TemplatedMultiContent">
+ {"template": [ MultiContentEntryText(pos = (5, 5), size = (250, 30), flags = RT_HALIGN_LEFT, text = 0), MultiContentEntryText(pos = (260, 5), size = (290, 30), flags = RT_HALIGN_LEFT, text = 1)], "fonts": [gFont("Regular", 20)], "itemHeight": 30 }
+ </convert>
+ </widget>
+ </screen>"""
+ Screen.__init__(self, session)
-#------------------------------------------------------------------------------------------
+ self["actions"] = ActionMap(["OkCancelActions"],
+ {
+ "cancel": self.close
+ }, -1)
+
+ exifdesc = [_("filename")+':', "EXIF-Version:", "Make:", "Camera:", "Date/Time:", "Width / Height:", "Flash used:", "Orientation:", "User Comments:", "Metering Mode:", "Exposure Program:", "Light Source:", "CompressedBitsPerPixel:", "ISO Speed Rating:", "X-Resolution:", "Y-Resolution:", "Resolution Unit:", "Brightness:", "Exposure Time:", "Exposure Bias:", "Distance:", "CCD-Width:", "ApertureFNumber:"]
+ list = []
-class picmain(Screen):
- skin = """
- <screen position="160,90" size="400,390" title="PicturePlayer" >
- <ePixmap position="10,40" size="36,20" pixmap="skin_default/buttons/key_menu.png" transparent="1" alphatest="on" />
- <ePixmap position="10,70" size="36,20" pixmap="skin_default/buttons/key_info.png" transparent="1" alphatest="on" />
- <ePixmap position="12,100" size="36,20" pixmap="skin_default/buttons/key_red.png" transparent="1" alphatest="on" />
- <eLabel text="Settings" position="60,40" size="120,25" font="Regular;20" transparent="1" />
- <eLabel text="Exif-Data" position="60,70" size="120,25" font="Regular;20" transparent="1" />
- <eLabel text="Thumbnails" position="60,100" size="120,25" font="Regular;20" transparent="1" />
- <widget name="thumbnail" position="200,5" size="180,160" alphatest="on" />
- <widget name="filelist" position="5,170" zPosition="2" size="390,210" scrollbarMode="showOnDemand" />
- </screen>"""
-
- def __init__(self, session):
- self.skin = picmain.skin
+ for x in range(len(exiflist)):
+ if x>0:
+ list.append((exifdesc[x], exiflist[x]))
+ else:
+ name = exiflist[x].split('/')[-1]
+ list.append((exifdesc[x], name))
+ self["menu"] = List(list)
+
+#----------------------------------------------------------------------------------------
+
+T_INDEX = 0
+T_FRAME_POS = 1
+T_PAGE = 2
+T_NAME = 3
+T_FULL = 4
+
+class Pic_Thumb(Screen):
+ def __init__(self, session, piclist, lastindex, path):
+
+ self.textcolor = config.pic.textcolor.value
+ self.color = config.pic.bgcolor.value
+ textsize = 20
+ self.spaceX = 35
+ self.picX = 190
+ self.spaceY = 30
+ self.picY = 200
+
+ size_w = getDesktop(0).size().width()
+ size_h = getDesktop(0).size().height()
+ self.thumbsX = size_w / (self.spaceX + self.picX) # thumbnails in X
+ self.thumbsY = size_h / (self.spaceY + self.picY) # thumbnails in Y
+ self.thumbsC = self.thumbsX * self.thumbsY # all thumbnails
+
+ self.positionlist = []
+ skincontent = ""
+
+ posX = -1
+ for x in range(self.thumbsC):
+ posY = x / self.thumbsX
+ posX += 1
+ if posX >= self.thumbsX:
+ posX = 0
+
+ absX = self.spaceX + (posX*(self.spaceX + self.picX))
+ absY = self.spaceY + (posY*(self.spaceY + self.picY))
+ self.positionlist.append((absX, absY))
+ skincontent += "<widget name=\"label" + str(x) + "\" position=\"" + str(absX+5) + "," + str(absY+self.picY-textsize) + "\" size=\"" + str(self.picX - 10) + "," + str(textsize) + "\" font=\"Regular;14\" zPosition=\"2\" transparent=\"1\" noWrap=\"1\" foregroundColor=\"" + self.textcolor + "\" />"
+
+ skincontent += "<widget name=\"thumb" + str(x) + "\" position=\"" + str(absX+5)+ "," + str(absY+5) + "\" size=\"" + str(self.picX -10) + "," + str(self.picY - (textsize*2)) + "\" zPosition=\"2\" transparent=\"1\" alphatest=\"on\" />"
+
+
+ # Screen, backgroundlabel and MovingPixmap
+ self.skin = "<screen position=\"0,0\" size=\"" + str(size_w) + "," + str(size_h) + "\" flags=\"wfNoBorder\" > \
+ <eLabel position=\"0,0\" zPosition=\"0\" size=\""+ str(size_w) + "," + str(size_h) + "\" backgroundColor=\"" + self.color + "\" /><widget name=\"frame\" position=\"35,30\" size=\"190,200\" pixmap=\"pic_frame.png\" zPosition=\"1\" alphatest=\"on\" />" + skincontent + "</screen>"
+
Screen.__init__(self, session)
-
- self["actions"] = ActionMap(["OkCancelActions", "DirectionActions", "ColorActions", "MovieSelectionActions"],
+
+ self["actions"] = ActionMap(["OkCancelActions", "ColorActions", "DirectionActions", "MovieSelectionActions"],
{
- "ok": self.KeyOk,
"cancel": self.Exit,
- "right": self.rightDown,
- "left": self.leftUp,
- "up": self.up,
- "down": self.down,
+ "ok": self.KeyOk,
+ "left": self.key_left,
+ "right": self.key_right,
+ "up": self.key_up,
+ "down": self.key_down,
"showEventInfo": self.StartExif,
- "contextMenu": self.Settings,
- "red": self.StartThumb
}, -1)
- self.aspect = getAspect()
- currDir = config.pic.lastDir.value
- if not pathExists(currDir):
- currDir = "/"
+ self["frame"] = MovingPixmap()
+ for x in range(self.thumbsC):
+ self["label"+str(x)] = Label()
+ self["thumb"+str(x)] = Pixmap()
+
+ self.Thumbnaillist = []
+ self.filelist = []
+ self.currPage = -1
+ self.dirlistcount = 0
+ self.path = path
- self.filelist = FileList(currDir, matchingPattern = "(?i)^.*\.(jpeg|jpg|jpe|png|bmp|gif)")
- self["filelist"] = self.filelist
- self["thumbnail"] = Pixmap()
+ index = 0
+ framePos = 0
+ Page = 0
+ for x in piclist:
+ if x[0][1] == False:
+ self.filelist.append((index, framePos, Page, x[0][0], path + x[0][0]))
+ index += 1
+ framePos += 1
+ if framePos > (self.thumbsC -1):
+ framePos = 0
+ Page += 1
+ else:
+ self.dirlistcount += 1
+
+ self.maxentry = len(self.filelist)-1
+ self.index = lastindex - self.dirlistcount
+ if self.index < 0:
+ self.index = 0
+
+ self.picload = ePicLoad()
+ self.picload.PictureData.get().append(self.showPic)
+
+ self.onLayoutFinish.append(self.setPicloadConf)
self.ThumbTimer = eTimer()
- self.ThumbTimer.callback.append(self.showThumb)
- self.ThumbTimer.start(500, True)
+ self.ThumbTimer.callback.append(self.showPic)
+
+ def setPicloadConf(self):
+ sc = getScale()
+ self.picload.setPara([self["thumb0"].instance.size().width(), self["thumb0"].instance.size().height(), sc[0], sc[1], config.pic.cache.value, int(config.pic.resize.value), self.color])
+ self.paintFrame()
+
+ def paintFrame(self):
+ #print "index=" + str(self.index)
+ if self.maxentry < self.index or self.index < 0:
+ return
+
+ pos = self.positionlist[self.filelist[self.index][T_FRAME_POS]]
+ self["frame"].moveTo( pos[0], pos[1], 1)
+ self["frame"].startMoving()
- def up(self):
- self["filelist"].up()
- self.ThumbTimer.start(1500, True)
+ if self.currPage != self.filelist[self.index][T_PAGE]:
+ self.currPage = self.filelist[self.index][T_PAGE]
+ self.newPage()
+
+ def newPage(self):
+ self.Thumbnaillist = []
+ #clear Labels and Thumbnail
+ for x in range(self.thumbsC):
+ self["label"+str(x)].setText("")
+ self["thumb"+str(x)].hide()
+ #paint Labels and fill Thumbnail-List
+ for x in self.filelist:
+ if x[T_PAGE] == self.currPage:
+ self["label"+str(x[T_FRAME_POS])].setText("(" + str(x[T_INDEX]+1) + ") " + x[T_NAME])
+ self.Thumbnaillist.append([0, x[T_FRAME_POS], x[T_FULL]])
+
+ #paint Thumbnail start
+ self.showPic()
- def down(self):
- self["filelist"].down()
- self.ThumbTimer.start(1500, True)
+ def showPic(self, picInfo=""):
+ for x in range(len(self.Thumbnaillist)):
+ if self.Thumbnaillist[x][0] == 0:
+ if self.picload.getThumbnail(self.Thumbnaillist[x][2]) == 1: #zu tun probier noch mal
+ self.ThumbTimer.start(500, True)
+ else:
+ self.Thumbnaillist[x][0] = 1
+ break
+ elif self.Thumbnaillist[x][0] == 1:
+ self.Thumbnaillist[x][0] = 2
+ ptr = self.picload.getData()
+ if ptr != None:
+ self["thumb" + str(self.Thumbnaillist[x][1])].instance.setPixmap(ptr.__deref__())
+ self["thumb" + str(self.Thumbnaillist[x][1])].show()
+
+ def key_left(self):
+ self.index -= 1
+ if self.index < 0:
+ self.index = self.maxentry
+ self.paintFrame()
- def leftUp(self):
- self["filelist"].pageUp()
- self.ThumbTimer.start(1500, True)
+ def key_right(self):
+ self.index += 1
+ if self.index > self.maxentry:
+ self.index = 0
+ self.paintFrame()
- def rightDown(self):
- self["filelist"].pageDown()
- self.ThumbTimer.start(1500, True)
+ def key_up(self):
+ self.index -= self.thumbsX
+ if self.index < 0:
+ self.index =self.maxentry
+ self.paintFrame()
+
+ def key_down(self):
+ self.index += self.thumbsX
+ if self.index > self.maxentry:
+ self.index = 0
+ self.paintFrame()
- def showThumb(self):
- if not self.filelist.canDescent():
- cachefile = ""
- if config.pic.cache.value:
- cachedir = self.filelist.getCurrentDirectory() + ".Thumbnails/"
- cachefile = cachedir + self.filelist.getFilename() + str(180) + str(160) + str(self.aspect)
- if not pathExists(cachedir):
- if not createDir(cachedir):
- cachefile = ""
-
- ptr = loadPic(self.filelist.getCurrentDirectory() + self.filelist.getFilename(), 180, 160, self.aspect, int(config.pic.resize.value), 0, 0, cachefile, 1)
- if ptr != None:
- self["thumbnail"].show()
- self["thumbnail"].instance.setPixmap(ptr)
- else:
- self["thumbnail"].hide()
+ def StartExif(self):
+ if self.maxentry < 0:
+ return
+ self.session.open(Pic_Exif, self.picload.getInfo(self.filelist[self.index][T_FULL]))
def KeyOk(self):
- if self.filelist.canDescent():
- self.filelist.descent()
- else:
- self.session.openWithCallback(self.returnVal, PicView, self.filelist.getFileList(), self.filelist.getFilename(), self.filelist.getCurrentDirectory())
-
- def StartThumb(self):
- self.session.openWithCallback(self.returnVal, ThumbView, self.filelist.getFileList(), self.filelist.getFilename(), self.filelist.getCurrentDirectory())
+ if self.maxentry < 0:
+ return
+ self.old_index = self.index
+ self.session.openWithCallback(self.callbackView, Pic_Full_View, self.filelist, self.index, self.path)
- def returnVal(self, val=0):
- if val > 0:
- for x in self.filelist.getFileList():
- if x[0][1] == True:
- val += 1
- self.filelist.moveToIndex(val)
+ def callbackView(self, val=0):
+ self.index = val
+ if self.old_index != self.index:
+ self.paintFrame()
+ def Exit(self):
+ del self.picload
+ self.close(self.index + self.dirlistcount)
- def StartExif(self):
- if not self.filelist.canDescent():
- self.session.open(ExifView, self.filelist.getCurrentDirectory() + self.filelist.getFilename(), self.filelist.getFilename())
+#---------------------------------------------------------------------------
+
+class Pic_Full_View(Screen):
+ def __init__(self, session, filelist, index, path):
+
+ self.textcolor = config.pic.textcolor.value
+ self.bgcolor = config.pic.bgcolor.value
+ space = config.pic.framesize.value
+ size_w = getDesktop(0).size().width()
+ size_h = getDesktop(0).size().height()
+
+ self.skin = "<screen position=\"0,0\" size=\"" + str(size_w) + "," + str(size_h) + "\" flags=\"wfNoBorder\" > \
+ <eLabel position=\"0,0\" zPosition=\"0\" size=\""+ str(size_w) + "," + str(size_h) + "\" backgroundColor=\""+ self.bgcolor +"\" /><widget name=\"pic\" position=\"" + str(space) + "," + str(space) + "\" size=\"" + str(size_w-(space*2)) + "," + str(size_h-(space*2)) + "\" zPosition=\"1\" alphatest=\"on\" /> \
+ <widget name=\"point\" position=\""+ str(space+5) + "," + str(space+2) + "\" size=\"20,20\" zPosition=\"2\" pixmap=\"skin_default/icons/record.png\" alphatest=\"on\" /> \
+ <widget name=\"play_icon\" position=\""+ str(space+25) + "," + str(space+2) + "\" size=\"20,20\" zPosition=\"2\" pixmap=\"skin_default/icons/ico_mp_play.png\" alphatest=\"on\" /> \
+ <widget name=\"file\" position=\""+ str(space+45) + "," + str(space) + "\" size=\""+ str(size_w-(space*2)-50) + ",25\" font=\"Regular;20\" halign=\"left\" foregroundColor=\"" + self.textcolor + "\" zPosition=\"2\" noWrap=\"1\" transparent=\"1\" /></screen>"
+
+ Screen.__init__(self, session)
+
+ self["actions"] = ActionMap(["OkCancelActions", "ColorActions", "DirectionActions", "MovieSelectionActions"],
+ {
+ "cancel": self.Exit,
+ "green": self.PlayPause,
+ "yellow": self.PlayPause,
+ "blue": self.nextPic,
+ "red": self.prevPic,
+ "left": self.prevPic,
+ "right": self.nextPic,
+ "showEventInfo": self.StartExif,
+ }, -1)
+
+ self["point"] = Pixmap()
+ self["pic"] = Pixmap()
+ self["play_icon"] = Pixmap()
+ self["file"] = Label(_("please wait, loading picture..."))
+
+ self.old_index = 0
+ self.filelist = []
+ self.lastindex = index
+ self.currPic = []
+ self.shownow = True
+ self.dirlistcount = 0
+
+ for x in filelist:
+ if len(filelist[0]) == 3: #orig. filelist
+ if x[0][1] == False:
+ self.filelist.append(path + x[0][0])
+ else:
+ self.dirlistcount += 1
+ else: # thumbnaillist
+ self.filelist.append(x[T_FULL])
+
+ self.maxentry = len(self.filelist)-1
+ self.index = index - self.dirlistcount
+ if self.index < 0:
+ self.index = 0
+
+ self.picload = ePicLoad()
+ self.picload.PictureData.get().append(self.finish_decode)
+
+ self.slideTimer = eTimer()
+ self.slideTimer.callback.append(self.slidePic)
- def Settings(self):
- self.session.open(PicSetup)
+ if self.maxentry >= 0:
+ self.onLayoutFinish.append(self.setPicloadConf)
+
+ def setPicloadConf(self):
+ sc = getScale()
+ self.picload.setPara([self["pic"].instance.size().width(), self["pic"].instance.size().height(), sc[0], sc[1], 0, int(config.pic.resize.value), self.bgcolor])
+
+ self["play_icon"].hide()
+ if config.pic.infoline.value == False:
+ self["file"].hide()
+ self.start_decode()
+
+ def ShowPicture(self):
+ if self.shownow and len(self.currPic):
+ self.shownow = False
+ self["file"].setText(self.currPic[0])
+ self.lastindex = self.currPic[1]
+ self["pic"].instance.setPixmap(self.currPic[2].__deref__())
+ self.currPic = []
+
+ self.next()
+ self.start_decode()
- def Exit(self):
- if self.filelist.getCurrentDirectory() is None:
- config.pic.lastDir.value = "/"
+ def finish_decode(self, picInfo=""):
+ self["point"].hide()
+ ptr = self.picload.getData()
+ if ptr != None:
+ text = ""
+ try:
+ text = picInfo.split('\n',1)
+ text = "(" + str(self.index+1) + "/" + str(self.maxentry+1) + ") " + text[0].split('/')[-1]
+ except:
+ pass
+ self.currPic = []
+ self.currPic.append(text)
+ self.currPic.append(self.index)
+ self.currPic.append(ptr)
+ self.ShowPicture()
+
+ def start_decode(self):
+ self.picload.startDecode(self.filelist[self.index])
+ self["point"].show()
+
+ def next(self):
+ self.index += 1
+ if self.index > self.maxentry:
+ self.index = 0
+
+ def prev(self):
+ self.index -= 1
+ if self.index < 0:
+ self.index = self.maxentry
+
+ def slidePic(self):
+ print "slide to next Picture index=" + str(self.lastindex)
+ if config.pic.loop.value==False and self.lastindex == self.maxentry:
+ self.PlayPause()
+ self.shownow = True
+ self.ShowPicture()
+
+ def PlayPause(self):
+ if self.slideTimer.isActive():
+ self.slideTimer.stop()
+ self["play_icon"].hide()
else:
- config.pic.lastDir.value = self.filelist.getCurrentDirectory()
+ self.slideTimer.start(config.pic.slidetime.value*1000)
+ self["play_icon"].show()
+ self.nextPic()
- config.pic.save()
- self.close()
+ def prevPic(self):
+ self.currPic = []
+ self.index = self.lastindex
+ self.prev()
+ self.start_decode()
+ self.shownow = True
+
+ def nextPic(self):
+ self.shownow = True
+ self.ShowPicture()
+
+ def StartExif(self):
+ if self.maxentry < 0:
+ return
+ self.session.open(Pic_Exif, self.picload.getInfo(self.filelist[self.lastindex]))
+
+ def Exit(self):
+ del self.picload
+ self.close(self.lastindex + self.dirlistcount)
#------------------------------------------------------------------------------------------
def main(session, **kwargs):
- session.open(picmain)
+ session.open(picshow)
def filescan_open(list, session, **kwargs):
# Recreate List as expected by PicView
filelist = [((file.path, False), None) for file in list]
- session.open(PicView, filelist, "", "")
+ session.open(Pic_Full_View, filelist, 0, file.path)
def filescan(**kwargs):
from Components.Scanner import Scanner, ScanPath
@@ -557,5 +586,5 @@ def filescan(**kwargs):
def Plugins(**kwargs):
return \
- [PluginDescriptor(name="PicturePlayer", description="Picture Viewer (BMP, PNG, JPG, GIF)", icon="pictureplayer.png", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=main),
- PluginDescriptor(name="PicturePlayer", where = PluginDescriptor.WHERE_FILESCAN, fnc = filescan)]
+ [PluginDescriptor(name=_("PicturePlayer"), description=_("fileformats (BMP, PNG, JPG, GIF)"), icon="pictureplayer.png", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=main),
+ PluginDescriptor(name=_("PicturePlayer"), where = PluginDescriptor.WHERE_FILESCAN, fnc = filescan)]
diff --git a/lib/python/Plugins/SystemPlugins/Hotplug/plugin.py b/lib/python/Plugins/SystemPlugins/Hotplug/plugin.py
index 97ddf4a1..e593e942 100644
--- a/lib/python/Plugins/SystemPlugins/Hotplug/plugin.py
+++ b/lib/python/Plugins/SystemPlugins/Hotplug/plugin.py
@@ -53,7 +53,7 @@ class Hotplug(Protocol):
for callback in hotplugNotifier:
try:
- callback(dev, media_state)
+ callback(dev, action or media_state)
except AttributeError:
hotplugNotifier.remove(callback)
diff --git a/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py b/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py
index c2046af7..160620fd 100644
--- a/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py
+++ b/lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py
@@ -18,6 +18,7 @@ import urllib
from twisted.web import client
from twisted.internet import reactor, defer
from twisted.python import failure
+from Plugins.SystemPlugins.Hotplug.plugin import hotplugNotifier
class UserRequestedCancel(Exception):
pass
@@ -119,10 +120,10 @@ class NFIDownload(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_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#9f1313" transparent="1" />
- <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="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;19" valign="center" halign="center" backgroundColor="#9f1313" transparent="1" />
+ <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="label_top" render="Label" position="10,44" size="240,20" font="Regular;16" />
<widget name="feedlist" position="10,66" size="250,222" scrollbarMode="showOnDemand" />
@@ -169,6 +170,7 @@ class NFIDownload(Screen):
self.box = HardwareInfo().get_device_name()
self.feed_base = "http://www.dreamboxupdate.com/opendreambox/1.5/%s/images/" % self.box
self.nfi_filter = "" # "release" # only show NFIs containing this string, or all if ""
+ self.wizard_mode = False
self["actions"] = ActionMap(["OkCancelActions", "ColorActions", "DirectionActions", "EPGSelectActions"],
{
@@ -205,7 +207,7 @@ class NFIDownload(Screen):
self["key_yellow"].text = (_("Change dir."))
else:
self["key_yellow"].text = (_("Select image"))
- self["key_blue"].text = (_("Fix USB stick"))
+ self["key_blue"].text = (_("USB stick wizard"))
def switchList(self,to_where=None):
if self.download or not self["feedlist"].isValid():
@@ -335,7 +337,7 @@ class NFIDownload(Screen):
self.download = self.nfo_download
self.downloading(True)
client.getPage(nfourl).addCallback(self.nfo_finished).addErrback(self.nfo_failed)
- self["statusbar"].text = _("Downloading image description...")
+ self["statusbar"].text = ("Downloading image description...")
def nfo_failed(self, failure_instance):
print "[nfo_failed] " + str(failure_instance)
@@ -399,8 +401,8 @@ class NFIDownload(Screen):
print "couldn't save nfo file " + self.nfofilename
pos = self.nfo.find("MD5:")
- if pos > 0 and len(self.nfo) >= pos+5+32:
- self["statusbar"].text = _("Please wait for md5 signature verification...")
+ if pos > 0 and len(self.nfo) >= pos+5+32:
+ self["statusbar"].text = ("Please wait for md5 signature verification...")
cmd = "md5sum -c -"
md5 = self.nfo[pos+5:pos+5+32] + " " + self.nfilocal
print cmd, md5
@@ -415,6 +417,8 @@ class NFIDownload(Screen):
else:
self["statusbar"].text = "Download completed."
self.downloading(False)
+ if self.wizard_mode:
+ self.configBackup()
def md5ready(self, retval):
self.download_container.sendEOF()
@@ -423,9 +427,12 @@ class NFIDownload(Screen):
print "[md5finished]: " + str(retval)
self.download_container.appClosed.remove(self.md5finished)
if retval==0:
- self["statusbar"].text = _(".NFI file passed md5sum signature check. You can safely flash this image!")
- self.switchList(self.LIST_SOURCE)
self.downloading(False)
+ if self.wizard_mode:
+ self.configBackup()
+ else:
+ self["statusbar"].text = _(".NFI file passed md5sum signature check. You can safely flash this image!")
+ self.switchList(self.LIST_SOURCE)
else:
self.session.openWithCallback(self.nfi_remove, MessageBox, (_("The md5sum validation failed, the file may be downloaded incompletely or be corrupted!") + "\n" + _("Remove the broken .NFI file?")), MessageBox.TYPE_YESNO)
@@ -489,33 +496,22 @@ class NFIDownload(Screen):
def umount_finished(self, retval):
self.container.appClosed.remove(self.umount_finished)
- self.session.openWithCallback(self.dmesg_clear, MessageBox, _("To make sure you intend to do this, please remove the target USB stick now and stick it back in upon prompt. Press OK when you have taken the stick out."), MessageBox.TYPE_INFO)
-
- def dmesg_clear(self, answer):
self.container.appClosed.append(self.dmesg_cleared)
self.taskstring = ""
self.cmd = "dmesg -c"
print "executing " + self.cmd
self.container.execute(self.cmd)
- def dmesg_cleared(self, retval):
+ def dmesg_cleared(self, answer):
self.container.appClosed.remove(self.dmesg_cleared)
- self.session.openWithCallback(self.stick_back_in, MessageBox, (_("Now please insert the USB stick (minimum size is 64 MB) that you want to format and use as .NFI image flasher. Press OK after you've put the stick back in.")), MessageBox.TYPE_INFO)
-
- def stick_back_in(self, answer):
- self["statusbar"].text = _("Waiting for USB stick to settle...")
- self.delayTimer = eTimer()
- self.delayTimer.callback.append(self.waiting_for_stick)
- self.delayCount = -1
- self.delayTimer.start(1000)
-
- def waiting_for_stick(self):
- self.delayCount += 1
- self["job_progressbar"].range = 6
- self["job_progressbar"].value = self.delayCount
- self["job_progresslabel"].text = "-%d s" % (6-self.delayCount)
- if self.delayCount > 5:
- self.delayTimer.stop()
+ self.msgbox = self.session.open(MessageBox, _("Please disconnect all USB devices from your Dreambox and (re-)attach the target USB stick (minimum size is 64 MB) now!"), MessageBox.TYPE_INFO)
+ hotplugNotifier.append(self.hotplugCB)
+
+ def hotplugCB(self, dev, action):
+ print "[hotplugCB]", dev, action
+ if dev.startswith("sd") and action == "add":
+ self.msgbox.close()
+ hotplugNotifier.remove(self.hotplugCB)
self.container.appClosed.append(self.dmesg_scanned)
self.taskstring = ""
self.cmd = "dmesg"
@@ -539,8 +535,8 @@ class NFIDownload(Screen):
self.session.openWithCallback(self.fdisk_query, MessageBox, (_("The following device was found:\n\n%s\n\nDo you want to write the USB flasher to this stick?") % self.devicetext), MessageBox.TYPE_YESNO)
def fdisk_query(self, answer):
- if answer == True:
- self["statusbar"].text = _("Partitioning USB stick...")
+ if answer == True and self.stickdevice:
+ self["statusbar"].text = ("Partitioning USB stick...")
self["job_progressbar"].range = 1000
self["job_progressbar"].value = 100
self["job_progresslabel"].text = "5.00%"
@@ -562,7 +558,7 @@ class NFIDownload(Screen):
self.tar_finished(0)
self["job_progressbar"].value = 700
else:
- self["statusbar"].text = _("Decompressing USB stick flasher boot image...")
+ self["statusbar"].text = ("Decompressing USB stick flasher boot image...")
self.taskstring = ""
self.container.appClosed.append(self.tar_finished)
self.container.setCWD("/tmp")
@@ -588,7 +584,7 @@ class NFIDownload(Screen):
self.container.appClosed.remove(self.tar_finished)
if retval == 0:
self.imagefilename = "/tmp/nfiflash_" + self.box + ".img"
- self["statusbar"].text = _("Copying USB flasher boot image to stick...")
+ self["statusbar"].text = ("Copying USB flasher boot image to stick...")
self.taskstring = ""
self.container.appClosed.append(self.dd_finished)
self.cmd = "dd if=%s of=%s" % (self.imagefilename,self.stickdevice+"/part1")
@@ -607,7 +603,7 @@ class NFIDownload(Screen):
if retval == 0:
self["job_progressbar"].value = 950
self["job_progresslabel"].text = "95.00%"
- self["statusbar"].text = _("Remounting stick partition...")
+ self["statusbar"].text = ("Remounting stick partition...")
self.taskstring = ""
self.container.appClosed.append(self.mount_finished)
self.cmd = "mount %s /mnt/usb -o rw,sync" % (self.stickdevice+"/part1")
@@ -622,11 +618,12 @@ class NFIDownload(Screen):
if retval == 0:
self["job_progressbar"].value = 1000
self["job_progresslabel"].text = "100.00%"
- self["statusbar"].text = _(".NFI Flasher bootable USB stick successfully created.")
- self.session.openWithCallback(self.remove_img, MessageBox, _("The .NFI Image flasher USB stick is now ready to use. Please download an .NFI image file from the feed server and save it on the stick. Then reboot and hold the 'Down' key on the front panel to boot the .NFI flasher from the stick!"), MessageBox.TYPE_INFO)
+ self["statusbar"].text = (".NFI Flasher bootable USB stick successfully created.")
+ self.session.openWithCallback(self.flasherFinishedCB, MessageBox, _("The USB stick is now bootable. Do you want to download the latest image from the feed server and save it on the stick?"), type = MessageBox.TYPE_YESNO)
self["destlist"].changeDir("/mnt/usb")
else:
- self.session.openWithCallback(self.remove_img, MessageBox, (self.cmd + " " + _("failed") + ":\n" + str(self.taskstring)), MessageBox.TYPE_ERROR)
+ self.session.openWithCallback(self.flasherFinishedCB, MessageBox, (self.cmd + " " + _("failed") + ":\n" + str(self.taskstring)), MessageBox.TYPE_ERROR)
+ self.remove_img(True)
def remove_img(self, answer):
if fileExists("/tmp/nfiflasher_image.tar.bz2"):
@@ -636,6 +633,39 @@ class NFIDownload(Screen):
self.downloading(False)
self.switchList(self.LIST_SOURCE)
+ def flasherFinishedCB(self, answer):
+ if answer == True:
+ self.wizard_mode = True
+ self["feedlist"].moveSelection(0)
+ self["path_bottom"].text = str(self["destlist"].getCurrentDirectory())
+ self.nfo_download()
+ self.nfi_download()
+
+ def configBackup(self):
+ self.session.openWithCallback(self.runBackup, MessageBox, _("The wizard can backup your current settings. Do you want to do a backup now?"))
+
+ def runBackup(self, result=None):
+ from Tools.Directories import createDir, isMount, pathExists
+ from time import localtime
+ from datetime import date
+ from Screens.Console import Console
+ if result:
+ if isMount("/mnt/usb/"):
+ if (pathExists("/mnt/usb/backup") == False):
+ createDir("/mnt/usb/backup", True)
+ d = localtime()
+ dt = date(d.tm_year, d.tm_mon, d.tm_mday)
+ self.backup_file = "backup/" + str(dt) + "_settings_backup.tar.gz"
+ self.session.open(Console, title = "Backup running", cmdlist = ["tar -czvf " + "/mnt/usb/" + self.backup_file + " /etc/enigma2/ /etc/network/interfaces /etc/wpa_supplicant.conf"], finishedCallback = self.backup_finished, closeOnSuccess = True)
+
+ def backup_finished(self):
+ wizardfd = open("/mnt/usb/wizard.nfo", "w")
+ if wizardfd:
+ wizardfd.write("image: "+self["feedlist"].getNFIname()+'\n')
+ wizardfd.write("configuration: "+self.backup_file+'\n')
+ wizardfd.close()
+ self.session.open(MessageBox, _("To update your Dreambox firmware, please follow these steps:\n1) Turn off your box with the rear power switch and plug in the bootable USB stick.\n2) Turn mains back on and hold the DOWN button on the front panel pressed for 10 seconds.\n3) Wait for bootup and follow instructions of the wizard."), type = MessageBox.TYPE_INFO)
+
def closeCB(self):
if self.download:
self.download.stop()
@@ -659,8 +689,8 @@ def filescan(**kwargs):
Scanner(mimetypes = ["application/x-dream-image"],
paths_to_scan =
[
- ScanPath(path = "", with_subdirs = False),
+ ScanPath(path = "", with_subdirs = False),
],
name = "NFI",
- description = (_("Download .NFI-Files for USB-Flasher")+"..."),
+ description = (_("Download .NFI-Files for USB-Flasher")+"..."),
openfnc = filescan_open, )
diff --git a/lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py b/lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py
index 6a982c58..860efc02 100644
--- a/lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py
+++ b/lib/python/Plugins/SystemPlugins/NFIFlash/flasher.py
@@ -17,7 +17,7 @@ import re
class writeNAND(Task):
def __init__(self,job,param,box):
- Task.__init__(self,job, _("Writing image file to NAND Flash"))
+ Task.__init__(self,job, ("Writing image file to NAND Flash"))
self.setTool("/usr/lib/enigma2/python/Plugins/SystemPlugins/NFIFlash/mywritenand")
if box == "dm7025":
self.end = 256
@@ -26,7 +26,7 @@ class writeNAND(Task):
if box == "dm8000":
self.setTool("/usr/lib/enigma2/python/Plugins/SystemPlugins/NFIFlash/dm8000_writenand")
self.args += param
- self.weighting = 1
+ self.weighting = 1
def processOutput(self, data):
print "[writeNand] " + data
@@ -174,8 +174,8 @@ class NFIFlash(Screen):
print sign
if sign.find("NFI1" + self.box + "\0") == 0:
if self.md5sum != "":
- self["statusbar"].text = _("Please wait for md5 signature verification...")
- self.session.summary.setText(_("Please wait for md5 signature verification..."))
+ self["statusbar"].text = ("Please wait for md5 signature verification...")
+ self.session.summary.setText(("Please wait for md5 signature verification..."))
self.container = eConsoleAppContainer()
self.container.setCWD(self["filelist"].getCurrentDirectory())
self.container.appClosed.append(self.md5finished)
@@ -252,7 +252,7 @@ class NFIFlash(Screen):
def reboot(self):
if self.job.status == self.job.FINISHED:
- self["statusbar"].text = _("rebooting...")
+ self["statusbar"].text = ("rebooting...")
TryQuitMainloop(self.session,2)
def createSummary(self):
diff --git a/lib/python/Plugins/SystemPlugins/Videomode/VideoHardware.py b/lib/python/Plugins/SystemPlugins/Videomode/VideoHardware.py
index 2422475e..02fdf9a5 100644
--- a/lib/python/Plugins/SystemPlugins/Videomode/VideoHardware.py
+++ b/lib/python/Plugins/SystemPlugins/Videomode/VideoHardware.py
@@ -59,6 +59,34 @@ class VideoHardware:
widescreen_modes = set(["720p", "1080i"])
+ def getOutputAspect(self):
+ ret = (16,9)
+ port = config.av.videoport.value
+ if port not in config.av.videomode:
+ print "current port not available in getOutputAspect!!! force 16:9"
+ else:
+ mode = config.av.videomode[port].value
+ force_widescreen = self.isWidescreenMode(port, mode)
+ is_widescreen = force_widescreen or config.av.aspect.value in ["16_9", "16_10"]
+ is_auto = config.av.aspect.value == "auto"
+ if is_widescreen:
+ if force_widescreen:
+ pass
+ else:
+ aspect = {"16_9": "16:9", "16_10": "16:10"}[config.av.aspect.value]
+ if aspect == "16:10":
+ ret = (16,10)
+ elif is_auto:
+ try:
+ aspect_str = open("/proc/stb/vmpeg/0/aspect", "r").read()
+ if aspect_str == "1": # 4:3
+ ret = (4,3)
+ except IOError:
+ pass
+ else: # 4:3
+ ret = (4,3)
+ return ret
+
def __init__(self):
self.last_modes_preferred = [ ]
self.on_hotplug = CList()
@@ -80,6 +108,7 @@ class VideoHardware:
config.av.tvsystem.notifiers = [ ]
config.av.wss.notifiers = [ ]
AVSwitch.setInput = self.AVSwitchSetInput
+ AVSwitch.getOutputAspect = self.getOutputAspect
config.av.aspect.addNotifier(self.updateAspect)
config.av.wss.addNotifier(self.updateAspect)
diff --git a/lib/python/Screens/Console.py b/lib/python/Screens/Console.py
index b57f2400..c6b156cf 100644
--- a/lib/python/Screens/Console.py
+++ b/lib/python/Screens/Console.py
@@ -55,6 +55,7 @@ class Console(Screen):
str = self["text"].getText()
str += _("Execution finished!!");
self["text"].setText(str)
+ self["text"].lastPage()
if self.finishedCallback is not None:
self.finishedCallback()
if not retval and self.closeOnSuccess:
@@ -67,4 +68,4 @@ class Console(Screen):
self.container.dataAvail.remove(self.dataAvail)
def dataAvail(self, str):
- self["text"].setText(self["text"].getText() + str)
+ self["text"].setText(self["text"].getText() + str) \ No newline at end of file
diff --git a/lib/python/Screens/InfoBarGenerics.py b/lib/python/Screens/InfoBarGenerics.py
index cdaa2c1e..eb79c74e 100644
--- a/lib/python/Screens/InfoBarGenerics.py
+++ b/lib/python/Screens/InfoBarGenerics.py
@@ -1312,7 +1312,6 @@ class InfoBarJobman:
self.session.openWithCallback(self.JobViewCB, JobView, job)
def JobViewCB(self, in_background):
- from Screens.TaskView import JobView
job_manager.in_background = in_background
# depends on InfoBarExtensions
diff --git a/lib/python/Tools/Directories.py b/lib/python/Tools/Directories.py
index 2b60924c..0d238b30 100644
--- a/lib/python/Tools/Directories.py
+++ b/lib/python/Tools/Directories.py
@@ -126,6 +126,9 @@ def resolveFilename(scope, base = "", path_prefix = None):
def pathExists(path):
return os_path.exists(path)
+def isMount(path):
+ return os_path.ismount(path)
+
def createDir(path, makeParents = False):
try:
if makeParents:
diff --git a/lib/python/enigma_python.i b/lib/python/enigma_python.i
index 7de05d2b..84936375 100644
--- a/lib/python/enigma_python.i
+++ b/lib/python/enigma_python.i
@@ -141,6 +141,7 @@ typedef long time_t;
%include <lib/service/service.h>
// TODO: embed these...
+%immutable ePicLoad::PictureData;
%immutable eButton::selected;
%immutable eInput::changed;
%immutable eComponentScan::statusChanged;