mirror of
https://github.com/fergalmoran/picard.git
synced 2026-04-21 03:41:22 +00:00
Optimized album updating in the view.
This commit is contained in:
@@ -162,9 +162,9 @@ class Album(DataObject, Item):
|
||||
self._new_tracks = []
|
||||
self._requests = 1
|
||||
if self.config.setting['release_ars'] or self.config.setting['track_ars']:
|
||||
inc = ('tracks', 'artist', 'release-events', 'artist-rels')
|
||||
inc = ('tracks', 'puids', 'artist', 'release-events', 'artist-rels')
|
||||
else:
|
||||
inc = ('tracks', 'artist', 'release-events')
|
||||
inc = ('tracks', 'puids', 'artist', 'release-events')
|
||||
self.tagger.xmlws.get_release_by_id(self.id, self._release_request_finished, inc=inc)
|
||||
|
||||
def update(self, update_tracks=True):
|
||||
|
||||
@@ -25,9 +25,10 @@ class PUIDManager(QtCore.QObject):
|
||||
def __init__(self):
|
||||
QtCore.QObject.__init__(self)
|
||||
self.__puids = {}
|
||||
self.__matches = {}
|
||||
|
||||
def add(self, puid, trackid):
|
||||
"""Add the PUID to the manager."""
|
||||
"""Add a PUID to the manager."""
|
||||
if puid:
|
||||
self.__puids[puid] = [trackid, trackid]
|
||||
self.__check_unsubmitted()
|
||||
@@ -69,3 +70,9 @@ class PUIDManager(QtCore.QObject):
|
||||
except KeyError:
|
||||
pass
|
||||
self.__check_unsubmitted()
|
||||
|
||||
def add_match(self, puid, trackid):
|
||||
self.__matches.setdefault(puid, []).append(trackid)
|
||||
|
||||
def lookup(self, puid):
|
||||
return self.__matches.get(puid, [])
|
||||
|
||||
@@ -114,6 +114,13 @@ class MainPanel(QtGui.QSplitter):
|
||||
self._object_to_item[obj] = item
|
||||
self._item_to_object[item] = obj
|
||||
|
||||
def update_object(self, obj, item):
|
||||
oldobj = self._item_to_object[item]
|
||||
if oldobj != obj:
|
||||
self._object_to_item[obj] = item
|
||||
self._item_to_object[item] = obj
|
||||
del self._object_to_item[oldobj]
|
||||
|
||||
def unregister_object(self, obj=None, item=None):
|
||||
if obj is None and item is not None:
|
||||
obj = self.object_from_item(item)
|
||||
@@ -157,19 +164,17 @@ class MainPanel(QtGui.QSplitter):
|
||||
item.setText(i, cluster.column(column[1]))
|
||||
|
||||
def add_file_to_cluster(self, cluster, file):
|
||||
# http://chatlogs.musicbrainz.org/2007/2007-03/2007-03-24.html#T08-44-16-602562
|
||||
assert isinstance(cluster, Cluster)
|
||||
try:
|
||||
cluster_item = self.item_from_object(cluster)
|
||||
except KeyError:
|
||||
self.log.debug("Item for %r not found", cluster)
|
||||
return
|
||||
if cluster.special == 2 and cluster.files:
|
||||
cluster_item.setHidden(False)
|
||||
self.update_cluster(cluster, cluster_item)
|
||||
item = QtGui.QTreeWidgetItem(cluster_item)
|
||||
self.register_object(file, item)
|
||||
self.update_file(file, item)
|
||||
self.update_cluster(cluster, cluster_item)
|
||||
if cluster.special == 2 and cluster.files:
|
||||
cluster_item.setHidden(False)
|
||||
|
||||
def remove_file_from_cluster(self, cluster, file, index):
|
||||
try:
|
||||
@@ -460,14 +465,28 @@ class AlbumTreeView(BaseTreeView):
|
||||
for i, column in enumerate(self.columns):
|
||||
album_item.setText(i, album.column(column[1]))
|
||||
if update_tracks:
|
||||
items = album_item.takeChildren()
|
||||
for item in items:
|
||||
self.panel.unregister_object(item=item)
|
||||
for track in album.tracks:
|
||||
item = QtGui.QTreeWidgetItem(album_item)
|
||||
self.panel.register_object(track, item)
|
||||
oldnum = album_item.childCount() - 1
|
||||
newnum = len(album.tracks)
|
||||
# remove old items
|
||||
if oldnum > newnum:
|
||||
for i in range(oldnum - newnum):
|
||||
item = album_item.takeChild(newnum - 1)
|
||||
self.panel.unregister_object(item=item)
|
||||
oldnum = newnum
|
||||
# update existing items
|
||||
item = None
|
||||
for i in range(oldnum):
|
||||
item = album_item.child(i)
|
||||
track = album.tracks[i]
|
||||
self.panel.update_object(track, item)
|
||||
self.update_track(track, item)
|
||||
self.add_cluster(album.unmatched_files, album_item)
|
||||
# add new items
|
||||
if newnum > oldnum:
|
||||
for i in range(oldnum, newnum):
|
||||
item = QtGui.QTreeWidgetItem(album_item, item)
|
||||
track = album.tracks[i]
|
||||
self.panel.register_object(track, item)
|
||||
self.update_track(track, item)
|
||||
|
||||
def remove_album(self, album, index):
|
||||
self.panel.unregister_object(album)
|
||||
|
||||
Reference in New Issue
Block a user