Changeset 30e2af11384e52f526f8932a992d2bfe122f98ec

Show
Ignore:
Timestamp:
01/03/08 02:39:10 (1 year ago)
Author:
William McBrine <wmcbrine@gmail.com>
git-committer:
William McBrine <wmcbrine@gmail.com> 1199349550 -0500
git-parent:

[89da5bcdb8ef59361933355f425667d5a32bdb1e]

git-author:
William McBrine <wmcbrine@gmail.com> 1199349550 -0500
Message:

Recurse through playlists.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • plugin.py

    r1060ab0 r30e2af1  
    7979                anchor = unquote(anchor) 
    8080                anchor = anchor.replace(os.path.sep + cname, local_base_path) 
    81                 anchor = os.path.normpath(anchor) 
     81                if not '://' in anchor: 
     82                    anchor = os.path.normpath(anchor) 
    8283 
    8384                if type(files[0]) == str: 
  • plugins/music/music.py

    r89da5bc r30e2af1  
    172172        handler.wfile.write(page) 
    173173 
    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): 
    226175        try: 
    227             url = subcname.index('http://') 
    228             list_name = subcname[url:] 
     176            url = list_name.index('http://') 
     177            list_name = list_name[url:] 
    229178            list_file = urllib.urlopen(list_name) 
    230179        except: 
    231             list_name = self.get_local_path(handler, query) 
    232180            list_file = open(list_name) 
    233181            local_path = os.path.sep.join(list_name.split(os.path.sep)[:-1]) 
     182 
    234183        ext = os.path.splitext(list_name)[1].lower() 
    235184 
     
    299248                playlist[i].name = os.path.normpath(name) 
    300249 
     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 
    301326        # Trim the list 
    302327        return self.item_count(handler, query, cname, playlist)