Improve cover art glyph updates.
authorSteve Youngs <steve@sxemacs.org>
Thu, 15 Aug 2013 08:15:34 +0000 (18:15 +1000)
committerSteve Youngs <steve@sxemacs.org>
Thu, 15 Aug 2013 08:15:34 +0000 (18:15 +1000)
With this change the cover art glyph is only updated after the track
changes instead of every time the mpd-itimer fired.  So now it is once per
track as opposed to every 5 seconds.

* mpd.el (mpd-current-filename): New.  Track filename that is only
updated when the track changes, rather than every time the itimer
fires.

* mpd.el (mpd-update-cover): Test against `mpd-current-filename'
to only update cover art when the track changes instead of every
time the itimer fires.

* mpd.el (mpd-music-directory): Insert the conf file content into
a temp buffer instead of visiting it directly.  This avoids having
to explicitly close the buffer.

Signed-off-by: Steve Youngs <steve@sxemacs.org>
mpd.el

diff --git a/mpd.el b/mpd.el
index f56820e..c604060 100644 (file)
--- a/mpd.el
+++ b/mpd.el
@@ -187,7 +187,8 @@ frame."
 
 (defun mpd-music-directory ()
   "Returns the value of \"music_directory\" from mpd config."
-  (with-current-buffer (find-file-noselect mpd-conf-file)
+  (with-temp-buffer
+    (insert-file-contents-literally mpd-conf-file)
     (re-search-forward "^music_directory[[:blank:]]+" nil t)
     (buffer-substring (1+ (point)) (1- (point-at-eol)))))
 
@@ -388,31 +389,39 @@ Sets state to \"muted\" by side effect."
 (defvar mpd-cover-glyph nil
   "The extent holding the album cover art.")
 
+(defvar mpd-current-filename nil
+  "Filename of the currently playing mpd track.
+
+This differs from `**mpd-var-file*' in that it is only updated once
+per track change instead of every time `mpd-itimer' fires.")
+
 (defun mpd-update-cover ()
   "Updates the cover art glyph."
-  (with-current-buffer mpd-dock-buffer
-    (let* ((songdir (file-dirname **mpd-var-file*))
-          (cover (expand-file-name
-                  "cover.jpg"
-                  (paths-construct-path
-                   (list mpd-music-directory songdir))))
-          (nocover (expand-file-name "nocover.jpg" mpd-directory))
-          (scaled))
-      (if (file-exists-p cover)
-         (progn
-           (with-temp-buffer
-             (shell-command (concat "jpegtopnm " "'" cover "' 2>/dev/null"
-                                    "|pnmnorm 2>/dev/null"
-                                    "|pnmscale -height 48 -width 48"
-                                    "|pnmtojpeg")
-                            'insert)
-             (setq scaled (buffer-string)))
-           (set-extent-end-glyph
-            mpd-cover-glyph
-            (make-glyph (list (vector 'jpeg :data scaled)))))
-       (set-extent-end-glyph
-        mpd-cover-glyph
-        (make-glyph (list (vector 'jpeg :file nocover))))))))
+  (unless (equal mpd-current-filename **mpd-var-file*)
+    (with-current-buffer mpd-dock-buffer
+      (let* ((songdir (file-dirname **mpd-var-file*))
+            (cover (expand-file-name
+                    "cover.jpg"
+                    (paths-construct-path
+                     (list mpd-music-directory songdir))))
+            (nocover (expand-file-name "nocover.jpg" mpd-directory))
+            (scaled))
+       (if (file-exists-p cover)
+           (progn
+             (with-temp-buffer
+               (shell-command (concat "jpegtopnm " "'" cover "' 2>/dev/null"
+                                      "|pnmnorm 2>/dev/null"
+                                      "|pnmscale -height 48 -width 48"
+                                      "|pnmtojpeg")
+                              'insert)
+               (setq scaled (buffer-string)))
+             (set-extent-end-glyph
+              mpd-cover-glyph
+              (make-glyph (list (vector 'jpeg :data scaled)))))
+         (set-extent-end-glyph
+          mpd-cover-glyph
+          (make-glyph (list (vector 'jpeg :file nocover)))))))
+    (setq mpd-current-filename **mpd-var-file*)))
 
 (defun mpd-update-variables ()
   "Requests status information."