[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [bongo-devel] Missing x-get-selection, m3u wish
From: |
Daniel Brockman |
Subject: |
Re: [bongo-devel] Missing x-get-selection, m3u wish |
Date: |
Sat, 03 Feb 2007 19:01:47 +0100 |
User-agent: |
Gnus/5.11 (Gnus v5.11) Emacs/23.0.51 (gnu/linux) |
Dieter Deyke <address@hidden> writes:
> BTW, it would be nice to be able to insert .m3u files into
> a playlist buffer.
Please try the following implementation:
diff -rN -u old-bongo/bongo.el new-bongo/bongo.el
--- old-bongo/bongo.el 2007-02-03 19:01:04.000000000 +0100
+++ new-bongo/bongo.el 2007-02-03 19:01:04.000000000 +0100
@@ -6035,9 +6035,10 @@
((consp file-name)
(if (null (cdr file-name))
(bongo-insert-file (car file-name))
- (let ((beginning (point)))
- (mapc 'bongo-insert-file file-name)
- (bongo-maybe-join-inserted-tracks beginning (point)))))
+ (with-bongo-buffer
+ (let ((beginning (point)))
+ (mapc 'bongo-insert-file file-name)
+ (bongo-maybe-join-inserted-tracks beginning (point))))))
((file-directory-p file-name)
(bongo-insert-directory-tree file-name))
(t
@@ -6215,6 +6216,71 @@
(bongo-format-infoset
(bongo-infoset-from-file-name uri)))))
+(defun bongo-insert-m3u-playlist-contents (file-name)
+ "Insert the contents of M3U playlist FILE-NAME."
+ (interactive "fInsert contents of M3U playlist file: ")
+ (let ((beginning (with-bongo-buffer (point))))
+ (with-temp-buffer
+ (let ((coding-system-for-read
+ (if (string-equal (file-name-extension file-name) "m3u8")
+ 'utf-8
+ coding-system-for-read)))
+ (let* ((absolute-file-name (car (insert-file-contents file-name)))
+ (default-directory (file-name-directory absolute-file-name)))
+ (goto-char (point-min))
+ (while (not (eobp))
+ (unless (char-equal ?# (char-after (point)))
+ (bongo-insert-file
+ (expand-file-name
+ (buffer-substring (point) (point-at-eol)))))
+ (forward-line 1)))))
+ (with-bongo-buffer
+ (bongo-maybe-join-inserted-tracks beginning (point)))))
+
+(defun bongo-insert-pls-playlist-contents (file-name)
+ "Insert the contents of PLS playlist FILE-NAME."
+ (interactive "fInsert contents of PLS playlist file: ")
+ (let ((beginning (with-bongo-buffer (point))))
+ (with-temp-buffer
+ (let* ((absolute-file-name (car (insert-file-contents file-name)))
+ (default-directory (file-name-directory absolute-file-name)))
+ (goto-char (point-min))
+ (when (not (looking-at "^\\[playlist\\]$"))
+ (error "File does not appear to be a PLS playlist"))
+ (forward-line 1)
+ (let ((i 1))
+ (catch 'bongo-done
+ (while t
+ (if (null (re-search-forward
+ (format "^file%d=\\(.*\\)$" i) nil t))
+ (throw 'bongo-done nil)
+ (let ((entry-file-name (match-string 1))
+ (entry-title
+ (and (re-search-forward
+ (format "^title%d=\\(.*\\)" i) nil t)
+ (not (string-equal "" (match-string 1)))
+ (match-string 1))))
+ (if (bongo-uri-p entry-file-name)
+ (bongo-insert-uri entry-file-name entry-title)
+ (bongo-insert-file
+ (expand-file-name entry-file-name))))
+ (setq i (+ i 1))))))))
+ (with-bongo-buffer
+ (bongo-maybe-join-inserted-tracks beginning (point)))))
+
+(defun bongo-insert-playlist-contents (file-name)
+ "Insert the contents of playlist FILE-NAME.
+If the first line in the file is `[playlist]', then it is
+ assumed to be a PLS playlist.
+Otherwise, it is assumed to be an M3U playlist."
+ (interactive "fInsert contents of playlist file: ")
+ (if (with-temp-buffer
+ (insert-file-contents file-name nil 0 (length "[playlist]\r\n"))
+ (goto-char (point-min))
+ (looking-at "^\\[playlist\\]$"))
+ (bongo-insert-pls-playlist-contents file-name)
+ (bongo-insert-m3u-playlist-contents file-name)))
+
(defun bongo-insert-action (action)
"Insert a new action track line corresponding to ACTION."
(interactive "xInsert action: ")
@@ -7309,6 +7375,7 @@
(defun bongo-redefine-keys ()
"Define the usual keys in `bongo-mode-map'."
+ (interactive)
(let ((map bongo-mode-map))
(define-key map "\C-m" 'bongo-dwim)
(define-key map [mouse-2] 'bongo-mouse-dwim)
@@ -7358,6 +7425,7 @@
(define-key map "id" 'bongo-insert-directory)
(define-key map "it" 'bongo-insert-directory-tree)
(define-key map "iu" 'bongo-insert-uri)
+ (define-key map "il" 'bongo-insert-playlist-contents)
(define-key map "iC" 'bongo-insert-cd)
(define-key map "e" 'bongo-append-enqueue)
(define-key map "E" 'bongo-insert-enqueue)
--
Daniel Brockman <address@hidden>
- Re: [bongo-devel] Re: Missing x-get-selection, m3u wish, (continued)
- Re: [bongo-devel] Re: Missing x-get-selection, m3u wish, Daniel Brockman, 2007/02/04
- [bongo-devel] Re: Missing x-get-selection, m3u wish, Daniel Jensen, 2007/02/05
- Re: [bongo-devel] Re: Missing x-get-selection, m3u wish, Daniel Brockman, 2007/02/05
- [bongo-devel] Re: Missing x-get-selection, m3u wish, Dieter Deyke, 2007/02/05
- Re: [bongo-devel] Re: Missing x-get-selection, m3u wish, Daniel Brockman, 2007/02/05
- Re: [bongo-devel] Re: Missing x-get-selection, m3u wish, Dieter Deyke, 2007/02/05
- [bongo-devel] Re: Missing x-get-selection, m3u wish, Dieter Deyke, 2007/02/05
- [bongo-devel] Re: Missing x-get-selection, m3u wish, Daniel Jensen, 2007/02/05
- [bongo-devel] Re: Missing x-get-selection, m3u wish, Dieter Deyke, 2007/02/05
- Re: [bongo-devel] Re: Missing x-get-selection, m3u wish, Daniel Brockman, 2007/02/06
Re: [bongo-devel] Missing x-get-selection, m3u wish,
Daniel Brockman <=