X-Git-Url: https://git.kaliko.me/?a=blobdiff_plain;f=sima%2Fmpdclient.py;h=bbc7e071e95d0706a6b063663c792c1ad39d1dad;hb=1c604b5636af7f7eae4d74d5c6de31f4f431b97b;hp=ed2fbcdb37ec31bf93f3b9f497ad4612096bb2fa;hpb=45e8a0624444617ee9e86fe4576d9bb4aedfbb8a;p=mpd-sima.git diff --git a/sima/mpdclient.py b/sima/mpdclient.py index ed2fbcd..bbc7e07 100644 --- a/sima/mpdclient.py +++ b/sima/mpdclient.py @@ -361,9 +361,16 @@ class MPD(MPDClient): found = False if self.use_mbid and artist.mbid: # look for exact search w/ musicbrainz_artistid - found = bool(self.list('artist', f"(MUSICBRAINZ_ARTISTID == '{artist.mbid}')")) - if found: + library = self.list('artist', f"(MUSICBRAINZ_ARTISTID == '{artist.mbid}')") + if library: + found = True self.log.trace('Found mbid "%r" in library', artist) + # library could fetch several artist name for a single MUSICBRAINZ_ARTISTID + if len(library) > 1: + self.log.warning('I got "%s" searching for %r', library, artist) + elif len(library) == 1 and library[0] != artist.name: + self.log.debug('Update artist name %s->%s', artist, library[0]) + artist = Artist(name=library[0], mbid=artist.mbid) # Fetches remaining artists for potential match artists = self._cache['nombid_artists'] else: # not using MusicBrainzIDs @@ -387,6 +394,7 @@ class MPD(MPDClient): self.log.trace('no fuzzy matching for %r', artist) if found: return artist + return None # Now perform fuzzy search for fuzz in match: if fuzz in artist.names: # Already found in lower cased comparison @@ -413,20 +421,21 @@ class MPD(MPDClient): all_artist_titles = frozenset([tr.title for tr in all_tracks if tr.title is not None]) match = get_close_matches(title, all_artist_titles, 50, 0.78) + tracks = [] if not match: return [] for mtitle in match: - leven = levenshtein_ratio(title.lower(), mtitle.lower()) + leven = levenshtein_ratio(title, mtitle) if leven == 1: - pass - elif leven >= 0.79: # PARAM + tracks.extend([t for t in all_tracks if t.title == mtitle]) + elif leven >= 0.77: self.log.debug('title: "%s" should match "%s" (lr=%1.3f)', mtitle, title, leven) + tracks.extend([t for t in all_tracks if t.title == mtitle]) else: self.log.debug('title: "%s" does not match "%s" (lr=%1.3f)', mtitle, title, leven) - return [] - return self.find('artist', artist, 'title', mtitle) + return tracks @blacklist(album=True) def search_albums(self, artist):