From 1b32b56cf0cf420b66e3d1dcf07a0068fe14c64d Mon Sep 17 00:00:00 2001 From: Thomas Adamcik Date: Tue, 14 Jan 2014 00:31:45 +0100 Subject: [PATCH] mpd: Add support for VFS in add-commands --- mopidy/mpd/protocol/current_playlist.py | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/mopidy/mpd/protocol/current_playlist.py b/mopidy/mpd/protocol/current_playlist.py index b4e22a61..0f7ba901 100644 --- a/mopidy/mpd/protocol/current_playlist.py +++ b/mopidy/mpd/protocol/current_playlist.py @@ -22,10 +22,32 @@ def add(context, uri): """ if not uri: return + tl_tracks = context.core.tracklist.add(uri=uri).get() - if not tl_tracks: + if tl_tracks: + return + + if not uri.startswith('/'): + uri = '/%s' % uri + + browse_futures = [context.core.library.browse(uri)] + lookup_futures = [] + while browse_futures: + for ref in browse_futures.pop().get(): + if ref.type == ref.DIRECTORY: + browse_futures.append(context.core.library.browse(ref.uri)) + else: + lookup_futures.append(context.core.library.lookup(ref.uri)) + + tracks = [] + for future in lookup_futures: + tracks.extend(future.get()) + + if not tracks: raise MpdNoExistError('directory or file not found', command='add') + context.core.tracklist.add(tracks=tracks) + @handle_request(r'addid\ "(?P[^"]*)"(\ "(?P\d+)")*$') def addid(context, uri, songpos=None):