X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=lisp%2Friece-handle.el;h=53be6f2b0c538d1f7c987fb3c7af290b9509144f;hb=3bc99bc9db330d7ecea61a7a831288f62e5ba515;hp=75b88be712d853c97115c47daf37cf8f4b65dc21;hpb=7b239924e043d1a519b5efe06049c2cdf2e45c54;p=elisp%2Friece.git diff --git a/lisp/riece-handle.el b/lisp/riece-handle.el index 75b88be..53be6f2 100644 --- a/lisp/riece-handle.el +++ b/lisp/riece-handle.el @@ -59,11 +59,12 @@ (riece-naming-assert-rename old new) (if (riece-identity-member old-identity riece-current-channels) (setq channels (cons new channels))) - (riece-insert-change (mapcar - (lambda (channel) - (riece-channel-buffer (riece-make-identity - channel riece-server-name))) - channels) + (riece-insert-change (delq nil (mapcar + (lambda (channel) + (riece-channel-buffer + (riece-make-identity + channel riece-server-name))) + channels)) (format "%s -> %s\n" (riece-format-identity old-identity t) (riece-format-identity new-identity t))) @@ -77,26 +78,37 @@ (riece-format-identity new-identity t))) "\n")))) -(defun riece-handle-privmsg-message (prefix string) +(defun riece-handle-privmsg-message (prefix decoded) (let* ((user (riece-prefix-nickname prefix)) - (parameters (riece-split-parameters string)) + (parameters (riece-split-parameters (riece-decoded-string decoded))) (targets (split-string (car parameters) ",")) - (message (nth 1 parameters))) + message) + (setq parameters (riece-split-parameters + (riece-decoded-string-for-identity + decoded + (riece-make-identity (car targets) riece-server-name))) + message (nth 1 parameters)) (riece-display-message (riece-make-message (riece-make-identity user riece-server-name) (riece-make-identity (car targets) riece-server-name) - message nil + message + nil (riece-identity-equal-no-server user riece-real-nickname))))) -(defun riece-handle-notice-message (prefix string) +(defun riece-handle-notice-message (prefix decoded) (let* ((user (if prefix (riece-prefix-nickname prefix))) - (parameters (riece-split-parameters string)) + (parameters (riece-split-parameters (riece-decoded-string decoded))) (targets (split-string (car parameters) ",")) - (message (nth 1 parameters))) + message) + (setq parameters (riece-split-parameters + (riece-decoded-string-for-identity + decoded + (riece-make-identity (car targets) riece-server-name))) + message (nth 1 parameters)) (if user (riece-display-message (riece-make-message (riece-make-identity user @@ -151,19 +163,22 @@ "\n"))) (setq channels (cdr channels))))) -(defun riece-handle-part-message (prefix string) +(defun riece-handle-part-message (prefix decoded) (let* ((user (riece-prefix-nickname prefix)) - (parameters (riece-split-parameters string)) + (parameters (riece-split-parameters (riece-decoded-string decoded))) ;; RFC2812 3.2.2 doesn't recommend server to send part ;; messages which contain multiple targets. (channels (split-string (car parameters) ",")) - (message (nth 1 parameters)) (user-identity (riece-make-identity user riece-server-name))) (while channels - (riece-naming-assert-part user (car channels)) (let* ((channel-identity (riece-make-identity (car channels) riece-server-name)) - (buffer (riece-channel-buffer channel-identity))) + (buffer (riece-channel-buffer channel-identity)) + message) + (setq parameters (riece-split-parameters + (riece-decoded-string-for-identity decoded + channel-identity)) + message (nth 1 parameters)) (riece-insert-change buffer (concat @@ -186,17 +201,22 @@ (riece-format-identity channel-identity t)) message)) "\n"))) + (riece-naming-assert-part user (car channels)) (setq channels (cdr channels))))) -(defun riece-handle-kick-message (prefix string) +(defun riece-handle-kick-message (prefix decoded) (let* ((kicker (riece-prefix-nickname prefix)) - (parameters (riece-split-parameters string)) + (parameters (riece-split-parameters (riece-decoded-string decoded))) (channel (car parameters)) (user (nth 1 parameters)) - (message (nth 2 parameters)) + message (kicker-identity (riece-make-identity kicker riece-server-name)) (channel-identity (riece-make-identity channel riece-server-name)) (user-identity (riece-make-identity user riece-server-name))) + (setq parameters (riece-split-parameters + (riece-decoded-string-for-identity decoded + channel-identity)) + message (nth 2 parameters)) (riece-naming-assert-part user channel) (let ((buffer (riece-channel-buffer channel-identity))) (riece-insert-change @@ -233,17 +253,17 @@ (user-identity (riece-make-identity user riece-server-name))) ;; If you are talking with the user, quit it. (if (riece-identity-member user-identity riece-current-channels) - (riece-part-channel user)) + (riece-part-channel user-identity)) (setq pointer channels) (while pointer (riece-naming-assert-part user (car pointer)) (setq pointer (cdr pointer))) (let ((buffers - (mapcar - (lambda (channel) - (riece-channel-buffer (riece-make-identity channel - riece-server-name))) - channels))) + (delq nil (mapcar + (lambda (channel) + (riece-channel-buffer (riece-make-identity + channel riece-server-name))) + channels)))) (riece-insert-change buffers (concat @@ -282,11 +302,11 @@ (riece-naming-assert-part user (car pointer)) (setq pointer (cdr pointer))) (let ((buffers - (mapcar - (lambda (channel) - (riece-channel-buffer (riece-make-identity channel - riece-server-name))) - channels))) + (delq nil (mapcar + (lambda (channel) + (riece-channel-buffer (riece-make-identity + channel riece-server-name))) + channels)))) (riece-insert-change buffers (concat @@ -330,13 +350,17 @@ (riece-format-identity channel-identity))) "\n")))) -(defun riece-handle-topic-message (prefix string) +(defun riece-handle-topic-message (prefix decoded) (let* ((user (riece-prefix-nickname prefix)) - (parameters (riece-split-parameters string)) + (parameters (riece-split-parameters (riece-decoded-string decoded))) (channel (car parameters)) - (topic (nth 1 parameters)) + topic (user-identity (riece-make-identity user riece-server-name)) (channel-identity (riece-make-identity channel riece-server-name))) + (setq parameters (riece-split-parameters + (riece-decoded-string-for-identity decoded + channel-identity)) + topic (nth 1 parameters)) (riece-channel-set-topic (riece-get-channel channel) topic) (riece-emit-signal 'channel-topic-changed channel-identity topic)