mirror of
https://github.com/fergalmoran/picard.git
synced 2026-02-18 21:53:58 +00:00
Merge pull request #1580 from Gabrielcarvfer/PICARD-1866
PICARD-1866: Update metadatabox if a single file/cluster/track/album metadata changes.
This commit is contained in:
@@ -1178,7 +1178,7 @@ class MainWindow(QtWidgets.QMainWindow, PreserveGeometry):
|
||||
|
||||
if new_selection:
|
||||
self.metadata_box.selection_dirty = True
|
||||
self.metadata_box.update()
|
||||
self.metadata_box.update()
|
||||
self.cover_art_box.set_metadata(metadata, orig_metadata, obj)
|
||||
self.selection_updated.emit(objects)
|
||||
|
||||
|
||||
@@ -232,6 +232,8 @@ class MetadataBox(QtWidgets.QTableWidget):
|
||||
# TR: Keyboard shortcut for "Remove" (tag)
|
||||
self.remove_tag_shortcut = QtWidgets.QShortcut(QtGui.QKeySequence(_("Alt+Shift+R")), self, self.remove_selected_tags)
|
||||
self.preserved_tags = PreservedTags()
|
||||
self._single_file_album = False
|
||||
self._single_track_album = False
|
||||
|
||||
def get_file_lookup(self):
|
||||
"""Return a FileLookup object."""
|
||||
@@ -303,7 +305,7 @@ class MetadataBox(QtWidgets.QTableWidget):
|
||||
else:
|
||||
self.set_tag_values(tag, new)
|
||||
self.editing = None
|
||||
self.update()
|
||||
self.update(drop_album_caches=tag == 'album')
|
||||
|
||||
@staticmethod
|
||||
def _get_editor_value(editor):
|
||||
@@ -400,7 +402,6 @@ class MetadataBox(QtWidgets.QTableWidget):
|
||||
for obj in objects:
|
||||
obj.metadata[tag] = values
|
||||
obj.update()
|
||||
self.update()
|
||||
self.parent.ignore_selection_changes = False
|
||||
|
||||
def remove_tag(self, tag):
|
||||
@@ -450,15 +451,16 @@ class MetadataBox(QtWidgets.QTableWidget):
|
||||
self.selection_mutex.unlock()
|
||||
|
||||
@throttle(100)
|
||||
def update(self):
|
||||
def update(self, drop_album_caches=False):
|
||||
if self.editing:
|
||||
return
|
||||
new_selection = self.selection_dirty
|
||||
if self.selection_dirty:
|
||||
self._update_selection()
|
||||
thread.run_task(self._update_tags, self._update_items,
|
||||
thread.run_task(partial(self._update_tags, new_selection, drop_album_caches), self._update_items,
|
||||
thread_pool=self.tagger.priority_thread_pool)
|
||||
|
||||
def _update_tags(self):
|
||||
def _update_tags(self, new_selection=True, drop_album_caches=False):
|
||||
self.selection_mutex.lock()
|
||||
files = self.files
|
||||
tracks = self.tracks
|
||||
@@ -467,6 +469,24 @@ class MetadataBox(QtWidgets.QTableWidget):
|
||||
if not (files or tracks):
|
||||
return None
|
||||
|
||||
if new_selection or drop_album_caches:
|
||||
self._single_file_album = len(set([file.metadata["album"] for file in files])) == 1
|
||||
self._single_track_album = len(set([track.metadata["album"] for track in tracks])) == 1
|
||||
|
||||
while not new_selection: # Just an if with multiple exit points
|
||||
# If we are dealing with the same selection
|
||||
# skip updates unless it we are dealing with a single file/track
|
||||
if len(files) == 1:
|
||||
break
|
||||
if len(tracks) == 1:
|
||||
break
|
||||
# Or if we are dealing with a single cluster/album
|
||||
if self._single_file_album:
|
||||
break
|
||||
if self._single_track_album:
|
||||
break
|
||||
return self.tag_diff
|
||||
|
||||
self.colors = {
|
||||
TagStatus.NOCHANGE: self.palette().color(QtGui.QPalette.Text),
|
||||
TagStatus.REMOVED: QtGui.QBrush(interface_colors.get_qcolor('tagstatus_removed')),
|
||||
|
||||
Reference in New Issue
Block a user