From 2f44c3b655f5bffd4583702e3a7698f4aa809bd7 Mon Sep 17 00:00:00 2001 From: aj Date: Fri, 1 Nov 2019 23:48:40 +0000 Subject: [PATCH] added last.fm chart playlist engine source --- spotfm/engine/__init__.py | 0 spotfm/engine/chart_source.py | 44 +++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 spotfm/engine/__init__.py create mode 100644 spotfm/engine/chart_source.py diff --git a/spotfm/engine/__init__.py b/spotfm/engine/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/spotfm/engine/chart_source.py b/spotfm/engine/chart_source.py new file mode 100644 index 0000000..c2b9500 --- /dev/null +++ b/spotfm/engine/chart_source.py @@ -0,0 +1,44 @@ +from fmframework.net.network import Network as FmNet +from spotframework.net.network import Network as SpotNet + +from spotframework.model.uri import Uri +from spotframework.engine.playlistengine import TrackSource, SourceParameter +from spotframework.engine.processor.abstract import AbstractProcessor + +from spotfm.charts.chart import get_chart_of_spotify_tracks + +from typing import List +import logging + +logger = logging.getLogger(__name__) + + +class ChartSource(TrackSource): + class Params(SourceParameter): + def __init__(self, + chart_range: FmNet.Range, + limit: int = 50, + processors: List[AbstractProcessor] = None): + super().__init__(processors=processors, source_type=ChartSource) + self.chart_range = chart_range + self.limit = limit + + def __init__(self, spotnet: SpotNet, fmnet: SpotNet): + super().__init__(net=spotnet) + self.fmnet = fmnet + + def load(self): + super().load() + + def process(self, params: Params, uris: List[Uri] = None): + # TODO add processor support? + + tracks = get_chart_of_spotify_tracks(spotnet=self.net, + fmnet=self.fmnet, + period=params.chart_range, + limit=params.limit) + + if tracks is not None and len(tracks) > 0: + return tracks + else: + logger.error('no tracks returned')