Skip to content

Commit

Permalink
Merge pull request #3406 from MrNuggelz/unimported
Browse files Browse the repository at this point in the history
unimported files plugin
  • Loading branch information
sampsyo authored Oct 15, 2019
2 parents bf9b43a + d11e14b commit 3aa2c33
Show file tree
Hide file tree
Showing 4 changed files with 79 additions and 0 deletions.
60 changes: 60 additions & 0 deletions beetsplug/unimported.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# -*- coding: utf-8 -*-
# This file is part of beets.
# Copyright 2019, Joris Jensen
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.

"""
List all files in the library folder which are not listed in the
beets library database, including art files
"""

from __future__ import absolute_import, division, print_function
import os

from beets import util
from beets.plugins import BeetsPlugin
from beets.ui import Subcommand, print_

__author__ = 'https://github.com/MrNuggelz'


class Unimported(BeetsPlugin):

def __init__(self):
super(Unimported, self).__init__()
self.config.add(
{
'ignore_extensions': []
}
)

def commands(self):
def print_unimported(lib, opts, args):
ignore_exts = [('.' + x).encode() for x
in self.config['ignore_extensions'].as_str_seq()]
in_folder = set(
(os.path.join(r, file) for r, d, f in os.walk(lib.directory)
for file in f if not any(
[file.endswith(extension) for extension in
ignore_exts])))
in_library = set(x.path for x in lib.items())
art_files = set(x.artpath for x in lib.albums())
for f in in_folder - in_library - art_files:
print_(util.displayable_path(f))

unimported = Subcommand(
'unimported',
help='list all files in the library folder which are not listed'
' in the beets library database')
unimported.func = print_unimported
return [unimported]
1 change: 1 addition & 0 deletions docs/changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ Changelog

New features:

* :doc:`/plugins/unimported`: lets you find untracked files in your library directory.
* We now fetch information about `works`_ from MusicBrainz.
MusicBrainz matches provide the fields ``work`` (the title), ``mb_workid``
(the MBID), and ``work_disambig`` (the disambiguation string).
Expand Down
1 change: 1 addition & 0 deletions docs/plugins/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ following to your configuration::
the
thumbnails
types
unimported
web
zero

Expand Down
17 changes: 17 additions & 0 deletions docs/plugins/unimported.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
Unimported Plugin
=================

The ``unimported`` plugin allows to list all files in the library folder which are not listed in the beets library database, including art files.

Command Line Usage
------------------

To use the ``unimported`` plugin, enable it in your configuration (see
:ref:`using-plugins`). Then use it by invoking the ``beet unimported`` command.
The command will list all files in the library folder which are not imported. You can
exclude file extensions using the configuration file::

unimported:
ignore_extensions: jpg png

The default configuration list all unimported files, ignoring no extensions.

0 comments on commit 3aa2c33

Please sign in to comment.