diff --git a/dreamexplorer/src/__init__.py b/dreamexplorer/src/__init__.py index c0e412662..20e36b96c 100644 --- a/dreamexplorer/src/__init__.py +++ b/dreamexplorer/src/__init__.py @@ -1,6 +1,4 @@ -from Components.Language import language -from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_LANGUAGE -import os +from Tools.Directories import resolveFilename, SCOPE_PLUGINS import gettext diff --git a/dreamexplorer/src/dreamexplorer.png b/dreamexplorer/src/dreamexplorer.png index 51313457b..81d596cb7 100644 Binary files a/dreamexplorer/src/dreamexplorer.png and b/dreamexplorer/src/dreamexplorer.png differ diff --git a/dreamexplorer/src/myFileList.py b/dreamexplorer/src/myFileList.py index da3506735..a2575d90a 100644 --- a/dreamexplorer/src/myFileList.py +++ b/dreamexplorer/src/myFileList.py @@ -1,70 +1,83 @@ ####################################################################### # -# Vali's File-List with some extendet functions -# based on FileList(Enigma-2) +# Vali's File-List with some extendet functions +# based on FileList(Enigma-2) # -# Coded by Vali (c)2009-2011 -# Main idea and getTSLength/getTSInfo/Sort functions by DarkVolli -# Support: www.dreambox-tools.info +# Coded by Vali (c)2009-2011 +# Main idea and getTSLength/getTSInfo/Sort functions by DarkVolli +# Support: www.dreambox-tools.info # -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. # ####################################################################### # for localized messages from . import _ -from re import compile as re_compile -from os import path as os_path, listdir, stat as os_stat + +from os import listdir +from os import path as os_path +from os import stat as os_stat from Components.MenuList import MenuList from Components.Harddisk import harddiskmanager from Components.config import config -from enigma import RT_HALIGN_LEFT, eListboxPythonMultiContent, eServiceReference, eServiceCenter, gFont, iServiceInformation, RT_VALIGN_CENTER, BT_SCALE, BT_KEEP_ASPECT_RATIO +from Components.MultiContent import MultiContentEntryPixmapAlphaTest +from enigma import ( + BT_KEEP_ASPECT_RATIO, + BT_SCALE, + RT_HALIGN_LEFT, + RT_VALIGN_CENTER, + eListboxPythonMultiContent, + eServiceCenter, + eServiceReference, + gFont, + iServiceInformation, +) from Tools.LoadPixmap import LoadPixmap import skin -from Components.MultiContent import MultiContentEntryPixmapAlphaTest + EXTENSIONS = { - "mp2": "music", - "mp3": "music", - "wav": "music", - "ogg": "music", - "flac": "music", - "m4a": "music", - "jpg": "picture", - "jpeg": "picture", - "jpe": "picture", - "png": "picture", - "bmp": "picture", - "mvi": "picture", - "ts": "movie", - "m2ts": "movie", - "avi": "movie", - "divx": "movie", - "wmv": "movie", - "mpg": "movie", - "mpeg": "movie", - "mkv": "movie", - "mp4": "movie", - "mov": "movie", - "vob": "movie", - "ifo": "movie", - "iso": "movie", - "flv": "movie", - "3gp": "movie", - "mod": "movie", - "ipk": "package", - "gz": "package", - "bz2": "package", - "sh": "script" - } + "mp2": "music", + "mp3": "music", + "wav": "music", + "ogg": "music", + "flac": "music", + "m4a": "music", + "jpg": "picture", + "jpeg": "picture", + "jpe": "picture", + "png": "picture", + "bmp": "picture", + "mvi": "picture", + "ts": "movie", + "m2ts": "movie", + "avi": "movie", + "divx": "movie", + "wmv": "movie", + "mpg": "movie", + "mpeg": "movie", + "mkv": "movie", + "mp4": "movie", + "mov": "movie", + "vob": "movie", + "ifo": "movie", + "iso": "movie", + "flv": "movie", + "3gp": "movie", + "mod": "movie", + "ipk": "package", + "gz": "package", + "bz2": "package", + "sh": "script" +} def FileEntryComponent(name, absolute=None, isDir=False): @@ -74,8 +87,7 @@ def FileEntryComponent(name, absolute=None, isDir=False): if isDir: png = LoadPixmap("/usr/lib/enigma2/python/Plugins/Extensions/DreamExplorer/res/dir.png") else: - extension = name.split('.') - extension = extension[-1].lower() + extension = name.split('.')[-1].lower() if extension in EXTENSIONS: if name == "VIDEO_TS.IFO": png = LoadPixmap("/usr/lib/enigma2/python/Plugins/Extensions/DreamExplorer/res/dvd.png") @@ -142,11 +154,11 @@ def getSelection(self): return self.l.getCurrentSelection()[0] def getCurrentEvent(self): - l = self.l.getCurrentSelection() - if not l or l[0][1] == True: + current_item = self.l.getCurrentSelection() + if not current_item or current_item[0][1] is True: return None else: - return self.serviceHandler.info(l[0][0]).getEvent(l[0][0]) + return self.serviceHandler.info(current_item[0][0]).getEvent(current_item[0][0]) def getFileList(self): return self.list @@ -337,23 +349,31 @@ def getTSLength(self, path): return tslen def byNameFunc(self, a): - return a[0][0] + try: + return str(a[0][0] or "").lower() + except: + return "" def sortName(self): self.list.sort(key=self.byNameFunc) - #self.l.invalidate() self.l.setList(self.list) self.moveToIndex(0) def byDateFunc(self, a): try: - stat1 = os_stat(self.current_directory + a[0][0]) + if a[0][0] and self.current_directory: + path = str(a[0][0]) + if not path.startswith('/'): + path = self.current_directory + path + if os_path.exists(path): + return (0, float(os_stat(path).st_ctime)) except: - return 0 - return stat1.st_ctime + pass + + # Fallback: use name + return (1, self.byNameFunc(a)) def sortDate(self): - self.list.sort(key=self.byDateFunc) - #self.l.invalidate() + self.list.sort(key=self.byDateFunc, reverse=True) self.l.setList(self.list) self.moveToIndex(0) diff --git a/dreamexplorer/src/plugin.py b/dreamexplorer/src/plugin.py index bc43ebe16..a26a97955 100644 --- a/dreamexplorer/src/plugin.py +++ b/dreamexplorer/src/plugin.py @@ -16,65 +16,74 @@ # ####################################################################### -# for localized messages -from . import _ from Plugins.Plugin import PluginDescriptor from Screens.Screen import Screen -from Screens.InfoBar import MoviePlayer as MP_parent from Screens.InfoBar import InfoBar +from Screens.InfoBar import MoviePlayer as MP_parent from Screens.Console import Console from Screens.ChoiceBox import ChoiceBox from Screens.MessageBox import MessageBox from Screens.EventView import EventViewSimple +from Screens.InputBox import InputBox from Components.ActionMap import ActionMap +from Components.AVSwitch import AVSwitch from Components.FileList import FileList -from Components.MenuList import MenuList from Components.Label import Label -from Components.ScrollLabel import ScrollLabel +from Components.MenuList import MenuList from Components.Pixmap import Pixmap -from Components.AVSwitch import AVSwitch from Components.config import config, ConfigSubsection, ConfigText +from Components.Sources.StaticText import StaticText from Tools.Directories import fileExists, pathExists from Tools.HardwareInfo import HardwareInfo from ServiceReference import ServiceReference + +from . import _ from .myFileList import FileList as myFileList -#from vInputBox import vInputBox -from Screens.InputBox import InputBox -from Components.Sources.StaticText import StaticText +# from vInputBox import vInputBox + +from enigma import ( + eServiceReference, + ePicLoad, + getDesktop, + eServiceCenter +) + +from os import ( + system as os_system, + stat as os_stat, + walk as os_walk, + popen as os_popen, + rename as os_rename, + mkdir as os_mkdir, + path as os_path, + listdir as os_listdir +) + +from time import ( + strftime as time_strftime, + localtime as time_localtime +) PicPlayerAviable = False -if fileExists("/usr/lib/enigma2/python/Plugins/Extensions/PicturePlayer/plugin.pyc"): - try: - from Plugins.Extensions.PicturePlayer.plugin import Pic_Thumb, picshow - PicPlayerAviable = True - except: - pass - DVDPlayerAviable = False -if fileExists("/usr/lib/enigma2/python/Plugins/Extensions/DVDPlayer/plugin.pyc"): - try: - from Plugins.Extensions.DVDPlayer.plugin import DVDPlayer - DVDPlayerAviable = True - except: - pass -else: - try: - from Screens.DVD import DVDPlayer - DVDPlayerAviable = True - except: - pass - MMPavaiable = False -if fileExists("/usr/lib/enigma2/python/Plugins/Extensions/MerlinMusicPlayer/plugin.pyc"): - try: - from Plugins.Extensions.MerlinMusicPlayer.plugin import MerlinMusicPlayerScreen, Item - MMPavaiable = True - except: - pass -from enigma import eConsoleAppContainer, eServiceReference, ePicLoad, getDesktop, eServiceCenter -import os -from time import strftime, localtime + +if fileExists("/usr/lib/enigma2/python/Plugins/Extensions/PicturePlayer/plugin.pyo") or fileExists("/usr/lib/enigma2/python/Plugins/Extensions/PicturePlayer/plugin.pyc"): + from Plugins.Extensions.PicturePlayer.plugin import Pic_Thumb # , picshow + PicPlayerAviable = True +else: + PicPlayerAviable = False +if fileExists("/usr/lib/enigma2/python/Plugins/Extensions/DVDPlayer/plugin.pyo") or fileExists("/usr/lib/enigma2/python/Plugins/Extensions/DVDPlayer/plugin.pyc"): + from Plugins.Extensions.DVDPlayer.plugin import DVDPlayer + DVDPlayerAviable = True +else: + DVDPlayerAviable = False +if fileExists("/usr/lib/enigma2/python/Plugins/Extensions/MerlinMusicPlayer/plugin.pyo") or fileExists("/usr/lib/enigma2/python/Plugins/Extensions/MerlinMusicPlayer/plugin.pyc"): + from Plugins.Extensions.MerlinMusicPlayer.plugin import MerlinMusicPlayerScreen, Item + MMPavaiable = True +else: + MMPavaiable = False config.plugins.DreamExplorer = ConfigSubsection() config.plugins.DreamExplorer.startDir = ConfigText(default="/") @@ -85,1231 +94,1223 @@ HDSkn = False sz_w = getDesktop(0).size().width() if sz_w > 800: - HDSkn = True + HDSkn = True else: - HDSkn = False + HDSkn = False def Plugins(**kwargs): - list = [PluginDescriptor(name="Dream-Explorer", description=_("Explore your box"), where=[PluginDescriptor.WHERE_PLUGINMENU], icon="dreamexplorer.png", fnc=main)] - list.append(PluginDescriptor(name=_("Dream-Explorer"), where=PluginDescriptor.WHERE_EXTENSIONSMENU, fnc=main)) - #list.append(PluginDescriptor(where = [PluginDescriptor.WHERE_SESSIONSTART],fnc = autostart)) - return list + list = [PluginDescriptor(name="Dream-Explorer", description=_("Explore your box"), where=[PluginDescriptor.WHERE_PLUGINMENU], icon="dreamexplorer.png", fnc=main)] + list.append(PluginDescriptor(name=_("Dream-Explorer"), where=PluginDescriptor.WHERE_EXTENSIONSMENU, fnc=main)) + # list.append(PluginDescriptor(where = [PluginDescriptor.WHERE_SESSIONSTART],fnc = autostart)) + return list def main(session, **kwargs): - session.open(DreamExplorerII) + session.open(DreamExplorerII) def autostart(reason, **kwargs): - if reason == 0: - if "session" in kwargs: - global explSession - explSession = kwargs["session"] - InfoBar.showMovies = showExpl + if reason == 0: + if "session" in kwargs: + global explSession + explSession = kwargs["session"] + InfoBar.showMovies = showExpl def showExpl(dummy_self=None): - global explSession - explSession.open(DreamExplorerII) - -######## DREAM-EXPLORER START ####################### + explSession.open(DreamExplorerII) +# ####### DREAM-EXPLORER START ####################### class DreamExplorerII(Screen): - global HDSkn - if HDSkn: - if (getDesktop(0).size().width()) > 1030: - skin = """ - - - - - - - - - - - - - - - """ - else: - skin = """ - - - - - - - - - - - - - - - - """ - else: - skin = """ - - - - - - - - - - - - - - """ - - def __init__(self, session, args=None): - self.skin = DreamExplorerII.skin - Screen.__init__(self, session) - self.setTitle(_("Dream-Explorer")) - self.sesion = session - self.altservice = self.session.nav.getCurrentlyPlayingServiceOrGroup() - self.MyBox = HardwareInfo().get_device_name() - self.commando = ["ls"] - self.selectedDir = "/tmp/" - self.booklines = [] - self.MediaPattern = "^.*\.(ts|m2ts|mp3|wav|ogg|jpg|jpeg|jpe|png|bmp|mpg|mpeg|mkv|mp4|mov|divx|wmv|avi|mp2|m4a|flac|ifo|vob|iso|sh|flv|3gp|mod)" - if pathExists(config.plugins.DreamExplorer.startDir.value): - StartMeOn = config.plugins.DreamExplorer.startDir.value - else: - StartMeOn = None - if (config.plugins.DreamExplorer.MediaFilter.value == "off"): - self.MediaFilter = False - self["filelist"] = myFileList(StartMeOn, showDirectories=True, showFiles=True, matchingPattern=None, useServiceRef=False) - else: - self.MediaFilter = True - self["filelist"] = myFileList(StartMeOn, showDirectories=True, showFiles=True, matchingPattern=self.MediaPattern, useServiceRef=False) - self["TEMPfl"] = FileList("/", matchingPattern="(?i)^.*\.(jpeg|jpg|jpe|png|bmp)") - - self["key_red"] = StaticText(_("Delete")) - self["key_green"] = StaticText(_("Rename")) - self["key_yellow"] = StaticText(_("Move/Copy")) - self["key_blue"] = StaticText(_("Bookmarks")) - - self["actions"] = ActionMap(["WizardActions", "DirectionActions", "ColorActions", "MenuActions", "EPGSelectActions", "InfobarActions"], - { - "ok": self.ok, - "back": self.explExit, - "green": self.ExecRename, - "red": self.ExecDelete, - "blue": self.goToBookmark, - "yellow": self.go2CPmaniger, - "menu": self.explContextMenu, - "info": self.Info, - "left": self.left, - "right": self.right, - "up": self.up, - "down": self.down, - "nextBouquet": self.sortName, - "prevBouquet": self.sortDate, - "showMovies": self.CloseAndPlay - }, -1) - self.onLayoutFinish.append(self.byLayoutEnd) - - def ok(self): - global DVDPlayerAviable - if self["filelist"].canDescent(): - self["filelist"].descent() - self.updateLocationInfo() - else: - filename = self["filelist"].getCurrentDirectory() + self["filelist"].getFilename() - testFileName = self["filelist"].getFilename() - testFileName = testFileName.lower() - if filename is not None: - if testFileName.endswith(".ts"): - fileRef = eServiceReference("1:0:0:0:0:0:0:0:0:0:" + filename) - self.session.open(MoviePlayer, fileRef) - elif (testFileName.endswith(".mpg")) or (testFileName.endswith(".mpeg")) or (testFileName.endswith(".mkv")) or (testFileName.endswith(".m2ts")) or (testFileName.endswith(".vob")) or (testFileName.endswith(".mod")): - if testFileName.endswith(".m2ts"): - fileRef = eServiceReference("3:0:0:0:0:0:0:0:0:0:" + filename) - else: - fileRef = eServiceReference("4097:0:0:0:0:0:0:0:0:0:" + filename) - self.session.open(MoviePlayer, fileRef) - elif (testFileName.endswith(".avi")) or (testFileName.endswith(".mp4")) or (testFileName.endswith(".divx")) or (testFileName.endswith(".wmv")) or (testFileName.endswith(".mov")) or (testFileName.endswith(".flv")) or (testFileName.endswith(".3gp")): - if not (self.MyBox == "dm7025"): - fileRef = eServiceReference("4097:0:0:0:0:0:0:0:0:0:" + filename) - self.session.open(MoviePlayer, fileRef) - elif (testFileName.endswith(".mp3")) or (testFileName.endswith(".wav")) or (testFileName.endswith(".ogg")) or (testFileName.endswith(".m4a")) or (testFileName.endswith(".mp2")) or (testFileName.endswith(".flac")): - if (self.MyBox == "dm7025") and ((testFileName.endswith(".m4a")) or (testFileName.endswith(".mp2")) or (testFileName.endswith(".flac"))): - return - if MMPavaiable: - SongList, SongIndex = self.searchMusic() - try: - self.session.open(MerlinMusicPlayerScreen, SongList, SongIndex, False, self.altservice, None) - except: - self.session.open(MessageBox, _("Incompatible MerlinMusicPlayer version!"), MessageBox.TYPE_INFO) - else: - fileRef = eServiceReference("4097:0:0:0:0:0:0:0:0:0:" + filename) - m_dir = self["filelist"].getCurrentDirectory() - self.session.open(MusicExplorer, fileRef, m_dir, testFileName) - elif (testFileName.endswith(".jpg")) or (testFileName.endswith(".jpeg")) or (testFileName.endswith(".jpe")) or (testFileName.endswith(".png")) or (testFileName.endswith(".bmp")): - if self["filelist"].getSelectionIndex() != 0: - Pdir = self["filelist"].getCurrentDirectory() - self.session.open(PictureExplorerII, filename, Pdir) - elif (testFileName.endswith(".mvi")): - self.session.nav.stopService() - self.session.open(MviExplorer, filename) - elif (testFileName == "video_ts.ifo"): - if DVDPlayerAviable: - if (self["filelist"].getCurrentDirectory()).lower().endswith("video_ts/"): - self.session.open(DVDPlayer, dvd_filelist=[self["filelist"].getCurrentDirectory()]) - elif testFileName.endswith(".iso"): - if DVDPlayerAviable: - self.session.open(DVDPlayer, dvd_filelist=[filename]) - elif testFileName.endswith(".bootlogo.tar.gz"): - self.commando = ["mount -rw /boot -o remount", "sleep 3", "tar -xzvf " + filename + " -C /", "mount -ro /boot -o remount"] - askList = [(_("Cancel"), "NO"), (_("Install new bootlogo..."), "YES2ALL")] - dei = self.session.openWithCallback(self.SysExecution, ChoiceBox, title=_("Bootlogo-package:\\n") + filename, list=askList) - dei.setTitle(_("Dream-Explorer : Install...")) - elif testFileName.endswith(".tar.gz"): - self.commando = ["tar -xzvf " + filename + " -C /"] - askList = [(_("Cancel"), "NO"), (_("Install this package"), "YES")] - dei = self.session.openWithCallback(self.SysExecution, ChoiceBox, title=_("GZ-package:\\n") + filename, list=askList) - dei.setTitle(_("Dream-Explorer : Install...")) - elif testFileName.endswith(".tar.bz2"): - self.commando = ["tar -xjvf " + filename + " -C /"] - askList = [(_("Cancel"), "NO"), (_("Install this package"), "YES")] - dei = self.session.openWithCallback(self.SysExecution, ChoiceBox, title=_("BZ2-package:\\n") + filename, list=askList) - dei.setTitle(_("Dream-Explorer : Install...")) - elif testFileName.endswith(".ipk"): - if fileExists("/usr/bin/opkg"): - self.commando = ["opkg install " + filename] - else: - self.commando = ["ipkg install " + filename] - askList = [(_("Cancel"), "NO"), (_("Install this package"), "YES")] - dei = self.session.openWithCallback(self.SysExecution, ChoiceBox, title=_("OPKG-package:\\n") + filename, list=askList) - dei.setTitle(_("Dream-Explorer : Install...")) - elif testFileName.endswith(".pyc") or testFileName.endswith(".pyo"): - self.commando = ["/usr/lib/enigma2/python/Plugins/Extensions/DreamExplorer/pyc2xml " + filename] - askList = [(_("Cancel"), "NO"), (_("Disassemble to bytecode..."), "YES")] - dei = self.session.openWithCallback(self.SysExecution, ChoiceBox, title=_("Pyc-Script:\\n") + filename, list=askList) - dei.setTitle(_("Dream-Explorer : Disassemble...")) - elif testFileName.endswith(".sh") or (self["filelist"].getCurrentDirectory()).lower().endswith("init.d/"): - self.commando = [filename] - askList = [(_("Cancel"), "NO"), (_("View this shell-script"), "VIEW"), (_("Start execution"), "YES")] - self.session.openWithCallback(self.SysExecution, ChoiceBox, title=_("Do you want to execute?\\n") + filename, list=askList) - else: - try: - xfile = os.stat(filename) - except: - xfile = None - #old (xfile.st_size < 61440) - if xfile is not None and (xfile.st_size < 250000): - self.session.open(vEditor, filename) - - def byLayoutEnd(self): - self.updateLocationInfo() - if fileExists("/etc/myBookmarks"): - try: - booklist = open("/etc/myBookmarks", "r") - except: - dei = self.session.open(MessageBox, _("Error by reading bookmarks !!!"), MessageBox.TYPE_ERROR) - dei.setTitle(_("Dream-Explorer")) - if booklist is not None: - for oneline in booklist: - self.booklines.append(oneline) - booklist.close() - - def updateLocationInfo(self): - try: - if self.MediaFilter: - self.setTitle(_("[Media files] ") + self["filelist"].getCurrentDirectory()) - else: - self.setTitle(_("[All files] ") + self["filelist"].getCurrentDirectory()) - except: - self.setTitle(_("Dream-Explorer")) - - def explContextMenu(self): - self.playfile = '' - if self.MediaFilter: - mftext = _("Disable") - else: - mftext = _("Enable") - if self["filelist"].canDescent(): - if self["filelist"].getSelectionIndex() != 0: - self.selectedDir = self["filelist"].getSelection()[0] - if self.selectedDir + "\n" in self.booklines: - BMtext = _("Remove directory from Bookmarks") - BMstring = "DELLINK" - else: - BMtext = _("Add directory to Bookmarks") - BMstring = "ADDLINK" - contextDirList = [(_("Cancel"), "NO"), - (mftext + _(" Media-filter"), "FILTER"), - (_("Sort by name (bouquet+)"), "SORTNAME"), - (_("Sort by date (bouquet-)"), "SORTDATE"), - (_(BMtext), BMstring), - (_("Create new file"), "NEWFILE"), - (_("Create new directory"), "NEWDIR"), - (_("Set start directory"), "SETSTARTDIR"), - (_("About"), "HELP")] - last_dir = self["filelist"].getFilename() - folder = last_dir + 'STREAM/' - if last_dir.endswith("/BDMV/") and os.path.isdir(folder): - sizelist = [] - try: - for name in os.listdir(folder): - if name.endswith(".m2ts"): - try: - st = os.stat(folder + name) - size = st.st_size - if size > 0: - sizelist.append((folder + name, size)) - except: - pass - if sizelist: - sizelist.sort(key=lambda x: x[1]) - except: - pass - Len = len(sizelist) - if Len > 0: - index = Len - 1 - self.playfile = sizelist[index][0] - contextDirList.insert(1, (_("Auto play blu-ray file"), "BLURAY")) - dei = self.session.openWithCallback(self.SysExecution, ChoiceBox, title=_("Options:\n"), list=contextDirList) - dei.setTitle(_("Dream-Explorer")) - else: - contextFileList = [(_("Cancel"), "NO"), - (mftext + _(" Media-filter"), "FILTER"), - (_("Sort by name (bouquet+)"), "SORTNAME"), - (_("Sort by date (bouquet-)"), "SORTDATE"), - (_("Pack my bootlogo"), "PACKLOGOS"), - (_("About"), "HELP")] - dei = self.session.openWithCallback(self.SysExecution, ChoiceBox, title=_("Options:\n"), list=contextFileList) - dei.setTitle(_("Dream-Explorer")) - else: - contextFileList = [(_("Cancel"), "NO"), - (mftext + _(" Media-filter"), "FILTER"), - (_("Sort by name (bouquet+)"), "SORTNAME"), - (_("Sort by date (bouquet-)"), "SORTDATE"), - (_("Preview all pictures"), "PLAYDIRPICTURE"), - (_("Create new file"), "NEWFILE"), - (_("Create new directory"), "NEWDIR"), - (_("Create softlink..."), "SOFTLINK"), - (_("Set archive mode (644)"), "CHMOD644"), - (_("Set executable mode (755)"), "CHMOD755"), - (_("About"), "HELP")] - dei = self.session.openWithCallback(self.SysExecution, ChoiceBox, title=_("Options:\n"), list=contextFileList) - dei.setTitle(_("Dream-Explorer")) - - def SysExecution(self, answer): - global PicPlayerAviable - answer = answer and answer[1] - if answer == "YES": - self.session.open(Console, cmdlist=[self.commando[0]]) - elif answer == "YES2ALL": - self.session.open(Console, cmdlist=self.commando) - elif answer == "PACKLOGOS": - self.session.open(Console, cmdlist=["cd /tmp/", "tar -czf /tmp/dreambox.bootlogo.tar.gz /usr/share/bootlogo.mvi /usr/share/bootlogo_wait.mvi /usr/share/backdrop.mvi /boot/bootlogo.jpg"]) - elif answer == "VIEW": - try: - yfile = os.stat(self.commando[0]) - except: - yfile = None - #old yfile.st_size < 61440) - if yfile is not None and (yfile.st_size < 250000): - self.session.open(vEditor, self.commando[0]) - elif answer == "PLAYDIRPICTURE": - if PicPlayerAviable: - self["TEMPfl"].changeDir(self["filelist"].getCurrentDirectory()) - self.session.open(Pic_Thumb, self["TEMPfl"].getFileList(), 0, self["filelist"].getCurrentDirectory()) - else: - dei = self.session.open(MessageBox, _("Picture-Player not available!"), MessageBox.TYPE_ERROR) - dei.setTitle(_("Dream-Explorer")) - elif answer == "ADDLINK": - try: - newbooklist = open("/etc/myBookmarks", "w") - except: - dei = self.session.open(MessageBox, _("Error by writing bookmarks !!!"), MessageBox.TYPE_ERROR) - dei.setTitle(_("Dream-Explorer")) - if newbooklist is not None: - self.booklines.append(self.selectedDir + "\n") - for one_line in self.booklines: - newbooklist.write(one_line) - newbooklist.close() - elif answer == "DELLINK": - temp_book = [] - for bidx in range(len(self.booklines) - 1): - if not (self.selectedDir in self.booklines[bidx]): - temp_book.append(self.booklines[bidx]) - self.booklines = [] - self.booklines = temp_book - try: - newbooklist = open("/etc/myBookmarks", "w") - except: - dei = self.session.open(MessageBox, _("Error by writing bookmarks !!!"), MessageBox.TYPE_ERROR) - dei.setTitle(_("Dream-Explorer")) - if newbooklist is not None: - for one_line in self.booklines: - newbooklist.write(one_line) - newbooklist.close() - elif answer == "FILTER": - if self.MediaFilter: - self.MediaFilter = False - config.plugins.DreamExplorer.MediaFilter.value = "off" - config.plugins.DreamExplorer.MediaFilter.save() - self["filelist"].matchingPattern = None - self["filelist"].refresh() - self.updateLocationInfo() - else: - self.MediaFilter = True - config.plugins.DreamExplorer.MediaFilter.value = "on" - config.plugins.DreamExplorer.MediaFilter.save() - self["filelist"].matchingPattern = self.MediaPattern - self["filelist"].refresh() - self.updateLocationInfo() - elif answer == "NEWFILE": - self.session.openWithCallback(self.callbackNewFile, vInputBox, title=_(self["filelist"].getCurrentDirectory()), windowTitle=_("Create new file in..."), text="name") - elif answer == "NEWDIR": - self.session.openWithCallback(self.callbackNewDir, vInputBox, title=_(self["filelist"].getCurrentDirectory()), windowTitle=_("Create new directory in..."), text="name") - elif answer == "SETSTARTDIR": - newStartDir = self["filelist"].getSelection()[0] - dei = self.session.openWithCallback(self.callbackSetStartDir, MessageBox, _("Do you want to set\n" + newStartDir + "\nas start directory?"), MessageBox.TYPE_YESNO) - dei.setTitle(_("Dream-Explorer...")) - elif answer == "SORTNAME": - list = self.sortName() - elif answer == "SORTDATE": - list = self.sortDate() - elif answer == "HELP": - hilfe = _("Dreambox-Explorer\ncoded 2010 by Vali\n\nSupport & Help on\nwww.dreambox-tools.info") - dei = self.session.open(MessageBox, _(hilfe), MessageBox.TYPE_INFO) - dei.setTitle(_("Info...")) - elif answer == "SOFTLINK": - if not (self.MediaFilter): - self.session.openWithCallback(self.callbackCPmaniger, SoftLinkScreen, self["filelist"].getCurrentDirectory()) - elif answer == "CHMOD644": - os.system("chmod 644 " + self["filelist"].getCurrentDirectory() + self["filelist"].getFilename()) - elif answer == "CHMOD755": - os.system("chmod 755 " + self["filelist"].getCurrentDirectory() + self["filelist"].getFilename()) - elif answer == "BLURAY": - if self.playfile: - fileRef = eServiceReference("3:0:0:0:0:0:0:0:0:0:" + self.playfile) - self.session.open(MoviePlayer, fileRef) - - def up(self): - self["filelist"].up() - self.updateLocationInfo() - - def down(self): - self["filelist"].down() - self.updateLocationInfo() - - def left(self): - self["filelist"].pageUp() - self.updateLocationInfo() - - def right(self): - self["filelist"].pageDown() - self.updateLocationInfo() - - def Humanizer(self, size): - if (size < 1024): - humansize = str(size) + " B" - elif (size < 1048576): - humansize = str(size / 1024) + " KB" - else: - humansize = str(size / 1048576) + " MB" - return humansize - - def Info(self): - if self["filelist"].canDescent(): - if self["filelist"].getSelectionIndex() != 0: - curSelDir = self["filelist"].getSelection()[0] - try: - dir_stats = os.stat(curSelDir) - dir_infos = _("size ") + str(self.Humanizer(dir_stats.st_size)) + " " - dir_infos = dir_infos + _("last-mod ") + strftime("%d.%m.%Y %H:%M:%S", localtime(dir_stats.st_mtime)) + " " - dir_infos = dir_infos + _("mode ") + str(dir_stats.st_mode) - except: - dir_infos = _("read error") - self.setTitle(_(dir_infos)) - else: - dei = self.session.open(MessageBox, _("Box: ") + self.MyBox + "\n\n" + ScanSysem_str(), MessageBox.TYPE_INFO) - dei.setTitle(_("Dream-Explorer")) - else: - curSelFile = self["filelist"].getCurrentDirectory() + self["filelist"].getFilename() - try: - file_stats = os.stat(curSelFile) - file_infos = _("size ") + str(self.Humanizer(file_stats.st_size)) + " " - file_infos = file_infos + _("last-mod ") + strftime("%d.%m.%Y %H:%M:%S", localtime(file_stats.st_mtime)) + " " - file_infos = file_infos + _("mode ") + str(file_stats.st_mode) - except: - file_infos = _("read error") - self.setTitle(_(file_infos)) - if curSelFile.endswith(".ts"): - serviceref = eServiceReference("1:0:0:0:0:0:0:0:0:0:" + curSelFile) - serviceHandler = eServiceCenter.getInstance() - info = serviceHandler.info(serviceref) - evt = info.getEvent(serviceref) - if evt: - self.session.open(EventViewSimple, evt, ServiceReference(serviceref)) - - def setBookmark(self, answer): - answer = answer and answer[1] - try: - if answer[0] == "/": - self["filelist"].changeDir(answer[:-1]) - self.updateLocationInfo() - except: - pass - - def goToBookmark(self): - bml = [(_("Cancel"), "BACK")] - for onemark in self.booklines: - bml.append((_(onemark), onemark)) - dei = self.session.openWithCallback(self.setBookmark, ChoiceBox, title=_("My Bookmarks"), list=bml) - dei.setTitle(_("Dream-Explorer")) - - def ExecDelete(self): - if self.MediaFilter: - dei = self.session.open(MessageBox, _('Turn off the media-filter first.'), MessageBox.TYPE_INFO) - dei.setTitle(_("Dream-Explorer...")) - return - if not (self["filelist"].canDescent()): - DELfilename = self["filelist"].getCurrentDirectory() + self["filelist"].getFilename() - dei = self.session.openWithCallback(self.callbackExecDelete, MessageBox, _("Do you realy want to DELETE:\n") + DELfilename, MessageBox.TYPE_YESNO) - dei.setTitle(_("Dream-Explorer - DELETE file...")) - elif (self["filelist"].getSelectionIndex() != 0) and (self["filelist"].canDescent()): - DELDIR = self["filelist"].getSelection()[0] - dei = self.session.openWithCallback(self.callbackDelDir, MessageBox, _("Do you realy want to DELETE:\n") + DELDIR + _('\n\nYou do it at your own risk!'), MessageBox.TYPE_YESNO) - dei.setTitle(_("Dream-Explorer - DELETE DIRECTORY...")) - - def callbackExecDelete(self, answer): - if answer is True: - DELfilename = self["filelist"].getCurrentDirectory() + self["filelist"].getFilename() - order = 'rm -f \"' + DELfilename + '\"' - try: - os.system(order) - self["filelist"].refresh() - except: - dei = self.session.open(MessageBox, _("%s \nFAILED!") % order, MessageBox.TYPE_ERROR) - dei.setTitle(_("Dream-Explorer")) - self["filelist"].refresh() - - def callbackDelDir(self, answer): - if answer is True: - DELDIR = self["filelist"].getSelection()[0] - order = 'rm -r \"' + DELDIR + '\"' - try: - os.system(order) - self["filelist"].refresh() - except: - dei = self.session.open(MessageBox, _("%s \nFAILED!") % order, MessageBox.TYPE_ERROR) - dei.setTitle(_("Dream-Explorer")) - self["filelist"].refresh() - - def ExecRename(self): - if self.MediaFilter: - dei = self.session.open(MessageBox, _('Turn off the media-filter first.'), MessageBox.TYPE_INFO) - dei.setTitle(_("Dream-Explorer...")) - return - if not (self["filelist"].canDescent()): - RENfilename = self["filelist"].getFilename() - self.session.openWithCallback(self.callbackExecRename, vInputBox, title=_("old: ") + RENfilename, windowTitle=_("Rename file..."), text=RENfilename) - elif (self["filelist"].getSelectionIndex() != 0) and (self["filelist"].canDescent()): - RENDIR = self["filelist"].getSelection()[0] - self.session.openWithCallback(self.callbackRenDir, vInputBox, title=_("old: ") + RENDIR, windowTitle=_("Rename directory..."), text=RENDIR) - - def callbackExecRename(self, answer): - if answer is not None: - source = self["filelist"].getCurrentDirectory() + self["filelist"].getFilename() - dest = self["filelist"].getCurrentDirectory() + answer - try: - os.rename(source, dest) - self["filelist"].refresh() - except: - dei = self.session.open(MessageBox, _("Rename: %s \nFAILED!") % answer, MessageBox.TYPE_ERROR) - dei.setTitle(_("Dream-Explorer")) - self["filelist"].refresh() - - def callbackRenDir(self, answer): - if answer is not None: - source = self["filelist"].getSelection()[0] - dest = answer - try: - os.rename(source, dest) - self["filelist"].refresh() - except: - dei = self.session.open(MessageBox, _("Rename: %s \nFAILED!") % answer, MessageBox.TYPE_ERROR) - dei.setTitle(_("Dream-Explorer")) - self["filelist"].refresh() - - def callbackNewFile(self, answer): - if answer is None: - return - dest = self["filelist"].getCurrentDirectory() - if (" " in answer) or (" " in dest) or (answer == ""): - dei = self.session.open(MessageBox, _("File name error !"), MessageBox.TYPE_ERROR) - dei.setTitle(_("Dream-Explorer")) - return - else: - order = 'touch ' + dest + answer - try: - if not fileExists(dest + answer): - os.system(order) - self["filelist"].refresh() - except: - dei = self.session.open(MessageBox, _("%s \nFAILED!") % order, MessageBox.TYPE_ERROR) - dei.setTitle(_("Dream-Explorer")) - self["filelist"].refresh() - - def callbackNewDir(self, answer): - if answer is None: - return - dest = self["filelist"].getCurrentDirectory() - if (" " in answer) or (" " in dest) or (answer == ""): - dei = self.session.open(MessageBox, _("Directory name error !"), MessageBox.TYPE_ERROR) - dei.setTitle(_("Dream-Explorer")) - return - else: - order = dest + answer - try: - if not pathExists(dest + answer): - os.mkdir(order) - self["filelist"].refresh() - except: - dei = self.session.open(MessageBox, _("%s \nFAILED!") % order, MessageBox.TYPE_ERROR) - dei.setTitle(_("Dream-Explorer")) - self["filelist"].refresh() - - def go2CPmaniger(self): - if self.MediaFilter: - dei = self.session.open(MessageBox, _('Turn off the media-filter first.'), MessageBox.TYPE_INFO) - dei.setTitle(_("Dream-Explorer...")) - return - if not (self["filelist"].canDescent()): - source = self["filelist"].getCurrentDirectory() + self["filelist"].getFilename() - self.session.openWithCallback(self.callbackCPmaniger, CPmaniger, source) - elif (self["filelist"].getSelectionIndex() != 0) and (self["filelist"].canDescent()): #NEW - source = self["filelist"].getSelection()[0] - self.session.openWithCallback(self.callbackCPmaniger, CPmaniger, source) - - def callbackCPmaniger(self, answer): - self["filelist"].refresh() - - def callbackSetStartDir(self, answerSD): - if answerSD is True: - config.plugins.DreamExplorer.startDir.value = self["filelist"].getSelection()[0] - config.plugins.DreamExplorer.startDir.save() - - def sortName(self): - list = self["filelist"].sortName() - try: - if self.MediaFilter: - self.setTitle(_("[sort by Name] ") + self["filelist"].getCurrentDirectory()) - else: - self.setTitle(_("[sort by Name] ") + self["filelist"].getCurrentDirectory()) - except: - self.setTitle(_("Dream-Explorer")) - - def sortDate(self): - list = self["filelist"].sortDate() - try: - if self.MediaFilter: - self.setTitle(_("[sort by Date] ") + self["filelist"].getCurrentDirectory()) - else: - self.setTitle(_("[sort by Date] ") + self["filelist"].getCurrentDirectory()) - except: - self.setTitle(_("Dream-Explorer")) - - def searchMusic(self): - slist = [] - foundIndex = 0 - index = 0 - files = os.listdir(self["filelist"].getCurrentDirectory()) - files.sort() - for name in files: - testname = name.lower() - if testname.endswith(".mp3") or name.endswith(".m4a") or name.endswith(".ogg") or name.endswith(".flac"): - slist.append((Item(text=name, filename=os.path.join(self["filelist"].getCurrentDirectory(), name)),)) - if self["filelist"].getFilename() == name: - foundIndex = index - index = index + 1 - return slist, foundIndex - - def explExit(self): - self.session.nav.playService(self.altservice) - try: - if self.MediaFilter: - config.plugins.DreamExplorer.MediaFilter.value = "on" - else: - config.plugins.DreamExplorer.MediaFilter.value = "off" - config.plugins.DreamExplorer.MediaFilter.save() - except: - pass - self.close() - - def CloseAndPlay(self): - try: - if self.MediaFilter: - config.plugins.DreamExplorer.MediaFilter.value = "on" - else: - config.plugins.DreamExplorer.MediaFilter.value = "off" - config.plugins.DreamExplorer.MediaFilter.save() - except: - pass - self.close() - -######## DREAM-EXPLORER END ####################### - - + if HDSkn: + if (getDesktop(0).size().width()) > 1030: + skin = """ + + + + + + + + + + + + + + + """ + else: + skin = """ + + + + + + + + + + + + + + + + """ + else: + skin = """ + + + + + + + + + + + + + + """ + + def __init__(self, session, args=None): + self.skin = DreamExplorerII.skin + Screen.__init__(self, session) + self.setTitle(_("Dream-Explorer")) + self.sesion = session + self.altservice = self.session.nav.getCurrentlyPlayingServiceOrGroup() + self.MyBox = HardwareInfo().get_device_name() + self.commando = ["ls"] + self.selectedDir = "/tmp/" + self.booklines = [] + self.MediaPattern = r"^.*\.(ts|m2ts|mp3|wav|ogg|jpg|jpeg|jpe|png|bmp|mpg|mpeg|mkv|mp4|mov|divx|wmv|avi|mp2|m4a|flac|ifo|vob|iso|sh|flv|3gp|mod)" + if pathExists(config.plugins.DreamExplorer.startDir.value): + StartMeOn = config.plugins.DreamExplorer.startDir.value + else: + StartMeOn = None + if (config.plugins.DreamExplorer.MediaFilter.value == "off"): + self.MediaFilter = False + self["filelist"] = myFileList(StartMeOn, showDirectories=True, showFiles=True, matchingPattern=None, useServiceRef=False) + else: + self.MediaFilter = True + self["filelist"] = myFileList(StartMeOn, showDirectories=True, showFiles=True, matchingPattern=self.MediaPattern, useServiceRef=False) + self["TEMPfl"] = FileList("/", matchingPattern=r"(?i)^.*\.(jpeg|jpg|jpe|png|bmp)") + self["key_red"] = StaticText(_("Delete")) + self["key_green"] = StaticText(_("Rename")) + self["key_yellow"] = StaticText(_("Move/Copy")) + self["key_blue"] = StaticText(_("Bookmarks")) + self["actions"] = ActionMap(["WizardActions", "DirectionActions", "ColorActions", "MenuActions", "EPGSelectActions", "InfobarActions"], + { + "ok": self.ok, + "back": self.explExit, + "green": self.ExecRename, + "red": self.ExecDelete, + "blue": self.goToBookmark, + "yellow": self.go2CPmaniger, + "menu": self.explContextMenu, + "info": self.Info, + "left": self.left, + "right": self.right, + "up": self.up, + "down": self.down, + "nextBouquet": self.sortName, + "prevBouquet": self.sortDate, + "showMovies": self.CloseAndPlay + }, -1) + self.onLayoutFinish.append(self.byLayoutEnd) + + def ok(self): + if self["filelist"].canDescent(): + self["filelist"].descent() + self.updateLocationInfo() + else: + filename = self["filelist"].getCurrentDirectory() + self["filelist"].getFilename() + testFileName = self["filelist"].getFilename() + testFileName = testFileName.lower() + if filename is not None: + if testFileName.endswith(".ts"): + fileRef = eServiceReference("1:0:0:0:0:0:0:0:0:0:" + filename) + self.session.open(MoviePlayer, fileRef) + elif (testFileName.endswith(".mpg")) or (testFileName.endswith(".mpeg")) or (testFileName.endswith(".mkv")) or (testFileName.endswith(".m2ts")) or (testFileName.endswith(".vob")) or (testFileName.endswith(".mod")): + if testFileName.endswith(".m2ts"): + fileRef = eServiceReference("3:0:0:0:0:0:0:0:0:0:" + filename) + else: + fileRef = eServiceReference("4097:0:0:0:0:0:0:0:0:0:" + filename) + self.session.open(MoviePlayer, fileRef) + elif (testFileName.endswith(".avi")) or (testFileName.endswith(".mp4")) or (testFileName.endswith(".divx")) or (testFileName.endswith(".wmv")) or (testFileName.endswith(".mov")) or (testFileName.endswith(".flv")) or (testFileName.endswith(".3gp")): + if not (self.MyBox == "dm7025"): + fileRef = eServiceReference("4097:0:0:0:0:0:0:0:0:0:" + filename) + self.session.open(MoviePlayer, fileRef) + elif (testFileName.endswith(".mp3")) or (testFileName.endswith(".wav")) or (testFileName.endswith(".ogg")) or (testFileName.endswith(".m4a")) or (testFileName.endswith(".mp2")) or (testFileName.endswith(".flac")): + if (self.MyBox == "dm7025") and ((testFileName.endswith(".m4a")) or (testFileName.endswith(".mp2")) or (testFileName.endswith(".flac"))): + return + if MMPavaiable: + SongList, SongIndex = self.searchMusic() + try: + self.session.open(MerlinMusicPlayerScreen, SongList, SongIndex, False, self.altservice, None) + except: + self.session.open(MessageBox, _("Incompatible MerlinMusicPlayer version!"), MessageBox.TYPE_INFO) + else: + fileRef = eServiceReference("4097:0:0:0:0:0:0:0:0:0:" + filename) + m_dir = self["filelist"].getCurrentDirectory() + self.session.open(MusicExplorer, fileRef, m_dir, testFileName) + elif (testFileName.endswith(".jpg")) or (testFileName.endswith(".jpeg")) or (testFileName.endswith(".jpe")) or (testFileName.endswith(".png")) or (testFileName.endswith(".bmp")): + if self["filelist"].getSelectionIndex() != 0: + Pdir = self["filelist"].getCurrentDirectory() + self.session.open(PictureExplorerII, filename, Pdir) + elif (testFileName.endswith(".mvi")): + self.session.nav.stopService() + self.session.open(MviExplorer, filename) + elif (testFileName == "video_ts.ifo"): + if DVDPlayerAviable: + if (self["filelist"].getCurrentDirectory()).lower().endswith("video_ts/"): + self.session.open(DVDPlayer, dvd_filelist=[self["filelist"].getCurrentDirectory()]) + elif testFileName.endswith(".iso"): + if DVDPlayerAviable: + self.session.open(DVDPlayer, dvd_filelist=[filename]) + elif testFileName.endswith(".bootlogo.tar.gz"): + self.commando = ["mount -rw /boot -o remount", "sleep 3", "tar -xzvf " + filename + " -C /", "mount -ro /boot -o remount"] + askList = [(_("Cancel"), "NO"), (_("Install new bootlogo..."), "YES2ALL")] + dei = self.session.openWithCallback(self.SysExecution, ChoiceBox, title=_("Bootlogo-package:\\n") + filename, list=askList) + dei.setTitle(_("Dream-Explorer : Install...")) + elif testFileName.endswith(".tar.gz"): + self.commando = ["tar -xzvf " + filename + " -C /"] + askList = [(_("Cancel"), "NO"), (_("Install this package"), "YES")] + dei = self.session.openWithCallback(self.SysExecution, ChoiceBox, title=_("GZ-package:\\n") + filename, list=askList) + dei.setTitle(_("Dream-Explorer : Install...")) + elif testFileName.endswith(".tar.bz2"): + self.commando = ["tar -xjvf " + filename + " -C /"] + askList = [(_("Cancel"), "NO"), (_("Install this package"), "YES")] + dei = self.session.openWithCallback(self.SysExecution, ChoiceBox, title=_("BZ2-package:\\n") + filename, list=askList) + dei.setTitle(_("Dream-Explorer : Install...")) + elif testFileName.endswith(".ipk"): + if fileExists("/usr/bin/opkg"): + self.commando = ["opkg install " + filename] + else: + self.commando = ["ipkg install " + filename] + askList = [(_("Cancel"), "NO"), (_("Install this package"), "YES")] + dei = self.session.openWithCallback(self.SysExecution, ChoiceBox, title=_("OPKG-package:\\n") + filename, list=askList) + dei.setTitle(_("Dream-Explorer : Install...")) + elif testFileName.endswith(".pyc") or testFileName.endswith(".pyo"): + self.commando = ["/usr/lib/enigma2/python/Plugins/Extensions/DreamExplorer/pyc2xml " + filename] + askList = [(_("Cancel"), "NO"), (_("Disassemble to bytecode..."), "YES")] + dei = self.session.openWithCallback(self.SysExecution, ChoiceBox, title=_("Pyc-Script:\\n") + filename, list=askList) + dei.setTitle(_("Dream-Explorer : Disassemble...")) + elif testFileName.endswith(".sh") or (self["filelist"].getCurrentDirectory()).lower().endswith("init.d/"): + self.commando = [filename] + askList = [(_("Cancel"), "NO"), (_("View this shell-script"), "VIEW"), (_("Start execution"), "YES")] + self.session.openWithCallback(self.SysExecution, ChoiceBox, title=_("Do you want to execute?\\n") + filename, list=askList) + else: + try: + xfile = os_stat(filename) + except: + xfile = None + # old (xfile.st_size < 61440) + if xfile is not None and (xfile.st_size < 250000): + self.session.open(vEditor, filename) + + def byLayoutEnd(self): + self.updateLocationInfo() + if fileExists("/etc/myBookmarks"): + try: + booklist = open("/etc/myBookmarks", "r") + except: + dei = self.session.open(MessageBox, _("Error by reading bookmarks !!!"), MessageBox.TYPE_ERROR) + dei.setTitle(_("Dream-Explorer")) + if booklist is not None: + for oneline in booklist: + self.booklines.append(oneline) + booklist.close() + + def updateLocationInfo(self): + try: + if self.MediaFilter: + self.setTitle(_("[Media files] ") + self["filelist"].getCurrentDirectory()) + else: + self.setTitle(_("[All files] ") + self["filelist"].getCurrentDirectory()) + except: + self.setTitle(_("Dream-Explorer")) + + def explContextMenu(self): + self.playfile = '' + if self.MediaFilter: + mftext = _("Disable") + else: + mftext = _("Enable") + if self["filelist"].canDescent(): + if self["filelist"].getSelectionIndex() != 0: + self.selectedDir = self["filelist"].getSelection()[0] + if self.selectedDir + "\n" in self.booklines: + BMtext = _("Remove directory from Bookmarks") + BMstring = "DELLINK" + else: + BMtext = _("Add directory to Bookmarks") + BMstring = "ADDLINK" + contextDirList = [ + (_("Cancel"), "NO"), + (mftext + _(" Media-filter"), "FILTER"), + (_("Sort by name (bouquet+)"), "SORTNAME"), + (_("Sort by date (bouquet-)"), "SORTDATE"), + (_(BMtext), BMstring), + (_("Create new file"), "NEWFILE"), + (_("Create new directory"), "NEWDIR"), + (_("Set start directory"), "SETSTARTDIR"), + (_("About"), "HELP") + ] + last_dir = self["filelist"].getFilename() + folder = last_dir + 'STREAM/' + if last_dir.endswith("/BDMV/") and os_path.isdir(folder): + sizelist = [] + try: + for name in os_listdir(folder): + if name.endswith(".m2ts"): + try: + st = os_stat(folder + name) + size = st.st_size + if size > 0: + sizelist.append((folder + name, size)) + except: + pass + if sizelist: + sizelist.sort(key=lambda x: x[1]) + except: + pass + Len = len(sizelist) + if Len > 0: + index = Len - 1 + self.playfile = sizelist[index][0] + contextDirList.insert(1, (_("Auto play blu-ray file"), "BLURAY")) + dei = self.session.openWithCallback(self.SysExecution, ChoiceBox, title=_("Options:\n"), list=contextDirList) + dei.setTitle(_("Dream-Explorer")) + else: + contextFileList = [ + (_("Cancel"), "NO"), + (mftext + _(" Media-filter"), "FILTER"), + (_("Sort by name (bouquet+)"), "SORTNAME"), + (_("Sort by date (bouquet-)"), "SORTDATE"), + (_("Pack my bootlogo"), "PACKLOGOS"), + (_("About"), "HELP") + ] + dei = self.session.openWithCallback(self.SysExecution, ChoiceBox, title=_("Options:\n"), list=contextFileList) + dei.setTitle(_("Dream-Explorer")) + else: + contextFileList = [ + (_("Cancel"), "NO"), + (mftext + _(" Media-filter"), "FILTER"), + (_("Sort by name (bouquet+)"), "SORTNAME"), + (_("Sort by date (bouquet-)"), "SORTDATE"), + (_("Preview all pictures"), "PLAYDIRPICTURE"), + (_("Create new file"), "NEWFILE"), + (_("Create new directory"), "NEWDIR"), + (_("Create softlink..."), "SOFTLINK"), + (_("Set archive mode (644)"), "CHMOD644"), + (_("Set executable mode (755)"), "CHMOD755"), + (_("About"), "HELP") + ] + dei = self.session.openWithCallback(self.SysExecution, ChoiceBox, title=_("Options:\n"), list=contextFileList) + dei.setTitle(_("Dream-Explorer")) + + def SysExecution(self, answer): + answer = answer and answer[1] + if answer == "YES": + self.session.open(Console, cmdlist=[self.commando[0]]) + elif answer == "YES2ALL": + self.session.open(Console, cmdlist=self.commando) + elif answer == "PACKLOGOS": + self.session.open(Console, cmdlist=["cd /tmp/", "tar -czf /tmp/dreambox.bootlogo.tar.gz /usr/share/bootlogo.mvi /usr/share/bootlogo_wait.mvi /usr/share/backdrop.mvi /boot/bootlogo.jpg"]) + elif answer == "VIEW": + try: + yfile = os_stat(self.commando[0]) + except: + yfile = None + # old yfile.st_size < 61440) + if yfile is not None and (yfile.st_size < 250000): + self.session.open(vEditor, self.commando[0]) + elif answer == "PLAYDIRPICTURE": + if PicPlayerAviable: + self["TEMPfl"].changeDir(self["filelist"].getCurrentDirectory()) + self.session.open(Pic_Thumb, self["TEMPfl"].getFileList(), 0, self["filelist"].getCurrentDirectory()) + else: + dei = self.session.open(MessageBox, _("Picture-Player not available!"), MessageBox.TYPE_ERROR) + dei.setTitle(_("Dream-Explorer")) + elif answer == "ADDLINK": + try: + newbooklist = open("/etc/myBookmarks", "w") + except: + dei = self.session.open(MessageBox, _("Error by writing bookmarks !!!"), MessageBox.TYPE_ERROR) + dei.setTitle(_("Dream-Explorer")) + if newbooklist is not None: + self.booklines.append(self.selectedDir + "\n") + for one_line in self.booklines: + newbooklist.write(one_line) + newbooklist.close() + elif answer == "DELLINK": + temp_book = [] + for bidx in range(len(self.booklines) - 1): + if not (self.selectedDir in self.booklines[bidx]): + temp_book.append(self.booklines[bidx]) + self.booklines = [] + self.booklines = temp_book + try: + newbooklist = open("/etc/myBookmarks", "w") + except: + dei = self.session.open(MessageBox, _("Error by writing bookmarks !!!"), MessageBox.TYPE_ERROR) + dei.setTitle(_("Dream-Explorer")) + if newbooklist is not None: + for one_line in self.booklines: + newbooklist.write(one_line) + newbooklist.close() + elif answer == "FILTER": + if self.MediaFilter: + self.MediaFilter = False + config.plugins.DreamExplorer.MediaFilter.value = "off" + config.plugins.DreamExplorer.MediaFilter.save() + self["filelist"].matchingPattern = None + self["filelist"].refresh() + self.updateLocationInfo() + else: + self.MediaFilter = True + config.plugins.DreamExplorer.MediaFilter.value = "on" + config.plugins.DreamExplorer.MediaFilter.save() + self["filelist"].matchingPattern = self.MediaPattern + self["filelist"].refresh() + self.updateLocationInfo() + elif answer == "NEWFILE": + self.session.openWithCallback(self.callbackNewFile, vInputBox, title=_(self["filelist"].getCurrentDirectory()), windowTitle=_("Create new file in..."), text="name") + elif answer == "NEWDIR": + self.session.openWithCallback(self.callbackNewDir, vInputBox, title=_(self["filelist"].getCurrentDirectory()), windowTitle=_("Create new directory in..."), text="name") + elif answer == "SETSTARTDIR": + newStartDir = self["filelist"].getSelection()[0] + dei = self.session.openWithCallback(self.callbackSetStartDir, MessageBox, _("Do you want to set\n" + newStartDir + "\nas start directory?"), MessageBox.TYPE_YESNO) + dei.setTitle(_("Dream-Explorer...")) + elif answer == "SORTNAME": + list = self.sortName() + elif answer == "SORTDATE": + list = self.sortDate() + elif answer == "HELP": + hilfe = _("Dreambox-Explorer\ncoded 2010 by Vali\n\nSupport & Help on\nwww.dreambox-tools.info") + dei = self.session.open(MessageBox, _(hilfe), MessageBox.TYPE_INFO) + dei.setTitle(_("Info...")) + elif answer == "SOFTLINK": + if not (self.MediaFilter): + self.session.openWithCallback(self.callbackCPmaniger, SoftLinkScreen, self["filelist"].getCurrentDirectory()) + elif answer == "CHMOD644": + os_system("chmod 644 " + self["filelist"].getCurrentDirectory() + self["filelist"].getFilename()) + elif answer == "CHMOD755": + os_system("chmod 755 " + self["filelist"].getCurrentDirectory() + self["filelist"].getFilename()) + elif answer == "BLURAY": + if self.playfile: + fileRef = eServiceReference("3:0:0:0:0:0:0:0:0:0:" + self.playfile) + self.session.open(MoviePlayer, fileRef) + + def up(self): + self["filelist"].up() + self.updateLocationInfo() + + def down(self): + self["filelist"].down() + self.updateLocationInfo() + + def left(self): + self["filelist"].pageUp() + self.updateLocationInfo() + + def right(self): + self["filelist"].pageDown() + self.updateLocationInfo() + + def Humanizer(self, size): + if (size < 1024): + humansize = str(size) + " B" + elif (size < 1048576): + humansize = str(size / 1024) + " KB" + else: + humansize = str(size / 1048576) + " MB" + return humansize + + def Info(self): + if self["filelist"].canDescent(): + if self["filelist"].getSelectionIndex() != 0: + curSelDir = self["filelist"].getSelection()[0] + try: + dir_stats = os_stat(curSelDir) + dir_infos = _("size ") + str(self.Humanizer(dir_stats.st_size)) + " " + dir_infos = dir_infos + _("last-mod ") + time_strftime("%d.%m.%Y %H:%M:%S", time_localtime(dir_stats.st_mtime)) + " " + dir_infos = dir_infos + _("mode ") + str(dir_stats.st_mode) + except: + dir_infos = _("read error") + self.setTitle(_(dir_infos)) + else: + dei = self.session.open(MessageBox, _("Box: ") + self.MyBox + "\n\n" + ScanSysem_str(), MessageBox.TYPE_INFO) + dei.setTitle(_("Dream-Explorer")) + else: + curSelFile = self["filelist"].getCurrentDirectory() + self["filelist"].getFilename() + try: + file_stats = os_stat(curSelFile) + file_infos = _("size ") + str(self.Humanizer(file_stats.st_size)) + " " + file_infos = file_infos + _("last-mod ") + time_strftime("%d.%m.%Y %H:%M:%S", time_localtime(file_stats.st_mtime)) + " " + file_infos = file_infos + _("mode ") + str(file_stats.st_mode) + except: + file_infos = _("read error") + self.setTitle(_(file_infos)) + if curSelFile.endswith(".ts"): + serviceref = eServiceReference("1:0:0:0:0:0:0:0:0:0:" + curSelFile) + serviceHandler = eServiceCenter.getInstance() + info = serviceHandler.info(serviceref) + evt = info.getEvent(serviceref) + if evt: + self.session.open(EventViewSimple, evt, ServiceReference(serviceref)) + + def setBookmark(self, answer): + answer = answer and answer[1] + try: + if answer[0] == "/": + self["filelist"].changeDir(answer[:-1]) + self.updateLocationInfo() + except: + pass + + def goToBookmark(self): + bml = [(_("Cancel"), "BACK")] + for onemark in self.booklines: + bml.append((_(onemark), onemark)) + dei = self.session.openWithCallback(self.setBookmark, ChoiceBox, title=_("My Bookmarks"), list=bml) + dei.setTitle(_("Dream-Explorer")) + + def ExecDelete(self): + if self.MediaFilter: + dei = self.session.open(MessageBox, _('Turn off the media-filter first.'), MessageBox.TYPE_INFO) + dei.setTitle(_("Dream-Explorer...")) + return + if not (self["filelist"].canDescent()): + DELfilename = self["filelist"].getCurrentDirectory() + self["filelist"].getFilename() + dei = self.session.openWithCallback(self.callbackExecDelete, MessageBox, _("Do you realy want to DELETE:\n") + DELfilename, MessageBox.TYPE_YESNO) + dei.setTitle(_("Dream-Explorer - DELETE file...")) + elif (self["filelist"].getSelectionIndex() != 0) and (self["filelist"].canDescent()): + DELDIR = self["filelist"].getSelection()[0] + dei = self.session.openWithCallback(self.callbackDelDir, MessageBox, _("Do you realy want to DELETE:\n") + DELDIR + _('\n\nYou do it at your own risk!'), MessageBox.TYPE_YESNO) + dei.setTitle(_("Dream-Explorer - DELETE DIRECTORY...")) + + def callbackExecDelete(self, answer): + if answer is True: + DELfilename = self["filelist"].getCurrentDirectory() + self["filelist"].getFilename() + order = 'rm -f \"' + DELfilename + '\"' + try: + os_system(order) + self["filelist"].refresh() + except: + dei = self.session.open(MessageBox, _("%s \nFAILED!") % order, MessageBox.TYPE_ERROR) + dei.setTitle(_("Dream-Explorer")) + self["filelist"].refresh() + + def callbackDelDir(self, answer): + if answer is True: + DELDIR = self["filelist"].getSelection()[0] + order = 'rm -r \"' + DELDIR + '\"' + try: + os_system(order) + self["filelist"].refresh() + except: + dei = self.session.open(MessageBox, _("%s \nFAILED!") % order, MessageBox.TYPE_ERROR) + dei.setTitle(_("Dream-Explorer")) + self["filelist"].refresh() + + def ExecRename(self): + if self.MediaFilter: + dei = self.session.open(MessageBox, _('Turn off the media-filter first.'), MessageBox.TYPE_INFO) + dei.setTitle(_("Dream-Explorer...")) + return + if not (self["filelist"].canDescent()): + RENfilename = self["filelist"].getFilename() + self.session.openWithCallback(self.callbackExecRename, vInputBox, title=_("old: ") + RENfilename, windowTitle=_("Rename file..."), text=RENfilename) + elif (self["filelist"].getSelectionIndex() != 0) and (self["filelist"].canDescent()): + RENDIR = self["filelist"].getSelection()[0] + self.session.openWithCallback(self.callbackRenDir, vInputBox, title=_("old: ") + RENDIR, windowTitle=_("Rename directory..."), text=RENDIR) + + def callbackExecRename(self, answer): + if answer is not None: + source = self["filelist"].getCurrentDirectory() + self["filelist"].getFilename() + dest = self["filelist"].getCurrentDirectory() + answer + try: + os_rename(source, dest) + self["filelist"].refresh() + except: + dei = self.session.open(MessageBox, _("Rename: %s \nFAILED!") % answer, MessageBox.TYPE_ERROR) + dei.setTitle(_("Dream-Explorer")) + self["filelist"].refresh() + + def callbackRenDir(self, answer): + if answer is not None: + source = self["filelist"].getSelection()[0] + dest = answer + try: + os_rename(source, dest) + self["filelist"].refresh() + except: + dei = self.session.open(MessageBox, _("Rename: %s \nFAILED!") % answer, MessageBox.TYPE_ERROR) + dei.setTitle(_("Dream-Explorer")) + self["filelist"].refresh() + + def callbackNewFile(self, answer): + if answer is None: + return + dest = self["filelist"].getCurrentDirectory() + if (" " in answer) or (" " in dest) or (answer == ""): + dei = self.session.open(MessageBox, _("File name error !"), MessageBox.TYPE_ERROR) + dei.setTitle(_("Dream-Explorer")) + return + else: + order = 'touch ' + dest + answer + try: + if not fileExists(dest + answer): + os_system(order) + self["filelist"].refresh() + except: + dei = self.session.open(MessageBox, _("%s \nFAILED!") % order, MessageBox.TYPE_ERROR) + dei.setTitle(_("Dream-Explorer")) + self["filelist"].refresh() + + def callbackNewDir(self, answer): + if answer is None: + return + dest = self["filelist"].getCurrentDirectory() + if (" " in answer) or (" " in dest) or (answer == ""): + dei = self.session.open(MessageBox, _("Directory name error !"), MessageBox.TYPE_ERROR) + dei.setTitle(_("Dream-Explorer")) + return + else: + order = dest + answer + try: + if not pathExists(dest + answer): + os_mkdir(order) + self["filelist"].refresh() + except: + dei = self.session.open(MessageBox, _("%s \nFAILED!") % order, MessageBox.TYPE_ERROR) + dei.setTitle(_("Dream-Explorer")) + self["filelist"].refresh() + + def go2CPmaniger(self): + if self.MediaFilter: + dei = self.session.open(MessageBox, _('Turn off the media-filter first.'), MessageBox.TYPE_INFO) + dei.setTitle(_("Dream-Explorer...")) + return + if not (self["filelist"].canDescent()): + source = self["filelist"].getCurrentDirectory() + self["filelist"].getFilename() + self.session.openWithCallback(self.callbackCPmaniger, CPmaniger, source) + elif (self["filelist"].getSelectionIndex() != 0) and (self["filelist"].canDescent()): # NEW + source = self["filelist"].getSelection()[0] + self.session.openWithCallback(self.callbackCPmaniger, CPmaniger, source) + + def callbackCPmaniger(self, answer): + self["filelist"].refresh() + + def callbackSetStartDir(self, answerSD): + if answerSD is True: + config.plugins.DreamExplorer.startDir.value = self["filelist"].getSelection()[0] + config.plugins.DreamExplorer.startDir.save() + + def sortName(self): + list = self["filelist"].sortName() + try: + if self.MediaFilter: + self.setTitle(_("[sort by Name] ") + self["filelist"].getCurrentDirectory()) + else: + self.setTitle(_("[sort by Name] ") + self["filelist"].getCurrentDirectory()) + except: + self.setTitle(_("Dream-Explorer")) + + def sortDate(self): + list = self["filelist"].sortDate() + try: + if self.MediaFilter: + self.setTitle(_("[sort by Date] ") + self["filelist"].getCurrentDirectory()) + else: + self.setTitle(_("[sort by Date] ") + self["filelist"].getCurrentDirectory()) + except: + self.setTitle(_("Dream-Explorer")) + + def searchMusic(self): + slist = [] + foundIndex = 0 + index = 0 + files = os_listdir(self["filelist"].getCurrentDirectory()) + files.sort() + for name in files: + testname = name.lower() + if testname.endswith(".mp3") or name.endswith(".m4a") or name.endswith(".ogg") or name.endswith(".flac"): + slist.append((Item(text=name, filename=os_path.join(self["filelist"].getCurrentDirectory(), name)),)) + if self["filelist"].getFilename() == name: + foundIndex = index + index = index + 1 + return slist, foundIndex + + def explExit(self): + self.session.nav.playService(self.altservice) + try: + if self.MediaFilter: + config.plugins.DreamExplorer.MediaFilter.value = "on" + else: + config.plugins.DreamExplorer.MediaFilter.value = "off" + config.plugins.DreamExplorer.MediaFilter.save() + except: + pass + self.close() + + def CloseAndPlay(self): + try: + if self.MediaFilter: + config.plugins.DreamExplorer.MediaFilter.value = "on" + else: + config.plugins.DreamExplorer.MediaFilter.value = "off" + config.plugins.DreamExplorer.MediaFilter.save() + except: + pass + self.close() + + +# ####### DREAM-EXPLORER END ####################### class vEditor(Screen): - global HDSkn - if HDSkn: - if (getDesktop(0).size().width()) > 1030: - skin = """ - - - """ - else: - skin = """ - - - """ - else: - skin = """ - - - """ - - def __init__(self, session, file): - self.skin = vEditor.skin - Screen.__init__(self, session) - self.setTitle(_("File-Explorer")) - self.session = session - self.file_name = file - self.list = [] - self["filedata"] = MenuList(self.list) - self["actions"] = ActionMap(["WizardActions"], - { - "ok": self.editLine, - "back": self.exitEditor - }, -1) - self.selLine = None - self.oldLine = None - self.isChanged = False - self.GetFileData(file) - - def exitEditor(self): - if self.isChanged: - warningtext = _("\nhave been CHANGED! Do you want to save it?\n\nWARNING!") - warningtext = warningtext + _("\n\nThe Editor-Funktions are beta (not full tested) !!!") - warningtext = warningtext + _("\nThe author are NOT RESPONSIBLE\nfor DATA LOST OR DISORDERS !!!") - dei = self.session.openWithCallback(self.SaveFile, MessageBox, self.file_name + warningtext, MessageBox.TYPE_YESNO) - dei.setTitle(_("Dream-Explorer...")) - else: - self.close() - - def GetFileData(self, fx): - try: - flines = open(fx, "r") - for line in flines: - self.list.append(line) - flines.close() - self.setTitle(fx) - except: - pass - - def editLine(self): - try: - self.selLine = self["filedata"].getSelectionIndex() - self.oldLine = self.list[self.selLine] - editableText = self.list[self.selLine][:-1] - self.session.openWithCallback(self.callbackEditLine, vInputBox, title=_("old: ") + self.list[self.selLine], windowTitle=_("Edit line " + str(self.selLine + 1)), text=editableText) - except: - dei = self.session.open(MessageBox, _("This line is not editable!"), MessageBox.TYPE_ERROR) - dei.setTitle(_("Error...")) - - def callbackEditLine(self, newline): - if newline is not None: - for x in self.list: - if x == self.oldLine: - self.isChanged = True - self.list.remove(x) - self.list.insert(self.selLine, newline + '\n') - self.selLine = None - self.oldLine = None - - def SaveFile(self, answer): - if answer is True: - try: - eFile = open(self.file_name, "w") - for x in self.list: - eFile.writelines(x) - eFile.close() - except: - pass - self.close() - else: - self.close() + if HDSkn: + if (getDesktop(0).size().width()) > 1030: + skin = """ + + + """ + else: + skin = """ + + + """ + else: + skin = """ + + + """ + + def __init__(self, session, file): + self.skin = vEditor.skin + Screen.__init__(self, session) + self.setTitle(_("File-Explorer")) + self.session = session + self.file_name = file + self.list = [] + self["filedata"] = MenuList(self.list) + self["actions"] = ActionMap(["WizardActions"], + { + "ok": self.editLine, + "back": self.exitEditor + }, -1) + self.selLine = None + self.oldLine = None + self.isChanged = False + self.GetFileData(file) + + def exitEditor(self): + if self.isChanged: + warningtext = _("\nhave been CHANGED! Do you want to save it?\n\nWARNING!") + warningtext = warningtext + _("\n\nThe Editor-Funktions are beta (not full tested) !!!") + warningtext = warningtext + _("\nThe author are NOT RESPONSIBLE\nfor DATA LOST OR DISORDERS !!!") + dei = self.session.openWithCallback(self.SaveFile, MessageBox, self.file_name + warningtext, MessageBox.TYPE_YESNO) + dei.setTitle(_("Dream-Explorer...")) + else: + self.close() + + def GetFileData(self, fx): + try: + flines = open(fx, "r") + for line in flines: + self.list.append(line) + flines.close() + self.setTitle(fx) + except: + pass + + def editLine(self): + try: + self.selLine = self["filedata"].getSelectionIndex() + self.oldLine = self.list[self.selLine] + editableText = self.list[self.selLine][:-1] + self.session.openWithCallback(self.callbackEditLine, vInputBox, title=_("old: ") + self.list[self.selLine], windowTitle=_("Edit line " + str(self.selLine + 1)), text=editableText) + except: + dei = self.session.open(MessageBox, _("This line is not editable!"), MessageBox.TYPE_ERROR) + dei.setTitle(_("Error...")) + + def callbackEditLine(self, newline): + if newline is not None: + for x in self.list: + if x == self.oldLine: + self.isChanged = True + self.list.remove(x) + self.list.insert(self.selLine, newline + '\n') + self.selLine = None + self.oldLine = None + + def SaveFile(self, answer): + if answer is True: + try: + eFile = open(self.file_name, "w") + for x in self.list: + eFile.writelines(x) + eFile.close() + except: + pass + self.close() + else: + self.close() class MviExplorer(Screen): - skin = """ - - """ - - def __init__(self, session, file): - self.skin = MviExplorer.skin - Screen.__init__(self, session) - self.setTitle(_("mvi-Explorer")) - self.file_name = file - self["actions"] = ActionMap(["WizardActions"], - { - "ok": self.close, - "back": self.close - }, -1) - self.onLayoutFinish.append(self.showMvi) - - def showMvi(self): - os.system("/usr/bin/showiframe " + self.file_name) + skin = """ + + """ + + def __init__(self, session, file): + self.skin = MviExplorer.skin + Screen.__init__(self, session) + self.setTitle(_("mvi-Explorer")) + self.file_name = file + self["actions"] = ActionMap(["WizardActions"], + { + "ok": self.close, + "back": self.close + }, -1) + self.onLayoutFinish.append(self.showMvi) + + def showMvi(self): + os_system("/usr/bin/showiframe " + self.file_name) class PictureExplorerII(Screen): - global HDSkn - if HDSkn: - if (getDesktop(0).size().width()) > 1030: - skin = """ - - - - """ - else: - skin = """ - - - - """ - else: - skin = """ - - - - """ - - def __init__(self, session, whatPic=None, whatDir=None): - self.skin = PictureExplorerII.skin - Screen.__init__(self, session) - self.setTitle(_("Picture-Explorer")) - self.session = session - self.whatPic = whatPic - self.whatDir = whatDir - self.picList = [] - self.Pindex = 0 - self.EXscale = (AVSwitch().getFramebufferScale()) - self.EXpicload = ePicLoad() - self["Picture"] = Pixmap() - self["State"] = Label(_('loading... ') + self.whatPic) - self["actions"] = ActionMap(["WizardActions", "DirectionActions"], - { - "ok": self.info, - "back": self.close, - "up": self.info, - "down": self.close, - "left": self.Pleft, - "right": self.Pright - }, -1) - self.EXpicload.PictureData.get().append(self.DecodeAction) - self.onLayoutFinish.append(self.Show_Picture) - - def Show_Picture(self): - if self.whatPic is not None: - self.EXpicload.setPara([self["Picture"].instance.size().width(), self["Picture"].instance.size().height(), self.EXscale[0], self.EXscale[1], 0, 1, "#002C2C39"]) - self.EXpicload.startDecode(self.whatPic) - if self.whatDir is not None: - pidx = 0 - for root, dirs, files in os.walk(self.whatDir): - for name in files: - if name.endswith(".jpg") or name.endswith(".jpeg") or name.endswith(".Jpg") or name.endswith(".Jpeg") or name.endswith(".JPG") or name.endswith(".JPEG"): - self.picList.append(name) - if name in self.whatPic: - self.Pindex = pidx - pidx = pidx + 1 - files.sort() - - def DecodeAction(self, pictureInfo=""): - if self.whatPic is not None: - self["State"].setText(_("ready...")) - self["State"].visible = False - ptr = self.EXpicload.getData() - self["Picture"].instance.setPixmap(ptr) - - def Pright(self): - if len(self.picList) > 2: - if self.Pindex < (len(self.picList) - 1): - self.Pindex = self.Pindex + 1 - self.whatPic = self.whatDir + str(self.picList[self.Pindex]) - self["State"].visible = True - self["State"].setText(_('loading... ' + self.whatPic)) - self.EXpicload.startDecode(self.whatPic) - else: - self["State"].setText(_("wait...")) - self["State"].visible = False - self.session.open(MessageBox, _('No more picture-files.'), MessageBox.TYPE_INFO) - - def Pleft(self): - if len(self.picList) > 2: - if self.Pindex > 0: - self.Pindex = self.Pindex - 1 - self.whatPic = self.whatDir + str(self.picList[self.Pindex]) - self["State"].visible = True - self["State"].setText(_('loading... ') + self.whatPic) - self.EXpicload.startDecode(self.whatPic) - else: - self["State"].setText(_("wait...")) - self["State"].visible = False - self.session.open(MessageBox, _('No more picture-files.'), MessageBox.TYPE_INFO) - - def info(self): - if self["State"].visible: - self["State"].setText(_("wait...")) - self["State"].visible = False - else: - self["State"].visible = True - self["State"].setText(_(self.whatPic)) + if HDSkn: + if (getDesktop(0).size().width()) > 1030: + skin = """ + + + + """ + else: + skin = """ + + + + """ + else: + skin = """ + + + + """ + + def __init__(self, session, whatPic=None, whatDir=None): + self.skin = PictureExplorerII.skin + Screen.__init__(self, session) + self.setTitle(_("Picture-Explorer")) + self.session = session + self.whatPic = whatPic + self.whatDir = whatDir + self.picList = [] + self.Pindex = 0 + self.EXscale = (AVSwitch().getFramebufferScale()) + self.EXpicload = ePicLoad() + self["Picture"] = Pixmap() + self["State"] = Label(_('loading... ') + self.whatPic) + self["actions"] = ActionMap(["WizardActions", "DirectionActions"], + { + "ok": self.info, + "back": self.close, + "up": self.info, + "down": self.close, + "left": self.Pleft, + "right": self.Pright + }, -1) + self.EXpicload.PictureData.get().append(self.DecodeAction) + self.onLayoutFinish.append(self.Show_Picture) + + def Show_Picture(self): + if self.whatPic is not None: + self.EXpicload.setPara([self["Picture"].instance.size().width(), self["Picture"].instance.size().height(), self.EXscale[0], self.EXscale[1], 0, 1, "#002C2C39"]) + self.EXpicload.startDecode(self.whatPic) + if self.whatDir is not None: + pidx = 0 + for root, dirs, files in os_walk(self.whatDir): + for name in files: + if name.endswith(".jpg") or name.endswith(".jpeg") or name.endswith(".Jpg") or name.endswith(".Jpeg") or name.endswith(".JPG") or name.endswith(".JPEG"): + self.picList.append(name) + if name in self.whatPic: + self.Pindex = pidx + pidx = pidx + 1 + files.sort() + + def DecodeAction(self, pictureInfo=""): + if self.whatPic is not None: + self["State"].setText(_("ready...")) + self["State"].visible = False + ptr = self.EXpicload.getData() + self["Picture"].instance.setPixmap(ptr) + + def Pright(self): + if len(self.picList) > 2: + if self.Pindex < (len(self.picList) - 1): + self.Pindex = self.Pindex + 1 + self.whatPic = self.whatDir + str(self.picList[self.Pindex]) + self["State"].visible = True + self["State"].setText(_('loading... ' + self.whatPic)) + self.EXpicload.startDecode(self.whatPic) + else: + self["State"].setText(_("wait...")) + self["State"].visible = False + self.session.open(MessageBox, _('No more picture-files.'), MessageBox.TYPE_INFO) + + def Pleft(self): + if len(self.picList) > 2: + if self.Pindex > 0: + self.Pindex = self.Pindex - 1 + self.whatPic = self.whatDir + str(self.picList[self.Pindex]) + self["State"].visible = True + self["State"].setText(_('loading... ') + self.whatPic) + self.EXpicload.startDecode(self.whatPic) + else: + self["State"].setText(_("wait...")) + self["State"].visible = False + self.session.open(MessageBox, _('No more picture-files.'), MessageBox.TYPE_INFO) + + def info(self): + if self["State"].visible: + self["State"].setText(_("wait...")) + self["State"].visible = False + else: + self["State"].visible = True + self["State"].setText(_(self.whatPic)) class MoviePlayer(MP_parent): - def __init__(self, session, service): - self.session = session - self.WithoutStopClose = False - MP_parent.__init__(self, self.session, service) + def __init__(self, session, service): + self.session = session + self.WithoutStopClose = False + MP_parent.__init__(self, self.session, service) - def leavePlayer(self): - self.is_closing = True - self.close() + def leavePlayer(self): + self.is_closing = True + self.close() - def leavePlayerConfirmed(self, answer): - pass + def leavePlayerConfirmed(self, answer): + pass - def doEofInternal(self, playing): - if not self.execing: - return - if not playing: - return - self.leavePlayer() + def doEofInternal(self, playing): + if not self.execing: + return + if not playing: + return + self.leavePlayer() - def showMovies(self): - self.WithoutStopClose = True - self.close() + def showMovies(self): + self.WithoutStopClose = True + self.close() - def movieSelected(self, service): - self.leavePlayer(self.de_instance) + def movieSelected(self, service): + self.leavePlayer(self.de_instance) - def __onClose(self): - if not (self.WithoutStopClose): - self.session.nav.playService(self.lastservice) + def __onClose(self): + if not (self.WithoutStopClose): + self.session.nav.playService(self.lastservice) class MusicExplorer(MoviePlayer): - skin = """ - - - Remaining - - - Name - - """ - - def __init__(self, session, service, MusicDir, theFile): - self.session = session - MoviePlayer.__init__(self, session, service) - self.MusicDir = MusicDir - self.musicList = [] - self.Mindex = 0 - self.curFile = theFile - self.searchMusic() - self.onLayoutFinish.append(self.showMMI) - MoviePlayer.WithoutStopClose = False - - def showMMI(self): - os.system("/usr/bin/showiframe /usr/lib/enigma2/python/Plugins/Extensions/DreamExplorer/res/music.mvi") - - def searchMusic(self): - midx = 0 - for root, dirs, files in os.walk(self.MusicDir): - for name in files: - name = name.lower() - if name.endswith(".mp3") or name.endswith(".mp2") or name.endswith(".ogg") or name.endswith(".wav") or name.endswith(".flac") or name.endswith(".m4a"): - self.musicList.append(name) - if self.curFile in name: - self.Mindex = midx - midx = midx + 1 - - def seekFwd(self): - if len(self.musicList) > 2: - if self.Mindex < (len(self.musicList) - 1): - self.Mindex = self.Mindex + 1 - nextfile = self.MusicDir + str(self.musicList[self.Mindex]) - nextRef = eServiceReference("4097:0:0:0:0:0:0:0:0:0:" + nextfile) - self.session.nav.playService(nextRef) - else: - self.session.open(MessageBox, _('No more playable files.'), MessageBox.TYPE_INFO) - - def seekBack(self): - if len(self.musicList) > 2: - if self.Mindex > 0: - self.Mindex = self.Mindex - 1 - nextfile = self.MusicDir + str(self.musicList[self.Mindex]) - nextRef = eServiceReference("4097:0:0:0:0:0:0:0:0:0:" + nextfile) - self.session.nav.playService(nextRef) - else: - self.session.open(MessageBox, _('No more playable files.'), MessageBox.TYPE_INFO) - - def doEofInternal(self, playing): - if not self.execing: - return - if not playing: - return - self.seekFwd() + skin = """ + + + Remaining + + + Name + + """ + + def __init__(self, session, service, MusicDir, theFile): + self.session = session + MoviePlayer.__init__(self, session, service) + self.MusicDir = MusicDir + self.musicList = [] + self.Mindex = 0 + self.curFile = theFile + self.searchMusic() + self.onLayoutFinish.append(self.showMMI) + MoviePlayer.WithoutStopClose = False + + def showMMI(self): + os_system("/usr/bin/showiframe /usr/lib/enigma2/python/Plugins/Extensions/DreamExplorer/res/music.mvi") + + def searchMusic(self): + midx = 0 + for root, dirs, files in os_walk(self.MusicDir): + for name in files: + name = name.lower() + if name.endswith(".mp3") or name.endswith(".mp2") or name.endswith(".ogg") or name.endswith(".wav") or name.endswith(".flac") or name.endswith(".m4a"): + self.musicList.append(name) + if self.curFile in name: + self.Mindex = midx + midx = midx + 1 + + def seekFwd(self): + if len(self.musicList) > 2: + if self.Mindex < (len(self.musicList) - 1): + self.Mindex = self.Mindex + 1 + nextfile = self.MusicDir + str(self.musicList[self.Mindex]) + nextRef = eServiceReference("4097:0:0:0:0:0:0:0:0:0:" + nextfile) + self.session.nav.playService(nextRef) + else: + self.session.open(MessageBox, _('No more playable files.'), MessageBox.TYPE_INFO) + + def seekBack(self): + if len(self.musicList) > 2: + if self.Mindex > 0: + self.Mindex = self.Mindex - 1 + nextfile = self.MusicDir + str(self.musicList[self.Mindex]) + nextRef = eServiceReference("4097:0:0:0:0:0:0:0:0:0:" + nextfile) + self.session.nav.playService(nextRef) + else: + self.session.open(MessageBox, _('No more playable files.'), MessageBox.TYPE_INFO) + + def doEofInternal(self, playing): + if not self.execing: + return + if not playing: + return + self.seekFwd() def ScanSysem_str(): - try: - ret = "" - out_line = os.popen("uptime").readline() - ret = ret + "at" + out_line + "\n" - out_lines = [] - out_lines = os.popen("cat /proc/meminfo").readlines() - for lidx in range(len(out_lines) - 1): - tstLine = out_lines[lidx].split() - if "MemTotal:" in tstLine: - ret = ret + out_lines[lidx] - elif "MemFree:" in tstLine: - ret = ret + out_lines[lidx] + "\n" - out_lines = [] - out_lines = os.popen("cat /proc/stat").readlines() - for lidx in range(len(out_lines) - 1): - tstLine = out_lines[lidx].split() - if "procs_running" in tstLine: - ret = ret + _("Running processes: ") + tstLine[1] - return ret - except: - return "N/A" + try: + ret = "" + out_line = os_popen("uptime").readline() + ret = ret + "at" + out_line + "\n" + out_lines = [] + out_lines = os_popen("cat /proc/meminfo").readlines() + for lidx in range(len(out_lines) - 1): + tstLine = out_lines[lidx].split() + if "MemTotal:" in tstLine: + ret = ret + out_lines[lidx] + elif "MemFree:" in tstLine: + ret = ret + out_lines[lidx] + "\n" + out_lines = [] + out_lines = os_popen("cat /proc/stat").readlines() + for lidx in range(len(out_lines) - 1): + tstLine = out_lines[lidx].split() + if "procs_running" in tstLine: + ret = ret + _("Running processes: ") + tstLine[1] + return ret + except: + return "N/A" class vInputBox(InputBox): - vibnewx = str(getDesktop(0).size().width() - 80) - sknew = '\n' - sknew = sknew + '\n\n' - skin = sknew + vibnewx = str(getDesktop(0).size().width() - 80) + sknew = '\n' + sknew = sknew + '\n\n' + skin = sknew - def __init__(self, session, title="", windowTitle=_("Input"), useableChars=None, **kwargs): - InputBox.__init__(self, session, title, windowTitle, useableChars, **kwargs) + def __init__(self, session, title="", windowTitle=_("Input"), useableChars=None, **kwargs): + InputBox.__init__(self, session, title, windowTitle, useableChars, **kwargs) class CPmaniger(Screen): - global HDSkn - if HDSkn: - if (getDesktop(0).size().width()) > 1030: - skin = """ - - - - - - - - - """ - else: - skin = """ - - - - - - - - - """ - else: - skin = """ - - - - - - - - - """ - - def __init__(self, session, source="/tmp/none"): - self.skin = CPmaniger.skin - Screen.__init__(self, session) - self.setTitle(_("Select Copy/Move location...")) - self.sesion = session - self.src = source - self["File"] = Label(_("WARNING! they doing now COPY or MOVE\n") + source + _("\nto:")) - self["CPto"] = myFileList(config.plugins.DreamExplorer.CopyDest.value, showDirectories=True, showFiles=False, matchingPattern="^.*\.*", useServiceRef=False) - - self["key_red"] = StaticText(_("MOVE")) - self["key_yellow"] = StaticText(_("COPY")) - - self["actions"] = ActionMap(["WizardActions", "ColorActions"], - { - "ok": self.ok, - "back": self.NothingToDo, - "red": self.MoveFile, - "yellow": self.CopyFile - }, -1) - self.onLayoutFinish.append(self.OneDescent) - - def OneDescent(self): - if self["CPto"].canDescent(): - self["CPto"].descent() - - def ok(self): - if self["CPto"].canDescent(): - self["CPto"].descent() - - def NothingToDo(self): - self.close(" ") - - def CopyFile(self): - if self["CPto"].getSelectionIndex() != 0: - dest = self["CPto"].getSelection()[0] - if self.src[len(self.src) - 1] == '/': - order = 'cp -af \"' + self.src + '\" \"' + dest + '\"' - else: - order = 'cp \"' + self.src + '\" \"' + dest + '\"' - try: - config.plugins.DreamExplorer.CopyDest.value = dest - config.plugins.DreamExplorer.CopyDest.save() - os.system(order) - except: - dei = self.session.open(MessageBox, _("%s \nFAILED!") % order, MessageBox.TYPE_ERROR) - dei.setTitle(_("Dream-Explorer")) - self.close(" ") - - def MoveFile(self): - if self["CPto"].getSelectionIndex() != 0: - dest = self["CPto"].getSelection()[0] - if self.src[len(self.src) - 1] == '/': - order = 'cp -af \"' + self.src + '\" \"' + dest + '\"' - DELorder = 'rm -r \"' + self.src + '\"' - else: - order = 'cp \"' + self.src + '\" \"' + dest + '\"' - DELorder = 'rm -f \"' + self.src + '\"' - try: - config.plugins.DreamExplorer.CopyDest.value = dest - config.plugins.DreamExplorer.CopyDest.save() - os.system(order) - except: - dei = self.session.open(MessageBox, _("%s \nFAILED!") % order, MessageBox.TYPE_ERROR) - dei.setTitle(_("Dream-Explorer")) - try: - os.system(DELorder) - except: - dei = self.session.open(MessageBox, _("%s \nFAILED!") % DELorder, MessageBox.TYPE_ERROR) - dei.setTitle(_("Dream-Explorer")) - self.close(" ") + if HDSkn: + if (getDesktop(0).size().width()) > 1030: + skin = """ + + + + + + + + + """ + else: + skin = """ + + + + + + + + + """ + else: + skin = """ + + + + + + + + + """ + + def __init__(self, session, source="/tmp/none"): + self.skin = CPmaniger.skin + Screen.__init__(self, session) + self.setTitle(_("Select Copy/Move location...")) + self.sesion = session + self.src = source + self["File"] = Label(_("WARNING! they doing now COPY or MOVE\n") + source + _("\nto:")) + self["CPto"] = myFileList(config.plugins.DreamExplorer.CopyDest.value, showDirectories=True, showFiles=False, matchingPattern=r"^.*\.*", useServiceRef=False) + + self["key_red"] = StaticText(_("MOVE")) + self["key_yellow"] = StaticText(_("COPY")) + self["actions"] = ActionMap(["WizardActions", "ColorActions"], + { + "ok": self.ok, + "back": self.NothingToDo, + "red": self.MoveFile, + "yellow": self.CopyFile + }, -1) + self.onLayoutFinish.append(self.OneDescent) + + def OneDescent(self): + if self["CPto"].canDescent(): + self["CPto"].descent() + + def ok(self): + if self["CPto"].canDescent(): + self["CPto"].descent() + + def NothingToDo(self): + self.close(" ") + + def CopyFile(self): + if self["CPto"].getSelectionIndex() != 0: + dest = self["CPto"].getSelection()[0] + if self.src[len(self.src) - 1] == '/': + order = 'cp -af \"' + self.src + '\" \"' + dest + '\"' + else: + order = 'cp \"' + self.src + '\" \"' + dest + '\"' + try: + config.plugins.DreamExplorer.CopyDest.value = dest + config.plugins.DreamExplorer.CopyDest.save() + os_system(order) + except: + dei = self.session.open(MessageBox, _("%s \nFAILED!") % order, MessageBox.TYPE_ERROR) + dei.setTitle(_("Dream-Explorer")) + self.close(" ") + + def MoveFile(self): + if self["CPto"].getSelectionIndex() != 0: + dest = self["CPto"].getSelection()[0] + if self.src[len(self.src) - 1] == '/': + order = 'cp -af \"' + self.src + '\" \"' + dest + '\"' + DELorder = 'rm -r \"' + self.src + '\"' + else: + order = 'cp \"' + self.src + '\" \"' + dest + '\"' + DELorder = 'rm -f \"' + self.src + '\"' + try: + config.plugins.DreamExplorer.CopyDest.value = dest + config.plugins.DreamExplorer.CopyDest.save() + os_system(order) + except: + dei = self.session.open(MessageBox, _("%s \nFAILED!") % order, MessageBox.TYPE_ERROR) + dei.setTitle(_("Dream-Explorer")) + try: + os_system(DELorder) + except: + dei = self.session.open(MessageBox, _("%s \nFAILED!") % DELorder, MessageBox.TYPE_ERROR) + dei.setTitle(_("Dream-Explorer")) + self.close(" ") class SoftLinkScreen(Screen): - global HDSkn - if HDSkn: - if (getDesktop(0).size().width()) > 1030: - skin = """ - - - - - - - - - """ - else: - skin = """ - - - - - - - - - """ - else: - skin = """ - - - - - - - - - """ - - def __init__(self, session, source="/tmp/"): - self.skin = SoftLinkScreen.skin - Screen.__init__(self, session) - self.setTitle(_("Make a softlink...")) - self.sesion = session - self.src = source - self.newSLname = " " - self["File"] = Label(_("Set first the Softlink name ...")) - self["SLto"] = myFileList('/', showDirectories=True, showFiles=True, matchingPattern=None, useServiceRef=False) - - self["key_red"] = StaticText(_("Set name")) - self["key_yellow"] = StaticText(_("Make a softlink")) - - self["actions"] = ActionMap(["WizardActions", "ColorActions"], - { - "ok": self.ok, - "back": self.NothingToDo, - "red": self.GetSLname, - "yellow": self.MakeSLnow - }, -1) - - def GetSLname(self): - self.session.openWithCallback(self.callbackSetLinkName, vInputBox, title=_("Write the new softlink name here:"), windowTitle=_("Dream Explorer..."), text="newname") - - def callbackSetLinkName(self, answer): - if answer is None: - return - if (" " in answer) or (answer == ""): - dei = self.session.open(MessageBox, _("Softlink name error !"), MessageBox.TYPE_ERROR) - dei.setTitle(_("Dream-Explorer")) - return - else: - self.newSLname = self.src + answer - self["File"].setText(_("WARNING! they make now a softlink from\n") + self.newSLname + _("\nto:")) - - def ok(self): - if self["SLto"].canDescent(): - self["SLto"].descent() - - def NothingToDo(self): - self.close(" ") - - def MakeSLnow(self): - if self.newSLname != " ": - if self["SLto"].getSelectionIndex() != 0: - if self["SLto"].canDescent(): - order = 'ln -s \"' + self["SLto"].getSelection()[0] + '\" \"' + self.newSLname + '\"' - else: - order = 'ln -s \"' + (self["SLto"].getCurrentDirectory() + self["SLto"].getFilename()) + '\" \"' + self.newSLname + '\"' - os.system(order) - self.close(" ") - else: - dei = self.session.open(MessageBox, _("Softlink name error !"), MessageBox.TYPE_ERROR) - dei.setTitle(_("Dream-Explorer")) + if HDSkn: + if (getDesktop(0).size().width()) > 1030: + skin = """ + + + + + + + + + """ + else: + skin = """ + + + + + + + + + """ + else: + skin = """ + + + + + + + + + """ + + def __init__(self, session, source="/tmp/"): + self.skin = SoftLinkScreen.skin + Screen.__init__(self, session) + self.setTitle(_("Make a softlink...")) + self.sesion = session + self.src = source + self.newSLname = " " + self["File"] = Label(_("Set first the Softlink name ...")) + self["SLto"] = myFileList('/', showDirectories=True, showFiles=True, matchingPattern=None, useServiceRef=False) + + self["key_red"] = StaticText(_("Set name")) + self["key_yellow"] = StaticText(_("Make a softlink")) + self["actions"] = ActionMap(["WizardActions", "ColorActions"], + { + "ok": self.ok, + "back": self.NothingToDo, + "red": self.GetSLname, + "yellow": self.MakeSLnow + }, -1) + + def GetSLname(self): + self.session.openWithCallback(self.callbackSetLinkName, vInputBox, title=_("Write the new softlink name here:"), windowTitle=_("Dream Explorer..."), text="newname") + + def callbackSetLinkName(self, answer): + if answer is None: + return + if (" " in answer) or (answer == ""): + dei = self.session.open(MessageBox, _("Softlink name error !"), MessageBox.TYPE_ERROR) + dei.setTitle(_("Dream-Explorer")) + return + else: + self.newSLname = self.src + answer + self["File"].setText(_("WARNING! they make now a softlink from\n") + self.newSLname + _("\nto:")) + + def ok(self): + if self["SLto"].canDescent(): + self["SLto"].descent() + + def NothingToDo(self): + self.close(" ") + + def MakeSLnow(self): + if self.newSLname != " ": + if self["SLto"].getSelectionIndex() != 0: + if self["SLto"].canDescent(): + order = 'ln -s \"' + self["SLto"].getSelection()[0] + '\" \"' + self.newSLname + '\"' + else: + order = 'ln -s \"' + (self["SLto"].getCurrentDirectory() + self["SLto"].getFilename()) + '\" \"' + self.newSLname + '\"' + os_system(order) + self.close(" ") + else: + dei = self.session.open(MessageBox, _("Softlink name error !"), MessageBox.TYPE_ERROR) + dei.setTitle(_("Dream-Explorer"))