1 from HTMLComponent import *
2 from GUIComponent import *
5 from MenuList import MenuList
6 from Components.Harddisk import harddiskmanager
8 from Tools.Directories import *
35 def FileEntryComponent(name, absolute = None, isDir = False):
36 res = [ (absolute, isDir) ]
37 res.append((eListboxPythonMultiContent.TYPE_TEXT, 35, 1, 470, 20, 0, RT_HALIGN_LEFT, name))
39 png = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "extensions/directory.png"))
41 extension = name.split('.')
42 extension = extension[-1].lower()
43 if EXTENSIONS.has_key(extension):
44 png = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "extensions/" + EXTENSIONS[extension] + ".png"))
48 res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, 10, 2, 20, 20, png))
52 class FileList(MenuList, HTMLComponent, GUIComponent):
53 def __init__(self, directory, showDirectories = True, showFiles = True, matchingPattern = None, useServiceRef = False, isTop = False):
54 GUIComponent.__init__(self)
55 self.l = eListboxPythonMultiContent()
57 self.mount_point = None
58 self.current_directory = None
59 self.useServiceRef = useServiceRef
60 self.showDirectories = showDirectories
61 self.showFiles = showFiles
63 # example: matching .nfi and .ts files: "^.*\.(nfi|ts)"
64 self.matchingPattern = matchingPattern
65 self.changeDir(directory)
67 self.l.setFont(0, gFont("Regular", 18))
69 def getSelection(self):
70 if self.l.getCurrentSelection() is None:
72 return self.l.getCurrentSelection()[0]
74 def getFileList(self):
77 def changeDir(self, directory, select = None):
80 # if we are just entering from the list of mount points:
81 if self.current_directory is None:
82 self.mount_point = directory
83 self.current_directory = directory
87 if directory is None: # present available mountpoints
88 print "listing partitions:"
89 for p in harddiskmanager.getMountedPartitions():
90 if p.mountpoint == "/":
91 self.list.append(FileEntryComponent(name = p.description, absolute = p.mountpoint, isDir = True))
93 self.list.append(FileEntryComponent(name = p.description, absolute = p.mountpoint + "/", isDir = True))
96 elif self.useServiceRef:
97 root = eServiceReference("2:0:1:0:0:0:0:0:0:0:" + directory)
98 serviceHandler = eServiceCenter.getInstance()
99 list = serviceHandler.list(root)
106 if s.flags & s.mustDescent:
107 directories.append(s.getPath())
110 print s.getName(), s.flags
114 files = os.listdir(directory)
118 if os.path.isdir(directory + x):
119 directories.append(directory + x + "/")
122 if directory is not None and self.showDirectories and not self.isTop:
123 if directory == self.mount_point:
124 self.list.append(FileEntryComponent(name = ".. (" +_("List of Storage Devices") + ")", absolute = None, isDir = True))
126 self.list.append(FileEntryComponent(name = "..", absolute = '/'.join(directory.split('/')[:-2]) + '/', isDir = True))
128 if self.showDirectories:
129 for x in directories:
130 name = x.split('/')[-2]
131 self.list.append(FileEntryComponent(name = name, absolute = x, isDir = True))
135 if self.useServiceRef:
137 name = path.split('/')[-1]
142 if self.matchingPattern is not None:
143 if re.compile(self.matchingPattern).search(path):
144 self.list.append(FileEntryComponent(name = name, absolute = x , isDir = False))
146 self.list.append(FileEntryComponent(name = name, absolute = x , isDir = False))
148 self.l.setList(self.list)
150 if select is not None:
156 if isinstance(p, eServiceReference):
163 def getCurrentDirectory(self):
164 return self.current_directory
166 def canDescent(self):
167 if self.getSelection() is None:
169 return self.getSelection()[1]
172 if self.getSelection() is None:
174 self.changeDir(self.getSelection()[0], select = self.current_directory)
176 def getFilename(self):
177 if self.getSelection() is None:
179 x = self.getSelection()[0]
180 if isinstance(x, eServiceReference):
184 def getServiceRef(self):
185 if self.getSelection() is None:
187 x = self.getSelection()[0]
188 if isinstance(x, eServiceReference):
192 GUI_WIDGET = eListbox
194 def postWidgetCreate(self, instance):
195 instance.setContent(self.l)
196 instance.setItemHeight(23)