(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)))))
(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."