# HG changeset patch -- Bitbucket.org # Project DAP_fork # URL http://bitbucket.org/mfinger/dap_fork/overview # User mfinger # Date 1275642251 -36000 # Node ID cb930a121f6edf89cd503c128d02aa138723630b # Parent 510268dc5dc6e082bda874f40e4d7ac27f81c846 Fixed duplication error with playlists in the same directory as the mp3s. --- a/src/media/__init__.py +++ b/src/media/__init__.py @@ -63,17 +63,33 @@ def getTracks(filenames, sortByFilename= # Directories for directory in [filename for filename in filenames if os.path.isdir(filename)]: mediaFiles, playlists = [], [] + filemap = dict() # filemap[path] -> Set of supported files at :path for root, subdirs, files in os.walk(directory): + fileSet = set() for file in files: - if isSupported(file): mediaFiles.append(os.path.join(root, file)) - elif playlist.isSupported(file): playlists.append(os.path.join(root, file)) + if isSupported(file): + mediaFiles.append(os.path.join(root, file)) + fileSet.add(os.path.join(root, file)) + elif playlist.isSupported(file): + playlists.append(os.path.join(root, file)) + if fileSet: + filemap[root] = fileSet + + for pl in playlists: + path = os.path.dirname(pl) + try: filemap[path] + except KeyError: + # Playlist is not in a mapped directory, so add all referenced files + allTracks.extend(getTracksFromFiles(playlist.load(pl))) + continue + files = playlist.load(pl) + duplicates = set(files) - (set(files) - filemap[path]) + for d in duplicates: files.remove(d) + allTracks.extend(getTracksFromFiles(files)) if sortByFilename: allTracks.extend(sorted(getTracksFromFiles(mediaFiles), lambda t1, t2: cmp(t1.getFilePath(), t2.getFilePath()))) else: allTracks.extend(sorted(getTracksFromFiles(mediaFiles))) - for pl in playlists: - allTracks.extend(getTracksFromFiles(playlist.load(pl))) - # Files tracks = getTracksFromFiles([filename for filename in filenames if os.path.isfile(filename) and isSupported(filename)])