X-Git-Url: http://cgit.sxemacs.org/?p=riece;a=blobdiff_plain;f=lisp%2Friece-filter.el;h=89abe6fed80b4f7596d7dd0ebb8b31d6f905b99d;hp=a2efcb397d1c343a978bc7ac747a323a2a4a2a96;hb=b3b111c08ece2cc499656fcb321bf25ad52f3d0d;hpb=5f04241c69249d982cb80e93cb17087c4ef66162 diff --git a/lisp/riece-filter.el b/lisp/riece-filter.el index a2efcb3..89abe6f 100644 --- a/lisp/riece-filter.el +++ b/lisp/riece-filter.el @@ -24,11 +24,11 @@ ;;; Code: -(eval-when-compile (require 'riece-inlines)) - (require 'riece-handle) (require 'riece-misc) (require 'riece-server) ;riece-close-server +(require 'riece-identity) +(require 'riece-display) (defun riece-handle-numeric-reply (prefix number name string) (let ((base-number (* (/ number 100) 100)) @@ -68,19 +68,26 @@ (riece-parse-user-at-host (substring prefix (1+ (match-beginning 0)))))) (setq message (downcase message) string (riece-decode-coding-string string)) - (unless (run-hook-with-args-until-success - (intern (concat "riece-" message "-hook")) - prefix string) - (let ((function (intern-soft (concat "riece-handle-" message "-message")))) + (let ((function (intern-soft (concat "riece-handle-" message "-message"))) + (hook (intern (concat "riece-" message "-hook"))) + (after-hook (intern (concat "riece-after-" message "-hook")))) + (unless (condition-case error + (run-hook-with-args-until-success hook prefix string) + (error + (if riece-debug + (message "Error occurred in `%S': %S" hook error)) + nil)) (if function (condition-case error (funcall function prefix string) (error (if riece-debug - (message "Error occurred in `%S': %S" function error)))))) - (run-hook-with-args-until-success - (intern (concat "riece-after-" message "-hook")) - prefix string))) + (message "Error occurred in `%S': %S" function error))))) + (condition-case error + (run-hook-with-args-until-success after-hook prefix string) + (error + (if riece-debug + (message "Error occurred in `%S': %S" after-hook error))))))) (defun riece-filter (process input) (save-excursion @@ -118,40 +125,41 @@ (forward-line))))) (eval-when-compile - (autoload 'riece "riece")) + (autoload 'riece-exit "riece")) (defun riece-sentinel (process status) (if riece-reconnect-with-password - (unwind-protect - (if (eq process riece-server-process) - (riece) ;Need to initialize system. - (let* ((entry (rassq process riece-server-process-alist)) - (server-name - (with-current-buffer (process-buffer process) - riece-server-name)) - (process - (riece-start-server - (riece-server-name-to-server server-name) - server-name))) - ;; Connect the process with old process' buffer. - (setcdr entry process) - (with-current-buffer (process-buffer process) - (setq riece-server-name server-name)))) - (setq riece-reconnect-with-password nil)) + (let ((server-name + (with-current-buffer (process-buffer process) + riece-server-name))) + (riece-close-server-process process) + (riece-open-server + (if (equal server-name "") + riece-server + (riece-server-name-to-server server-name)) + server-name)) (let ((server-name (with-current-buffer (process-buffer process) riece-server-name))) - (if (and (process-id process) ;not a network connection - (string-match "^exited abnormally with code \\([0-9]+\\)" - status)) - (if server-name - (message "Connection to \"%s\" closed: %s" - server-name (match-string 1 status)) - (message "Connection closed: %s" (match-string 1 status))) - (if server-name + (if riece-debug + (if (equal server-name "") + (message "Connection closed: %s" + (substring status 0 (1- (length status)))) (message "Connection to \"%s\" closed: %s" - server-name (substring status 0 (1- (length status)))) - (message "Connection closed: %s" - (substring status 0 (1- (length status)))))) - (riece-close-server server-name)))) + server-name (substring status 0 (1- (length status))))) + (if (equal server-name "") + (message "Connection closed") + (message "Connection to \"%s\" closed" server-name))) + (let ((channels riece-current-channels)) + (while channels + (if (and (car channels) + (equal (riece-identity-server (car channels)) + server-name)) + (riece-part-channel (car channels))) + (setq channels (cdr channels)))) + (riece-redisplay-buffers) + (riece-close-server-process process) + ;; If no server process is available, exit. + (unless riece-process-list + (riece-exit))))) (provide 'riece-filter)