X-Git-Url: http://christophe.rhodes.io/gitweb/?p=squeeze-el.git;a=blobdiff_plain;f=squeeze.el;h=977813b28fc24c118fc0dafd600d7c7901250723;hp=267fe2d59ce2cda7eb9b3c140364f3c9fa5d515d;hb=35375c87ec7345b3005cb5e70a86ea03e9414695;hpb=de098976a57d4787e15db20908402091b73ef5ba diff --git a/squeeze.el b/squeeze.el index 267fe2d..977813b 100644 --- a/squeeze.el +++ b/squeeze.el @@ -39,19 +39,24 @@ (defvar squeeze-control-inhibit-display nil) -(lexical-let ((buffer "")) +(lexical-let ((buffer (get-buffer-create " *squeeze-update-state*"))) (defun squeeze-update-state (string) + ;; FIXME: we could make this a lot more elegant by using the + ;; buffer abstraction more (if (cl-position ?\n string) (let (done-something) - (setq string (concat buffer string)) + (with-current-buffer buffer + (insert string) + (setq string (buffer-string)) + (erase-buffer)) (dolist (line (split-string string "\n")) (when (squeeze-update-state-from-line line) (setq done-something t))) (when done-something (unless squeeze-control-inhibit-display - (squeeze-control-display-players))) - (setq buffer "")) - (setq buffer (concat buffer string))) + (squeeze-control-display-players)))) + (with-current-buffer buffer + (insert string))) string)) (defconst squeeze-player-line-regexp @@ -339,7 +344,7 @@ (save-match-data (let (result) (loop - (if (string-match "\\([a-z]+\\)%3A\\([^ \n]+\\)" string start) + (if (string-match "\\([a-z_]+\\)%3A\\([^ \n]+\\)" string start) (let ((mend (match-end 0))) (when (> mend end) (return)) @@ -419,7 +424,7 @@ "serverstatus" "status" "displaystatus" "readdirectory" ;; Notifications - + ;; Alarm commands and queries "alarm" "alarms"