diff options
| author | Stefan Pluecken <stefan.pluecken@multimedia-labs.de> | 2006-03-23 00:06:27 +0000 |
|---|---|---|
| committer | Stefan Pluecken <stefan.pluecken@multimedia-labs.de> | 2006-03-23 00:06:27 +0000 |
| commit | 08fca93e7f2a37a452399d08c5c84b969b7e52af (patch) | |
| tree | e947a919972cdd6ad072c196640a643c6c9f7fff /lib | |
| parent | 371447724a1e150c37a777e58a4725a3d2561c01 (diff) | |
| download | enigma2-08fca93e7f2a37a452399d08c5c84b969b7e52af.tar.gz enigma2-08fca93e7f2a37a452399d08c5c84b969b7e52af.zip | |
- switchtimer added to RecordingTimer
- media player to play mp3, ogg (not yet fully working) and ts files (needs gstreamer)
- language selection saves a language string instead of a changing index number
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/python/Components/FileList.py | 81 | ||||
| -rw-r--r-- | lib/python/Components/Language.py | 17 | ||||
| -rw-r--r-- | lib/python/Components/LanguageList.py | 4 | ||||
| -rw-r--r-- | lib/python/Components/Makefile.am | 2 | ||||
| -rw-r--r-- | lib/python/Components/MediaPlayer.py | 124 | ||||
| -rw-r--r-- | lib/python/Components/MenuList.py | 20 | ||||
| -rw-r--r-- | lib/python/Components/SetupDevices.py | 2 | ||||
| -rw-r--r-- | lib/python/Components/TimerList.py | 15 | ||||
| -rw-r--r-- | lib/python/Plugins/Extensions/FileManager/plugin.py | 10 | ||||
| -rw-r--r-- | lib/python/Plugins/Extensions/ZappingAlternatives/plugin.py | 3 | ||||
| -rw-r--r-- | lib/python/Screens/InfoBarGenerics.py | 2 | ||||
| -rw-r--r-- | lib/python/Screens/LanguageSelection.py | 24 | ||||
| -rw-r--r-- | lib/python/Screens/Makefile.am | 3 | ||||
| -rw-r--r-- | lib/python/Screens/MediaPlayer.py | 316 | ||||
| -rw-r--r-- | lib/python/Screens/StartWizard.py | 5 | ||||
| -rw-r--r-- | lib/python/Screens/TimerEntry.py | 21 | ||||
| -rw-r--r-- | lib/python/Tools/Directories.py | 2 | ||||
| -rw-r--r-- | lib/service/servicefs.cpp | 2 |
18 files changed, 598 insertions, 55 deletions
diff --git a/lib/python/Components/FileList.py b/lib/python/Components/FileList.py index 7e6ced57..d726b833 100644 --- a/lib/python/Components/FileList.py +++ b/lib/python/Components/FileList.py @@ -20,6 +20,7 @@ RT_VALIGN_BOTTOM = 16 EXTENSIONS = { "mp3": "music", "wav": "music", + "ogg": "music", "jpg": "picture", "jpeg": "picture", "png": "picture", @@ -29,9 +30,9 @@ EXTENSIONS = { "mpeg": "movie", } -def FileEntryComponent(name, absolute, isDir = False): +def FileEntryComponent(name, absolute = None, isDir = False): res = [ (absolute, isDir) ] - res.append((eListboxPythonMultiContent.TYPE_TEXT, 35, 1, 200, 20, 0, RT_HALIGN_LEFT ,name)) + res.append((eListboxPythonMultiContent.TYPE_TEXT, 35, 1, 200, 20, 0, RT_HALIGN_LEFT, name)) if isDir: png = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "extensions/directory.png")) else: @@ -39,18 +40,22 @@ def FileEntryComponent(name, absolute, isDir = False): extension = extension[-1] if EXTENSIONS.has_key(extension): png = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "extensions/" + EXTENSIONS[extension] + ".png")) + else: + png = None if png is not None: res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, 10, 2, 20, 20, png)) return res class FileList(HTMLComponent, GUIComponent, MenuList): - def __init__(self, directory, showDirectories = True, showFiles = True, matchingPattern = None): + def __init__(self, directory, showDirectories = True, showFiles = True, matchingPattern = None, useServiceRef = False, isTop = False): GUIComponent.__init__(self) self.l = eListboxPythonMultiContent() - + + self.useServiceRef = useServiceRef self.showDirectories = showDirectories self.showFiles = showFiles + self.isTop = isTop # example: matching .nfi and .ts files: "^.*\.(nfi|ts)" self.matchingPattern = matchingPattern self.changeDir(directory) @@ -60,35 +65,75 @@ class FileList(HTMLComponent, GUIComponent, MenuList): def getSelection(self): return self.l.getCurrentSelection()[0] + def getFileList(self): + return self.list + def changeDir(self, directory): self.list = [] - files = os.listdir(directory) - files.sort() + directories = [] + files = [] - if directory != "/" and self.showDirectories: - self.list.append(FileEntryComponent(name = "..", absolute = '/'.join(directory.split('/')[:-2]) + '/', isDir = True)) + if self.useServiceRef: + root = eServiceReference("2:0:1:0:0:0:0:0:0:0:" + directory) + serviceHandler = eServiceCenter.getInstance() + list = serviceHandler.list(root) - directories = [] - for x in files: - if os.path.isdir(directory + x): - directories.append(x) - files.remove(x) + while 1: + s = list.getNext() + if not s.valid(): + del list + break + if s.flags & s.mustDescent: + directories.append(s.getPath()) + else: + files.append(s) + print s.getName(), s.flags + else: + files = os.listdir(directory) + files.sort() + tmpfiles = files[:] + for x in tmpfiles: + if os.path.isdir(directory + x): + directories.append(x) + files.remove(x) + + if directory != "/" and self.showDirectories and not self.isTop: + self.list.append(FileEntryComponent(name = "..", absolute = '/'.join(directory.split('/')[:-2]) + '/', isDir = True)) if self.showDirectories: for x in directories: - self.list.append(FileEntryComponent(name = x, absolute = directory + x + "/" , isDir = True)) + name = x.split('/')[-2] + self.list.append(FileEntryComponent(name = name, absolute = x, isDir = True)) - if self.showFiles: for x in files: + if self.useServiceRef: + path = x.getPath() + name = path.split('/')[-1] + else: + path = directory + x + name = x + if self.matchingPattern is not None: - if re.compile(self.matchingPattern).search(x): - self.list.append(FileEntryComponent(name = x, absolute = directory + x , isDir = False)) + if re.compile(self.matchingPattern).search(path): + self.list.append(FileEntryComponent(name = name, absolute = x , isDir = False)) else: - self.list.append(FileEntryComponent(name = x, absolute = directory + x , isDir = False)) + self.list.append(FileEntryComponent(name = name, absolute = x , isDir = False)) self.l.setList(self.list) + + def canDescent(self): + return self.getSelection()[1] + + def descent(self): + self.changeDir(self.getSelection()[0]) + + def getFilename(self): + return self.getSelection()[0].getPath() + + def getServiceRef(self): + return self.getSelection()[0] def GUIcreate(self, parent): self.instance = eListbox(parent) diff --git a/lib/python/Components/Language.py b/lib/python/Components/Language.py index 51ee9142..fd37e167 100644 --- a/lib/python/Components/Language.py +++ b/lib/python/Components/Language.py @@ -7,7 +7,7 @@ class Language: def __init__(self): gettext.install('enigma2', resolveFilename(SCOPE_LANGUAGE, ""), unicode=0, codeset="utf-8") self.activeLanguage = 0 - self.lang = [] + self.lang = {} # FIXME make list dynamically # name, iso-639 language, iso-3166 country. Please don't mix language&country! self.addLanguage(_("English"), "en", "EN") @@ -20,10 +20,10 @@ class Language: self.callbacks = [] def addLanguage(self, name, lang, country): - try: - self.lang.append((_(name), gettext.translation('enigma2', resolveFilename(SCOPE_LANGUAGE, ""), languages=[lang]), lang, country)) - except: - print "Language " + str(name) + " not found" + #try: + self.lang[str(lang + "_" + country)] = ((_(name), gettext.translation('enigma2', resolveFilename(SCOPE_LANGUAGE, ""), languages=[lang]), lang, country)) + #except: + # print "Language " + str(name) + " not found" def activateLanguage(self, index): try: @@ -37,10 +37,13 @@ class Language: def getLanguageList(self): list = [] - for x in self.lang: - list.append(x[0]) + for x in self.lang.keys(): + list.append((x, self.lang[x])) return list + def getActiveLanguage(self): + return self.activeLanguage + def getLanguage(self): return str(self.lang[self.activeLanguage][2]) + "_" + str(self.lang[self.activeLanguage][3]) diff --git a/lib/python/Components/LanguageList.py b/lib/python/Components/LanguageList.py index 08bb6307..adf87186 100644 --- a/lib/python/Components/LanguageList.py +++ b/lib/python/Components/LanguageList.py @@ -16,8 +16,8 @@ RT_VALIGN_TOP = 0 RT_VALIGN_CENTER = 8 RT_VALIGN_BOTTOM = 16 -def LanguageEntryComponent(file, name): - res = [ 0 ] +def LanguageEntryComponent(file, name, index): + res = [ index ] res.append((eListboxPythonMultiContent.TYPE_TEXT, 80, 10, 200, 50, 0, RT_HALIGN_LEFT ,name)) png = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "countries/" + file + ".png")) if png == None: diff --git a/lib/python/Components/Makefile.am b/lib/python/Components/Makefile.am index a41c210f..94a8c06c 100644 --- a/lib/python/Components/Makefile.am +++ b/lib/python/Components/Makefile.am @@ -13,6 +13,6 @@ install_PYTHON = \ BlinkingPixmap.py Pixmap.py ConditionalWidget.py Slider.py LanguageList.py \ PluginList.py PluginComponent.py RecordingConfig.py About.py UsageConfig.py \ FIFOList.py ServiceEventTracker.py Input.py TimerSanityCheck.py FileList.py \ - MultiContent.py + MultiContent.py MediaPlayer.py diff --git a/lib/python/Components/MediaPlayer.py b/lib/python/Components/MediaPlayer.py new file mode 100644 index 00000000..b6b2e432 --- /dev/null +++ b/lib/python/Components/MediaPlayer.py @@ -0,0 +1,124 @@ +from HTMLComponent import * +from GUIComponent import * + +from MenuList import MenuList + +from Tools.Directories import * +import os + +from enigma import * + +RT_HALIGN_LEFT = 0 +RT_HALIGN_RIGHT = 1 +RT_HALIGN_CENTER = 2 +RT_HALIGN_BLOCK = 4 + +RT_VALIGN_TOP = 0 +RT_VALIGN_CENTER = 8 +RT_VALIGN_BOTTOM = 16 + +STATE_PLAY = 0 +STATE_PAUSE = 1 +STATE_STOP = 2 +STATE_REWIND = 3 +STATE_FORWARD = 4 +STATE_NONE = 5 + +PlayIcon = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "play-small-fs8.png")) +PauseIcon = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "pause-small-fs8.png")) +StopIcon = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "stop-small-fs8.png")) +RewindIcon = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "rewind-small-fs8.png")) +ForwardIcon = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "forward-small-fs8.png")) + +def PlaylistEntryComponent(serviceref, state): + res = [ serviceref ] + res.append((eListboxPythonMultiContent.TYPE_TEXT, 35, 0, 250, 32, 0, RT_VALIGN_CENTER, os.path.split(serviceref.getPath().split('/')[-1])[1])) + png = None + if state == STATE_PLAY: + png = PlayIcon + elif state == STATE_PAUSE: + png = PauseIcon + elif state == STATE_STOP: + png = StopIcon + elif state == STATE_REWIND: + png = RewindIcon + elif state == STATE_FORWARD: + png = ForwardIcon + + if png is not None: + res.append((eListboxPythonMultiContent.TYPE_PIXMAP, 0, 0, 33, 32, png)) + + return res + +class PlayList(HTMLComponent, GUIComponent, MenuList): + def __init__(self): + GUIComponent.__init__(self) + self.l = eListboxPythonMultiContent() + self.list = [] + self.l.setList(self.list) + self.l.setFont(0, gFont("Regular", 18)) + self.currPlaying = 0 + self.oldCurrPlaying = -1 + + def clear(self): + self.list = [] + self.l.setList(self.list) + + def GUIcreate(self, parent): + self.instance = eListbox(parent) + self.instance.setContent(self.l) + self.instance.setItemHeight(32) + + def getSelection(self): + return self.l.getCurrentSelection()[0] + + def getSelectionIndex(self): + return self.l.getCurrentSelectionIndex() + + def addFile(self, serviceref): + self.list.append(PlaylistEntryComponent(serviceref, STATE_NONE)) + + def deleteFile(self, index): + if self.currPlaying > index: + self.currPlaying -= 1 + self.list = self.list[:index] + self.list[index + 1:] + + def setCurrentPlaying(self, index): + self.oldCurrPlaying = self.currPlaying + self.currPlaying = index + + def updateState(self, state): + if len(self.list) > self.oldCurrPlaying and self.oldCurrPlaying != -1: + self.list[self.oldCurrPlaying] = PlaylistEntryComponent(self.list[self.oldCurrPlaying][0], STATE_NONE) + self.list[self.currPlaying] = PlaylistEntryComponent(self.list[self.currPlaying][0], state) + self.updateList() + + def playFile(self): + self.updateState(STATE_PLAY) + + def pauseFile(self): + self.updateState(STATE_PAUSE) + + def stopFile(self): + self.updateState(STATE_STOP) + + def rewindFile(self): + self.updateState(STATE_REWIND) + + def forwardFile(self): + self.updateState(STATE_FORWARD) + + def updateList(self): + self.l.setList(self.list) + + def getCurrentIndex(self): + return self.currPlaying + + def getServiceRefList(self): + list = [] + for x in self.list: + list.append(x[0]) + return list + + def __len__(self): + return len(self.list)
\ No newline at end of file diff --git a/lib/python/Components/MenuList.py b/lib/python/Components/MenuList.py index b12cb236..0e337198 100644 --- a/lib/python/Components/MenuList.py +++ b/lib/python/Components/MenuList.py @@ -33,3 +33,23 @@ class MenuList(HTMLComponent, GUIComponent): def moveToIndex(self, idx): self.instance.moveSelectionTo(idx) + + def pageUp(self): + if self.instance is not None: + self.instance.moveSelection(self.instance.pageUp) + + def pageDown(self): + if self.instance is not None: + self.instance.moveSelection(self.instance.pageDown) + + def up(self): + if self.instance is not None: + self.instance.moveSelection(self.instance.moveUp) + + def down(self): + if self.instance is not None: + self.instance.moveSelection(self.instance.moveDown) + + def selectionEnabled(self, enabled): + if self.instance is not None: + self.instance.setSelectionEnable(enabled)
\ No newline at end of file diff --git a/lib/python/Components/SetupDevices.py b/lib/python/Components/SetupDevices.py index 3398af71..9036fa63 100644 --- a/lib/python/Components/SetupDevices.py +++ b/lib/python/Components/SetupDevices.py @@ -31,7 +31,7 @@ def InitSetupDevices(): def languageNotifier(configElement): language.activateLanguage(configElement.value) - config.osd.language = configElement("config.osd.language", configSelection, 0, language.getLanguageList() ); + config.osd.language = configElement("config.osd.language", configText, "en_EN", 0); config.osd.language.addNotifier(languageNotifier) config.parental = ConfigSubsection(); diff --git a/lib/python/Components/TimerList.py b/lib/python/Components/TimerList.py index 5e371a04..645c32ba 100644 --- a/lib/python/Components/TimerList.py +++ b/lib/python/Components/TimerList.py @@ -42,9 +42,15 @@ def TimerEntryComponent(timer, processed): repeatedtext += days[x] count += 1 flags = flags >> 1 - res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 50, 400, 20, 1, RT_HALIGN_LEFT|RT_VALIGN_CENTER, repeatedtext + (" %s ... %s" % (FuzzyTime(timer.begin)[1], FuzzyTime(timer.end)[1])))) + if timer.justplay: + res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 50, 400, 20, 1, RT_HALIGN_LEFT|RT_VALIGN_CENTER, repeatedtext + ((" %s "+ _("(ZAP)")) % (FuzzyTime(timer.begin)[1], FuzzyTime(timer.end)[1])))) + else: + res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 50, 400, 20, 1, RT_HALIGN_LEFT|RT_VALIGN_CENTER, repeatedtext + (" %s ... %s" % (FuzzyTime(timer.begin)[1], FuzzyTime(timer.end)[1])))) else: - res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 50, 400, 20, 1, RT_HALIGN_LEFT|RT_VALIGN_CENTER, repeatedtext + ("%s, %s ... %s" % (FuzzyTime(timer.begin) + FuzzyTime(timer.end)[1:])))) + if timer.justplay: + res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 50, 400, 20, 1, RT_HALIGN_LEFT|RT_VALIGN_CENTER, repeatedtext + (("%s, %s " + _("(ZAP)")) % (FuzzyTime(timer.begin))))) + else: + res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 50, 400, 20, 1, RT_HALIGN_LEFT|RT_VALIGN_CENTER, repeatedtext + ("%s, %s ... %s" % (FuzzyTime(timer.begin) + FuzzyTime(timer.end)[1:])))) if not processed: if timer.state == TimerEntry.StateWaiting: @@ -52,7 +58,10 @@ def TimerEntryComponent(timer, processed): elif timer.state == TimerEntry.StatePrepared: state = _("about to start") elif timer.state == TimerEntry.StateRunning: - state = _("recording...") + if timer.justplay: + state = _("zapped") + else: + state = _("recording...") else: state = _("<unknown>") else: diff --git a/lib/python/Plugins/Extensions/FileManager/plugin.py b/lib/python/Plugins/Extensions/FileManager/plugin.py index a17e631c..e9dccbd6 100644 --- a/lib/python/Plugins/Extensions/FileManager/plugin.py +++ b/lib/python/Plugins/Extensions/FileManager/plugin.py @@ -22,7 +22,7 @@ class FileManager(Screen): self.skin = FileManager.skin Screen.__init__(self, session) - self["list"] = FileList("/", matchingPattern = "^.*\.(png|avi|mp3|mpeg|ts)") + self["list"] = FileList("/", matchingPattern = "^.*\.(png|avi|mp3|mpeg|ts)", useServiceRef = True) self["pixmap"] = Pixmap() #self["text"] = Input("1234", maxSize=True, type=Input.NUMBER) @@ -52,11 +52,11 @@ class FileManager(Screen): self["text"].right() def ok(self): - selection = self["list"].getSelection() - if selection[1] == True: # isDir - self["list"].changeDir(selection[0]) + + if self["list"].canDescent(): # isDir + self["list"].descent() else: - self["pixmap"].instance.setPixmapFromFile(selection[0]) + self["pixmap"].instance.setPixmapFromFile(self["list"].getSelection()) def keyNumberGlobal(self, number): print "pressed", number diff --git a/lib/python/Plugins/Extensions/ZappingAlternatives/plugin.py b/lib/python/Plugins/Extensions/ZappingAlternatives/plugin.py index 7dc04d10..6dcdfee3 100644 --- a/lib/python/Plugins/Extensions/ZappingAlternatives/plugin.py +++ b/lib/python/Plugins/Extensions/ZappingAlternatives/plugin.py @@ -278,7 +278,8 @@ servicechanged = None def playService(self, ref): #print "--------------------Alternatives: trying to play service", str(ServiceReference(ref)) - servicechanged.lastPlayAction = str(ServiceReference(ref)) + if ref is not None: + servicechanged.lastPlayAction = str(ServiceReference(ref)) servicechanged.nextPlayTry = 0 result = oldPlayService(ref) diff --git a/lib/python/Screens/InfoBarGenerics.py b/lib/python/Screens/InfoBarGenerics.py index 8006520f..58321ac6 100644 --- a/lib/python/Screens/InfoBarGenerics.py +++ b/lib/python/Screens/InfoBarGenerics.py @@ -668,7 +668,7 @@ class InfoBarSeek: self.checkSkipShowHideLock() return True - + def pauseService(self): if self.seekstate == self.SEEK_STATE_PAUSE: print "pause, but in fact unpause" diff --git a/lib/python/Screens/LanguageSelection.py b/lib/python/Screens/LanguageSelection.py index 6b18121f..1d2fd787 100644 --- a/lib/python/Screens/LanguageSelection.py +++ b/lib/python/Screens/LanguageSelection.py @@ -27,26 +27,34 @@ class LanguageSelection(Screen): }, -1) def selectActiveLanguage(self): - self["list"].instance.moveSelectionTo(language.activeLanguage) + activeLanguage = language.getActiveLanguage() + pos = 0 + for x in self.list: + if x[0] == activeLanguage: + self["list"].instance.moveSelectionTo(pos) + break + pos += 1 def save(self): self.run() self.close() def run(self): - language.activateLanguage(self["list"].l.getCurrentSelectionIndex()) - config.osd.language.value = self["list"].l.getCurrentSelectionIndex() + language.activateLanguage(self["list"].l.getCurrentSelection()[0]) + config.osd.language.value = self["list"].l.getCurrentSelection()[0] config.osd.language.save() + config.misc.languageselected.value = 0 + config.misc.languageselected.save() self.setTitle(_("Language selection")) def updateList(self): self.list = [] - if len(language.lang) == 0: # no language available => display only english - self.list.append(LanguageEntryComponent("en", _("English"))) + if len(language.getLanguageList()) == 0: # no language available => display only english + self.list.append(LanguageEntryComponent("en", _("English"), "en_EN")) else: - for x in language.lang: - self.list.append(LanguageEntryComponent(x[3].lower(), _(x[0]))) - + for x in language.getLanguageList(): + self.list.append(LanguageEntryComponent(file = x[1][3].lower(), name = _(x[1][0]), index = x[0])) + self.list.sort(key=lambda x: x[1][7]) self["list"].l.setList(self.list) def up(self): diff --git a/lib/python/Screens/Makefile.am b/lib/python/Screens/Makefile.am index 7a30e88a..ea314e24 100644 --- a/lib/python/Screens/Makefile.am +++ b/lib/python/Screens/Makefile.am @@ -9,4 +9,5 @@ install_PYTHON = \ AudioSelection.py InfoBarGenerics.py HelpMenu.py Wizard.py __init__.py \ Dish.py SubserviceSelection.py LanguageSelection.py StartWizard.py \ TutorialWizard.py PluginBrowser.py MinuteInput.py Scart.py PVRState.py \ - Console.py InputBox.py ChoiceBox.py SimpleSummary.py ImageWizard.py + Console.py InputBox.py ChoiceBox.py SimpleSummary.py ImageWizard.py \ + MediaPlayer.py diff --git a/lib/python/Screens/MediaPlayer.py b/lib/python/Screens/MediaPlayer.py new file mode 100644 index 00000000..95ff16aa --- /dev/null +++ b/lib/python/Screens/MediaPlayer.py @@ -0,0 +1,316 @@ +from enigma import eTimer, iPlayableService, eServiceCenter, iServiceInformation, eSize +from Screens.Screen import Screen +from Screens.MessageBox import MessageBox +from Components.ActionMap import NumberActionMap +from Components.Label import Label +from Components.Input import Input +from Components.GUIComponent import * +from Components.Pixmap import Pixmap +from Components.Label import Label +from Components.FileList import FileEntryComponent, FileList +from Components.MediaPlayer import PlayList, PlaylistEntryComponent +from Plugins.Plugin import PluginDescriptor +from Tools.Directories import resolveFilename, SCOPE_MEDIA +from Components.ServicePosition import ServicePositionGauge +from Screens.ChoiceBox import ChoiceBox +from Components.ServiceEventTracker import ServiceEventTracker +from Screens.InfoBarGenerics import InfoBarSeek + +import os + +class MediaPlayer(Screen, InfoBarSeek): + def __init__(self, session, args = None): + Screen.__init__(self, session) + self.session.nav.stopService() + + self.filelist = FileList(resolveFilename(SCOPE_MEDIA), matchingPattern = "^.*\.(mp3|ogg|ts|avi)", useServiceRef = True) + self["filelist"] = self.filelist + + self.playlist = PlayList() + self["playlist"] = self.playlist + + self["PositionGauge"] = ServicePositionGauge(self.session.nav) + + self["currenttext"] = Label("") + + self["artisttext"] = Label(_("Artist:")) + self["artist"] = Label("") + self["titletext"] = Label(_("Title:")) + self["title"] = Label("") + self["albumtext"] = Label(_("Album:")) + self["album"] = Label("") + self["yeartext"] = Label(_("Year:")) + self["year"] = Label("") + self["genretext"] = Label(_("Genre:")) + self["genre"] = Label("") + + self.__event_tracker = ServiceEventTracker(screen=self, eventmap= + { +# iPlayableService.evSeekableStatusChanged: self.__seekableStatusChanged, +# iPlayableService.evStart: self.__serviceStarted, + + iPlayableService.evEOF: self.__evEOF, +# iPlayableService.evSOF: self.__evSOF, + }) + + + #self["text"] = Input("1234", maxSize=True, type=Input.NUMBER) + + self["actions"] = NumberActionMap(["OkCancelActions", "DirectionActions", "NumberActions", "MediaPlayerSeekActions"], + { + "ok": self.ok, + "cancel": self.close, + + "right": self.rightDown, + "rightRepeated": self.doNothing, + "rightUp": self.rightUp, + "left": self.leftDown, + "leftRepeated": self.doNothing, + "leftUp": self.leftUp, + + "up": self.up, + "upRepeated": self.up, + "down": self.down, + "downRepeated": self.down, + + "play": self.playEntry, + "pause": self.pauseEntry, + "stop": self.stopEntry, + + "previous": self.previousEntry, + "next": self.nextEntry, + + "menu": self.showMenu, + + "1": self.keyNumberGlobal, + "2": self.keyNumberGlobal, + "3": self.keyNumberGlobal, + "4": self.keyNumberGlobal, + "5": self.keyNumberGlobal, + "6": self.keyNumberGlobal, + "7": self.keyNumberGlobal, + "8": self.keyNumberGlobal, + "9": self.keyNumberGlobal, + "0": self.keyNumberGlobal + }, -2) + + InfoBarSeek.__init__(self) + + self.onClose.append(self.delMPTimer) + self.onClose.append(self.__onClose) + + self.righttimer = False + self.rightKeyTimer = eTimer() + self.rightKeyTimer.timeout.get().append(self.rightTimerFire) + + self.lefttimer = False + self.leftKeyTimer = eTimer() + self.leftKeyTimer.timeout.get().append(self.leftTimerFire) + + self.currList = "filelist" + + def doNothing(self): + pass + + def checkSkipShowHideLock(self): + self.updatedSeekState() + + def __evEOF(self): + self.nextEntry() + + def __onClose(self): + self.session.nav.playService(None) + + def delMPTimer(self): + del self.rightKeyTimer + del self.leftKeyTimer + + + def fwdTimerFire(self): + self.fwdKeyTimer.stop() + self.fwdtimer = False + self.nextEntry() + + def rwdTimerFire(self): + self.rwdKeyTimer.stop() + self.rwdtimer = False + self.previousEntry() + + def leftDown(self): + self.lefttimer = True + self.leftKeyTimer.start(1000) + + def rightDown(self): + self.righttimer = True + self.rightKeyTimer.start(1000) + + def leftUp(self): + if self.lefttimer: + self.leftKeyTimer.stop() + self.lefttimer = False + self[self.currList].pageUp() + + def rightUp(self): + if self.righttimer: + self.rightKeyTimer.stop() + self.righttimer = False + self[self.currList].pageDown() + + def leftTimerFire(self): + self.leftKeyTimer.stop() + self.lefttimer = False + self.switchToFileList() + + def rightTimerFire(self): + self.rightKeyTimer.stop() + self.righttimer = False + self.switchToPlayList() + + def switchToFileList(self): + self.currList = "filelist" + self.filelist.selectionEnabled(1) + self.playlist.selectionEnabled(0) + self.updateCurrentInfo() + + def switchToPlayList(self): + if len(self.playlist) != 0: + self.currList = "playlist" + self.filelist.selectionEnabled(0) + self.playlist.selectionEnabled(1) + self.updateCurrentInfo() + + def up(self): + self[self.currList].up() + self.updateCurrentInfo() + + def down(self): + self[self.currList].down() + self.updateCurrentInfo() + + def updateCurrentInfo(self): + text = "" + if self.currList == "filelist": + if not self.filelist.canDescent(): + text = self.filelist.getServiceRef().getPath() + if self.currList == "playlist": + text = self.playlist.getSelection().getPath() + + self["currenttext"].setText(os.path.basename(text)) + + def ok(self): + if self.currList == "filelist": + if self.filelist.canDescent(): + self.filelist.descent() + self.updateCurrentInfo() + else: + self.copyFile() + if self.currList == "playlist": + selection = self["playlist"].getSelection() + self.changeEntry(self.playlist.getSelectionIndex()) + + def keyNumberGlobal(self, number): + pass + + def showMenu(self): + menu = [] + if self.currList == "filelist": + menu.append((_("switch to playlist"), "playlist")) + if self.filelist.canDescent(): + menu.append((_("add directory to playlist"), "copydir")) + else: + menu.append((_("add file to playlist"), "copy")) + else: + menu.append((_("switch to filelist"), "filelist")) + menu.append((_("delete"), "delete")) + menu.append((_("clear playlist"), "clear")) + self.session.openWithCallback(self.menuCallback, ChoiceBox, title="", list=menu) + + def menuCallback(self, choice): + if choice is None: + return + + if choice[1] == "copydir": + self.copyDirectory(self.filelist.getSelection()[0]) + elif choice[1] == "copy": + self.copyFile() + elif choice[1] == "playlist": + self.switchToPlayList() + elif choice[1] == "filelist": + self.switchToFileList() + elif choice[1] == "delete": + self.deleteEntry() + elif choice[1] == "clear": + self.stopEntry() + self.playlist.clear() + self.switchToFileList() + + def copyDirectory(self, directory): + filelist = FileList(directory, useServiceRef = True, isTop = True) + + for x in filelist.getFileList(): + if x[0][1] == True: #isDir + self.copyDirectory(x[0][0]) + else: + self.playlist.addFile(x[0][0]) + self.playlist.updateList() + + def copyFile(self): + self.playlist.addFile(self.filelist.getServiceRef()) + self.playlist.updateList() + + def nextEntry(self): + next = self.playlist.getCurrentIndex() + 1 + if next < len(self.playlist): + self.changeEntry(next) + + def previousEntry(self): + next = self.playlist.getCurrentIndex() - 1 + if next >= 0: + self.changeEntry(next) + + def deleteEntry(self): + self.playlist.deleteFile(self.playlist.getSelectionIndex()) + self.playlist.updateList() + if len(self.playlist) == 0: + self.switchToFileList() + + def changeEntry(self, index): + self.playlist.setCurrentPlaying(index) + self.playEntry() + + def playEntry(self): + currref = self.playlist.getServiceRefList()[self.playlist.getCurrentIndex()] + if currref is None or self.session.nav.getCurrentlyPlayingServiceReference() is None or currref != self.session.nav.getCurrentlyPlayingServiceReference(): + self.session.nav.playService(self.playlist.getServiceRefList()[self.playlist.getCurrentIndex()]) + info = eServiceCenter.getInstance().info(currref) + description = info.getInfoString(currref, iServiceInformation.sDescription) + self["title"].setText(description) + self.unPauseService() + + + def updatedSeekState(self): + if self.seekstate == self.SEEK_STATE_PAUSE: + self.playlist.pauseFile() + elif self.seekstate == self.SEEK_STATE_PLAY: + self.playlist.playFile() + elif self.seekstate in ( self.SEEK_STATE_FF_2X, + self.SEEK_STATE_FF_4X, + self.SEEK_STATE_FF_8X, + self.SEEK_STATE_FF_32X, + self.SEEK_STATE_FF_64X, + self.SEEK_STATE_FF_128X): + self.playlist.forwardFile() + elif self.seekstate in ( self.SEEK_STATE_BACK_16X, + self.SEEK_STATE_BACK_32X, + self.SEEK_STATE_BACK_64X, + self.SEEK_STATE_BACK_128X,): + self.playlist.rewindFile() + + def pauseEntry(self): + self.pauseService() + + def stopEntry(self): + self.playlist.stopFile() + self.session.nav.playService(None) + + diff --git a/lib/python/Screens/StartWizard.py b/lib/python/Screens/StartWizard.py index 8f356edc..8fc4ecdf 100644 --- a/lib/python/Screens/StartWizard.py +++ b/lib/python/Screens/StartWizard.py @@ -6,6 +6,7 @@ from Components.config import configElementBoolean, config, configfile from LanguageSelection import LanguageSelection config.misc.firstrun = configElementBoolean("config.misc.firstrun", 1); +config.misc.languageselected = configElementBoolean("config.misc.languageselected", 1); class StartWizard(Wizard): skin = """ @@ -33,9 +34,9 @@ class StartWizard(Wizard): self["arrowup2"] = MovingPixmap() def markDone(self): - config.misc.firstrun.value = 0; + config.misc.firstrun.value = 0 config.misc.firstrun.save() configfile.save() -wizardManager.registerWizard(LanguageSelection, config.misc.firstrun.value) +wizardManager.registerWizard(LanguageSelection, config.misc.languageselected.value) wizardManager.registerWizard(StartWizard, config.misc.firstrun.value) diff --git a/lib/python/Screens/TimerEntry.py b/lib/python/Screens/TimerEntry.py index 3aa56800..7e2e55c8 100644 --- a/lib/python/Screens/TimerEntry.py +++ b/lib/python/Screens/TimerEntry.py @@ -54,6 +54,11 @@ class TimerEntry(Screen): def createConfig(self): config.timerentry = ConfigSubsection() + if (self.timer.justplay): + justplay = 0 + else: + justplay = 1 + # calculate default values day = [] weekday = 0 @@ -87,6 +92,7 @@ class TimerEntry(Screen): weekday = (int(strftime("%w", time.localtime(self.timer.begin))) - 1) % 7 day[weekday] = 0 + config.timerentry.justplay = configElement_nonSave("config.timerentry.justplay", configSelection, justplay, (("zap", _("zap")), ("record", _("record")))) config.timerentry.type = configElement_nonSave("config.timerentry.type", configSelection, type, (_("once"), _("repeated"))) config.timerentry.name = configElement_nonSave("config.timerentry.name", configText, self.timer.name, (configText.extendableSize, self.keyRightCallback)) config.timerentry.description = configElement_nonSave("config.timerentry.description", configText, self.timer.description, (configText.extendableSize, self.keyRightCallback)) @@ -139,7 +145,9 @@ class TimerEntry(Screen): self.list = [] self.list.append(getConfigListEntry(_("Name"), config.timerentry.name)) self.list.append(getConfigListEntry(_("Description"), config.timerentry.description)) - self.timerTypeEntry = getConfigListEntry(_("Timer Type"), config.timerentry.type) + self.timerJustplayEntry = getConfigListEntry(_("Timer Type"), config.timerentry.justplay) + self.list.append(self.timerJustplayEntry) + self.timerTypeEntry = getConfigListEntry(_("Repeat Type"), config.timerentry.type) self.list.append(self.timerTypeEntry) if (config.timerentry.type.value == 0): # once @@ -172,10 +180,12 @@ class TimerEntry(Screen): else: self.list.append(getConfigListEntry(_("StartTime"), config.timerentry.starttime)) if (config.timerentry.type.value == 0): # once - self.list.append(getConfigListEntry(_("End"), config.timerentry.enddate)) - self.list.append(getConfigListEntry(" ", config.timerentry.endtime)) + if currentConfigSelectionElement(config.timerentry.justplay) != "zap": + self.list.append(getConfigListEntry(_("End"), config.timerentry.enddate)) + self.list.append(getConfigListEntry(" ", config.timerentry.endtime)) else: - self.list.append(getConfigListEntry(_("EndTime"), config.timerentry.endtime)) + if currentConfigSelectionElement(config.timerentry.justplay) != "zap": + self.list.append(getConfigListEntry(_("EndTime"), config.timerentry.endtime)) self.channelEntry = getConfigListEntry(_("Channel"), config.timerentry.service) self.list.append(self.channelEntry) @@ -187,6 +197,8 @@ class TimerEntry(Screen): print "newConfig", self["config"].getCurrent() if self["config"].getCurrent() == self.timerTypeEntry: self.createSetup("config") + if self["config"].getCurrent() == self.timerJustplayEntry: + self.createSetup("config") if self["config"].getCurrent() == self.frequencyEntry: self.createSetup("config") @@ -242,6 +254,7 @@ class TimerEntry(Screen): def keyGo(self): self.timer.name = config.timerentry.name.value self.timer.description = config.timerentry.description.value + self.timer.justplay = (currentConfigSelectionElement(config.timerentry.justplay) == "zap") self.timer.resetRepeated() if (config.timerentry.type.value == 0): # once diff --git a/lib/python/Tools/Directories.py b/lib/python/Tools/Directories.py index 123e1bf8..d6ffeeea 100644 --- a/lib/python/Tools/Directories.py +++ b/lib/python/Tools/Directories.py @@ -10,6 +10,7 @@ SCOPE_CONFIG = 6 SCOPE_LANGUAGE = 7 SCOPE_HDD = 8 SCOPE_PLUGINS = 9 +SCOPE_MEDIA = 10 PATH_CREATE = 0 PATH_DONTCREATE = 1 @@ -26,6 +27,7 @@ defaultPaths = { SCOPE_SKIN: ("/usr/share/enigma2/", PATH_DONTCREATE), SCOPE_SKIN_IMAGE: ("/usr/share/enigma2/", PATH_DONTCREATE), SCOPE_HDD: ("/hdd/movie/", PATH_DONTCREATE), + SCOPE_MEDIA: ("/media/", PATH_DONTCREATE), SCOPE_USERETC: ("", PATH_DONTCREATE) # user home directory } diff --git a/lib/service/servicefs.cpp b/lib/service/servicefs.cpp index 2590993a..22d8cf65 100644 --- a/lib/service/servicefs.cpp +++ b/lib/service/servicefs.cpp @@ -134,7 +134,7 @@ RESULT eServiceFS::getContent(std::list<eServiceReference> &list, bool sorted) if (extension == ".ts") type = eServiceFactoryDVB::id; - else if (extension == ".mp3") + else if (extension == ".mp3" || extension == ".ogg" || extension == ".avi") type = 4097; if (type != -1) |
