PICARD-34: Add a AcoustId column to main panel

This column both shows the AcoustId and a fingerprint icon indicating that the fingerprint was generated for the file.
This commit is contained in:
Philipp Wolfer
2019-12-15 18:28:23 +01:00
parent 515df3a0aa
commit 7409113624

View File

@@ -137,8 +137,12 @@ class MainPanel(QtWidgets.QSplitter):
(N_('Barcode'), 'barcode'),
(N_('Media'), 'media'),
(N_('Genre'), 'genre'),
(N_('AcoustId'), 'acoustid_id'),
]
TITLE_COLUMN = 0
FINGERPRINT_COLUMN = 13
def __init__(self, window, parent=None):
super().__init__(parent)
self.window = window
@@ -195,6 +199,8 @@ class MainPanel(QtWidgets.QSplitter):
FileItem.icon_file_pending = QtGui.QIcon(":/images/file-pending.png")
FileItem.icon_error = icontheme.lookup('dialog-error', icontheme.ICON_SIZE_MENU)
FileItem.icon_saved = QtGui.QIcon(":/images/track-saved.png")
FileItem.icon_fingerprint_none = QtGui.QIcon()
FileItem.icon_fingerprint = icontheme.lookup('picard-fingerprint', icontheme.ICON_SIZE_MENU)
FileItem.match_icons = [
QtGui.QIcon(":/images/match-50.png"),
QtGui.QIcon(":/images/match-60.png"),
@@ -716,7 +722,7 @@ class FileTreeView(BaseTreeView):
self.set_clusters_text()
def set_clusters_text(self):
self.clusters.setText(0, '%s (%d)' % (_("Clusters"), len(self.tagger.clusters)))
self.clusters.setText(MainPanel.TITLE_COLUMN, '%s (%d)' % (_("Clusters"), len(self.tagger.clusters)))
class AlbumTreeView(BaseTreeView):
@@ -736,7 +742,7 @@ class AlbumTreeView(BaseTreeView):
self.insertTopLevelItem(0, item)
else:
item = AlbumItem(album, True, self)
item.setIcon(0, AlbumItem.icon_cd)
item.setIcon(MainPanel.TITLE_COLUMN, AlbumItem.icon_cd)
for i, column in enumerate(MainPanel.columns):
font = item.font(i)
font.setBold(True)
@@ -777,7 +783,7 @@ class ClusterItem(TreeItem):
def __init__(self, *args):
super().__init__(*args)
self.setIcon(0, ClusterItem.icon_dir)
self.setIcon(MainPanel.TITLE_COLUMN, ClusterItem.icon_dir)
def update(self):
for i, column in enumerate(MainPanel.columns):
@@ -843,22 +849,22 @@ class AlbumItem(TreeItem):
for item in items: # Update after insertChildren so that setExpanded works
item.update(update_album=False)
if album.errors:
self.setIcon(0, AlbumItem.icon_error)
self.setToolTip(0, _("Error"))
self.setIcon(MainPanel.TITLE_COLUMN, AlbumItem.icon_error)
self.setToolTip(MainPanel.TITLE_COLUMN, _("Error"))
elif album.is_complete():
if album.is_modified():
self.setIcon(0, AlbumItem.icon_cd_saved_modified)
self.setToolTip(0, _("Album modified and complete"))
self.setIcon(MainPanel.TITLE_COLUMN, AlbumItem.icon_cd_saved_modified)
self.setToolTip(MainPanel.TITLE_COLUMN, _("Album modified and complete"))
else:
self.setIcon(0, AlbumItem.icon_cd_saved)
self.setToolTip(0, _("Album unchanged and complete"))
self.setIcon(MainPanel.TITLE_COLUMN, AlbumItem.icon_cd_saved)
self.setToolTip(MainPanel.TITLE_COLUMN, _("Album unchanged and complete"))
else:
if album.is_modified():
self.setIcon(0, AlbumItem.icon_cd_modified)
self.setToolTip(0, _("Album modified"))
self.setIcon(MainPanel.TITLE_COLUMN, AlbumItem.icon_cd_modified)
self.setToolTip(MainPanel.TITLE_COLUMN, _("Album modified"))
else:
self.setIcon(0, AlbumItem.icon_cd)
self.setToolTip(0, _("Album unchanged"))
self.setIcon(MainPanel.TITLE_COLUMN, AlbumItem.icon_cd)
self.setToolTip(MainPanel.TITLE_COLUMN, _("Album unchanged"))
for i, column in enumerate(MainPanel.columns):
self.setText(i, album.column(column[1]))
if selection_changed:
@@ -891,11 +897,15 @@ class TrackItem(TreeItem):
color = TrackItem.track_colors[file.state]
bgcolor = get_match_color(file.similarity, TreeItem.base_color)
icon = FileItem.decide_file_icon(file)
self.setToolTip(0, _(FileItem.decide_file_icon_info(file)))
self.setToolTip(MainPanel.TITLE_COLUMN, _(FileItem.decide_file_icon_info(file)))
self.takeChildren()
self.setExpanded(False)
self.setIcon(MainPanel.FINGERPRINT_COLUMN, FileItem.decide_fingerprint_icon(file))
self.setToolTip(MainPanel.FINGERPRINT_COLUMN, FileItem.decide_fingerprint_icon_info(file))
else:
self.setToolTip(0, "")
self.setToolTip(MainPanel.TITLE_COLUMN, "")
self.setIcon(MainPanel.FINGERPRINT_COLUMN, FileItem.icon_fingerprint_none)
self.setToolTip(MainPanel.FINGERPRINT_COLUMN, "")
if track.ignored_for_completeness():
color = TreeItem.text_color_secondary
else:
@@ -929,10 +939,10 @@ class TrackItem(TreeItem):
self.addChildren(items)
self.setExpanded(True)
if track.error:
self.setIcon(0, TrackItem.icon_error)
self.setToolTip(0, track.error)
self.setIcon(MainPanel.TITLE_COLUMN, TrackItem.icon_error)
self.setToolTip(MainPanel.TITLE_COLUMN, track.error)
else:
self.setIcon(0, icon)
self.setIcon(MainPanel.TITLE_COLUMN, icon)
for i, column in enumerate(MainPanel.columns):
self.setText(i, track.column(column[1]))
self.setForeground(i, color)
@@ -947,7 +957,9 @@ class FileItem(TreeItem):
def update(self, update_track=True):
file = self.obj
self.setIcon(0, FileItem.decide_file_icon(file))
self.setIcon(MainPanel.TITLE_COLUMN, FileItem.decide_file_icon(file))
self.setIcon(MainPanel.FINGERPRINT_COLUMN, self.decide_fingerprint_icon(file))
self.setToolTip(MainPanel.FINGERPRINT_COLUMN, self.decide_fingerprint_icon_info(file))
color = FileItem.file_colors[file.state]
bgcolor = get_match_color(file.similarity, TreeItem.base_color)
for i, column in enumerate(MainPanel.columns):
@@ -989,3 +1001,20 @@ class FileItem(TreeItem):
return FileItem.match_icons_info[int(file.similarity * 5 + 0.5)]
elif file.state == File.PENDING:
return N_("Pending")
@staticmethod
def decide_fingerprint_icon(file):
if getattr(file, 'acoustid_fingerprint', None):
return FileItem.icon_fingerprint
else:
return FileItem.icon_fingerprint_none
@staticmethod
def decide_fingerprint_icon_info(file):
acoustid = file.metadata['acoustid_id']
if acoustid:
return acoustid
elif getattr(file, 'acoustid_fingerprint', None):
return _('Fingerprint calculated')
else:
return _('No fingerprint was calculated for this file, use "Scan" or "Generate AcoustID fingerprints" to calculate the fingerprint.')