1 from HTMLComponent import HTMLComponent
2 from GUIComponent import GUIComponent
5 from os import path as os_path, listdir
6 from MenuList import MenuList
7 from Components.Harddisk import harddiskmanager
9 from Tools.Directories import SCOPE_SKIN_IMAGE, resolveFilename
11 from enigma import RT_HALIGN_LEFT, eListbox, eListboxPythonMultiContent, \
12 eServiceReference, eServiceCenter, gFont
13 from Tools.LoadPixmap import LoadPixmap
30 def FileEntryComponent(name, absolute = None, isDir = False):
31 res = [ (absolute, isDir) ]
32 res.append((eListboxPythonMultiContent.TYPE_TEXT, 35, 1, 470, 20, 0, RT_HALIGN_LEFT, name))
34 png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "extensions/directory.png"))
36 extension = name.split('.')
37 extension = extension[-1].lower()
38 if EXTENSIONS.has_key(extension):
39 png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "extensions/" + EXTENSIONS[extension] + ".png"))
43 res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, 10, 2, 20, 20, png))
47 class FileList(MenuList, HTMLComponent, GUIComponent):
48 def __init__(self, directory, showDirectories = True, showFiles = True, matchingPattern = None, useServiceRef = False, isTop = False):
49 GUIComponent.__init__(self)
50 self.l = eListboxPythonMultiContent()
52 self.mount_point = None
53 self.current_directory = None
54 self.useServiceRef = useServiceRef
55 self.showDirectories = showDirectories
56 self.showFiles = showFiles
58 # example: matching .nfi and .ts files: "^.*\.(nfi|ts)"
59 self.matchingPattern = matchingPattern
60 self.changeDir(directory)
62 self.l.setFont(0, gFont("Regular", 18))
63 self.l.setItemHeight(23)
64 self.serviceHandler = eServiceCenter.getInstance()
66 def getSelection(self):
67 if self.l.getCurrentSelection() is None:
69 return self.l.getCurrentSelection()[0]
71 def getSelectionIndex(self):
72 return self.l.getCurrentSelectionIndex()
74 def getCurrentEvent(self):
75 l = self.l.getCurrentSelection()
76 if not l or l[0][1] == True:
79 return self.serviceHandler.info(l[0][0]).getEvent(l[0][0])
81 def getFileList(self):
84 def changeDir(self, directory, select = None):
87 # if we are just entering from the list of mount points:
88 if self.current_directory is None:
89 self.mount_point = directory
90 self.current_directory = directory
94 if directory is None: # present available mountpoints
95 print "listing partitions:"
96 for p in harddiskmanager.getMountedPartitions():
97 if p.mountpoint == "/":
98 self.list.append(FileEntryComponent(name = p.description, absolute = p.mountpoint, isDir = True))
100 self.list.append(FileEntryComponent(name = p.description, absolute = p.mountpoint + "/", isDir = True))
103 elif self.useServiceRef:
104 root = eServiceReference("2:0:1:0:0:0:0:0:0:0:" + directory)
105 serviceHandler = eServiceCenter.getInstance()
106 list = serviceHandler.list(root)
113 if s.flags & s.mustDescent:
114 directories.append(s.getPath())
117 print s.getName(), s.flags
121 files = listdir(directory)
125 if os_path.isdir(directory + x):
126 directories.append(directory + x + "/")
129 if directory is not None and self.showDirectories and not self.isTop:
130 if directory == self.mount_point:
131 self.list.append(FileEntryComponent(name = ".. (" +_("List of Storage Devices") + ")", absolute = None, isDir = True))
133 self.list.append(FileEntryComponent(name = "..", absolute = '/'.join(directory.split('/')[:-2]) + '/', isDir = True))
135 if self.showDirectories:
136 for x in directories:
137 name = x.split('/')[-2]
138 self.list.append(FileEntryComponent(name = name, absolute = x, isDir = True))
142 if self.useServiceRef:
144 name = path.split('/')[-1]
149 if self.matchingPattern is not None:
150 if re.compile(self.matchingPattern).search(path):
151 self.list.append(FileEntryComponent(name = name, absolute = x , isDir = False))
153 self.list.append(FileEntryComponent(name = name, absolute = x , isDir = False))
155 self.l.setList(self.list)
157 if select is not None:
163 if isinstance(p, eServiceReference):
170 def getCurrentDirectory(self):
171 return self.current_directory
173 def canDescent(self):
174 if self.getSelection() is None:
176 return self.getSelection()[1]
179 if self.getSelection() is None:
181 self.changeDir(self.getSelection()[0], select = self.current_directory)
183 def getFilename(self):
184 if self.getSelection() is None:
186 x = self.getSelection()[0]
187 if isinstance(x, eServiceReference):
191 def getServiceRef(self):
192 if self.getSelection() is None:
194 x = self.getSelection()[0]
195 if isinstance(x, eServiceReference):
199 GUI_WIDGET = eListbox
201 def postWidgetCreate(self, instance):
202 instance.setContent(self.l)
205 harddiskmanager.on_partition_list_change.append(self.partitionListChanged)
208 harddiskmanager.on_partition_list_change.remove(self.partitionListChanged)
211 self.changeDir(self.current_directory, self.getFilename())
213 def partitionListChanged(self, action, device):
214 if self.current_directory is None: