diff --git a/picard/album.py b/picard/album.py index 1c5b62c4d..63e10bb94 100644 --- a/picard/album.py +++ b/picard/album.py @@ -20,7 +20,7 @@ import traceback from collections import deque -from PyQt4 import QtCore +from PyQt4 import QtCore, QtNetwork from picard.metadata import Metadata, run_album_metadata_processors, run_track_metadata_processors from picard.dataobj import DataObject from picard.file import File @@ -122,15 +122,19 @@ class Album(DataObject, Item): if error: self.log.error("%r", unicode(http.errorString())) # Fix for broken NAT releases - files = list(self.unmatched_files.files) - for file in files: - trackid = file.metadata["musicbrainz_trackid"] - if mbid_validate(trackid) and file.metadata["album"] == self.config.setting["nat_name"]: - self.tagger.move_file_to_nat(file, trackid) - self.tagger.nats.update() - if not self.get_num_unmatched_files(): - self.tagger.remove_album(self) - error = False + if error == QtNetwork.QNetworkReply.ContentNotFoundError: + nats = False + nat_name = self.config.setting["nat_name"] + files = list(self.unmatched_files.files) + for file in files: + trackid = file.metadata["musicbrainz_trackid"] + if mbid_validate(trackid) and file.metadata["album"] == nat_name: + nats = True + self.tagger.move_file_to_nat(file, trackid) + self.tagger.nats.update() + if nats and not self.get_num_unmatched_files(): + self.tagger.remove_album(self) + error = False else: try: parsed = self._parse_release(document) diff --git a/picard/mbxml.py b/picard/mbxml.py index 5f5e3cd07..2efcf6ff7 100644 --- a/picard/mbxml.py +++ b/picard/mbxml.py @@ -174,17 +174,26 @@ def label_info_from_node(node): def media_formats_from_node(node): - formats = {} + formats_count = {} + formats_order = [] for medium in node.medium: if "format" in medium.children: text = medium.format[0].text - formats[text] = formats.get(text, 0) + 1 - if formats: - return " + ".join([ - (str(j) + u"×" if j > 1 else "") + RELEASE_FORMATS.get(i, i) - for i, j in formats.items()]) - else: - return "" + else: + text = "(unknown)" + if text in formats_count: + formats_count[text] += 1 + else: + formats_count[text] = 1 + formats_order.append(text) + formats = [] + for format in formats_order: + count = formats_count[format] + format = RELEASE_FORMATS.get(format, format) + if count > 1: + format = str(count) + u"×" + format + formats.append(format) + return " + ".join(formats) def track_to_metadata(node, track, config):