summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorjao <jao@gnu.org>2020-11-24 02:59:57 +0000
committerjao <jao@gnu.org>2020-11-24 02:59:57 +0000
commit44d77e343203b589b13346cb23df1755f122a3b4 (patch)
treef3ed408b41c79aaaaf8b5bde92289da72635ff63
parentf5b0b10a1ae85ec076057aa895773af18c6443a4 (diff)
downloadelibs-44d77e343203b589b13346cb23df1755f122a3b4.tar.gz
elibs-44d77e343203b589b13346cb23df1755f122a3b4.tar.bz2
jao-mpris improvements
-rw-r--r--media/jao-mpris.el82
1 files changed, 46 insertions, 36 deletions
diff --git a/media/jao-mpris.el b/media/jao-mpris.el
index 195ffce..4d6d294 100644
--- a/media/jao-mpris.el
+++ b/media/jao-mpris.el
@@ -60,43 +60,46 @@
"{{duration(mpris:length)}}"))))
(jao-notify (string-trim m) "Playing")))
-;;;###autoload
-(defun jao-mpris-show-osd ()
- (interactive)
- (jao-notify jao-spotify-track-string))
-
-;;;###autoload
-(defun jao-mpris-artist-title ()
- (when-let (s (jao-mpris--playerctl "metadata"
- "--format"
- "{{artist}}|||{{title}}"))
- (let ((s (split-string (string-trim s) "|||")))
- (cons (car s) (cadr s)))))
-
+(defvar jao-mpris--current nil)
(defvar jao-mpris-track-string "")
-(defun jao-mpris--track (&rest info)
- (let ((cs (or info (jao-playerctl--status))))
- (if (string= "Playing" (or (elt cs 0) ""))
- (let* ((track (format "%s" (elt cs 1)))
- (title (elt cs 2))
- (artist (elt cs 3))
- (album (elt cs 4))
- (length (elt cs 5))
- (duration (cond ((stringp length) length)
- ((numberp length)
- (jao-emms--fmt-time (/ length 1e6) "")))))
- (setq jao-mpris-track-string
- (format "♪ %s %s %s%s%s"
- (jao--put-face track 'jao-emms-font-lock-track)
- (jao--put-face title 'jao-emms-font-lock-title)
- (jao--put-face artist 'jao-emms-font-lock-artist)
- (jao--put-face (if album (format " (%s)" album) "")
- 'jao-emms-font-lock-album)
- (if duration (format " [%s]" duration) ""))))
+(defun jao-mpris--get (k &optional l)
+ (alist-get k (or l jao-mpris--current)))
+
+(defun jao-mpris--format (&optional info)
+ (let* ((artist (jao-mpris--get 'artist info))
+ (title (jao-mpris--get 'title info))
+ (track (jao-mpris--get 'track info))
+ (album (jao-mpris--get 'album info))
+ (len (jao-mpris--get 'length info))
+ (duration (cond ((stringp len) len)
+ ((numberp len) (jao-emms--fmt-time (/ len 1e6) "")))))
+ (format "♪ %s %s %s%s%s"
+ (jao--put-face (format "%s" (or track "")) 'jao-emms-font-lock-track)
+ (jao--put-face title 'jao-emms-font-lock-title)
+ (jao--put-face artist 'jao-emms-font-lock-artist)
+ (jao--put-face (if album (format " (%s)" album) "")
+ 'jao-emms-font-lock-album)
+ (if duration (format " [%s]" duration) ""))))
+
+(defun jao-mpris--track (&optional info)
+ (let ((info (or info (jao-playerctl--status))))
+ (if (string= "Playing" (jao-mpris--get 'status info))
+ (setq jao-mpris-track-string (jao-mpris--format info))
(setq jao-mpris-track-string "")))
(jao-minibuffer-refresh))
+;;;###autoload
+(defun jao-mpris-artist-title ()
+ (when jao-mpris--current
+ (cons (jao-mpris--get 'artist) (jao-mpris--get 'title))))
+
+;;;###autoload
+(defun jao-mpris-show-osd ()
+ (interactive)
+ (when jao-mpris--current
+ (jao-notify (format "%s: %s" (jao-mpris--get 'status) (jao-mpris--format)))))
+
(jao-minibuffer-add-variable 'jao-mpris-track-string t)
(defun jao-mpris--handler (iname properties &rest args)
@@ -104,15 +107,22 @@
(let ((st (caadr (assoc "PlaybackStatus" properties)))
(md (caadr (assoc "Metadata" properties))))
(cond ((and st (not (string= "Playing" st)))
- (setq jao-spotify-track-string ""))
+ (setq jao-mpris-track-string "")
+ (setq jao-mpris--current
+ (cons (cons 'status st)
+ (assq-delete-all 'status jao-mpris--current)))
+ (jao-minibuffer-refresh)
+ (message "Music %s" st))
(md (let ((tno (caadr (assoc "xesam:trackNumber" md)))
(tlt (caadr (assoc "xesam:title" md)))
(art (caaadr (assoc "xesam:artist" md)))
(alb (caadr (assoc "xesam:album" md)))
(len (caadr (assoc "mpris:length" md))))
- (setq jao-debug md)
- (jao-mpris--track "Playing" tno tlt art alb len)))))))
-
+ (setq jao-mpris--current
+ `((track . ,tno) (title . ,tlt)
+ (artist . ,art) (album . ,alb)
+ (length . ,len) (status . ,st)))
+ (jao-mpris--track jao-mpris--current)))))))
;;;###autoload
(defun jao-mpris-minibuffer-register (name &optional bus)