Optimized album updating in the view.

This commit is contained in:
Lukáš Lalinský
2007-03-25 13:34:54 +02:00
parent 141dceee9a
commit b4a2bd3d2a
3 changed files with 41 additions and 15 deletions

View File

@@ -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):

View File

@@ -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, [])

View File

@@ -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)