X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fpython%2FComponents%2FFileList.py;h=d726b833a86c42786bd0345a052c436ce13ce9f2;hp=7e6ced57373a059bb55095d953f836d5eb0d48d8;hb=08fca93e7f2a37a452399d08c5c84b969b7e52af;hpb=371447724a1e150c37a777e58a4725a3d2561c01 diff --git a/lib/python/Components/FileList.py b/lib/python/Components/FileList.py index 7e6ced5..d726b83 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)