Hi Julien,
Thanks for your contributions so far! This one is committed as r239.
Bye,
Erik.
On Sun, Jan 13, 2013 at 3:04 PM, Julien Danjou julien@danjou.info wrote:
The code used into mode-message and rpl_channelmodeis-message is exactly the same, so let's factorize this a bit to less code.
Signed-off-by: Julien Danjou julien@danjou.info
event.lisp | 34 ++++++---------------------------- package.lisp | 1 + utility.lisp | 15 +++++++++++++++ 3 files changed, 22 insertions(+), 28 deletions(-)
diff --git a/event.lisp b/event.lisp index 5e6e417..57ccf51 100644 --- a/event.lisp +++ b/event.lisp @@ -279,20 +279,9 @@ objects in sync.")) (destructuring-bind (target channel &rest mode-arguments) arguments
- (let* ((channel (find-channel connection channel))
(mode-changes
(when channel
(parse-mode-arguments connection channel mode-arguments
:server-p (user connection)))))
(dolist (change mode-changes)
(destructuring-bind
(op mode-name value)
change
(unless (has-mode-p channel mode-name)
(add-mode channel mode-name
(make-mode connection channel mode-name)))
(funcall (if (char= #\+ op) #'set-mode #'unset-mode)
channel mode-name value)))))))
- (let ((channel (find-channel connection channel)))
(when channel
(apply-mode-changes connection channel mode-arguments (user
connection)))))))
(defmethod default-hook ((message irc-mode-message)) (destructuring-bind @@ -300,20 +289,9 @@ objects in sync.")) (arguments message) (let* ((connection (connection message)) (target (or (find-channel connection target)
(find-user connection target)))
(mode-changes
(when target
(parse-mode-arguments connection target arguments
:server-p (user connection)))))
(dolist (change mode-changes)
(destructuring-bind
(op mode-name value)
change
(unless (has-mode-p target mode-name)
(add-mode target mode-name
(make-mode connection target mode-name)))
(funcall (if (char= #\+ op) #'set-mode #'unset-mode)
target mode-name value))))))
(find-user connection target))))
(when target
(apply-mode-changes connection target arguments (user
connection))))))
(defmethod default-hook ((message irc-nick-message)) (with-slots diff --git a/package.lisp b/package.lisp index c09537a..bd5a480 100644 --- a/package.lisp +++ b/package.lisp @@ -32,6 +32,7 @@ :get-mode :set-mode :unset-mode
:apply-mode-changes :parse-mode-arguments :parse-raw-message :normalize-nickname
diff --git a/utility.lisp b/utility.lisp index 12c327c..9894ed0 100644 --- a/utility.lisp +++ b/utility.lisp @@ -493,6 +493,21 @@ It returns a list of mode-description records." (split-sequence:split-sequence #: x)) (split-sequence:split-sequence #, argument)))
+(defun apply-mode-changes (connection target mode-arguments server-p)
- (dolist (change (parse-mode-arguments connection target mode-arguments
:server-p server-p))
- (apply-mode-change connection target change)))
+(defun apply-mode-change (connection target change)
- (destructuring-bind
(op mode-name value)
change
- (unless (has-mode-p target mode-name)
(add-mode target mode-name
(make-mode connection target mode-name)))
- (funcall (if (char= #+ op) #'set-mode #'unset-mode)
target mode-name value)))
(defun parse-mode-arguments (connection target arguments &key server-p) "Create a list of mode changes with their arguments for `target' from `mode-string' and `arguments'. -- 1.8.1
cl-irc-devel site list cl-irc-devel@common-lisp.net http://common-lisp.net/mailman/listinfo/cl-irc-devel