From 0d68a126095bbc6969516f63d99c8a9e44399e55 Mon Sep 17 00:00:00 2001 From: Mike Cameron Date: Sun, 1 Jan 2017 04:36:48 -0500 Subject: [PATCH] Added alternate track field when importing from MusicBrains. Useful when importing multi-sided medias such as vinyls and cassettes. --- beets/autotag/__init__.py | 4 +++- beets/autotag/hooks.py | 3 ++- beets/autotag/mb.py | 5 +++-- beets/library.py | 7 ++++--- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/beets/autotag/__init__.py b/beets/autotag/__init__.py index 3e79a4498..eb3dae519 100644 --- a/beets/autotag/__init__.py +++ b/beets/autotag/__init__.py @@ -34,7 +34,7 @@ log = logging.getLogger('beets') def apply_item_metadata(item, track_info): """Set an item's metadata from its matched TrackInfo object. - """ + """ item.artist = track_info.artist item.artist_sort = track_info.artist_sort item.artist_credit = track_info.artist_credit @@ -157,3 +157,5 @@ def apply_metadata(album_info, mapping): item.composer = track_info.composer if track_info.arranger is not None: item.arranger = track_info.arranger + + item.alt_track_no = track_info.alt_track_no \ No newline at end of file diff --git a/beets/autotag/hooks.py b/beets/autotag/hooks.py index 40db6e8d3..e64b42513 100644 --- a/beets/autotag/hooks.py +++ b/beets/autotag/hooks.py @@ -154,7 +154,7 @@ 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): + media=None, lyricist=None, composer=None, arranger=None, alt_track_no=None): self.title = title self.track_id = track_id self.artist = artist @@ -173,6 +173,7 @@ class TrackInfo(object): self.lyricist = lyricist self.composer = composer self.arranger = arranger + self.alt_track_no = alt_track_no # As above, work around a bug in python-musicbrainz-ngs. def decode(self, codec='utf-8'): diff --git a/beets/autotag/mb.py b/beets/autotag/mb.py index 55ecfc185..aad342e98 100644 --- a/beets/autotag/mb.py +++ b/beets/autotag/mb.py @@ -252,8 +252,8 @@ def album_info(release): all_tracks = medium['track-list'] if 'pregap' in medium: all_tracks.insert(0, medium['pregap']) - - for track in all_tracks: + + for track in all_tracks: # Basic information from the recording. index += 1 ti = track_info( @@ -265,6 +265,7 @@ def album_info(release): ) ti.disctitle = disctitle ti.media = format + ti.alt_track_no = track['number'] # Prefer track data, where present, over recording data. if track.get('title'): diff --git a/beets/library.py b/beets/library.py index 32176b68d..d9ffd38fd 100644 --- a/beets/library.py +++ b/beets/library.py @@ -322,7 +322,7 @@ class LibModel(dbcore.Model): funcs.update(plugins.template_funcs()) return funcs - def store(self, fields=None): + def store(self, fields=None): super(LibModel, self).store(fields) plugins.send('database_change', lib=self._db, model=self) @@ -423,9 +423,10 @@ class Item(LibModel): 'month': types.PaddedInt(2), 'day': types.PaddedInt(2), 'track': types.PaddedInt(2), + 'alt_track_no': types.STRING, 'tracktotal': types.PaddedInt(2), 'disc': types.PaddedInt(2), - 'disctotal': types.PaddedInt(2), + 'disctotal': types.PaddedInt(2), 'lyrics': types.STRING, 'comments': types.STRING, 'bpm': types.INTEGER, @@ -456,7 +457,7 @@ class Item(LibModel): 'original_year': types.PaddedInt(4), 'original_month': types.PaddedInt(2), 'original_day': types.PaddedInt(2), - 'initial_key': MusicalKey(), + 'initial_key': MusicalKey(), 'length': DurationType(), 'bitrate': types.ScaledInt(1000, u'kbps'),