| 174 | | def get_files(self, handler, query, filterFunction=None): |
|---|
| 175 | | |
|---|
| 176 | | def build_recursive_list(path, recurse=True): |
|---|
| 177 | | files = [] |
|---|
| 178 | | for f in os.listdir(path): |
|---|
| 179 | | f = os.path.join(path, f) |
|---|
| 180 | | isdir = os.path.isdir(f) |
|---|
| 181 | | if recurse and isdir: |
|---|
| 182 | | files.extend(build_recursive_list(f)) |
|---|
| 183 | | else: |
|---|
| 184 | | if isdir or filterFunction(f, file_type): |
|---|
| 185 | | files.append(FileData(f, isdir)) |
|---|
| 186 | | return files |
|---|
| 187 | | |
|---|
| 188 | | def dir_sort(x, y): |
|---|
| 189 | | if x.isdir == y.isdir: |
|---|
| 190 | | if x.isplay == y.isplay: |
|---|
| 191 | | return name_sort(x, y) |
|---|
| 192 | | else: |
|---|
| 193 | | return y.isplay - x.isplay |
|---|
| 194 | | else: |
|---|
| 195 | | return y.isdir - x.isdir |
|---|
| 196 | | |
|---|
| 197 | | def name_sort(x, y): |
|---|
| 198 | | return cmp(x.name, y.name) |
|---|
| 199 | | |
|---|
| 200 | | subcname = query['Container'][0] |
|---|
| 201 | | cname = subcname.split('/')[0] |
|---|
| 202 | | path = self.get_local_path(handler, query) |
|---|
| 203 | | |
|---|
| 204 | | file_type = query.get('Filter', [''])[0] |
|---|
| 205 | | |
|---|
| 206 | | recurse = query.get('Recurse',['No'])[0] == 'Yes' |
|---|
| 207 | | filelist = build_recursive_list(path, recurse) |
|---|
| 208 | | |
|---|
| 209 | | # Sort |
|---|
| 210 | | if query.get('SortOrder',['Normal'])[0] == 'Random': |
|---|
| 211 | | seed = query.get('RandomSeed', ['1'])[0] |
|---|
| 212 | | self.random_lock.acquire() |
|---|
| 213 | | random.seed(seed) |
|---|
| 214 | | random.shuffle(filelist) |
|---|
| 215 | | self.random_lock.release() |
|---|
| 216 | | else: |
|---|
| 217 | | filelist.sort(dir_sort) |
|---|
| 218 | | |
|---|
| 219 | | # Trim the list |
|---|
| 220 | | return self.item_count(handler, query, cname, filelist) |
|---|
| 221 | | |
|---|
| 222 | | def get_playlist(self, handler, query): |
|---|
| 223 | | subcname = query['Container'][0] |
|---|
| 224 | | cname = subcname.split('/')[0] |
|---|
| 225 | | |
|---|
| | 174 | def parse_playlist(self, list_name, recurse): |
|---|
| | 250 | if recurse: |
|---|
| | 251 | newlist = [] |
|---|
| | 252 | for i in playlist: |
|---|
| | 253 | if i.isplay: |
|---|
| | 254 | newlist.extend(self.parse_playlist(i.name, recurse)) |
|---|
| | 255 | else: |
|---|
| | 256 | newlist.append(i) |
|---|
| | 257 | |
|---|
| | 258 | playlist = newlist |
|---|
| | 259 | |
|---|
| | 260 | return playlist |
|---|
| | 261 | |
|---|
| | 262 | def get_files(self, handler, query, filterFunction=None): |
|---|
| | 263 | |
|---|
| | 264 | def build_recursive_list(path, recurse=True): |
|---|
| | 265 | files = [] |
|---|
| | 266 | for f in os.listdir(path): |
|---|
| | 267 | f = os.path.join(path, f) |
|---|
| | 268 | isdir = os.path.isdir(f) |
|---|
| | 269 | if recurse and isdir: |
|---|
| | 270 | files.extend(build_recursive_list(f)) |
|---|
| | 271 | else: |
|---|
| | 272 | fd = FileData(f, isdir) |
|---|
| | 273 | if recurse and fd.isplay: |
|---|
| | 274 | files.extend(self.parse_playlist(f, recurse)) |
|---|
| | 275 | elif isdir or filterFunction(f, file_type): |
|---|
| | 276 | files.append(fd) |
|---|
| | 277 | return files |
|---|
| | 278 | |
|---|
| | 279 | def dir_sort(x, y): |
|---|
| | 280 | if x.isdir == y.isdir: |
|---|
| | 281 | if x.isplay == y.isplay: |
|---|
| | 282 | return name_sort(x, y) |
|---|
| | 283 | else: |
|---|
| | 284 | return y.isplay - x.isplay |
|---|
| | 285 | else: |
|---|
| | 286 | return y.isdir - x.isdir |
|---|
| | 287 | |
|---|
| | 288 | def name_sort(x, y): |
|---|
| | 289 | return cmp(x.name, y.name) |
|---|
| | 290 | |
|---|
| | 291 | subcname = query['Container'][0] |
|---|
| | 292 | cname = subcname.split('/')[0] |
|---|
| | 293 | path = self.get_local_path(handler, query) |
|---|
| | 294 | |
|---|
| | 295 | file_type = query.get('Filter', [''])[0] |
|---|
| | 296 | |
|---|
| | 297 | recurse = query.get('Recurse',['No'])[0] == 'Yes' |
|---|
| | 298 | filelist = build_recursive_list(path, recurse) |
|---|
| | 299 | |
|---|
| | 300 | # Sort |
|---|
| | 301 | if query.get('SortOrder',['Normal'])[0] == 'Random': |
|---|
| | 302 | seed = query.get('RandomSeed', ['1'])[0] |
|---|
| | 303 | self.random_lock.acquire() |
|---|
| | 304 | random.seed(seed) |
|---|
| | 305 | random.shuffle(filelist) |
|---|
| | 306 | self.random_lock.release() |
|---|
| | 307 | else: |
|---|
| | 308 | filelist.sort(dir_sort) |
|---|
| | 309 | |
|---|
| | 310 | # Trim the list |
|---|
| | 311 | return self.item_count(handler, query, cname, filelist) |
|---|
| | 312 | |
|---|
| | 313 | def get_playlist(self, handler, query): |
|---|
| | 314 | subcname = query['Container'][0] |
|---|
| | 315 | cname = subcname.split('/')[0] |
|---|
| | 316 | |
|---|
| | 317 | try: |
|---|
| | 318 | url = subcname.index('http://') |
|---|
| | 319 | list_name = subcname[url:] |
|---|
| | 320 | except: |
|---|
| | 321 | list_name = self.get_local_path(handler, query) |
|---|
| | 322 | |
|---|
| | 323 | recurse = query.get('Recurse',['No'])[0] == 'Yes' |
|---|
| | 324 | playlist = self.parse_playlist(list_name, recurse) |
|---|
| | 325 | |
|---|