[PATCH] * emms-listenbrainz-scrobbler.el: store current listenbrainz track

Jake Coble <[email protected]> Sat, 20 Dec 2025 17:11:28 -0500
Newsgroups gmane.emacs.emms.user
Message-ID <[email protected]>
---
 emms-listenbrainz-scrobbler.el | 34 ++++++++++++++++++++--------------
 1 file changed, 20 insertions(+), 14 deletions(-)

diff --git a/emms-listenbrainz-scrobbler.el b/emms-listenbrainz-scrobbler.el
index 2262d4e..34edb29 100644
--- a/emms-listenbrainz-scrobbler.el
+++ b/emms-listenbrainz-scrobbler.el
@@ -55,6 +55,10 @@ ;; To enable scrobbling call (emms-listenbrainz-scrobbler-enable).
   (concat "https://" emms-listenbrainz-scrobbler-host "/1/submit-listens")
   "URL for submissions.")
 
+(defvar emms-listenbrainz-scrobbler-track
+  nil
+  "Track submitted to listenbrainz")
+
 (defvar emms-listenbrainz-scrobbler-track-play-start-timestamp
   nil
   "Time when a track started playing.")
@@ -208,25 +212,27 @@ ;; data but headers!
 	 (good-to-submit (eq (emms-track-type current-track) 'file)))
     (when good-to-submit
       (emms-listenbrainz-scrobbler-make-async-submission-call
-       current-track t))))
+       current-track t)
+      (setq emms-listenbrainz-scrobbler-track current-track))))
 
 (defun emms-listenbrainz-scrobbler-stop-hook ()
   "Submit the track to listenbrainz if we have listened long enough.
 
 That is, if it has been played for 240 seconds or half the length of the track."
-  (let ((current-track (emms-playlist-current-selected-track)))
-    (let ((track-length (emms-track-get current-track 'info-playing-time)))
-      (when (and track-length
-		 ;; only submit files
-		 (eq (emms-track-type current-track) 'file))
-	(when (and
-	       ;; track must be longer than 30 secs
-	       (> track-length 30)
-	       ;; track must be played for more than 240 secs or
-	       ;;   half the tracks length, whichever comes first.
-	       (> emms-playing-time (min 240 (/ track-length 2))))
-	  (emms-listenbrainz-scrobbler-make-async-submission-call
-	   current-track))))))
+  (let ((track-length (emms-track-get emms-listenbrainz-scrobbler-track
+                                      'info-playing-time)))
+    (when (and track-length
+		       ;; only submit files
+		       (eq (emms-track-type emms-listenbrainz-scrobbler-track) 'file))
+	  (when (and
+	         ;; track must be longer than 30 secs
+	         (> track-length 30)
+	         ;; track must be played for more than 240 secs or
+	         ;;   half the tracks length, whichever comes first.
+	         (> emms-playing-time (min 240 (/ track-length 2))))
+	    (emms-listenbrainz-scrobbler-make-async-submission-call
+	     emms-listenbrainz-scrobbler-track)
+        (setq emms-listenbrainz-scrobbler-track nil)))))
 
 
 ;;* Entry points
-- 
2.52.0