From: Magnus H. <leg...@us...> - 2008-05-18 12:14:02
|
Update of /cvsroot/emacs-jabber/emacs-jabber In directory sc8-pr-cvs17.sourceforge.net:/tmp/cvs-serv28168 Modified Files: jabber-bookmarks.el jabber-muc.el Log Message: Revision: ma...@fr...--2005/emacs-jabber--cvs-head--0--patch-504 Creator: Magnus Henoch <ma...@fr...> Read MUC nickname and password from bookmarks Index: jabber-bookmarks.el =================================================================== RCS file: /cvsroot/emacs-jabber/emacs-jabber/jabber-bookmarks.el,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- jabber-bookmarks.el 18 May 2008 12:13:43 -0000 1.9 +++ jabber-bookmarks.el 18 May 2008 12:13:57 -0000 1.10 @@ -35,22 +35,30 @@ KEY may be nil or one of :name, :autojoin, :nick and :password. If KEY is nil, a plist containing the above keys is returned. CONT is called when the result is available, with JC and the -result as arguments." - (jabber-get-bookmarks - jc - (lexical-let ((conference-jid conference-jid) - (key key) - (cont cont)) - (lambda (jc result) - (let ((entry - (dolist (node result) +result as arguments. If CONT is nil, return the requested data +immediately, and return nil if it is not in the cache." + (if (null cont) + (jabber-get-conference-data-internal + (jabber-get-bookmarks-from-cache jc) + conference-jid + key) + (jabber-get-bookmarks + jc + (lexical-let ((conference-jid conference-jid) + (key key) + (cont cont)) + (lambda (jc result) + (let ((entry (jabber-get-conference-data-internal result conference-jid key))) + (funcall cont jc entry))))))) + +(defun jabber-get-conference-data-internal (result conference-jid key) + (let ((entry (dolist (node result) (when (and (eq (jabber-xml-node-name node) 'conference) (string= (jabber-xml-get-attribute node 'jid) conference-jid)) (return (jabber-parse-conference-bookmark node)))))) - (funcall cont jc - (if key - (plist-get entry key) - entry))))))) + (if key + (plist-get entry key) + entry))) (defun jabber-parse-conference-bookmark (node) "Convert a <conference/> tag into a plist. @@ -89,6 +97,13 @@ (puthash my-jid value jabber-bookmarks) (funcall cont jc (when (listp value) value)))) +;;;###autoload +(defun jabber-get-bookmarks-from-cache (jc) + "Return cached bookmarks for JC. +If bookmarks have not yet been fetched by `jabber-get-bookmarks', +return nil." + (gethash (jabber-connection-bare-jid jc) jabber-bookmarks)) + (defun jabber-set-bookmarks (jc bookmarks &optional callback) "Set bookmarks to BOOKMARKS, which is a list of XML elements. If CALLBACK is non-nil, call it with JC and t or nil as arguments Index: jabber-muc.el =================================================================== RCS file: /cvsroot/emacs-jabber/emacs-jabber/jabber-muc.el,v retrieving revision 1.74 retrieving revision 1.75 diff -u -d -r1.74 -r1.75 --- jabber-muc.el 1 Mar 2008 20:42:47 -0000 1.74 +++ jabber-muc.el 18 May 2008 12:13:57 -0000 1.75 @@ -408,7 +408,7 @@ (interactive (let ((account (jabber-read-account)) (group (jabber-read-jid-completing "group: "))) - (list account group (jabber-muc-read-my-nickname group (plist-get (fsm-get-state-data account) :username)) t))) + (list account group (jabber-muc-read-my-nickname account group) t))) ;; If the user is already in the room, we don't need as many checks. (if (or (assoc group *jabber-active-groupchats*) @@ -450,7 +450,9 @@ (let ((password ;; Is the room password-protected? (when (member "muc_passwordprotected" features) - (read-passwd (format "Password for %s: " (jabber-jid-displayname group)))))) + (or + (jabber-get-conference-data jc group nil :password) + (read-passwd (format "Password for %s: " (jabber-jid-displayname group))))))) (jabber-groupchat-join-3 jc group nickname password popup))))) @@ -479,12 +481,12 @@ (let ((buffer (jabber-muc-create-buffer jc group))) (switch-to-buffer buffer)))) -(defun jabber-muc-read-my-nickname (group default) +(defun jabber-muc-read-my-nickname (jc group) "Read nickname for joining GROUP." (let ((default-nickname (or - ;; XXX: use bookmarks + (jabber-get-conference-data jc group nil :nick) (cdr (assoc group jabber-muc-default-nicknames)) - default))) + (plist-get (fsm-get-state-data jc) :username)))) (jabber-read-with-input-method (format "Nickname: (default %s) " default-nickname) nil nil default-nickname))) @@ -647,7 +649,7 @@ (let ((action `(lambda (&rest ignore) (interactive) (jabber-groupchat-join jabber-buffer-connection ,group - (jabber-muc-read-my-nickname ,group ,(plist-get (fsm-get-state-data jabber-buffer-connection) :username)))))) + (jabber-muc-read-my-nickname ,jabber-buffer-connection ,group))))) (if (fboundp 'insert-button) (insert-button "Accept" 'action action) |