* Honor MPC password/host format on command line option 'host'
* Fixed fuzzy search for short artist names
* Client side hardcoded one month caching (ugly workaround for #7)
+ * Simplified album search
+ * Track search aggregates artist name and MusicBrainzID searches
-- kaliko jack <kaliko@azylum.org> UNRELEASED
'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))
+ 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
match = get_close_matches(title, all_artist_titles, 50, 0.78)
if not match:
return []
- for title_ in match:
- leven = levenshtein_ratio(title.lower(), title_.lower())
+ for mtitle in match:
+ leven = levenshtein_ratio(title.lower(), mtitle.lower())
if leven == 1:
pass
elif leven >= 0.79: # PARAM
self.log.debug('title: "%s" should match "%s" (lr=%1.3f)',
- title_, title, leven)
+ mtitle, title, leven)
else:
self.log.debug('title: "%s" does not match "%s" (lr=%1.3f)',
- title_, title, leven)
+ mtitle, title, leven)
return []
- return self.find('artist', artist, 'title', title_)
+ return self.find('artist', artist, 'title', mtitle)
def find_album(self, artist, album):
"""
Special wrapper around album search:
Album lookup is made through AlbumArtist/Album instead of Artist/Album
+ MPD falls back to Artist if AlbumArtist is not found (cf. documentation)
"""
- alb_art_search = self.find('albumartist', artist, 'album', album)
- if alb_art_search:
- return alb_art_search
- return self.find('artist', artist, 'album', album)
+ return self.find('albumartist', artist, 'album', album)
@blacklist(album=True)
def search_albums(self, artist):
* not blacklisted
"""
artist = tracks[0].artist
+ # In random play mode use complete playlist to filter
if self.player.playmode.get('random'):
black_list = self.player.playlist + self.to_add
else:
if not self.player.playlist:
return
history = list(self.history)
+ # In random play mode use complete playlist to filter
if self.player.playmode.get('random'):
history = self.player.playlist + history
else:
if not ret:
self.log.warning('Got nothing from music library.')
return []
+ # In random play mode use complete playlist to filter
if self.player.playmode.get('random'):
queued_artists = MetaContainer([trk.Artist for trk in self.player.playlist])
else:
album_to_queue = str()
random.shuffle(albums_not_in_hist)
for album in albums_not_in_hist:
- tracks = self.player.find_album(artist, album)
- # Look if one track of the album is already queued
- # Good heuristic, at least enough to guess if the whole album is
- # already queued.
- if tracks[0] in self.player.queue:
- self.log.debug('"%s" already queued, skipping!', tracks[0].album)
+ # Controls the album found is not already queued
+ if album in {t.album for t in self.player.queue}:
+ self.log.debug('"%s" already queued, skipping!', album)
continue
- if tracks[0] in self.player.playlist:
- if self.player.playmode.get('random'):
- self.log.debug('"%s" already in playlist, skipping!', tracks[0].album)
+ # In random play mode use complete playlist to filter
+ if self.player.playmode.get('random'):
+ if album in {t.album for t in self.player.playlist}:
+ self.log.debug('"%s" already in playlist, skipping!', album)
continue
album_to_queue = album
if not album_to_queue: