From 6013464eb7295fcd749b3146f758fc9295fbe11a Mon Sep 17 00:00:00 2001 From: Pierre Neidhardt Date: Thu, 21 Feb 2019 17:46:58 +0100 Subject: * lisp/emms-browser.el: Add emms-browser-cache-thumbnail-async for faster thumbnail lookups. --- lisp/emms-browser.el | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'lisp') diff --git a/lisp/emms-browser.el b/lisp/emms-browser.el index b930d8b..f805b3b 100644 --- a/lisp/emms-browser.el +++ b/lisp/emms-browser.el @@ -2226,5 +2226,29 @@ will always use the same cover per folder. (setq cache-dest-file nil)))) cache-dest-file))))) +(defvar emms-browser--cache-hash nil + "Cache for `emms-browser-cache-thumbnail-async'.") + +(defun emms-browser-cache-thumbnail-async (dir size) + "Like `emms-browser-cache-thumbnail' but caches queries for faster lookups. +The drawback is that if changes are made to the covers in DIR +after `emms-browser-cache-thumbnail-async' queried them, it won't +be taken into account. Call `emms-browser-clear-cache-hash' to +refresh the cache." + (unless emms-browser--cache-hash + (setq emms-browser--cache-hash (make-hash-table :test 'equal))) + (let* ((key (cons dir size)) + (val (gethash key emms-browser--cache-hash))) + (or val + (puthash key (emms-browser-cache-thumbnail dir size) + emms-browser--cache-hash)))) + +(defun emms-browser-clear-cache-hash () + "Resets `emms-browser-cache-thumbnail-async' cache. +This is useful if there were changes on disk after +`emms-browser-cache-thumbnail-async' first cached them." + (interactive) + (clrhash emms-browser--cache-hash)) + (provide 'emms-browser) ;;; emms-browser.el ends here -- cgit v1.2.3