enhanced create playlist function

This commit is contained in:
2023-06-20 12:13:18 +02:00
parent ca66af1afe
commit 48e8827d58

View File

@@ -40,30 +40,72 @@
(emms-play-playlist filename)) (emms-play-playlist filename))
(defun audio-create-playlist(name) (defun audio-create-playlist(name)
"Create a new audio playlist for EMMS player." "Create a new audio playlist for EMMS player.
It asks interactively for NAME. The playlistname will be derived
as this: 'source-file-default-directory + \"playlist-\" + NAME.
If the playlist already exists nothing will be done.
Otherwise the user will be asked wether to add a directory or
file[s] to the playlist. In the first case the user can then
interactively select a directory. In the latter case the user can
add interactively one or more files.
The playlist will be saved when a directory has been selected or
the user declines to add another file."
(interactive "sPlaylist name: ") (interactive "sPlaylist name: ")
(emms-playlist-new name) (let ((filename (expand-file-name (format "playlist-%s" name) emms-source-file-default-directory)))
(switch-to-buffer name) (message filename)
(emms-playlist-set-playlist-buffer name) (if (file-exists-p filename)
(let ((read-answer-short t) (message (format "Playlist %s already exists!" filename))
(answer (read-answer "add [D]irectory or [F]ile? " (progn
'(("dir" ?d "add dir") (emms-playlist-new name)
("file" ?f "add file")))) (switch-to-buffer name)
(done nil))
(message answer)
(cond
((equal answer "dir")
(emms-add-directory-tree (read-directory-name "Select directory:")))
((equal answer "file")
(while (not done)
;; FIXME: ask to continue
(emms-playlist-set-playlist-buffer name) (emms-playlist-set-playlist-buffer name)
(let ((file (read-file-name "Select audio file:"))) (let ((read-answer-short t)
(if file (answer (read-answer "add [D]irectory or [F]ile? "
(emms-add-file file) '(("dir" ?d "add dir")
(setq done t)))))) ("file" ?f "add file")
(emms-playlist-save 'native (expand-file-name (format "playlist-%s" name) "~/MP3")) ("url" ?u "add a streaming url")
(emms-playlist-mode))) ("quit" ?q "quit"))))
(done nil)
(abort nil))
(setq default-directory emms-source-file-default-directory)
(cond
((equal answer "url")
(let ((url (read-string "Enter a url: ")))
(when url
(emms-add-url url))))
((equal answer "dir")
(while (not done)
(emms-playlist-set-playlist-buffer name)
(let ((dir (read-directory-name "Select directory:")))
(when dir
(emms-add-directory-tree dir))
(setq answer (read-char-from-minibuffer "Add another dir [Yn]? "))
(when (equal answer ?n)
(setq done t)))))
((equal answer "file")
(while (not done)
(emms-playlist-set-playlist-buffer name)
(let ((file (read-file-name "Select audio file:")))
(when file
(emms-add-file file)
(setq default-directory (file-name-directory file)))
(setq answer (read-char-from-minibuffer "Add another file [Yn]? "))
(when (equal answer ?n)
(setq done t)))))
(t (setq abort t)))
(if abort
(kill-buffer)
(progn
(emms-playlist-save 'native filename)
(emms-playlist-mode))))))))
:hook
(emms-playlist-mode . hl-line-mode)
(emms-playlist-source-inserted . beginning-of-buffer)
:bind (:map emms-playlist-mode-map :bind (:map emms-playlist-mode-map
( "<right>" . 'emms-seek-forward) ( "<right>" . 'emms-seek-forward)