Improve Other Releases menu

1. Make sorting work
2. Change sequence to reflect importance of matching.
(Note: Not yet implemented, but it would be better if we matched
releases with same number of tracks as Album first.)
3. Add field heading to menu.
This commit is contained in:
Sophist
2014-03-02 20:31:15 +00:00
parent e9c3a5edc6
commit 099146af4a
2 changed files with 14 additions and 8 deletions

View File

@@ -46,16 +46,18 @@ class ReleaseGroup(DataObject):
"""Parse document and return a list of releases"""
del self.versions[:]
data = []
namekeys = ("tracks", "year", "country", "format", "label", "cat no")
extrakeys = ("packaging", "barcode", "disambiguation")
for node in document.metadata[0].release_list[0].release:
labels, catnums = label_info_from_node(node.label_info_list[0])
release = {
"id": node.id,
"date": node.date[0].text if "date" in node.children else "",
"country": node.country[0].text if "country" in node.children else "",
"year": node.date[0].text[:4] if "date" in node.children else "????",
"country": node.country[0].text if "country" in node.children else "??",
"format": media_formats_from_node(node.medium_list[0]),
"labels": ", ".join(set(labels)),
"catnums": ", ".join(set(catnums)),
"label": ", ".join(set(labels)),
"cat no": ", ".join(set(catnums)),
"tracks": " + ".join([m.track_list[0].count for m in node.medium_list[0].medium]),
"barcode":
node.barcode[0].text
@@ -73,13 +75,10 @@ class ReleaseGroup(DataObject):
"_disambiguate_name": list(),
}
data.append(release)
data.sort(key=lambda x: x["date"])
namekeys = ("date", "country", "labels", "catnums", "tracks", "format")
extrakeys = ("packaging", "barcode", "disambiguation")
versions = defaultdict(list)
for release in data:
name = " / ".join(filter(None, (release[k] for k in namekeys))).replace("&", "&&")
name = " / ".join([release[k] for k in namekeys]).replace("&", "&&")
if name == release["tracks"]:
name = "%s / %s" % (_('[no release info]'), name)
versions[name].append(release)
@@ -97,6 +96,8 @@ class ReleaseGroup(DataObject):
dis = " / ".join(filter(None, uniqify(release['_disambiguate_name']))).replace("&", "&&")
disname = name if not dis else name + ' / ' + dis
self.versions.append({'id': release['id'], 'name': disname})
self.versions.sort(key=lambda x: x['name'])
self.version_headings = " / ".join([k.title() for k in namekeys])
def _request_finished(self, callback, document, http, error):
try:

View File

@@ -301,6 +301,11 @@ class BaseTreeView(QtGui.QTreeWidget):
if len(self.selectedIndexes()) == len(MainPanel.columns):
def _add_other_versions():
releases_menu.removeAction(loading)
heading = releases_menu.addAction(obj.release_group.version_headings)
heading.setDisabled(True)
font = heading.font()
font.setBold(True)
heading.setFont(font)
for version in obj.release_group.versions:
action = releases_menu.addAction(version["name"])
action.setCheckable(True)