From 18e46cd82d32ff66da95306d78c545f68525adb2 Mon Sep 17 00:00:00 2001
From: Colin Okay <colin@cicadas.surf>
Date: Tue, 25 Oct 2022 16:19:02 -0500
Subject: Add: basic now playing track display

---
 vampire.lisp | 38 ++++++++++++++++++++++++++++++++------
 1 file changed, 32 insertions(+), 6 deletions(-)

diff --git a/vampire.lisp b/vampire.lisp
index 9001643..cfac3b9 100644
--- a/vampire.lisp
+++ b/vampire.lisp
@@ -178,12 +178,33 @@
   (when-let (track (now-playing ctl))
     (play-media track)))
 
+(defun load-track-display (ctl)
+  (with-slots (now-playing track-display) ctl
+    (when now-playing
+      (let ((track (get-audio-track ctl now-playing)))
+        (setf (inner-html track-display) "")
+        (with-clog-create track-display
+            (div ()
+                 (section (:h3 :content "Now Playing"))
+                 (img (:url-src (track-thumb-url track) :bind thumb))
+                 (section (:h4 :content (track-title track))))
+          (setf (width thumb) 100))))))
+
+(defun initialize-playlist/ctl (body)
+  (when-let (ctl (playlist/ctl body))
+    (setf now-playing (car (first (audio->track ctl))))
+    (load-track-display ctl)))
+
 (defun playlist/ctl (obj)
   (connection-data-item obj "playlist/ctl"))
 
-(defun install-playlist/ctl (playlist display)
-  (setf (connection-data-item display "playlist/ctl")
-        (make-instance 'playlist/ctl :playlist playlist :track-display display)))
+(defun install-playlist/ctl (playlist obj)
+  (setf (connection-data-item obj "playlist/ctl")
+        (make-instance 'playlist/ctl :playlist playlist)))
+
+(defun install-track-display (display)
+  (let ((ctl (playlist/ctl display)))
+    (setf (track-display ctl) display)))
 
 (defun install-audio-track (audio track &optional (position -1))
   (when-let (ctl (playlist/ctl audio))
@@ -202,7 +223,8 @@
   (when-let (ctl (playlist/ctl audio))
     (stop-playback ctl)
     (setf (now-playing ctl) audio)
-    (start-playback ctl)))
+    (start-playback ctl)
+    (load-track-display ctl)))
 
 (defun ctl/next-track (audio)
   (when-let (ctl (playlist/ctl audio))
@@ -211,7 +233,8 @@
       (stop-playback ctl)
       (when next
         (setf (now-playing ctl) (car next))
-        (start-playback ctl)))))
+        (start-playback ctl)
+        (load-track-display ctl)))))
 
 ;;; 
 
@@ -282,9 +305,12 @@
     (with-clog-create body
         (div ()
              (section (:h2 :content (playlist-title playlist)))
+             (div (:bind track-display))
              (div ()
                   (track-listing (playlist)))
-             (track-form (playlist))))))
+             (track-form (playlist)))
+      (install-track-display track-display)
+      (initialize-playlist/ctl body))))
 
 (defun user-page (body)
   (if-let (user (session-user body)) 
-- 
cgit v1.2.3