From 87ce309749b7395759127c56b653575b48f467ea Mon Sep 17 00:00:00 2001 From: Thomas Refis Date: Sat, 6 Apr 2013 21:27:59 +0200 Subject: [PATCH 1/9] mpd: playlist name disambiguation --- mopidy/frontends/mpd/dispatcher.py | 24 +++++++++++++++++++ mopidy/frontends/mpd/protocol/music_db.py | 5 ++-- .../mpd/protocol/stored_playlists.py | 4 +++- 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/mopidy/frontends/mpd/dispatcher.py b/mopidy/frontends/mpd/dispatcher.py index 4f0001ac..96a7794e 100644 --- a/mopidy/frontends/mpd/dispatcher.py +++ b/mopidy/frontends/mpd/dispatcher.py @@ -232,9 +232,33 @@ class MpdContext(object): #: The subsytems that we want to be notified about in idle mode. subscriptions = None + #: a map from playlists printing names to uris (necessary as mpd requires + #: playlists names to be unique) + to_uri = None + + #: the invert map (uri to printing name) + from_uri = None + def __init__(self, dispatcher, session=None, core=None): self.dispatcher = dispatcher self.session = session self.core = core self.events = set() self.subscriptions = set() + self.to_uri = dict() + self.from_uri = dict() + self.refresh_maps() + + def refresh_maps(self): + self.to_uri.clear() + self.from_uri.clear() + for playlist in self.core.playlists.playlists.get(): + if not playlist.name: + continue + name = playlist.name + i = 1 + while name in self.to_uri: + name = '%s [%d]' % playlist.name % i + i += 1 + self.to_uri[name] = playlist.uri + self.from_uri[playlist.uri] = name diff --git a/mopidy/frontends/mpd/protocol/music_db.py b/mopidy/frontends/mpd/protocol/music_db.py index c457ee02..efb9a0fd 100644 --- a/mopidy/frontends/mpd/protocol/music_db.py +++ b/mopidy/frontends/mpd/protocol/music_db.py @@ -381,9 +381,8 @@ def searchaddpl(context, playlist_name, mpd_query): return results = context.core.library.search(**query).get() - playlists = context.core.playlists.filter(name=playlist_name).get() - if playlists: - playlist = playlists[0] + if playlist_name in context.to_uri: + playlist = context.core.playlists.lookup(context.to_uri[playlist_name]) else: playlist = context.core.playlists.create(playlist_name).get() tracks = list(playlist.tracks) + _get_tracks(results) diff --git a/mopidy/frontends/mpd/protocol/stored_playlists.py b/mopidy/frontends/mpd/protocol/stored_playlists.py index b1fe87de..4ec2f40c 100644 --- a/mopidy/frontends/mpd/protocol/stored_playlists.py +++ b/mopidy/frontends/mpd/protocol/stored_playlists.py @@ -80,7 +80,9 @@ def listplaylists(context): for playlist in context.core.playlists.playlists.get(): if not playlist.name: continue - result.append(('playlist', playlist.name)) + if playlist.uri not in context.from_uri: + context.refresh_maps() # the maps are not synced, we refresh them + result.append(('playlist', context.from_uri[playlist.uri])) last_modified = ( playlist.last_modified or dt.datetime.utcnow()).isoformat() # Remove microseconds From 698f505da6487abd055f9cd68fb3c665ef858c99 Mon Sep 17 00:00:00 2001 From: Thomas Refis Date: Sun, 7 Apr 2013 14:17:28 +0200 Subject: [PATCH 2/9] mpd: fix style issues and type errors introduced in 87ce309 Tests are now OK --- mopidy/frontends/mpd/dispatcher.py | 33 ++++++++++--------- mopidy/frontends/mpd/protocol/music_db.py | 5 ++- .../mpd/protocol/stored_playlists.py | 2 +- 3 files changed, 22 insertions(+), 18 deletions(-) diff --git a/mopidy/frontends/mpd/dispatcher.py b/mopidy/frontends/mpd/dispatcher.py index 96a7794e..f0842fa7 100644 --- a/mopidy/frontends/mpd/dispatcher.py +++ b/mopidy/frontends/mpd/dispatcher.py @@ -245,20 +245,21 @@ class MpdContext(object): self.core = core self.events = set() self.subscriptions = set() - self.to_uri = dict() - self.from_uri = dict() - self.refresh_maps() + self.to_uri = {} + self.from_uri = {} + self.refresh_playlists_mapping() - def refresh_maps(self): - self.to_uri.clear() - self.from_uri.clear() - for playlist in self.core.playlists.playlists.get(): - if not playlist.name: - continue - name = playlist.name - i = 1 - while name in self.to_uri: - name = '%s [%d]' % playlist.name % i - i += 1 - self.to_uri[name] = playlist.uri - self.from_uri[playlist.uri] = name + def refresh_playlists_mapping(self): + if self.core is not None: + self.to_uri.clear() + self.from_uri.clear() + for playlist in self.core.playlists.playlists.get(): + if not playlist.name: + continue + name = playlist.name + i = 1 + while name in self.to_uri: + name = '%s [%d]' % playlist.name % i + i += 1 + self.to_uri[name] = playlist.uri + self.from_uri[playlist.uri] = name diff --git a/mopidy/frontends/mpd/protocol/music_db.py b/mopidy/frontends/mpd/protocol/music_db.py index efb9a0fd..be641467 100644 --- a/mopidy/frontends/mpd/protocol/music_db.py +++ b/mopidy/frontends/mpd/protocol/music_db.py @@ -381,8 +381,11 @@ def searchaddpl(context, playlist_name, mpd_query): return results = context.core.library.search(**query).get() + if len(context.to_uri) == 0: + context.refresh_playlists_mapping() + if playlist_name in context.to_uri: - playlist = context.core.playlists.lookup(context.to_uri[playlist_name]) + playlist = context.core.playlists.lookup(context.to_uri[playlist_name]).get() else: playlist = context.core.playlists.create(playlist_name).get() tracks = list(playlist.tracks) + _get_tracks(results) diff --git a/mopidy/frontends/mpd/protocol/stored_playlists.py b/mopidy/frontends/mpd/protocol/stored_playlists.py index 4ec2f40c..5d43bc3c 100644 --- a/mopidy/frontends/mpd/protocol/stored_playlists.py +++ b/mopidy/frontends/mpd/protocol/stored_playlists.py @@ -81,7 +81,7 @@ def listplaylists(context): if not playlist.name: continue if playlist.uri not in context.from_uri: - context.refresh_maps() # the maps are not synced, we refresh them + context.refresh_playlists_mapping() # the maps are not synced, we refresh them result.append(('playlist', context.from_uri[playlist.uri])) last_modified = ( playlist.last_modified or dt.datetime.utcnow()).isoformat() From 7d59d03ec060f5f3c5b21421a2f85ee5262d70bb Mon Sep 17 00:00:00 2001 From: Thomas Refis Date: Tue, 9 Apr 2013 11:44:53 +0200 Subject: [PATCH 3/9] mpd: minor style commit --- mopidy/frontends/mpd/dispatcher.py | 36 ++++++++++--------- mopidy/frontends/mpd/protocol/music_db.py | 7 ++-- .../mpd/protocol/stored_playlists.py | 9 ++--- 3 files changed, 29 insertions(+), 23 deletions(-) diff --git a/mopidy/frontends/mpd/dispatcher.py b/mopidy/frontends/mpd/dispatcher.py index f0842fa7..ed2c82a1 100644 --- a/mopidy/frontends/mpd/dispatcher.py +++ b/mopidy/frontends/mpd/dispatcher.py @@ -232,12 +232,9 @@ class MpdContext(object): #: The subsytems that we want to be notified about in idle mode. subscriptions = None - #: a map from playlists printing names to uris (necessary as mpd requires - #: playlists names to be unique) - to_uri = None + playlist_uri_from_name = None - #: the invert map (uri to printing name) - from_uri = None + playlist_name_from_uri = None def __init__(self, dispatcher, session=None, core=None): self.dispatcher = dispatcher @@ -245,21 +242,28 @@ class MpdContext(object): self.core = core self.events = set() self.subscriptions = set() - self.to_uri = {} - self.from_uri = {} + self.playlist_uri_from_name = {} + self.playlist_name_from_uri = {} self.refresh_playlists_mapping() + def create_unique_name(self, name): + i = 1 + while name in self.playlist_uri_from_name: + name = '%s [%d]' % playlist.name % i + i += 1 + return name + def refresh_playlists_mapping(self): + """ + Maintain map between playlists and unique playlist names to be used by + MPD + """ if self.core is not None: - self.to_uri.clear() - self.from_uri.clear() + self.playlist_uri_from_name.clear() + self.playlist_name_from_uri.clear() for playlist in self.core.playlists.playlists.get(): if not playlist.name: continue - name = playlist.name - i = 1 - while name in self.to_uri: - name = '%s [%d]' % playlist.name % i - i += 1 - self.to_uri[name] = playlist.uri - self.from_uri[playlist.uri] = name + name = self.create_unique_name(playlist.name) + self.playlist_uri_from_name[name] = playlist.uri + self.playlist_name_from_uri[playlist.uri] = name diff --git a/mopidy/frontends/mpd/protocol/music_db.py b/mopidy/frontends/mpd/protocol/music_db.py index be641467..11def309 100644 --- a/mopidy/frontends/mpd/protocol/music_db.py +++ b/mopidy/frontends/mpd/protocol/music_db.py @@ -381,11 +381,12 @@ def searchaddpl(context, playlist_name, mpd_query): return results = context.core.library.search(**query).get() - if len(context.to_uri) == 0: + if len(context.playlist_uri_from_name) == 0: context.refresh_playlists_mapping() - if playlist_name in context.to_uri: - playlist = context.core.playlists.lookup(context.to_uri[playlist_name]).get() + if playlist_name in context.playlist_uri_from_name: + uri = context.playlist_uri_from_name[playlist_name] + playlist = context.core.playlists.lookup(uri).get() else: playlist = context.core.playlists.create(playlist_name).get() tracks = list(playlist.tracks) + _get_tracks(results) diff --git a/mopidy/frontends/mpd/protocol/stored_playlists.py b/mopidy/frontends/mpd/protocol/stored_playlists.py index 5d43bc3c..b9fbad06 100644 --- a/mopidy/frontends/mpd/protocol/stored_playlists.py +++ b/mopidy/frontends/mpd/protocol/stored_playlists.py @@ -80,9 +80,11 @@ def listplaylists(context): for playlist in context.core.playlists.playlists.get(): if not playlist.name: continue - if playlist.uri not in context.from_uri: - context.refresh_playlists_mapping() # the maps are not synced, we refresh them - result.append(('playlist', context.from_uri[playlist.uri])) + if playlist.uri not in context.playlist_name_from_uri: + # the maps are not synced, we refresh them + context.refresh_playlists_mapping() + name = context.playlist_name_from_uri[playlist.uri] + result.append(('playlist', name)) last_modified = ( playlist.last_modified or dt.datetime.utcnow()).isoformat() # Remove microseconds @@ -92,7 +94,6 @@ def listplaylists(context): result.append(('Last-Modified', last_modified)) return result - @handle_request(r'^load "(?P[^"]+)"( "(?P\d+):(?P\d+)*")*$') def load(context, name, start=None, end=None): """ From 18a2d1770b47160a3aa8848fa5dacffc2a2effcb Mon Sep 17 00:00:00 2001 From: Thomas Refis Date: Tue, 9 Apr 2013 19:25:10 +0200 Subject: [PATCH 4/9] mpd: bugfix in MpdContext.create_unique_name --- mopidy/frontends/mpd/dispatcher.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mopidy/frontends/mpd/dispatcher.py b/mopidy/frontends/mpd/dispatcher.py index ed2c82a1..0054a6f1 100644 --- a/mopidy/frontends/mpd/dispatcher.py +++ b/mopidy/frontends/mpd/dispatcher.py @@ -246,10 +246,11 @@ class MpdContext(object): self.playlist_name_from_uri = {} self.refresh_playlists_mapping() - def create_unique_name(self, name): + def create_unique_name(self, playlist_name): + name = playlist_name i = 1 while name in self.playlist_uri_from_name: - name = '%s [%d]' % playlist.name % i + name = '%s [%d]' % (playlist_name, i) i += 1 return name From 5af26a226e439a62b99237718421eb8646c62eba Mon Sep 17 00:00:00 2001 From: Thomas Refis Date: Tue, 9 Apr 2013 19:25:52 +0200 Subject: [PATCH 5/9] mpd: added a test to check playlists names uniqueness --- tests/frontends/mpd/protocol/stored_playlists_test.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/frontends/mpd/protocol/stored_playlists_test.py b/tests/frontends/mpd/protocol/stored_playlists_test.py index 49da5d0b..a628deae 100644 --- a/tests/frontends/mpd/protocol/stored_playlists_test.py +++ b/tests/frontends/mpd/protocol/stored_playlists_test.py @@ -64,6 +64,16 @@ class PlaylistsHandlerTest(protocol.BaseTestCase): self.assertInResponse('Last-Modified: 2001-03-17T13:41:17Z') self.assertInResponse('OK') + def test_listplaylists_duplicate(self): + playlist1 = Playlist(name='a', uri='dummy:a1') + playlist2 = Playlist(name='a', uri='dummy:a2') + self.backend.playlists.playlists = [ playlist1 , playlist2 ] + + self.sendRequest('listplaylists') + self.assertInResponse('playlist: a') + self.assertInResponse('playlist: a [1]') + self.assertInResponse('OK') + def test_listplaylists_ignores_playlists_without_name(self): last_modified = datetime.datetime(2001, 3, 17, 13, 41, 17, 12345) self.backend.playlists.playlists = [ From f2000d6e6df362fa9c07379a483d91cf2b67ce88 Mon Sep 17 00:00:00 2001 From: Thomas Refis Date: Tue, 9 Apr 2013 21:31:36 +0200 Subject: [PATCH 6/9] mpd: 'private' fields start with an _ --- mopidy/frontends/mpd/dispatcher.py | 18 +++++++++--------- mopidy/frontends/mpd/protocol/music_db.py | 6 +++--- .../frontends/mpd/protocol/stored_playlists.py | 4 ++-- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/mopidy/frontends/mpd/dispatcher.py b/mopidy/frontends/mpd/dispatcher.py index 0054a6f1..d269786e 100644 --- a/mopidy/frontends/mpd/dispatcher.py +++ b/mopidy/frontends/mpd/dispatcher.py @@ -232,9 +232,9 @@ class MpdContext(object): #: The subsytems that we want to be notified about in idle mode. subscriptions = None - playlist_uri_from_name = None + _playlist_uri_from_name = None - playlist_name_from_uri = None + _playlist_name_from_uri = None def __init__(self, dispatcher, session=None, core=None): self.dispatcher = dispatcher @@ -242,14 +242,14 @@ class MpdContext(object): self.core = core self.events = set() self.subscriptions = set() - self.playlist_uri_from_name = {} - self.playlist_name_from_uri = {} + self._playlist_uri_from_name = {} + self._playlist_name_from_uri = {} self.refresh_playlists_mapping() def create_unique_name(self, playlist_name): name = playlist_name i = 1 - while name in self.playlist_uri_from_name: + while name in self._playlist_uri_from_name: name = '%s [%d]' % (playlist_name, i) i += 1 return name @@ -260,11 +260,11 @@ class MpdContext(object): MPD """ if self.core is not None: - self.playlist_uri_from_name.clear() - self.playlist_name_from_uri.clear() + self._playlist_uri_from_name.clear() + self._playlist_name_from_uri.clear() for playlist in self.core.playlists.playlists.get(): if not playlist.name: continue name = self.create_unique_name(playlist.name) - self.playlist_uri_from_name[name] = playlist.uri - self.playlist_name_from_uri[playlist.uri] = name + self._playlist_uri_from_name[name] = playlist.uri + self._playlist_name_from_uri[playlist.uri] = name diff --git a/mopidy/frontends/mpd/protocol/music_db.py b/mopidy/frontends/mpd/protocol/music_db.py index 11def309..ac7c860a 100644 --- a/mopidy/frontends/mpd/protocol/music_db.py +++ b/mopidy/frontends/mpd/protocol/music_db.py @@ -381,11 +381,11 @@ def searchaddpl(context, playlist_name, mpd_query): return results = context.core.library.search(**query).get() - if len(context.playlist_uri_from_name) == 0: + if len(context._playlist_uri_from_name) == 0: context.refresh_playlists_mapping() - if playlist_name in context.playlist_uri_from_name: - uri = context.playlist_uri_from_name[playlist_name] + if playlist_name in context._playlist_uri_from_name: + uri = context._playlist_uri_from_name[playlist_name] playlist = context.core.playlists.lookup(uri).get() else: playlist = context.core.playlists.create(playlist_name).get() diff --git a/mopidy/frontends/mpd/protocol/stored_playlists.py b/mopidy/frontends/mpd/protocol/stored_playlists.py index b9fbad06..a01e2775 100644 --- a/mopidy/frontends/mpd/protocol/stored_playlists.py +++ b/mopidy/frontends/mpd/protocol/stored_playlists.py @@ -80,10 +80,10 @@ def listplaylists(context): for playlist in context.core.playlists.playlists.get(): if not playlist.name: continue - if playlist.uri not in context.playlist_name_from_uri: + if playlist.uri not in context._playlist_name_from_uri: # the maps are not synced, we refresh them context.refresh_playlists_mapping() - name = context.playlist_name_from_uri[playlist.uri] + name = context._playlist_name_from_uri[playlist.uri] result.append(('playlist', name)) last_modified = ( playlist.last_modified or dt.datetime.utcnow()).isoformat() From 27ff2e5f0ababf6d2a9a4aadb7cf5f3b96942651 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Tue, 9 Apr 2013 23:26:23 +0200 Subject: [PATCH 7/9] Revert "mpd: 'private' fields start with an _" This reverts commit f2000d6e6df362fa9c07379a483d91cf2b67ce88. I did not have the code fresh in mind when saying that these should be prefixed with _. As they are accessed from other classes, they are indeed public, and should not be prefixed. My bad. --- mopidy/frontends/mpd/dispatcher.py | 18 +++++++++--------- mopidy/frontends/mpd/protocol/music_db.py | 6 +++--- .../frontends/mpd/protocol/stored_playlists.py | 4 ++-- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/mopidy/frontends/mpd/dispatcher.py b/mopidy/frontends/mpd/dispatcher.py index d269786e..0054a6f1 100644 --- a/mopidy/frontends/mpd/dispatcher.py +++ b/mopidy/frontends/mpd/dispatcher.py @@ -232,9 +232,9 @@ class MpdContext(object): #: The subsytems that we want to be notified about in idle mode. subscriptions = None - _playlist_uri_from_name = None + playlist_uri_from_name = None - _playlist_name_from_uri = None + playlist_name_from_uri = None def __init__(self, dispatcher, session=None, core=None): self.dispatcher = dispatcher @@ -242,14 +242,14 @@ class MpdContext(object): self.core = core self.events = set() self.subscriptions = set() - self._playlist_uri_from_name = {} - self._playlist_name_from_uri = {} + self.playlist_uri_from_name = {} + self.playlist_name_from_uri = {} self.refresh_playlists_mapping() def create_unique_name(self, playlist_name): name = playlist_name i = 1 - while name in self._playlist_uri_from_name: + while name in self.playlist_uri_from_name: name = '%s [%d]' % (playlist_name, i) i += 1 return name @@ -260,11 +260,11 @@ class MpdContext(object): MPD """ if self.core is not None: - self._playlist_uri_from_name.clear() - self._playlist_name_from_uri.clear() + self.playlist_uri_from_name.clear() + self.playlist_name_from_uri.clear() for playlist in self.core.playlists.playlists.get(): if not playlist.name: continue name = self.create_unique_name(playlist.name) - self._playlist_uri_from_name[name] = playlist.uri - self._playlist_name_from_uri[playlist.uri] = name + self.playlist_uri_from_name[name] = playlist.uri + self.playlist_name_from_uri[playlist.uri] = name diff --git a/mopidy/frontends/mpd/protocol/music_db.py b/mopidy/frontends/mpd/protocol/music_db.py index ac7c860a..11def309 100644 --- a/mopidy/frontends/mpd/protocol/music_db.py +++ b/mopidy/frontends/mpd/protocol/music_db.py @@ -381,11 +381,11 @@ def searchaddpl(context, playlist_name, mpd_query): return results = context.core.library.search(**query).get() - if len(context._playlist_uri_from_name) == 0: + if len(context.playlist_uri_from_name) == 0: context.refresh_playlists_mapping() - if playlist_name in context._playlist_uri_from_name: - uri = context._playlist_uri_from_name[playlist_name] + if playlist_name in context.playlist_uri_from_name: + uri = context.playlist_uri_from_name[playlist_name] playlist = context.core.playlists.lookup(uri).get() else: playlist = context.core.playlists.create(playlist_name).get() diff --git a/mopidy/frontends/mpd/protocol/stored_playlists.py b/mopidy/frontends/mpd/protocol/stored_playlists.py index a01e2775..b9fbad06 100644 --- a/mopidy/frontends/mpd/protocol/stored_playlists.py +++ b/mopidy/frontends/mpd/protocol/stored_playlists.py @@ -80,10 +80,10 @@ def listplaylists(context): for playlist in context.core.playlists.playlists.get(): if not playlist.name: continue - if playlist.uri not in context._playlist_name_from_uri: + if playlist.uri not in context.playlist_name_from_uri: # the maps are not synced, we refresh them context.refresh_playlists_mapping() - name = context._playlist_name_from_uri[playlist.uri] + name = context.playlist_name_from_uri[playlist.uri] result.append(('playlist', name)) last_modified = ( playlist.last_modified or dt.datetime.utcnow()).isoformat() From 24271681c95c31560c2435afd3f7a2673030dcf6 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Tue, 9 Apr 2013 23:28:10 +0200 Subject: [PATCH 8/9] mpd: Fix flake8 warnings --- mopidy/frontends/mpd/protocol/stored_playlists.py | 1 + tests/frontends/mpd/protocol/stored_playlists_test.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/mopidy/frontends/mpd/protocol/stored_playlists.py b/mopidy/frontends/mpd/protocol/stored_playlists.py index b9fbad06..0c9bf050 100644 --- a/mopidy/frontends/mpd/protocol/stored_playlists.py +++ b/mopidy/frontends/mpd/protocol/stored_playlists.py @@ -94,6 +94,7 @@ def listplaylists(context): result.append(('Last-Modified', last_modified)) return result + @handle_request(r'^load "(?P[^"]+)"( "(?P\d+):(?P\d+)*")*$') def load(context, name, start=None, end=None): """ diff --git a/tests/frontends/mpd/protocol/stored_playlists_test.py b/tests/frontends/mpd/protocol/stored_playlists_test.py index a628deae..1936e4c4 100644 --- a/tests/frontends/mpd/protocol/stored_playlists_test.py +++ b/tests/frontends/mpd/protocol/stored_playlists_test.py @@ -67,7 +67,7 @@ class PlaylistsHandlerTest(protocol.BaseTestCase): def test_listplaylists_duplicate(self): playlist1 = Playlist(name='a', uri='dummy:a1') playlist2 = Playlist(name='a', uri='dummy:a2') - self.backend.playlists.playlists = [ playlist1 , playlist2 ] + self.backend.playlists.playlists = [playlist1, playlist2] self.sendRequest('listplaylists') self.assertInResponse('playlist: a') From 016b2db69b1feabc1835b0040725dcb298fe39dd Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Tue, 9 Apr 2013 23:35:00 +0200 Subject: [PATCH 9/9] mpd: Start numbering of duplicate playlist names at 2 --- mopidy/frontends/mpd/dispatcher.py | 2 +- tests/frontends/mpd/protocol/stored_playlists_test.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mopidy/frontends/mpd/dispatcher.py b/mopidy/frontends/mpd/dispatcher.py index 0054a6f1..660e1739 100644 --- a/mopidy/frontends/mpd/dispatcher.py +++ b/mopidy/frontends/mpd/dispatcher.py @@ -248,7 +248,7 @@ class MpdContext(object): def create_unique_name(self, playlist_name): name = playlist_name - i = 1 + i = 2 while name in self.playlist_uri_from_name: name = '%s [%d]' % (playlist_name, i) i += 1 diff --git a/tests/frontends/mpd/protocol/stored_playlists_test.py b/tests/frontends/mpd/protocol/stored_playlists_test.py index 1936e4c4..d837b0fa 100644 --- a/tests/frontends/mpd/protocol/stored_playlists_test.py +++ b/tests/frontends/mpd/protocol/stored_playlists_test.py @@ -71,7 +71,7 @@ class PlaylistsHandlerTest(protocol.BaseTestCase): self.sendRequest('listplaylists') self.assertInResponse('playlist: a') - self.assertInResponse('playlist: a [1]') + self.assertInResponse('playlist: a [2]') self.assertInResponse('OK') def test_listplaylists_ignores_playlists_without_name(self):