emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/listen 317732714c 083/103: Fix: (listen-queue-next-trac


From: ELPA Syncer
Subject: [elpa] externals/listen 317732714c 083/103: Fix: (listen-queue-next-track) Also test filename
Date: Mon, 26 Feb 2024 12:59:32 -0500 (EST)

branch: externals/listen
commit 317732714c6e748f14acc013f53e3fc178e0778c
Author: Adam Porter <adam@alphapapa.net>
Commit: Adam Porter <adam@alphapapa.net>

    Fix: (listen-queue-next-track) Also test filename
---
 README.org      |  1 +
 listen-queue.el | 24 +++++++++++++++++++++---
 listen.info     |  6 ++++--
 3 files changed, 26 insertions(+), 5 deletions(-)

diff --git a/README.org b/README.org
index 52a109fe9b..b74900d3f5 100644
--- a/README.org
+++ b/README.org
@@ -57,6 +57,7 @@ Use the command ~listen~ to show the Transient menu.  From 
there, it is--hopeful
 
 *Fixes*
 + The queue could sometimes skip tracks when playing.
++ Improve handling of tracks that are changed during playback (e.g. metadata).
 
 ** v0.1
 
diff --git a/listen-queue.el b/listen-queue.el
index 9875f30a99..020204d929 100644
--- a/listen-queue.el
+++ b/listen-queue.el
@@ -84,6 +84,11 @@
            (list (list :name "▶" :primary 'descend
                        :getter (lambda (track _table)
                                  (if (eq track (listen-queue-current queue))
+                                     ;; FIXME: If track metadata changes 
during playback and the
+                                     ;; user refreshes the queue from disk, 
the currently playing
+                                     ;; track won't match anymore.  (The 
obvious solution is to
+                                     ;; compare filenames, but that would seem 
wasteful for a
+                                     ;; large queue, so let's defer that for 
now.)
                                      "▶" " ")))
                  (list :name "#" :primary 'descend
                        :getter (lambda (track _table)
@@ -338,9 +343,22 @@ PROMPT is passed to `format-prompt', which see."
 
 (defun listen-queue-next-track (queue)
   "Return QUEUE's next track after current."
-  (seq-elt (listen-queue-tracks queue)
-           (1+ (seq-position (listen-queue-tracks queue)
-                             (listen-queue-current queue)))))
+  (or (ignore-errors
+        (seq-elt (listen-queue-tracks queue)
+                 (1+ (seq-position (listen-queue-tracks queue)
+                                   (listen-queue-current queue) #'eq))))
+      ;; Couldn't find position of current track: maybe the track
+      ;; object changed while it was playing (e.g. if the user changes
+      ;; the track metadata and refreshes the queue from disk while
+      ;; the track is playing), in which case it won't be able to find
+      ;; the track in the queue, so look again by comparing filenames.
+      (seq-elt (listen-queue-tracks queue)
+               (1+ (seq-position (listen-queue-tracks queue)
+                                 (listen-queue-current queue)
+                                 (lambda (a b)
+                                   (equal (listen-track-filename a)
+                                          (listen-track-filename b))))))))
+
 (declare-function listen-shell-command "listen")
 (defun listen-queue-shell-command (command filenames)
   "Run COMMAND on FILENAMES.
diff --git a/listen.info b/listen.info
index b9ab917ba0..74b6207b84 100644
--- a/listen.info
+++ b/listen.info
@@ -120,6 +120,8 @@ File: README.info,  Node: v02-pre,  Next: v01,  Up: 
Changelog
 
    *Fixes*
    • The queue could sometimes skip tracks when playing.
+   • Improve handling of tracks that are changed during playback (e.g.
+     metadata).
 
 
 File: README.info,  Node: v01,  Prev: v02-pre,  Up: Changelog
@@ -151,8 +153,8 @@ Node: Configuration2537
 Node: Usage2876
 Node: Changelog3147
 Node: v02-pre3299
-Node: v013681
-Node: Development3783
+Node: v013770
+Node: Development3872
 
 End Tag Table
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]