]> kaliko git repositories - mpd-sima.git/blobdiff - sima/mpdclient.py
MPD client: Use command list to add multiple tracks
[mpd-sima.git] / sima / mpdclient.py
index d13c8cb417e44662e37bed1aef7a3a56db3fb9a1..afc51dc4691e087fb4e5b351e3a732d53f390a98 100644 (file)
@@ -249,8 +249,10 @@ class MPD(MPDClient):
         if isinstance(payload, Track):
             super().__getattr__('add')(payload.file)
         elif isinstance(payload, list):
+            self.command_list_ok_begin()
             for tr in payload:  # TODO: use send command here
                 self.add(tr)
+            results = client.command_list_end()
         else:
             self.log.error('Cannot add %s', payload)
 
@@ -289,14 +291,6 @@ class MPD(MPDClient):
     # ######### / Properties ###################
 
 # #### find_tracks ####
-    def find_album(self, artist, album_name):
-        self.log.warning('update call to find_album→find_tracks(<Album object>)')
-        return self.find_tracks(Album(name=album_name, artist=artist))
-
-    def find_track(self, *args, **kwargs):
-        self.log.warning('update call to find_track→find_tracks')
-        return self.find_tracks(*args, **kwargs)
-
     def find_tracks(self, what):
         """Find tracks for a specific artist or album
             >>> player.find_tracks(Artist('Nirvana'))
@@ -315,28 +309,29 @@ class MPD(MPDClient):
 
     def _find_art(self, artist):
         tracks = set()
-        if artist.mbid:
+        if self.use_mbid and artist.mbid:
             tracks |= set(self.find('musicbrainz_artistid', artist.mbid))
         for name in artist.names:
             tracks |= set(self.find('artist', name))
         return list(tracks)
 
     def _find_alb(self, album):
-        albums = set()
         if album.mbid and self.use_mbid:
             filt = f'(MUSICBRAINZ_ALBUMID == {album.mbid})'
-            albums |= set(self.find(filt))
+            return self.find(filt)
         # Now look for album with no MusicBrainzIdentifier
         if album.artist.mbid and self.use_mbid:  # Use album artist MBID if possible
             filt = f"((MUSICBRAINZ_ALBUMARTISTID == '{album.artist.mbid}') AND (album == '{album!s}'))"
-            albums |= set(self.find(filt))
-        if not albums:  # Falls back to albumartist/album name
-            filt = f"((albumartist == '{album.artist!s}') AND (album == '{album!s}'))"
-            albums |= set(self.find(filt))
-        if not albums:  # Falls back to artist/album name
+            return self.find(filt)
+        tracks = []
+        # Falls back to albumartist/album name
+        filt = f"((albumartist == '{album.artist!s}') AND (album == '{album!s}'))"
+        tracks = self.find(filt)
+        # Falls back to artist/album name
+        if not tracks:
             filt = f"((artist == '{album.artist!s}') AND (album == '{album!s}'))"
-            albums |= set(self.find(filt))
-        return list(albums)
+            tracks = self.find(filt)
+        return tracks
 # #### / find_tracks ##
 
 # #### Search Methods #####
@@ -350,12 +345,11 @@ class MPD(MPDClient):
             >>> ['The Beatles', 'Beatles', 'the beatles']
 
         Returns an Artist object
-        TODO: Re-use find method here!!!
         """
         found = False
-        if artist.mbid:
+        if self.use_mbid and artist.mbid:
             # look for exact search w/ musicbrainz_artistid
-            exact_m = self.list('artist', 'musicbrainz_artistid', artist.mbid)
+            exact_m = self.list('artist', f"(MUSICBRAINZ_ARTISTID == '{artist.mbid}')")
             if exact_m:
                 _ = [artist.add_alias(name) for name in exact_m]
                 found = True
@@ -445,7 +439,7 @@ class MPD(MPDClient):
                 if album and album not in albums:
                     albums.append(Album(name=album, **kwalbart))
             for album in self.list('album', 'artist', name):
-                album_trks = [trk for trk in self.find('album', album)]
+                album_trks = self.find_tracks(Album(name=album, artist=Artist(name=name)))
                 if 'Various Artists' in [tr.albumartist for tr in album_trks]:
                     self.log.debug('Discarding %s ("Various Artists" set)', album)
                     continue