Merge pull request #2776 from nguillaumin/skip-non-audio-tracks

Fixes #1210: Skip non-audio tracks from MusicBrainz
This commit is contained in:
Adrian Sampson 2017-12-31 21:02:23 -05:00 committed by GitHub
commit 3272b9356d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 65 additions and 1 deletions

View file

@ -39,6 +39,8 @@ else:
NON_AUDIO_FORMATS = ['Data CD', 'DVD', 'DVD-Video', 'Blu-ray', 'HD-DVD', 'VCD',
'SVCD', 'UMD', 'VHS']
SKIPPED_TRACKS = ['[data track]']
musicbrainzngs.set_useragent('beets', beets.__version__,
'http://beets.io/')
@ -286,6 +288,16 @@ def album_info(release):
all_tracks.insert(0, medium['pregap'])
for track in all_tracks:
if ('title' in track['recording'] and
track['recording']['title'] in SKIPPED_TRACKS):
continue
if ('video' in track['recording'] and
track['recording']['video'] == 'true' and
config['match']['ignore_video_tracks']):
continue
# Basic information from the recording.
index += 1
ti = track_info(

View file

@ -126,5 +126,6 @@ match:
original_year: no
ignored: []
required: []
ignore_video_tracks: yes
track_length_grace: 10
track_length_max: 30

View file

@ -7,7 +7,10 @@ Changelog
Changelog goes here!
Fixes:
* Non-audio media (DVD-Video, etc.) are now skipped by the autotagger. :bug:`2688`
* Non-audio tracks (data tracks, video tracks, etc.) are now skipped by the
autotagger. :bug:`1210`
1.4.6 (December 21, 2017)

View file

@ -774,6 +774,17 @@ want to enforce to the ``required`` setting::
No tags are required by default.
.. _ignore_video_tracks:
ignore_video_tracks
~~~~~~~~~~~~~~~~~~~
By default, video tracks within a release will be ignored. If you want them to
be included (for example if you would like to track the audio-only versions of
the video tracks), set it to ``no``.
Default: ``yes``.
.. _path-format-config:
Path Format Configuration

View file

@ -95,7 +95,7 @@ class MBAlbumInfoTest(_common.TestCase):
})
return release
def _make_track(self, title, tr_id, duration, artist=False):
def _make_track(self, title, tr_id, duration, artist=False, video=False):
track = {
'title': title,
'id': tr_id,
@ -113,6 +113,8 @@ class MBAlbumInfoTest(_common.TestCase):
'name': 'RECORDING ARTIST CREDIT',
}
]
if video:
track['video'] = 'true'
return track
def test_parse_release_with_year(self):
@ -345,6 +347,41 @@ class MBAlbumInfoTest(_common.TestCase):
d = mb.album_info(release)
self.assertEqual(len(d.tracks), 2)
def test_skip_data_track(self):
tracks = [self._make_track('TITLE ONE', 'ID ONE', 100.0 * 1000.0),
self._make_track('[data track]', 'ID DATA TRACK',
100.0 * 1000.0),
self._make_track('TITLE TWO', 'ID TWO', 200.0 * 1000.0)]
release = self._make_release(tracks=tracks)
d = mb.album_info(release)
self.assertEqual(len(d.tracks), 2)
self.assertEqual(d.tracks[0].title, 'TITLE ONE')
self.assertEqual(d.tracks[1].title, 'TITLE TWO')
def test_skip_video_tracks_by_default(self):
tracks = [self._make_track('TITLE ONE', 'ID ONE', 100.0 * 1000.0),
self._make_track('TITLE VIDEO', 'ID VIDEO', 100.0 * 1000.0,
False, True),
self._make_track('TITLE TWO', 'ID TWO', 200.0 * 1000.0)]
release = self._make_release(tracks=tracks)
d = mb.album_info(release)
self.assertEqual(len(d.tracks), 2)
self.assertEqual(d.tracks[0].title, 'TITLE ONE')
self.assertEqual(d.tracks[1].title, 'TITLE TWO')
def test_no_skip_video_tracks_if_configured(self):
config['match']['ignore_video_tracks'] = False
tracks = [self._make_track('TITLE ONE', 'ID ONE', 100.0 * 1000.0),
self._make_track('TITLE VIDEO', 'ID VIDEO', 100.0 * 1000.0,
False, True),
self._make_track('TITLE TWO', 'ID TWO', 200.0 * 1000.0)]
release = self._make_release(tracks=tracks)
d = mb.album_info(release)
self.assertEqual(len(d.tracks), 3)
self.assertEqual(d.tracks[0].title, 'TITLE ONE')
self.assertEqual(d.tracks[1].title, 'TITLE VIDEO')
self.assertEqual(d.tracks[2].title, 'TITLE TWO')
class ParseIDTest(_common.TestCase):
def test_parse_id_correct(self):