def item_candidates(self, item): last_data = match(item.path) if not last_data: return () # Have a MusicBrainz track ID? if last_data['track_mbid']: log.debug('Have a track ID from last.fm: %s' % last_data['track_mbid']) id_track = mb.track_for_id(last_data['track_mbid']) if id_track: log.debug('Matched by track ID.') return (id_track,) # Do a full search. criteria = { 'artist': last_data['artist'], 'track': last_data['title'], } if last_data['artist_mbid']: criteria['artistid'] = last_data['artist_mbid'] cands = list(mb.find_tracks(criteria)) log.debug('Matched last track candidates: %s' % ', '.join([cand['title'] for cand in cands])) return cands
def track_for_mbid(recording_id): """Get a TrackInfo object for a MusicBrainz recording ID. Return None if the ID is not found. """ try: return mb.track_for_id(recording_id) except mb.MusicBrainzAPIError as exc: exc.log(log)
def track_for_mbid(recording_id): """Get a TrackInfo object for a MusicBrainz recording ID. Return None if the ID is not found. """ try: track = mb.track_for_id(recording_id) if track: plugins.send('trackinfo_received', info=track) return track except mb.MusicBrainzAPIError as exc: exc.log(log)
def track_for_mbid(recording_id): """Get a TrackInfo object for a MusicBrainz recording ID. Return None if the ID is not found. """ try: track = mb.track_for_id(recording_id) if track: plugins.send(u'trackinfo_received', info=track) return track except mb.MusicBrainzAPIError as exc: exc.log(log)
def tag_item(item, timid=False, search_artist=None, search_title=None, search_id=None): """Attempts to find metadata for a single track. Returns a `(candidates, recommendation)` pair where `candidates` is a list of `(distance, track_info)` pairs. `search_artist` and `search_title` may be used to override the current metadata for the purposes of the MusicBrainz title; likewise `search_id`. """ candidates = [] # First, try matching by MusicBrainz ID. trackid = search_id or item.mb_trackid if trackid: log.debug('Searching for track ID: ' + trackid) track_info = mb.track_for_id(trackid) if track_info: dist = track_distance(item, track_info, incl_artist=True) candidates.append((dist, track_info)) # If this is a good match, then don't keep searching. rec = recommendation(candidates) if rec == RECOMMEND_STRONG and not timid: log.debug('Track ID match.') return candidates, rec # If we're searching by ID, don't proceed. if search_id is not None: if candidates: return candidates, rec else: return [], RECOMMEND_NONE # Search terms. if not (search_artist and search_title): search_artist, search_title = item.artist, item.title log.debug(u'Item search terms: %s - %s' % (search_artist, search_title)) # Candidate metadata from search. for track_info in mb.match_track(search_artist, search_title): dist = track_distance(item, track_info, incl_artist=True) candidates.append((dist, track_info)) # Add candidates from plugins. for track_info in plugins.item_candidates(item): dist = track_distance(item, track_info, incl_artist=True) candidates.append((dist, track_info)) # Sort by distance and return with recommendation. log.debug('Found %i candidates.' % len(candidates)) candidates.sort() rec = recommendation(candidates) return candidates, rec
def _track_for_id(track_id): """Get an item for a recording ID.""" candidates = [] # From MusicBrainz. try: candidates.append(mb.track_for_id(track_id)) except mb.MusicBrainzAPIError as exc: exc.log(log) # From plugins. candidates.extend(plugins.track_for_id(track_id)) return filter(None, candidates)
def item_candidates(self, item): last_data = match(item.path) if not last_data: return () # Have a MusicBrainz track ID? if last_data["track_mbid"]: log.debug("Have a track ID from last.fm: %s" % last_data["track_mbid"]) id_track = mb.track_for_id(last_data["track_mbid"]) if id_track: log.debug("Matched by track ID.") return (id_track,) # Do a full search. criteria = {"artist": last_data["artist"], "track": last_data["title"]} if last_data["artist_mbid"]: criteria["artistid"] = last_data["artist_mbid"] cands = list(mb.find_tracks(criteria)) log.debug("Matched last track candidates: %s" % ", ".join([cand["title"] for cand in cands])) return cands
def _track_for_id(track_id): """Get an item for a recording MBID.""" try: return mb.track_for_id(track_id) except mb.MusicBrainzAPIError as exc: exc.log(log)
def _track_for_id(track_id): """Get an item for a recording MBID.""" return mb.track_for_id(track_id)