]> kaliko git repositories - mpd-sima.git/commitdiff
Optional persistent cache for last.fm
authorkaliko jack <kaliko@azylum.org>
Sun, 2 Mar 2014 11:49:43 +0000 (12:49 +0100)
committerkaliko jack <kaliko@azylum.org>
Sun, 2 Mar 2014 11:49:43 +0000 (12:49 +0100)
Fixed missing cache directory creation bug
Update documentation

doc/examples/all_settings.cfg
sima/lib/cache.py
sima/lib/webserv.py
sima/plugins/internal/lastfm.py
sima/utils/config.py

index 047ee3c95023bfacd6222d0a29728dca63b1888d..119d7f42a15a187d0746ea0c4945edae5d661f99 100644 (file)
@@ -48,7 +48,6 @@ port = 6600
 # description: file to log to. Usually used in daemon mode.
 # default: unset, logging to stdin/stdout
 #logfile =
-##
 
 ## VERBOSITY
 # type: string
@@ -60,7 +59,6 @@ port = 6600
 #    * warning
 #    * error
 verbosity = info
-##
 
 #
 #######################################################################
@@ -76,6 +74,8 @@ verbosity = info
 #                contrib = Scrobble, AwesomePlugin,
 #                          ExperimentalTest, AnotherTest
 # default:
+#          internal = "Crop, Lastfm, RandomFallBack"
+#          contrib =
 # description: Plugins list declaration.
 #     Optional plugin's configuration must be in its own section.
 #     For instance a "AwesomePlugin" declared here
@@ -85,7 +85,7 @@ verbosity = info
 #     Two plugins sources are available, internal and contrib
 #
 internal = Crop, Lastfm, RandomFallBack
-#contrib = PlaceHolder
+#contrib =
 
 ## HISTORY_DURATION
 # type: integer (in hours)
@@ -94,32 +94,21 @@ internal = Crop, Lastfm, RandomFallBack
 #     track/title
 #
 history_duration = 8
-##
 
 ## USER_DB # NOT IMPLEMENTED #
 # type: boolean
 # description: Load user database to find similar artists
-#     User DB is loaded from $XDG_CONFIG_HOME/sima/sima.db
+#     User DB is loaded from $XDG_CONFIG_HOME/mpd_sima/sima.db
 #     Use simadb_cli to edit/add entries.
 user_db = false
-##
-
-#####################################################################
-# You do not need to set up options below.
-# But well, you got bored of the way sima is behaving, then go ahead
-# play with it :)
 
 ## QUEUE_LENGTH
 # type: integer
 # default: 1
 # description: Queue length triggering tracks addition
 queue_length = 1
-##
 
 ######################### PLUGINS #####################################
-#
-[placeholder]
-key = Value
 
 [crop]
 ## CONSUME
@@ -156,12 +145,12 @@ key = Value
 # EchoNest or LastFM
 #[echonest]
 [lastfm]
-## QUEUE_MODE # NOT COMPLETED #
+## QUEUE_MODE
 # type: string
 # description: The default is to queue random tracks from similar artists.
 # Possible values:
 #      track : Will queue tracks from similar artists (default).
-#      top   : Will queue top tracks from similar artists. # NOT IMPLEMENTED #
+#      top   : Will queue top tracks from similar artists.
 #      album : Will queue whole album from similar artists.
 queue_mode = track
 
@@ -197,8 +186,17 @@ track_to_add = 1
 # description: how many albums the plugin will try to get
 album_to_add = 1
 
-#
-#######################################################################
+## CACHE
+# type: boolean
+# description: whether or not to use on-disk persistent http cache
+#  * When set to "true", sima will use a persistent cache for its http client.
+#    The cache is written along with the dbfile in:
+#                $XDG_CONFIG_HOME/mpd_sima/http/<web_service>
+#    Toggling http cache is only available for last.fm. EchoNest have rate limits,
+#    we must then pay attention to bandwidth and use of caching is required.
+#  * If set to "false", caching is still done but in memory.
+# default: True
+cache = True
 
 #
 ####################### END OF CONFIGURATION ##########################
index c4170de8c1b1f5885642105f67c86fb3b18bf287..e16ca0e5e2e212ab839bced62415496a5a653f5b 100644 (file)
@@ -73,7 +73,7 @@ class FileCache:
         self.forever = forever
 
         if not os.path.isdir(self.directory):
-            os.mkdir(self.directory)
+            os.makedirs(self.directory)
 
     def encode(self, val):
         return md5(val.encode('utf-8')).hexdigest()
index c4118c0f83c5689e874bcdc08843fe584bb70073..75b0a38a0b43a1c77038f6051b6cdc66ca39d33e 100644 (file)
@@ -381,7 +381,9 @@ class WebService(Plugin):
             self.log.debug(repr(self.player.current))
             return None
         self.queue_mode()
-        self.log.debug(self.ws.stats)
+        msg = ' '.join(['{0}: {1:>3d}'.format(k, v) for
+                        k, v in sorted(self.ws.stats.items())])
+        self.log.debug(msg)
         candidates = self.to_add
         self.to_add = list()
         if self.plugin_conf.get('queue_mode') != 'album':
index ba10a48b063eb1701bf0bece1b89f255127b752b..be87094ca208f1a49ea9cf2b8b0b3301bcd7b3d9 100644 (file)
@@ -29,7 +29,7 @@ from os.path import join
 # local import
 from ...lib.simafm import SimaFM
 from ...lib.webserv import WebService
-from ...lib.cache import FileCache
+from ...lib.cache import FileCache, DictCache
 
 
 class Lastfm(WebService):
@@ -41,7 +41,11 @@ class Lastfm(WebService):
         self.ws = SimaFM
         # Set persitent cache
         vardir = daemon.config['sima']['var_dir']
-        SimaFM.cache = FileCache(join(vardir, 'http', 'LastFM'))
+        persitent_cache = daemon.config.getboolean('lastfm', 'cache')
+        if persitent_cache:
+            SimaFM.cache = FileCache(join(vardir, 'http', 'LastFM'))
+        else:
+            SimaFM.cache = DictCache()
 
 
 # VIM MODLINE
index 157d7c3c341ce7cea04a47aa54e3ba468b30c608..cdaefd198022a23bf71d54300383dd80623a1937 100644 (file)
@@ -60,6 +60,9 @@ DEFAULT_CONF = {
             'verbosity': "info",
             'logfile': "",
             },
+        'crop': {
+            'consume': 10,
+            },
         'echonest': {
             'queue_mode': "track", #TODO control values
             'max_art': 15,
@@ -75,6 +78,7 @@ DEFAULT_CONF = {
             'track_to_add': 1,
             'album_to_add': 1,
             'depth': 1,
+            'cache': True,
             },
         'randomfallback': {
             'flavour': "sensible", # in pure, sensible