diff --git a/NEWS.txt b/NEWS.txt index 70360af90..c4ad0eeef 100644 --- a/NEWS.txt +++ b/NEWS.txt @@ -10,6 +10,8 @@ Version UNRELEASED - 2012-XX-XX * Change cover art box to open MusicBrainz release rather than Amazon * Support manual drag-and-drop of cover art onto a release via cover art box * Only open browser on left-click of cover art box (PICARD-190) + * Fix Lookup in Browser (previously 'tag lookup') for clusters (PICARD-186) + * Lookup in Browser will now not use MBIDs to lookup unmatched files/clusters Version 0.16 - 2011-10-23 * Added AcoustID support. diff --git a/picard/album.py b/picard/album.py index 2d75781a2..3cbd1461d 100644 --- a/picard/album.py +++ b/picard/album.py @@ -392,6 +392,9 @@ class Album(DataObject, Item): def can_refresh(self): return True + def is_album_like(self): + return True + def get_num_matched_tracks(self): num = 0 for track in self.tracks: @@ -481,3 +484,6 @@ class NatAlbum(Album): def _finalize_loading(self, error): self.update() + + def can_browser_lookup(self): + return False diff --git a/picard/cluster.py b/picard/cluster.py index e8418ff66..fafb3d706 100644 --- a/picard/cluster.py +++ b/picard/cluster.py @@ -121,6 +121,9 @@ class Cluster(QtCore.QObject, Item): def can_browser_lookup(self): return not self.special + def is_album_like(self): + return True + def column(self, column): if column == 'title': return '%s (%d)' % (self.metadata['album'], self.metadata['totaltracks']) diff --git a/picard/tagger.py b/picard/tagger.py index 650479105..ff14334b0 100644 --- a/picard/tagger.py +++ b/picard/tagger.py @@ -407,20 +407,26 @@ class Tagger(QtGui.QApplication): lookup = self.get_file_lookup() getattr(lookup, type + "Search")(text, adv) - def lookup(self, metadata): - """Lookup the metadata on the MusicBrainz website.""" + def browser_lookup(self, item): + """Lookup the object's metadata on the MusicBrainz website.""" lookup = self.get_file_lookup() + metadata = item.metadata albumid = metadata["musicbrainz_albumid"] trackid = metadata["musicbrainz_trackid"] - if trackid: + # Only lookup via MB IDs if matched to a DataObject; otherwise ignore and use metadata details + if isinstance(item, Track) and trackid: lookup.trackLookup(trackid) - elif albumid: + elif isinstance(item, Album) and albumid: lookup.albumLookup(albumid) else: - lookup.tagLookup(metadata["artist"], metadata["album"], - metadata["title"], metadata["tracknumber"], - str(metadata.length), - metadata["~filename"], metadata["musicip_puid"]) + lookup.tagLookup( + metadata["albumartist"] if item.is_album_like() else metadata["artist"], + metadata["album"], + metadata["title"], + metadata["tracknumber"], + '' if item.is_album_like() else str(metadata.length), + item.filename if isinstance(item, File) else '', + metadata["musicip_puid"]) def get_files_from_objects(self, objects, save=False): """Return list of files from list of albums, clusters, tracks or files.""" diff --git a/picard/ui/item.py b/picard/ui/item.py index fb1abfe98..d88302994 100644 --- a/picard/ui/item.py +++ b/picard/ui/item.py @@ -48,3 +48,6 @@ class Item(object): def can_browser_lookup(self): return True + + def is_album_like(self): + return False diff --git a/picard/ui/itemviews.py b/picard/ui/itemviews.py index 055814d46..e4f4ff35e 100644 --- a/picard/ui/itemviews.py +++ b/picard/ui/itemviews.py @@ -232,6 +232,8 @@ class BaseTreeView(QtGui.QTreeWidget): if isinstance(obj, NonAlbumTrack): menu.addAction(self.window.refresh_action) elif isinstance(obj, Cluster): + menu.addAction(self.window.browser_lookup_action) + menu.addSeparator() menu.addAction(self.window.autotag_action) menu.addAction(self.window.analyze_action) if isinstance(obj, UnmatchedFiles): diff --git a/picard/ui/mainwindow.py b/picard/ui/mainwindow.py index 2c99eb456..4aa44c84b 100644 --- a/picard/ui/mainwindow.py +++ b/picard/ui/mainwindow.py @@ -309,8 +309,8 @@ class MainWindow(QtGui.QMainWindow): self.remove_action.setEnabled(False) self.connect(self.remove_action, QtCore.SIGNAL("triggered()"), self.remove) - self.browser_lookup_action = QtGui.QAction(icontheme.lookup('lookup-musicbrainz'), _(u"Lookup in Browser"), self) - self.browser_lookup_action.setStatusTip(_(u"Lookup selected item on MusicBrainz")) + self.browser_lookup_action = QtGui.QAction(icontheme.lookup('lookup-musicbrainz'), _(u"Lookup in &Browser"), self) + self.browser_lookup_action.setStatusTip(_(u"Lookup selected item on MusicBrainz website")) self.browser_lookup_action.setEnabled(False) self.browser_lookup_action.triggered.connect(self.browser_lookup) @@ -450,6 +450,7 @@ class MainWindow(QtGui.QMainWindow): menu.addAction(self.autotag_action) menu.addAction(self.analyze_action) menu.addAction(self.cluster_action) + menu.addAction(self.browser_lookup_action) menu.addSeparator() menu.addAction(self.tags_from_filenames_action) self.menuBar().addSeparator() @@ -675,7 +676,7 @@ been merged with that of single artist albums."""), self.tagger.refresh(self.selected_objects) def browser_lookup(self): - self.tagger.lookup(self.selected_objects[0].metadata) + self.tagger.browser_lookup(self.selected_objects[0]) def update_actions(self): can_remove = False