(defvar squeeze-players ())
(defvar squeeze-syncgroups ())
+(defun squeeze-send-string (control &rest arguments)
+ (let* ((process (get-buffer-process "*squeeze*"))
+ (string (apply #'format control arguments))
+ (length (length string)))
+ (unless (and (> length 0) (char-equal (aref string (1- length)) ?\n))
+ (setq string (format "%s\n" string)))
+ (if process
+ (comint-send-string process string)
+ (error "can't find squeeze process"))))
+
(defun squeeze-control-query-syncgroups ()
(interactive)
- (comint-send-string (get-buffer-process "*squeeze*") (format "syncgroups ?\n")))
+ (squeeze-send-string "syncgroups ?"))
(defun squeeze-control-query-players ()
(interactive)
- (comint-send-string (get-buffer-process "*squeeze*") (format "players 0\n")))
+ (squeeze-send-string "players 0"))
(defun squeeze-control-toggle-power (&optional id)
(interactive)
(unless id
(setq id (get-text-property (point) 'squeeze-playerid)))
- (comint-send-string (get-buffer-process "*squeeze*") (format "%s power\n" id)))
+ (squeeze-send-string "%s power" id))
(defun squeeze-control-play-favorite (&optional favorite id)
(interactive "nFavourite: ")
(unless id
(setq id (get-text-property (point) 'squeeze-playerid)))
- (comint-send-string (get-buffer-process "*squeeze*")
- (format "%s favorites playlist play item_id:%d\n" id favorite)))
+ (squeeze-send-string "%s favorites playlist play item_id:%d" id favorite))
(defun squeeze-control-query-power (&optional id)
(interactive)
(unless id
(setq id (get-text-property (point) 'squeeze-playerid)))
(when id
- (comint-send-string (get-buffer-process "*squeeze*") (format "%s power ?\n" id))))
+ (squeeze-send-string "%s power ?" id)))
(defun squeeze-control-volume-up (&optional id inc)
(interactive)
(unless id
(setq id (get-text-property (point) 'squeeze-playerid)))
(when id
- (comint-send-string (get-buffer-process "*squeeze*") (format "%s mixer volume %+d\n" id inc))))
+ (squeeze-send-string "%s mixer volume %+d" id inc)))
(defun squeeze-control-volume-down (&optional id inc)
(interactive)
(unless id
(setq id (get-text-property (point) 'squeeze-playerid)))
(when id
- (comint-send-string (get-buffer-process "*squeeze*") (format "%s mixer volume %+d\n" id (- inc)))))
+ (squeeze-send-string "%s mixer volume %+d" id (- inc))))
(defun squeeze-control-volume-set (id val)
(interactive)
- (comint-send-string (get-buffer-process "*squeeze*") (format "%s mixer volume %d\n" id val)))
+ (squeeze-send-string "%s mixer volume %d" id val))
(defun squeeze-control-query-mixer-volume (&optional id)
(interactive)
(unless id
(setq id (get-text-property (point) 'squeeze-playerid)))
(when id
- (comint-send-string (get-buffer-process "*squeeze*") (format "%s mixer volume ?\n" id))))
+ (squeeze-send-string "%s mixer volume ?" id)))
(defun squeeze-control-player-face (player)
(let ((power (squeeze-player-power player)))
(t 'squeeze-player-face))))
(defun squeeze-control-listen ()
- (comint-send-string (get-buffer-process "*squeeze*") (format "listen 1\n")))
+ (squeeze-send-string "listen 1"))
(defun squeeze-control-refresh ()
(interactive)
(defun squeeze-control-display-players ()
(interactive)
- (cond
- (squeeze-control-display-syncgroups
- (with-current-buffer (get-buffer-create "*squeeze-control*")
+ (with-current-buffer (get-buffer-create "*squeeze-control*")
+ (let ((saved (point)))
(squeeze-control-mode)
(read-only-mode -1)
(erase-buffer)
- (let ((syncgroups squeeze-syncgroups)
- (seen))
- (while syncgroups
- (let ((names (getf syncgroups :names))
- (members (split-string (getf syncgroups :members) ",")))
- (insert (propertize names 'face 'squeeze-syncgroup-face) "\n")
- (dolist (member members)
- (let ((player (squeeze-find-player member)))
- (squeeze-control-insert-player player)
- (push player seen))))
- (setq syncgroups (cddddr syncgroups)))
- (insert (propertize "No syncgroup" 'face 'squeeze-syncgroup-face) "\n")
+ (cond
+ (squeeze-control-display-syncgroups
+ (let ((syncgroups squeeze-syncgroups)
+ (seen))
+ (while syncgroups
+ (let ((names (getf syncgroups :names))
+ (members (split-string (getf syncgroups :members) ",")))
+ (insert (propertize names 'face 'squeeze-syncgroup-face) "\n")
+ (dolist (member members)
+ (let ((player (squeeze-find-player member)))
+ (squeeze-control-insert-player player)
+ (push player seen))))
+ (setq syncgroups (cddddr syncgroups)))
+ (insert (propertize "No syncgroup" 'face 'squeeze-syncgroup-face) "\n")
+ (dolist (player squeeze-players)
+ (unless (member player seen)
+ (squeeze-control-insert-player player)))))
+ (t
(dolist (player squeeze-players)
- (unless (member player seen)
- (squeeze-control-insert-player player))))))
- (t
- (with-current-buffer (get-buffer-create "*squeeze-control*")
- (squeeze-control-mode)
- (read-only-mode -1)
- (erase-buffer)
- (dolist (player squeeze-players)
- (squeeze-control-insert-player player))
- (read-only-mode 1)))))
+ (squeeze-control-insert-player player))
+ (read-only-mode 1)))
+ (goto-char saved))))
(cl-defstruct (squeeze-player (:constructor squeeze-make-player))
playerindex playerid uuid ip name model isplayer displaytype canpoweroff connected power volume)