mirror of
https://github.com/beetbox/beets.git
synced 2025-12-07 17:16:07 +01:00
add composer_sort tag#
This commit is contained in:
parent
68089ac8e9
commit
c51ecd46e3
7 changed files with 57 additions and 25 deletions
|
|
@ -49,8 +49,12 @@ def apply_item_metadata(item, track_info):
|
|||
item.lyricist = track_info.lyricist
|
||||
if track_info.composer is not None:
|
||||
item.composer = track_info.composer
|
||||
if track_info.composer_sort is not None:
|
||||
item.composer_sort = track_info.composer_sort
|
||||
if track_info.arranger is not None:
|
||||
item.arranger = track_info.arranger
|
||||
|
||||
|
||||
|
||||
# At the moment, the other metadata is left intact (including album
|
||||
# and track number). Perhaps these should be emptied?
|
||||
|
|
@ -155,6 +159,8 @@ def apply_metadata(album_info, mapping):
|
|||
item.lyricist = track_info.lyricist
|
||||
if track_info.composer is not None:
|
||||
item.composer = track_info.composer
|
||||
if track_info.composer_sort is not None:
|
||||
item.composer_sort = track_info.composer_sort
|
||||
if track_info.arranger is not None:
|
||||
item.arranger = track_info.arranger
|
||||
|
||||
|
|
|
|||
|
|
@ -144,6 +144,7 @@ class TrackInfo(object):
|
|||
- ``data_url``: The data source release URL.
|
||||
- ``lyricist``: individual track lyricist name
|
||||
- ``composer``: individual track composer name
|
||||
- ``composer_sort``: individual track composer sort name
|
||||
- ``arranger`: individual track arranger name
|
||||
- ``track_alt``: alternative track number (tape, vinyl, etc.)
|
||||
|
||||
|
|
@ -155,8 +156,8 @@ class TrackInfo(object):
|
|||
length=None, index=None, medium=None, medium_index=None,
|
||||
medium_total=None, artist_sort=None, disctitle=None,
|
||||
artist_credit=None, data_source=None, data_url=None,
|
||||
media=None, lyricist=None, composer=None, arranger=None,
|
||||
track_alt=None):
|
||||
media=None, lyricist=None, composer=None, composer_sort=None,
|
||||
arranger=None, track_alt=None):
|
||||
self.title = title
|
||||
self.track_id = track_id
|
||||
self.artist = artist
|
||||
|
|
@ -174,6 +175,7 @@ class TrackInfo(object):
|
|||
self.data_url = data_url
|
||||
self.lyricist = lyricist
|
||||
self.composer = composer
|
||||
self.composer_sort = composer_sort
|
||||
self.arranger = arranger
|
||||
self.track_alt = track_alt
|
||||
|
||||
|
|
|
|||
|
|
@ -207,6 +207,7 @@ def track_info(recording, index=None, medium=None, medium_index=None,
|
|||
|
||||
lyricist = []
|
||||
composer = []
|
||||
composer_sort = []
|
||||
for work_relation in recording.get('work-relation-list', ()):
|
||||
if work_relation['type'] != 'performance':
|
||||
continue
|
||||
|
|
@ -218,12 +219,15 @@ def track_info(recording, index=None, medium=None, medium_index=None,
|
|||
lyricist.append(artist_relation['artist']['name'])
|
||||
elif type == 'composer':
|
||||
composer.append(artist_relation['artist']['name'])
|
||||
composer_sort.append(artist_relation['artist']['sort-name'])
|
||||
if lyricist:
|
||||
info.lyricist = u', '.join(lyricist)
|
||||
if composer:
|
||||
info.composer = u', '.join(composer)
|
||||
info.composer_sort = u', '.join(composer_sort)
|
||||
|
||||
arranger = []
|
||||
arranger_sort = []
|
||||
for artist_relation in recording.get('artist-relation-list', ()):
|
||||
if 'type' in artist_relation:
|
||||
type = artist_relation['type']
|
||||
|
|
|
|||
|
|
@ -417,6 +417,7 @@ class Item(LibModel):
|
|||
'genre': types.STRING,
|
||||
'lyricist': types.STRING,
|
||||
'composer': types.STRING,
|
||||
'composer_sort': types.STRING,
|
||||
'arranger': types.STRING,
|
||||
'grouping': types.STRING,
|
||||
'year': types.PaddedInt(4),
|
||||
|
|
|
|||
|
|
@ -1632,12 +1632,28 @@ class MediaFile(object):
|
|||
StorageStyle('LYRICIST'),
|
||||
ASFStorageStyle('WM/Writer'),
|
||||
)
|
||||
|
||||
composer = MediaField(
|
||||
MP3StorageStyle('TCOM'),
|
||||
MP4StorageStyle('\xa9wrt'),
|
||||
StorageStyle('COMPOSER'),
|
||||
ASFStorageStyle('WM/Composer'),
|
||||
)
|
||||
|
||||
composer_sort = MediaField(
|
||||
MP3StorageStyle('TSOC'),
|
||||
MP4StorageStyle('soco'),
|
||||
StorageStyle('COMPOSERSORT'),
|
||||
ASFStorageStyle('WM/Composersort'),
|
||||
)
|
||||
|
||||
arranger = MediaField(
|
||||
MP3PeopleStorageStyle('TIPL', involvement='arranger'),
|
||||
MP4StorageStyle('----:com.apple.iTunes:Arranger'),
|
||||
StorageStyle('ARRANGER'),
|
||||
ASFStorageStyle('beets/Arranger'),
|
||||
)
|
||||
|
||||
arranger = MediaField(
|
||||
MP3PeopleStorageStyle('TIPL', involvement='arranger'),
|
||||
MP4StorageStyle('----:com.apple.iTunes:Arranger'),
|
||||
|
|
|
|||
|
|
@ -68,6 +68,7 @@ def item(lib=None):
|
|||
genre=u'the genre',
|
||||
lyricist=u'the lyricist',
|
||||
composer=u'the composer',
|
||||
composer_sort=u'the sortname of the composer',
|
||||
arranger=u'the arranger',
|
||||
grouping=u'the grouping',
|
||||
year=1,
|
||||
|
|
|
|||
|
|
@ -318,29 +318,30 @@ class ReadWriteTestBase(ArtTestMixin, GenreListTestMixin,
|
|||
"""
|
||||
|
||||
full_initial_tags = {
|
||||
'title': u'full',
|
||||
'artist': u'the artist',
|
||||
'album': u'the album',
|
||||
'genre': u'the genre',
|
||||
'composer': u'the composer',
|
||||
'grouping': u'the grouping',
|
||||
'year': 2001,
|
||||
'month': None,
|
||||
'day': None,
|
||||
'date': datetime.date(2001, 1, 1),
|
||||
'track': 2,
|
||||
'tracktotal': 3,
|
||||
'disc': 4,
|
||||
'disctotal': 5,
|
||||
'lyrics': u'the lyrics',
|
||||
'comments': u'the comments',
|
||||
'bpm': 6,
|
||||
'comp': True,
|
||||
'mb_trackid': '8b882575-08a5-4452-a7a7-cbb8a1531f9e',
|
||||
'mb_albumid': '9e873859-8aa4-4790-b985-5a953e8ef628',
|
||||
'mb_artistid': '7cf0ea9d-86b9-4dad-ba9e-2355a64899ea',
|
||||
'art': None,
|
||||
'label': u'the label',
|
||||
'title': u'full',
|
||||
'artist': u'the artist',
|
||||
'album': u'the album',
|
||||
'genre': u'the genre',
|
||||
'composer': u'the composer',
|
||||
'composer_sort' :u'the sortname of the composer',
|
||||
'grouping': u'the grouping',
|
||||
'year': 2001,
|
||||
'month': None,
|
||||
'day': None,
|
||||
'date': datetime.date(2001, 1, 1),
|
||||
'track': 2,
|
||||
'tracktotal': 3,
|
||||
'disc': 4,
|
||||
'disctotal': 5,
|
||||
'lyrics': u'the lyrics',
|
||||
'comments': u'the comments',
|
||||
'bpm': 6,
|
||||
'comp': True,
|
||||
'mb_trackid': '8b882575-08a5-4452-a7a7-cbb8a1531f9e',
|
||||
'mb_albumid': '9e873859-8aa4-4790-b985-5a953e8ef628',
|
||||
'mb_artistid': '7cf0ea9d-86b9-4dad-ba9e-2355a64899ea',
|
||||
'art': None,
|
||||
'label': u'the label',
|
||||
}
|
||||
|
||||
tag_fields = [
|
||||
|
|
@ -350,6 +351,7 @@ class ReadWriteTestBase(ArtTestMixin, GenreListTestMixin,
|
|||
'genre',
|
||||
'lyricist',
|
||||
'composer',
|
||||
'composer_sort',
|
||||
'arranger',
|
||||
'grouping',
|
||||
'year',
|
||||
|
|
|
|||
Loading…
Reference in a new issue