1 from HTMLComponent import *
2 from GUIComponent import *
5 from MenuList import MenuList
6 from Components.Harddisk import harddiskmanager
8 from Tools.Directories import *
34 def FileEntryComponent(name, absolute = None, isDir = False):
35 res = [ (absolute, isDir) ]
36 res.append((eListboxPythonMultiContent.TYPE_TEXT, 35, 1, 470, 20, 0, RT_HALIGN_LEFT, name))
38 png = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "extensions/directory.png"))
40 extension = name.split('.')
41 extension = extension[-1].lower()
42 if EXTENSIONS.has_key(extension):
43 png = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "extensions/" + EXTENSIONS[extension] + ".png"))
47 res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, 10, 2, 20, 20, png))
51 class FileList(MenuList, HTMLComponent, GUIComponent):
52 def __init__(self, directory, showDirectories = True, showFiles = True, matchingPattern = None, useServiceRef = False, isTop = False):
53 GUIComponent.__init__(self)
54 self.l = eListboxPythonMultiContent()
56 self.mount_point = None
57 self.current_directory = None
58 self.useServiceRef = useServiceRef
59 self.showDirectories = showDirectories
60 self.showFiles = showFiles
62 # example: matching .nfi and .ts files: "^.*\.(nfi|ts)"
63 self.matchingPattern = matchingPattern
64 self.changeDir(directory)
66 self.l.setFont(0, gFont("Regular", 18))
68 def getSelection(self):
69 if self.l.getCurrentSelection() is None:
71 return self.l.getCurrentSelection()[0]
73 def getFileList(self):
76 def changeDir(self, directory, select = None):
79 # if we are just entering from the list of mount points:
80 if self.current_directory is None:
81 self.mount_point = directory
82 self.current_directory = directory
86 if directory is None: # present available mountpoints
87 print "listing partitions:"
88 for p in harddiskmanager.getMountedPartitions():
89 self.list.append(FileEntryComponent(name = p.description, absolute = p.mountpoint, isDir = True))
92 elif self.useServiceRef:
93 root = eServiceReference("2:0:1:0:0:0:0:0:0:0:" + directory)
94 serviceHandler = eServiceCenter.getInstance()
95 list = serviceHandler.list(root)
102 if s.flags & s.mustDescent:
103 directories.append(s.getPath())
106 print s.getName(), s.flags
110 files = os.listdir(directory)
114 if os.path.isdir(directory + x):
115 directories.append(directory + x + "/")
118 if directory is not None and self.showDirectories and not self.isTop:
119 if directory == self.mount_point:
120 self.list.append(FileEntryComponent(name = ".. (" +_("List of Storage Devices") + ")", absolute = None, isDir = True))
122 self.list.append(FileEntryComponent(name = "..", absolute = '/'.join(directory.split('/')[:-2]) + '/', isDir = True))
124 if self.showDirectories:
125 for x in directories:
126 name = x.split('/')[-2]
127 self.list.append(FileEntryComponent(name = name, absolute = x, isDir = True))
131 if self.useServiceRef:
133 name = path.split('/')[-1]
138 if self.matchingPattern is not None:
139 if re.compile(self.matchingPattern).search(path):
140 self.list.append(FileEntryComponent(name = name, absolute = x , isDir = False))
142 self.list.append(FileEntryComponent(name = name, absolute = x , isDir = False))
144 self.l.setList(self.list)
146 if select is not None:
152 if isinstance(p, eServiceReference):
159 def getCurrentDirectory(self):
160 return self.current_directory
162 def canDescent(self):
163 if self.getSelection() is None:
165 return self.getSelection()[1]
168 if self.getSelection() is None:
170 self.changeDir(self.getSelection()[0], select = self.current_directory)
172 def getFilename(self):
173 if self.getSelection() is None:
175 x = self.getSelection()[0]
176 if isinstance(x, eServiceReference):
180 def getServiceRef(self):
181 if self.getSelection() is None:
183 x = self.getSelection()[0]
184 if isinstance(x, eServiceReference):
188 GUI_WIDGET = eListbox
190 def postWidgetCreate(self, instance):
191 instance.setContent(self.l)
192 instance.setItemHeight(23)