mirror of
https://github.com/beetbox/beets.git
synced 2026-02-13 10:51:59 +01:00
Merge pull request #1638 from jdetrey/master
Take the audio tracks in a data track into account.
This commit is contained in:
commit
965640859c
3 changed files with 63 additions and 9 deletions
|
|
@ -281,6 +281,10 @@ def album_info(release):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
all_tracks = medium['track-list']
|
all_tracks = medium['track-list']
|
||||||
|
if 'data-track-list' in medium:
|
||||||
|
all_tracks += medium['data-track-list']
|
||||||
|
track_count = len(all_tracks)
|
||||||
|
|
||||||
if 'pregap' in medium:
|
if 'pregap' in medium:
|
||||||
all_tracks.insert(0, medium['pregap'])
|
all_tracks.insert(0, medium['pregap'])
|
||||||
|
|
||||||
|
|
@ -302,7 +306,7 @@ def album_info(release):
|
||||||
index,
|
index,
|
||||||
int(medium['position']),
|
int(medium['position']),
|
||||||
int(track['position']),
|
int(track['position']),
|
||||||
len(medium['track-list']),
|
track_count,
|
||||||
)
|
)
|
||||||
ti.disctitle = disctitle
|
ti.disctitle = disctitle
|
||||||
ti.media = format
|
ti.media = format
|
||||||
|
|
|
||||||
|
|
@ -103,6 +103,9 @@ Fixes:
|
||||||
to which a track belongs, not the total number of different mediums present
|
to which a track belongs, not the total number of different mediums present
|
||||||
on the release. :bug:`2887`
|
on the release. :bug:`2887`
|
||||||
Thanks to :user:`dbogdanov`.
|
Thanks to :user:`dbogdanov`.
|
||||||
|
* The importer now supports audio files contained in data tracks when they are
|
||||||
|
listed in MusicBrainz: the corresponding audio tracks are now merged into the
|
||||||
|
main track list. Thanks to :user:`jdetrey`. :bug:`1638`
|
||||||
* :doc:`/plugins/keyfinder`: Avoid a crash when trying to process unmatched
|
* :doc:`/plugins/keyfinder`: Avoid a crash when trying to process unmatched
|
||||||
tracks. :bug:`2537`
|
tracks. :bug:`2537`
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,8 @@ import mock
|
||||||
|
|
||||||
class MBAlbumInfoTest(_common.TestCase):
|
class MBAlbumInfoTest(_common.TestCase):
|
||||||
def _make_release(self, date_str='2009', tracks=None, track_length=None,
|
def _make_release(self, date_str='2009', tracks=None, track_length=None,
|
||||||
track_artist=False, medium_format='FORMAT'):
|
track_artist=False, data_tracks=None,
|
||||||
|
medium_format='FORMAT'):
|
||||||
release = {
|
release = {
|
||||||
'title': 'ALBUM TITLE',
|
'title': 'ALBUM TITLE',
|
||||||
'id': 'ALBUM ID',
|
'id': 'ALBUM ID',
|
||||||
|
|
@ -62,8 +63,8 @@ class MBAlbumInfoTest(_common.TestCase):
|
||||||
'country': 'COUNTRY',
|
'country': 'COUNTRY',
|
||||||
'status': 'STATUS',
|
'status': 'STATUS',
|
||||||
}
|
}
|
||||||
|
track_list = []
|
||||||
if tracks:
|
if tracks:
|
||||||
track_list = []
|
|
||||||
for i, recording in enumerate(tracks):
|
for i, recording in enumerate(tracks):
|
||||||
track = {
|
track = {
|
||||||
'recording': recording,
|
'recording': recording,
|
||||||
|
|
@ -87,12 +88,22 @@ class MBAlbumInfoTest(_common.TestCase):
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
track_list.append(track)
|
track_list.append(track)
|
||||||
release['medium-list'].append({
|
data_track_list = []
|
||||||
'position': '1',
|
if data_tracks:
|
||||||
'track-list': track_list,
|
for i, recording in enumerate(data_tracks):
|
||||||
'format': medium_format,
|
data_track = {
|
||||||
'title': 'MEDIUM TITLE',
|
'recording': recording,
|
||||||
})
|
'position': len(track_list) + i + 1,
|
||||||
|
'number': 'A1',
|
||||||
|
}
|
||||||
|
data_track_list.append(data_track)
|
||||||
|
release['medium-list'].append({
|
||||||
|
'position': '1',
|
||||||
|
'track-list': track_list,
|
||||||
|
'data-track-list': data_track_list,
|
||||||
|
'format': medium_format,
|
||||||
|
'title': 'MEDIUM TITLE',
|
||||||
|
})
|
||||||
return release
|
return release
|
||||||
|
|
||||||
def _make_track(self, title, tr_id, duration, artist=False, video=False):
|
def _make_track(self, title, tr_id, duration, artist=False, video=False):
|
||||||
|
|
@ -354,6 +365,18 @@ class MBAlbumInfoTest(_common.TestCase):
|
||||||
self.assertEqual(d.tracks[0].title, 'TITLE ONE')
|
self.assertEqual(d.tracks[0].title, 'TITLE ONE')
|
||||||
self.assertEqual(d.tracks[1].title, 'TITLE TWO')
|
self.assertEqual(d.tracks[1].title, 'TITLE TWO')
|
||||||
|
|
||||||
|
def test_no_skip_audio_data_tracks(self):
|
||||||
|
tracks = [self._make_track('TITLE ONE', 'ID ONE', 100.0 * 1000.0),
|
||||||
|
self._make_track('TITLE TWO', 'ID TWO', 200.0 * 1000.0)]
|
||||||
|
data_tracks = [self._make_track('TITLE AUDIO DATA', 'ID DATA TRACK',
|
||||||
|
100.0 * 1000.0)]
|
||||||
|
release = self._make_release(tracks=tracks, data_tracks=data_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 TWO')
|
||||||
|
self.assertEqual(d.tracks[2].title, 'TITLE AUDIO DATA')
|
||||||
|
|
||||||
def test_skip_video_tracks_by_default(self):
|
def test_skip_video_tracks_by_default(self):
|
||||||
tracks = [self._make_track('TITLE ONE', 'ID ONE', 100.0 * 1000.0),
|
tracks = [self._make_track('TITLE ONE', 'ID ONE', 100.0 * 1000.0),
|
||||||
self._make_track('TITLE VIDEO', 'ID VIDEO', 100.0 * 1000.0,
|
self._make_track('TITLE VIDEO', 'ID VIDEO', 100.0 * 1000.0,
|
||||||
|
|
@ -365,6 +388,17 @@ class MBAlbumInfoTest(_common.TestCase):
|
||||||
self.assertEqual(d.tracks[0].title, 'TITLE ONE')
|
self.assertEqual(d.tracks[0].title, 'TITLE ONE')
|
||||||
self.assertEqual(d.tracks[1].title, 'TITLE TWO')
|
self.assertEqual(d.tracks[1].title, 'TITLE TWO')
|
||||||
|
|
||||||
|
def test_skip_video_data_tracks_by_default(self):
|
||||||
|
tracks = [self._make_track('TITLE ONE', 'ID ONE', 100.0 * 1000.0),
|
||||||
|
self._make_track('TITLE TWO', 'ID TWO', 200.0 * 1000.0)]
|
||||||
|
data_tracks = [self._make_track('TITLE VIDEO', 'ID VIDEO',
|
||||||
|
100.0 * 1000.0, False, True)]
|
||||||
|
release = self._make_release(tracks=tracks, data_tracks=data_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):
|
def test_no_skip_video_tracks_if_configured(self):
|
||||||
config['match']['ignore_video_tracks'] = False
|
config['match']['ignore_video_tracks'] = False
|
||||||
tracks = [self._make_track('TITLE ONE', 'ID ONE', 100.0 * 1000.0),
|
tracks = [self._make_track('TITLE ONE', 'ID ONE', 100.0 * 1000.0),
|
||||||
|
|
@ -378,6 +412,19 @@ class MBAlbumInfoTest(_common.TestCase):
|
||||||
self.assertEqual(d.tracks[1].title, 'TITLE VIDEO')
|
self.assertEqual(d.tracks[1].title, 'TITLE VIDEO')
|
||||||
self.assertEqual(d.tracks[2].title, 'TITLE TWO')
|
self.assertEqual(d.tracks[2].title, 'TITLE TWO')
|
||||||
|
|
||||||
|
def test_no_skip_video_data_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 TWO', 'ID TWO', 200.0 * 1000.0)]
|
||||||
|
data_tracks = [self._make_track('TITLE VIDEO', 'ID VIDEO',
|
||||||
|
100.0 * 1000.0, False, True)]
|
||||||
|
release = self._make_release(tracks=tracks, data_tracks=data_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 TWO')
|
||||||
|
self.assertEqual(d.tracks[2].title, 'TITLE VIDEO')
|
||||||
|
|
||||||
|
|
||||||
class ParseIDTest(_common.TestCase):
|
class ParseIDTest(_common.TestCase):
|
||||||
def test_parse_id_correct(self):
|
def test_parse_id_correct(self):
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue