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

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

[elpa] externals/emms 89e2caf: * emms.el: add player preference


From: ELPA Syncer
Subject: [elpa] externals/emms 89e2caf: * emms.el: add player preference
Date: Fri, 13 Aug 2021 15:57:10 -0400 (EDT)

branch: externals/emms
commit 89e2caf942299b64360280c2606cf2553dccb58a
Author: Yoni Rabkin <yoni@rabkins.net>
Commit: Yoni Rabkin <yoni@rabkins.net>

    * emms.el: add player preference
---
 emms.el | 38 +++++++++++++++++++++++++++++++++++++-
 1 file changed, 37 insertions(+), 1 deletion(-)

diff --git a/emms.el b/emms.el
index 37116b1..f3bb678 100644
--- a/emms.el
+++ b/emms.el
@@ -314,6 +314,10 @@ being the playlist buffer.")
 (defvar emms-playlist-buffer nil
   "The current playlist buffer, if any.")
 
+(defvar emms-players-preference-f #'emms-players-default-preference-f
+  "Default function for player preference.")
+
+
 
 ;;; Macros
 
@@ -1454,11 +1458,43 @@ non-nil, or nil if no such player exists."
         (car lis)
       nil)))
 
+(defun emms-players-default-preference-f (track players)
+  "Default preference function.
+
+Returns the first player."
+  (ignore track)
+  (car players))
+
+(defun emms-players-preference (track players)
+  "Call `emms-players-preference-f' with TRACK and PLAYERS.
+
+The function `emms-players-preference-f' must accept an Emms
+track and a list of players. It can be assumed that all of the
+players in PLAYERS can play TRACK.
+
+The function must return one of the players from PLAYERS."
+  (funcall emms-players-preference-f track players))
+
+(defun emms-players-for (track)
+  "Return a player for TRACK.
+
+If the track can be played by more than one player, call
+`emms-players-preference' to choose a player."
+  (let (players)
+    (mapc
+     #'(lambda (player)
+        (when (funcall (emms-player-get player 'playablep) track)
+          (push player players)))
+     emms-player-list)
+    (if (< 1 (length players))
+       (emms-players-preference track players)
+      (car players))))
+
 (defun emms-player-start (track)
   "Start playing TRACK."
   (if emms-player-playing-p
       (error "A player is already playing")
-    (let ((player (emms-player-for track)))
+    (let ((player (emms-players-for track)))
       (if (not player)
           (error "Don't know how to play track: %S" track)
         ;; Change default-directory so we don't accidentally block any



reply via email to

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