diff --git a/beets/config_default.yaml b/beets/config_default.yaml index 4c12c3df07..fa77a82dc5 100644 --- a/beets/config_default.yaml +++ b/beets/config_default.yaml @@ -23,6 +23,7 @@ import: group_albums: no pretend: false search_ids: [] + duplicate_action: ask clutter: ["Thumbs.DB", ".DS_Store"] ignore: [".*", "*~", "System Volume Information", "lost+found"] diff --git a/beets/importer.py b/beets/importer.py index 4209a48315..60aeb2f2b3 100644 --- a/beets/importer.py +++ b/beets/importer.py @@ -1327,7 +1327,29 @@ def resolve_duplicates(session, task): log.debug(u'found duplicates: {}'.format( [o.id for o in found_duplicates] )) - session.resolve_duplicate(task, found_duplicates) + + # Get the default action to follow from config. + duplicate_action = config['import']['duplicate_action'].as_choice({ + u'skip': u's', + u'keep': u'k', + u'remove': u'r', + u'ask': u'a', + }) + log.debug(u'default action for duplicates: {0}', duplicate_action) + + if duplicate_action == u's': + # Skip new. + task.set_choice(action.SKIP) + elif duplicate_action == u'k': + # Keep both. Do nothing; leave the choice intact. + pass + elif duplicate_action == u'r': + # Remove old. + task.should_remove_duplicates = True + else: + # No default action set; ask the session. + session.resolve_duplicate(task, found_duplicates) + session.log_choice(task, True) diff --git a/docs/changelog.rst b/docs/changelog.rst index 64b582450a..b350381af5 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -8,6 +8,8 @@ New features: * A new ``--force`` option for :ref:`remove-cmd` allows removal of items without prompting beforehand. :bug:`2042` +* A new importer configuration :ref:`duplicate_action` controls how + duplicate albums or tracks treated in import task. :bug:`185` Some fixes for Windows: diff --git a/docs/reference/config.rst b/docs/reference/config.rst index 4ca54652aa..0892aaa301 100644 --- a/docs/reference/config.rst +++ b/docs/reference/config.rst @@ -550,6 +550,17 @@ with the ``-a`` flag to the :ref:`import-cmd` command.) Default: ``yes``. +.. _duplicate_action: + +duplicate_action +~~~~~~~~~~~~~~~~ + +Either ``skip``, ``keep``, ``remove``, or ``ask``. Controls how duplicates +are treated in import task. "skip" means that new item(album or track) will be +skiped; "keep" means keep both old and new items; "remove" means remove old +item; "ask" means the user should be prompted for the action each time. +The default is ``ask``. + .. _musicbrainz-config: