From 8d98294a7acbd25e0943335babaaf80936940912 Mon Sep 17 00:00:00 2001
From: jao <jao@gnu.org>
Date: Sun, 22 May 2022 06:32:22 +0100
Subject: mpc: better status (times)

---
 lib/media/jao-mpc.el | 44 ++++++++++++++++++++++++++++++--------------
 1 file changed, 30 insertions(+), 14 deletions(-)

diff --git a/lib/media/jao-mpc.el b/lib/media/jao-mpc.el
index e25cc46..a86795b 100644
--- a/lib/media/jao-mpc.el
+++ b/lib/media/jao-mpc.el
@@ -42,18 +42,30 @@
          (r (shell-command-to-string (format "mpc -p %s %s" port cmd))))
     (replace-regexp-in-string "^\\(warning: \\)?MPD .+\n" "" r)))
 
+(defun jao-mpc--fformat (fields)
+  (mapconcat (lambda (f) (format "%s:::%%%s%%" f f)) fields "\n"))
+
 (defconst jao-mpc--fields
   '(artist album composer originaldate genre title track position time name))
 
 (defconst jao-mpc--stfmt
-  (mapconcat (lambda (f) (format "%s:::%%%s%%" f f)) jao-mpc--fields "\n"))
+  (jao-mpc--fformat
+   '(artist album composer originaldate genre title track name)))
+
+(defconst jao-mpc--stfmtt
+  (jao-mpc--fformat '(currenttime totaltime percenttime songpos length)))
+
+(defmacro jao-mpc--parse-fields (res-str res)
+  `(dolist (s (split-string ,res-str "\n" t " ") ,res)
+     (when (string-match "\\(.+\\):::\\(.+\\)" s)
+       (push (cons (intern (match-string 1 s)) (match-string 2 s)) ,res))))
 
 (defun jao-mpc--current (&optional port)
   (let ((s (jao-mpc--cmd (format "-f '%s' current" jao-mpc--stfmt) port))
+        (st (jao-mpc--cmd (format "status '%s'" jao-mpc--stfmtt)))
         (res))
-    (dolist (s (split-string s "\n" t " ") res)
-      (when (string-match "\\(.+\\):::\\(.+\\)" s)
-        (push (cons (intern (match-string 1 s)) (match-string 2 s)) res)))))
+    (jao-mpc--parse-fields s res)
+    (jao-mpc--parse-fields st res)))
 
 (defun jao-mpc--playing-p (&optional port)
   (string-prefix-p "playing" (jao-mpc--cmd "status %state%" port)))
@@ -65,16 +77,22 @@
   (put-text-property 0 (length str) 'face face str)
   str)
 
-(defun jao-mpc--current-str (&optional port current len)
-  (let* ((current (or current (jao-mpc--current port)))
-         (len (or len (jao-mpc--queue-len port)))
+(defun jao-mpc--current-str (&optional port times)
+  (let* ((current (jao-mpc--current port))
+         (len (alist-get 'length current "0"))
          (title (alist-get 'title current (alist-get 'name current "")))
          (album (alist-get 'album current))
          (artist (alist-get 'artist current))
          (composer (alist-get 'composer current))
-         (no (string-to-number (alist-get 'position current "0")))
-         (time (alist-get 'time current "")))
-    (format "> %s%s %s%s%s%s" ;; 
+         (no (string-to-number (alist-get 'songpos current "0")))
+         (time (alist-get 'totaltime current ""))
+         (tims (if times
+                   (format " [%s/%s%s]"
+                           (alist-get 'currenttime current "")
+                           time
+                           (alist-get 'percenttime current ""))
+                 (format " [%s]" time))))
+    (format "%s%s %s%s%s%s" ;; 
             (jao--put-face (if (zerop no) "" (format "%02d/%s " no len))
                            'jao-themes-f02)
             (jao--put-face title 'jao-themes-f00)
@@ -82,9 +100,7 @@
             (jao--put-face (if composer (format " [%s]" composer) "")
                            'jao-themes-f01)
             (jao--put-face (if album (format " (%s)" album) "") 'jao-themes-f11)
-            (if (string-blank-p time)
-                ""
-              (jao--put-face (format " [%s]" time) 'jao-themes-dimm)))))
+            (jao--put-face tims (if times 'jao-themes-f00 'jao-themes-dimm)))))
 
 (defvar jao-mpc-minibuffer-str "")
 
@@ -212,7 +228,7 @@
 ;;;###autoload
 (defun jao-mpc-echo-current (&optional port)
   (interactive)
-  (jao-notify (jao-mpc--current-str port)))
+  (message "%s" (jao-mpc--current-str port t)))
 
 ;;;###autoload
 (defun jao-mpc-add-url (url)
-- 
cgit v1.2.3