X-Git-Url: https://git.kaliko.me/?a=blobdiff_plain;f=sima%2Fclient.py;h=499250fccd2d04c01ad96fab717a9b5a79b6c13d;hb=4a9e3fe83539718e1609e250869d5e42216c4204;hp=b8ccea522a2ee62993ee22beb42b631120e42c4a;hpb=6402445cb58902ab23298df19c020bd453914048;p=mpd-sima.git diff --git a/sima/client.py b/sima/client.py index b8ccea5..499250f 100644 --- a/sima/client.py +++ b/sima/client.py @@ -159,26 +159,28 @@ class PlayerClient(Player): else: self.log.info('Player: Initialising cache!') self._cache = { - 'artists': None, - 'nombid_artists': None, + 'artists': frozenset(), + 'nombid_artists': frozenset(), } - self._cache['artists'] = frozenset(self._client.list('artist')) - self._cache['nombid_artists'] = frozenset(self._client.list('artist', 'musicbrainz_artistid', '')) + self._cache['artists'] = frozenset(self._execute('list', ['artist'])) + if Artist.use_mbid: + self._cache['nombid_artists'] = frozenset(self._execute('list', ['artist', 'musicbrainz_artistid', ''])) @blacklist(track=True) def find_track(self, artist, title=None): tracks = set() - for name in artist.names: - if title: - tracks |= set(self.find('artist', name, 'title', title)) - else: - tracks |= set(self.find('artist', name)) if artist.mbid: if title: - tracks |= set(self.find('musicbrainz_artistid', artist.mbid)) - else: tracks |= set(self.find('musicbrainz_artistid', artist.mbid, 'title', title)) + else: + tracks |= set(self.find('musicbrainz_artistid', artist.mbid)) + else: + for name in artist.names: + if title: + tracks |= set(self.find('artist', name, 'title', title)) + else: + tracks |= set(self.find('artist', name)) return list(tracks) @bl_artist @@ -195,15 +197,20 @@ class PlayerClient(Player): found = False if artist.mbid: # look for exact search w/ musicbrainz_artistid - [artist.add_alias(name) for name in - self._client.list('artist', 'musicbrainz_artistid', artist.mbid)] - if artist.aliases: + exact_m = self._execute('list', ['artist', 'musicbrainz_artistid', artist.mbid]) + if exact_m: + [artist.add_alias(name) for name in exact_m] found = True else: artist = Artist(name=artist.name) # then complete with fuzzy search on artist with no musicbrainz_artistid - nombid_artists = self._cache.get('nombid_artists', []) - match = get_close_matches(artist.name, nombid_artists, 50, 0.73) + if artist.mbid: + # we already performed a lookup on artists with mbid set + # search through remaining artists + artists = self._cache.get('nombid_artists') + else: + artists = self._cache.get('artists') + match = get_close_matches(artist.name, artists, 50, 0.73) if not match and not found: return if len(match) > 1: @@ -292,7 +299,7 @@ class PlayerClient(Player): arts = set([trk.artist for trk in album_trks]) if len(set(arts)) < 2: # TODO: better heuristic, use a ratio instead if album not in albums: - albums.append(Album(name=album, albumartist=artist)) + albums.append(Album(name=album, **kwalbart)) elif album and album not in albums: self.log.debug('"{0}" probably not an album of "{1}"'.format( album, artist) + '({0})'.format('/'.join(arts))) @@ -326,7 +333,7 @@ class PlayerClient(Player): def add(self, track): """Overriding MPD's add method to accept add signature with a Track object""" - self._client.add(track.file) + self._execute('add', [track.file]) @property def artists(self):