Christophe Weblog Wiki Code Publications Music
clamp volume to between 0 and 100
[squeeze-el.git] / squeeze.el
index 0b637ad4ed09458b4731719439825dbb7e332982..bcdf4e2e055bf1c23490bdf551c3a729ae6c8554 100644 (file)
                   ((string= current "1") "0"))))))
 
 (defun squeeze-update-mixer-volume (player value)
-  (let ((current (squeeze-player-volume player)))
+  (let ((current (squeeze-player-volume player))
+        (number (string-to-number value)))
     (if (string-match "^[-+]" value)
-        (when current
-          (setf (squeeze-player-volume player) (+ current (string-to-number value))))
-      (setf (squeeze-player-volume player) (string-to-number value)))))
+        (setf (squeeze-player-volume player)
+              (and current (max 0 (min 100 (+ current number)))))
+      (setf (squeeze-player-volume player) number))))
 
 (defun squeeze-update-state-from-line (string)
   (cond
   (interactive)
   (unless id
     (setq id (get-text-property (point) 'squeeze-playerid)))
-  (comint-send-string (get-buffer-process "*squeeze*") (format "%s power ?\n" id)))
+  (when id
+    (comint-send-string (get-buffer-process "*squeeze*") (format "%s power ?\n" id))))
 
 (defun squeeze-control-volume-up (&optional id inc)
   (interactive)
   (unless inc (setq inc 5))
   (unless id
     (setq id (get-text-property (point) 'squeeze-playerid)))
-  (comint-send-string (get-buffer-process "*squeeze*") (format "%s mixer volume %+d\n" id inc)))
+  (when id
+    (comint-send-string (get-buffer-process "*squeeze*") (format "%s mixer volume %+d\n" id inc))))
 
 (defun squeeze-control-volume-down (&optional id inc)
   (interactive)
   (unless inc (setq inc 5))
   (unless id
     (setq id (get-text-property (point) 'squeeze-playerid)))
-  (comint-send-string (get-buffer-process "*squeeze*") (format "%s mixer volume %+d\n" id (- inc))))
+  (when id
+    (comint-send-string (get-buffer-process "*squeeze*") (format "%s mixer volume %+d\n" id (- inc)))))
 
 (defun squeeze-control-query-mixer-volume (&optional id)
   (interactive)
   (unless id
     (setq id (get-text-property (point) 'squeeze-playerid)))
-  (comint-send-string (get-buffer-process "*squeeze*") (format "%s mixer volume ?\n" id)))
+  (when id
+    (comint-send-string (get-buffer-process "*squeeze*") (format "%s mixer volume ?\n" id))))
 
 (defun squeeze-control-player-face (player)
   (let ((power (squeeze-player-power player)))