From 783ea2a44426f7606894799dada37a2ba22cca95 Mon Sep 17 00:00:00 2001 From: Alok Saboo Date: Sun, 9 Jul 2023 18:39:15 -0400 Subject: [PATCH] Add function to update Deezer rank --- beetsplug/deezer.py | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/beetsplug/deezer.py b/beetsplug/deezer.py index 296ba8c30..fdbbc0ffc 100644 --- a/beetsplug/deezer.py +++ b/beetsplug/deezer.py @@ -46,6 +46,19 @@ class DeezerPlugin(MetadataSourcePlugin, BeetsPlugin): def __init__(self): super().__init__() + def commands(self): + """Add beet UI commands to interact with Deezer.""" + deezer_update_cmd = ui.Subcommand( + 'deezerupdate', help=f'Update {self.data_source} rank') + + def func(lib, opts, args): + items = lib.items(ui.decargs(args)) + self.deezerupdate(items, ui.should_write()) + + deezer_update_cmd.func = func + + return [deezer_update_cmd] + def album_for_id(self, album_id): """Fetch an album by its Deezer ID or URL and return an AlbumInfo object or None if the album is not found. @@ -242,3 +255,26 @@ class DeezerPlugin(MetadataSourcePlugin, BeetsPlugin): query, ) return response_data + + def deezerupdate(self, items, write): + """Obtain rank information from Deezer.""" + for index, item in enumerate(items, start=1): + self._log.info('Processing {}/{} tracks - {} ', + index, len(items), item) + try: + deezer_track_id = item.deezer_track_id + except AttributeError: + self._log.debug('No deezer_track_id present for: {}', item) + continue + try: + rank = requests.get( + self.track_url + deezer_track_id).json().get('rank') + self._log.debug('Deezer track: {} has {} rank', + deezer_track_id, rank) + except Exception as e: + self._log.debug('Invalid Deezer track_id: {}', e) + continue + item.deezer_track_rank = int(rank) + item.store() + if write: + item.try_write()