Skip to content

Commit

Permalink
Fixes beetbox#2688: Skip non-audio media from MusicBrainz
Browse files Browse the repository at this point in the history
Some releases have non-audio media, such as CD+DVD or CD+DVD-Video. Skip
these media when fetching album info as they will never match audio
tracks and will always report missing tracks.

I took the naive approach of cherry-picking a list of media suspected to
not contain audio from the MusicBrainz formats list:

https://musicbrainz.org/doc/Release/Format
  • Loading branch information
Nicolas Guillaumin committed Dec 30, 2017
1 parent 721fedd commit e685cb0
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 2 deletions.
6 changes: 6 additions & 0 deletions beets/autotag/mb.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@
else:
BASE_URL = 'http://musicbrainz.org/'

NON_AUDIO_FORMATS = ['Data CD', 'DVD', 'DVD-Video', 'Blu-ray', 'HD-DVD', 'VCD',
'SVCD', 'UMD', 'VHS']

musicbrainzngs.set_useragent('beets', beets.__version__,
'http://beets.io/')

Expand Down Expand Up @@ -275,6 +278,9 @@ def album_info(release):
disctitle = medium.get('title')
format = medium.get('format')

if format in NON_AUDIO_FORMATS:
continue

all_tracks = medium['track-list']
if 'pregap' in medium:
all_tracks.insert(0, medium['pregap'])
Expand Down
4 changes: 4 additions & 0 deletions docs/changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ Changelog

Changelog goes here!

Fixes:
* Non-audio media (DVD-Video, etc.) are now skipped by the autotagger.
:bug:`2688`


1.4.6 (December 21, 2017)
-------------------------
Expand Down
25 changes: 23 additions & 2 deletions test/test_mb.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@

class MBAlbumInfoTest(_common.TestCase):
def _make_release(self, date_str='2009', tracks=None, track_length=None,
track_artist=False):
track_artist=False, medium_format='FORMAT'):
release = {
'title': 'ALBUM TITLE',
'id': 'ALBUM ID',
Expand Down Expand Up @@ -90,7 +90,7 @@ def _make_release(self, date_str='2009', tracks=None, track_length=None,
release['medium-list'].append({
'position': '1',
'track-list': track_list,
'format': 'FORMAT',
'format': medium_format,
'title': 'MEDIUM TITLE',
})
return release
Expand Down Expand Up @@ -324,6 +324,27 @@ def test_data_source(self):
d = mb.album_info(release)
self.assertEqual(d.data_source, 'MusicBrainz')

def test_skip_non_audio_dvd(self):
tracks = [self._make_track('TITLE ONE', 'ID ONE', 100.0 * 1000.0),
self._make_track('TITLE TWO', 'ID TWO', 200.0 * 1000.0)]
release = self._make_release(tracks=tracks, medium_format="DVD")
d = mb.album_info(release)
self.assertEqual(len(d.tracks), 0)

def test_skip_non_audio_dvd_video(self):
tracks = [self._make_track('TITLE ONE', 'ID ONE', 100.0 * 1000.0),
self._make_track('TITLE TWO', 'ID TWO', 200.0 * 1000.0)]
release = self._make_release(tracks=tracks, medium_format="DVD-Video")
d = mb.album_info(release)
self.assertEqual(len(d.tracks), 0)

def test_no_skip_dvd_audio(self):
tracks = [self._make_track('TITLE ONE', 'ID ONE', 100.0 * 1000.0),
self._make_track('TITLE TWO', 'ID TWO', 200.0 * 1000.0)]
release = self._make_release(tracks=tracks, medium_format="DVD-Audio")
d = mb.album_info(release)
self.assertEqual(len(d.tracks), 2)


class ParseIDTest(_common.TestCase):
def test_parse_id_correct(self):
Expand Down

0 comments on commit e685cb0

Please sign in to comment.