;;; +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
