;;; +bongo.el --- customizations in bongo -*- lexical-binding: t; -*- ;;; Commentary: ;;; Code: (defgroup +bongo nil "Extra customization for `bongo'." :group 'bongo) (defun +bongo-notify () (notifications-notify :title "Now Playing" :body (let ((bongo-field-separator " ")) (substring-no-properties (bongo-formatted-infoset))) :urgency 'low :transient t)) (defun +bongo-stop-all () "Ensure only one bongo playlist is playing at a time. This is intended to be :before advice to `bongo-play'." (mapc (lambda (b) (with-current-buffer b (when-let* ((modep (derived-mode-p 'bongo-playlist-mode)) (bongo-playlist-buffer b) (playingp (bongo-playing-p))) (bongo-stop)))) (buffer-list))) ;;; Bongo Radio (defcustom +bongo-radio-stations nil "Stations to play using `+bongo-radio'.") (defcustom +bongo-radio-buffer-name "*Bongo Radio*" "Name of the buffer that holds all bongo radio stations." :type 'string) (defun +bongo-radio () (interactive) (switch-to-buffer (or (get-buffer +bongo-radio-buffer-name) (+bongo-radio-init)))) (defun +bongo-radio-init () (interactive) (let ((bongo-playlist-buffer (get-buffer-create +bongo-radio-buffer-name)) (bongo-confirm-flush-playlist nil)) (with-bongo-playlist-buffer (bongo-playlist-mode) (bongo-flush-playlist :delete-all) (cl-loop for (name . url) in +bongo-radio-stations do (bongo-insert-uri url name))) (prog1 (switch-to-buffer bongo-playlist-buffer) (goto-char (point-min))))) (provide '+bongo) ;;; +bongo.el ends here