aboutsummaryrefslogtreecommitdiff
path: root/lisp/emms-player-mpd.el
diff options
context:
space:
mode:
authorJohnathan Rabkin <yonirabkin@member.fsf.org>2012-10-14 20:08:16 -0400
committerJohnathan Rabkin <yonirabkin@member.fsf.org>2012-10-14 20:08:16 -0400
commit78c9cc464f8e9be777afc1ba82ee73b86abf3d06 (patch)
treef21f6c955977a9242bd6348f0fb3adb174288838 /lisp/emms-player-mpd.el
parentd73e52d4d6abb324e93584d01f53d360f57834a9 (diff)
* lisp/emms-player-mpd.el (emms-player-mpd-get-supported-regexp):
extend the supported formats scanning to the new (0.17) output of `mpd --version', keeping the previous scanners for earlier versions. We include not only file extensions, but also supported network protocols, which are also reported by mpd. Patch by Jose Antonio Ortega Ruiz <jao@gnu.org>
Diffstat (limited to 'lisp/emms-player-mpd.el')
-rw-r--r--lisp/emms-player-mpd.el63
1 files changed, 39 insertions, 24 deletions
diff --git a/lisp/emms-player-mpd.el b/lisp/emms-player-mpd.el
index ae43aa1..5744515 100644
--- a/lisp/emms-player-mpd.el
+++ b/lisp/emms-player-mpd.el
@@ -140,30 +140,45 @@ leave it set to nil."
(defun emms-player-mpd-get-supported-regexp ()
"Returns a regexp of file extensions that MusicPD supports,
or nil if we cannot figure it out."
- (let ((out (shell-command-to-string "mpd --version"))
- (found-start nil)
- (supported nil))
- ;; Get supported formats
- ;; New version (0.15.x)
- (if (string-match "Supported decoders:\\([^0]+?\\)Supported outputs:" out)
- (setq supported (replace-regexp-in-string "\\[.+?\\]" ""
- (match-string 1 out)))
- ;; Older versions
- (setq out (split-string out "\n"))
- (while (car out)
- (cond ((string= (car out) "Supported formats:")
- (setq found-start t))
- ((string= (car out) "")
- (setq found-start nil))
- (found-start
- (setq supported (concat supported (car out)))))
- (setq out (cdr out))))
- ;; Create regexp
- (when (and (stringp supported)
- (not (string= supported "")))
- (concat "\\`http://\\|\\.\\(m3u\\|pls\\|"
- (regexp-opt (delq nil (split-string supported)))
- "\\)\\'"))))
+ (let ((out (shell-command-to-string "mpd --version")))
+ ;; 0.17.x
+ (if (string-match "Decoders plugins:$" out)
+ (let* ((b (match-end 0))
+ (e (string-match "Output plugins:$" out))
+ (plugs (split-string (substring out b e) "\n" t))
+ (plugs (mapcan (lambda (x)
+ (and (string-match " +\\[.*\\] +\\(.+\\)$" x)
+ (split-string (match-string 1 x) nil t)))
+ plugs))
+ (b (and (string-match "Protocols:$" out) (match-end 0)))
+ (prots (and b (substring out (+ 2 b) -1)))
+ (prots (split-string (or prots "") nil t)))
+ (concat "\\(\\.\\(m3u\\|pls\\|"
+ (regexp-opt (delq nil plugs))
+ "\\)\\'\\)\\|\\(\\`"
+ (regexp-opt (delete "file://" prots)) "\\)"))
+ (let ((found-start nil)
+ (supported nil))
+ (if (string-match "Supported decoders:\\([^0]+?\\)Supported outputs:" out)
+ ;; 0.15.x
+ (setq supported (replace-regexp-in-string "\\[.+?\\]" ""
+ (match-string 1 out)))
+ ;; < 0.15
+ (setq out (split-string out "\n"))
+ (while (car out)
+ (cond ((string= (car out) "Supported formats:")
+ (setq found-start t))
+ ((string= (car out) "")
+ (setq found-start nil))
+ (found-start
+ (setq supported (concat supported (car out)))))
+ (setq out (cdr out))))
+ ;; Create regexp
+ (when (and (stringp supported)
+ (not (string= supported "")))
+ (concat "\\`http://\\|\\.\\(m3u\\|pls\\|"
+ (regexp-opt (delq nil (split-string supported)))
+ "\\)\\'"))))))
(defcustom emms-player-mpd-supported-regexp
;; Use a sane default, just in case