diff --git a/beetsplug/ftintitle.py b/beetsplug/ftintitle.py index 243c1f004..34cdbdcc6 100644 --- a/beetsplug/ftintitle.py +++ b/beetsplug/ftintitle.py @@ -48,7 +48,7 @@ def contains_feat(title): )) -def update_metadata(item, feat_part): +def update_metadata(item, feat_part, drop_feat): """Choose how to add new artists to the title and set the new metadata. Also, print out messages about any changes that are made. """ @@ -60,14 +60,14 @@ def update_metadata(item, feat_part): item.artist_sort, _ = split_on_feat(item.artist_sort) # Only update the title if it does not already contain a featured - # artist. - if not contains_feat(item.title): + # artist and if we do not drop featuring information. + if not drop_feat and not contains_feat(item.title): new_title = u"{0} feat. {1}".format(item.title, feat_part) ui.print_(u'title: {0} -> {1}'.format(item.title, new_title)) item.title = new_title -def ft_in_title(item): +def ft_in_title(item, drop_feat): """Look for featured artists in the item's artist fields and move them to the title. """ @@ -104,7 +104,7 @@ def ft_in_title(item): # If we have a featuring artist, move it to the title. if feat_part: - update_metadata(item, feat_part) + update_metadata(item, feat_part, drop_feat) else: ui.print_(u'no featuring artists found') @@ -112,16 +112,34 @@ def ft_in_title(item): class FtInTitlePlugin(BeetsPlugin): + def __init__(self): + super(FtInTitlePlugin, self).__init__() + + self.config.add({ + 'drop_feat': False + }) + + self._command = ui.Subcommand( + 'ftintitle', + help='move featured artists to the title field') + + self._command.parser.add_option( + '-d', '--drop', dest='drop_feat', + action='store_true', default=False, + help='drop featuring from artists and ignore title update') + def commands(self): - cmd = ui.Subcommand('ftintitle', - help='move featured artists to the title field') def func(lib, opts, args): + self.config.set_args(opts) + drop_feat = self.config['drop_feat'].get(bool) write = config['import']['write'].get(bool) + for item in lib.items(ui.decargs(args)): - ft_in_title(item) + ft_in_title(item, drop_feat) item.store() if write: item.try_write() - cmd.func = func - return [cmd] + + self._command.func = func + return [self._command] diff --git a/docs/plugins/ftintitle.rst b/docs/plugins/ftintitle.rst index 19bb612c7..dc457a495 100644 --- a/docs/plugins/ftintitle.rst +++ b/docs/plugins/ftintitle.rst @@ -17,4 +17,7 @@ To use the plugin, just enable it and run the command:: The query is optional; if it's left off, the transformation will be applied to your entire collection. +The ``-d`` option drop only featuring information from the ``artist`` field. The +``title`` field will not be updated. + .. _MusicBrainz style: http://musicbrainz.org/doc/Style