diff --git a/whipper/command/mblookup.py b/whipper/command/mblookup.py index 75ebf9f..db8b886 100644 --- a/whipper/command/mblookup.py +++ b/whipper/command/mblookup.py @@ -26,15 +26,15 @@ Example Disc ID: KnpGsLhvH.lPrNc1PBL21lb9Bg4-""" :param md: MusicBrainz's metadata about the disc :type md: `DiscMetadata` """ - print(' Artist: %s' % md.artist.encode('utf-8')) - print(' Title: %s' % md.releaseTitle.encode('utf-8')) - print(' Type: %s' % str(md.releaseType).encode('utf-8')) - print(' URL: %s' % md.url) - print(' Tracks: %d' % len(md.tracks)) - if md.catalogNumber: - print(' Cat no: %s' % md.catalogNumber) + print(' Artist: %s' % md.artist.encode('utf-8')) + print(' Title: %s' % md.releaseTitle.encode('utf-8')) + print(' Type: %s' % str(md.releaseType).encode('utf-8')) + print(' URL: %s' % md.url) + print(' Tracks: %d' % len(md.tracks)) + if md.catalogNumbers: + print(' Cat no(s): %s' % ', '.join(md.catalogNumbers)) if md.barcode: - print(' Barcode: %s' % md.barcode) + print(' Barcode: %s' % md.barcode) for j, track in enumerate(md.tracks): print(' Track %2d: %s - %s' % ( diff --git a/whipper/common/mbngs.py b/whipper/common/mbngs.py index c6a2aaa..f56ae49 100644 --- a/whipper/common/mbngs.py +++ b/whipper/common/mbngs.py @@ -81,8 +81,8 @@ class DiscMetadata: :vartype discNumber: int or None :cvar discTotal: total number of discs in the chosen release :vartype discTotal: int or None - :cvar catalogNumber: release catalog number - :vartype catalogNumber: str or None + :cvar catalogNumbers: release catalog number + :vartype catalogNumbers: list[str] :cvar barcode: release barcode :vartype barcode: str or None """ @@ -103,7 +103,7 @@ class DiscMetadata: mbidArtist = None url = None - catalogNumber = None + catalogNumbers: list[str] barcode = None countries = None discNumber = None @@ -112,6 +112,7 @@ class DiscMetadata: def __init__(self): self.tracks = [] + self.catalogNumbers = [] def _record(record, which, name, what): @@ -289,9 +290,13 @@ def _getMetadata(release, discid=None, country=None): discMD.countries = list(filter(None, countries)) else: discMD.countries = list(filter(None, [release.get('country', None)])) - lil = release.get('label-info-list', [{}]) - if lil: - discMD.catalogNumber = lil[0].get('catalog-number') + lil = release.get('label-info-list', []) + catalog_numbers = [] + for li in lil: + cn = li.get('catalog-number') + if cn and cn not in catalog_numbers: + catalog_numbers.append(cn) + discMD.catalogNumbers = catalog_numbers tainted = False duration = 0 diff --git a/whipper/common/program.py b/whipper/common/program.py index a6a723f..82e0662 100644 --- a/whipper/common/program.py +++ b/whipper/common/program.py @@ -151,8 +151,8 @@ class Program: @staticmethod def addDisambiguation(template_part, metadata): """Add disambiguation to template path part string.""" - if metadata.catalogNumber: - template_part += ' (%s)' % metadata.catalogNumber + if metadata.catalogNumbers: + template_part += ' (%s)' % ', '.join(metadata.catalogNumbers) elif metadata.barcode: template_part += ' (%s)' % metadata.barcode return template_part @@ -221,7 +221,7 @@ class Program: v['d'] = metadata.releaseTitle v['D'] = metadata.title v['B'] = metadata.barcode - v['C'] = metadata.catalogNumber + v['C'] = ', '.join(metadata.catalogNumbers) v['c'] = metadata.releaseDisambCmt v['M'] = metadata.discTotal v['N'] = metadata.discNumber @@ -332,20 +332,20 @@ class Program: print('\nMatching releases:') for metadata in metadatas: - print('\nArtist : %s' % metadata.artist) - print('Title : %s' % metadata.releaseTitle) - print('Duration: %s' % common.formatTime( + print('\nArtist : %s' % metadata.artist) + print('Title : %s' % metadata.releaseTitle) + print('Duration : %s' % common.formatTime( metadata.duration / 1000.0)) - print('URL : %s' % metadata.url) - print('Release : %s' % metadata.mbid) - print('Type : %s' % metadata.releaseType) + print('URL : %s' % metadata.url) + print('Release : %s' % metadata.mbid) + print('Type : %s' % metadata.releaseType) if metadata.barcode: - print("Barcode : %s" % metadata.barcode) + print("Barcode : %s" % metadata.barcode) if metadata.countries: - print("Country : %s" % ', '.join(metadata.countries)) + print("Country : %s" % ', '.join(metadata.countries)) # TODO: Add test for non ASCII catalog numbers: see issue #215 - if metadata.catalogNumber: - print("Cat no : %s" % metadata.catalogNumber) + if metadata.catalogNumbers: + print("Cat no(s): %s" % ', '.join(metadata.catalogNumbers)) delta = abs(metadata.duration - ittoc.duration()) if delta not in deltas: diff --git a/whipper/test/test_common_mbngs.py b/whipper/test/test_common_mbngs.py index 0d306d6..819ee66 100644 --- a/whipper/test/test_common_mbngs.py +++ b/whipper/test/test_common_mbngs.py @@ -287,7 +287,7 @@ class MetadataTestCase(unittest.TestCase): self.assertEqual(metadata.url, 'https://musicbrainz.org/release' '/6109ceed-7e21-490b-b5ad-3a66b4e4cfbb') - self.assertEqual(metadata.catalogNumber, '[none]') + self.assertEqual(metadata.catalogNumbers, ['[none]']) self.assertEqual(metadata.barcode, '700261430249') self.assertEqual(len(metadata.tracks), 16) diff --git a/whipper/test/whipper.discid.xu338_M8WukSRi0J.KTlDoflB8Y-.pickle b/whipper/test/whipper.discid.xu338_M8WukSRi0J.KTlDoflB8Y-.pickle index acf79b7..bf80401 100644 Binary files a/whipper/test/whipper.discid.xu338_M8WukSRi0J.KTlDoflB8Y-.pickle and b/whipper/test/whipper.discid.xu338_M8WukSRi0J.KTlDoflB8Y-.pickle differ