diff options
Diffstat (limited to '')
-rw-r--r-- | beetsplug/browse.py | 68 |
1 files changed, 46 insertions, 22 deletions
diff --git a/beetsplug/browse.py b/beetsplug/browse.py index 72999b9..bb06a91 100644 --- a/beetsplug/browse.py +++ b/beetsplug/browse.py @@ -5,8 +5,17 @@ import webbrowser from beets.plugins import BeetsPlugin from beets.ui import Subcommand, UserError -MUSICBRAINZ_LOOKUP='https://musicbrainz.org/otherlookup/mbid?other-lookup.mbid=' -FIELD_NAMES = ['albumartist', 'album', 'artist', 'releasegroup', 'releasetrack', 'track', 'work'] +MUSICBRAINZ_LOOKUP = "https://musicbrainz.org/otherlookup/mbid?other-lookup.mbid=" +FIELD_NAMES = [ + "albumartist", + "album", + "artist", + "releasegroup", + "releasetrack", + "track", + "work", +] + class BrowsePlugin(BeetsPlugin): @@ -16,29 +25,42 @@ class BrowsePlugin(BeetsPlugin): def commands(self): return [BrowseCommand(self.config)] + class BrowseCommand(Subcommand): - explorer = 'thunar' + explorer = "thunar" def __init__(self, config): - super().__init__('browse', parser=None, - help='browse items on MusicBrainz or the file system') - - self.parser.add_option('-f', '--field', type='string', - help='which field to look up on MusicBrainz, ' - 'e.g. album, artist, track, work, ...') - self.parser.add_option('-o', '--open', action='store_true', - help='open in the file browser instead of MusicBrainz') + super().__init__( + "browse", + parser=None, + help="browse items on MusicBrainz or the file system", + ) + + self.parser.add_option( + "-f", + "--field", + type="string", + help="which field to look up on MusicBrainz, " + "e.g. album, artist, track, work, ...", + ) + + self.parser.add_option( + "-o", + "--open", + action="store_true", + help="open in the file browser instead of MusicBrainz", + ) + self.parser.add_album_option() - if 'explorer' in config: - self.explorer = config['explorer'].get() + if "explorer" in config: + self.explorer = config["explorer"].get() - # pylint: disable=no-self-use def browse_musicbrainz(self, item, field): - mbid = item.get(f'mb_{field}id') + mbid = item.get(f"mb_{field}id") if not mbid: - raise UserError(f'\'mb_{field}id\' not available for: {item}') + raise UserError(f"'mb_{field}id' not available for: {item}") try: uuid.UUID(mbid) @@ -49,20 +71,22 @@ class BrowseCommand(Subcommand): def browse_filesystem(self, item, _): try: - subprocess.Popen(self.explorer.split(' ') + [item.get('path')]) # pylint: disable=consider-using-with + subprocess.Popen(self.explorer.split(" ") + [item.get("path")]) except OSError as err: raise UserError(err) from err def func(self, lib, opts, args): queryfun = lib.albums if opts.album else lib.items browsefun = self.browse_filesystem if opts.open else self.browse_musicbrainz - field = opts.field or ('album' if opts.album else 'track') + field = opts.field or ("album" if opts.album else "track") if field not in FIELD_NAMES: - raise UserError(f'invalid field "{field}", try one of: {", ".join(FIELD_NAMES)}') + raise UserError( + f'invalid field "{field}", try one of: {", ".join(FIELD_NAMES)}', + ) if not args: - raise UserError('empty query, refusing') + raise UserError("empty query, refusing") items = queryfun(args) @@ -73,10 +97,10 @@ class BrowseCommand(Subcommand): browsefun(items[0], field) return - print('Query returned multiple matches, please disambiguate:') + print("Query returned multiple matches, please disambiguate:") for index, item in enumerate(items): if index < 5: print(item) else: - print(f'[{len(items) - index} more]') + print(f"[{len(items) - index} more]") return |