;; `cover.jpg' files in the same directory as the album's audio files.
;; Yep, sort your music by album (at least).
;;
-;; Embedded art is not supported at this time, but hopefully one day.
+;; Embedded art is supported via FFmpeg. The embedded art is preferred.
;;; Player control buttons:
;;
The file may not exist on disc so call `file-exists-p' on it, or see
`mpd-has-cover-p'."
- (let ((dir (paths-construct-path
- (list mpd-music-directory (file-dirname (mpd-file))))))
- (expand-file-name "cover.jpg" dir)))
+ (let ((ifile (expand-file-name (mpd-file) mpd-music-directory))
+ (ofile (expand-file-name "cover.jpg" (temp-directory)))
+ (dir (paths-construct-path
+ (list mpd-music-directory (file-dirname (mpd-file)))))
+ (ffmpeg (executable-find "ffmpeg"))
+ (embedded 1))
+ ;; Try for embedded art first
+ (when ffmpeg
+ (setq embedded (call-process "ffmpeg" nil nil nil
+ "-hide_banner"
+ "-loglevel" "quiet" "-y"
+ "-i" ifile ofile)))
+ (if (eq embedded 0)
+ ofile
+ (expand-file-name "cover.jpg" dir))))
(defun mpd-has-cover-p ()
"Return t when coverart exists for the current track."
(let ((cover (mpd-cover-file))
(nocover (expand-file-name "nocover.jpg" mpd-directory)))
(if (mpd-has-cover-p)
- (set-extent-end-glyph
- mpd-cover-glyph
- (make-glyph
- (list (vector 'jpeg :data (mpd-scale-cover cover 48)))))
+ (progn
+ (setq cover (mpd-scale-cover cover 48))
+ (set-extent-end-glyph
+ mpd-cover-glyph
+ (make-glyph `([jpeg :data ,cover]))))
(set-extent-end-glyph
mpd-cover-glyph
- (make-glyph (list (vector 'jpeg :file nocover)))))))
+ (make-glyph `([jpeg :file ,nocover]))))))
(setq mpd-current-filename (mpd-file))))
(defun mpd-update-variables ()
"Inserts coverart into mpd balloon."
(let ((cover (mpd-cover-file)))
(when (mpd-has-cover-p)
+ (setq cover (mpd-scale-cover cover 128))
(set-extent-begin-glyph
(make-extent (point-min) (point-min))
- (make-glyph
- (list (vector 'jpeg :data (mpd-scale-cover cover 128))))))))
+ (make-glyph `([jpeg :data ,cover]))))))
(defadvice balloon-help-display-help (after mpd-balloon-cover (&rest args) activate)
"Display cover art image in the balloon."
(set-extent-end-glyph
(setq prev (make-extent (point-max) (point-max)))
(make-glyph
- (list (vector 'xpm :file (expand-file-name "Rewind.xpm"
- mpd-directory)))))
+ `([xpm :file ,(expand-file-name "Rewind.xpm" mpd-directory)])))
(set-extent-properties
prev
`(keymap ,mpd-prev-map balloon-help "Previous Track"))
(set-extent-end-glyph
(setq pause (make-extent (point-max) (point-max)))
(make-glyph
- (list (vector 'xpm :file (expand-file-name "Pause.xpm"
- mpd-directory)))))
+ `([xpm :file ,(expand-file-name "Pause.xpm" mpd-directory)])))
(set-extent-properties
pause
`(keymap ,mpd-pause-map balloon-help "Pause"))
(set-extent-end-glyph
(setq play (make-extent (point-max) (point-max)))
(make-glyph
- (list (vector 'xpm :file (expand-file-name "Play.xpm"
- mpd-directory)))))
+ `([xpm :file ,(expand-file-name "Play.xpm" mpd-directory)])))
(set-extent-properties
play
`(keymap ,mpd-play-map balloon-help "Play"))
(set-extent-end-glyph
(setq next (make-extent (point-max) (point-max)))
(make-glyph
- (list (vector 'xpm :file (expand-file-name "FFwd.xpm"
- mpd-directory)))))
+ `([xpm :file ,(expand-file-name "FFwd.xpm" mpd-directory)])))
(set-extent-properties
next
`(keymap ,mpd-next-map balloon-help "Next Track"))
(set-extent-end-glyph
(setq mpd-cover-glyph (make-extent (point-max) (point-max)))
(make-glyph
- (list (vector 'jpeg :file (expand-file-name "nocover.jpg"
- mpd-directory)))))
+ `([jpeg :file ,(expand-file-name "nocover.jpg"
+ mpd-directory)])))
(set-extent-properties
mpd-cover-glyph
`(keymap ,mpd-pause-map balloon-help ,#'mpd-info)))))