--- 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
