X-Git-Url: http://cgit.sxemacs.org/?a=blobdiff_plain;f=lisp%2Fgravatar.el;h=0c97080d8471dc8bcbd93dd33d1388bfe76efd2f;hb=909ea56c2351cc63c51ff5374761fb00343cee75;hp=d4dfb7631671d1c3b565bc19e0be62722181fdca;hpb=15fab50deca9f951cc04e658c20a503aba6cc8c3;p=gnus diff --git a/lisp/gravatar.el b/lisp/gravatar.el index d4dfb7631..0c97080d8 100644 --- a/lisp/gravatar.el +++ b/lisp/gravatar.el @@ -1,6 +1,6 @@ ;;; gravatar.el --- Get Gravatars -;; Copyright (C) 2010 Free Software Foundation, Inc. +;; Copyright (C) 2010-2011 Free Software Foundation, Inc. ;; Author: Julien Danjou ;; Keywords: news @@ -78,10 +78,11 @@ (defun gravatar-get-data () "Get data from current buffer." - (when (string-match "^HTTP/.+ 200 OK$" - (buffer-substring (point-min) (line-end-position))) - (when (search-forward "\n\n" nil t) - (buffer-substring (point) (point-max))))) + (save-excursion + (goto-char (point-min)) + (when (re-search-forward "^HTTP/.+ 200 OK$" nil (line-end-position)) + (when (search-forward "\n\n" nil t) + (buffer-substring (point) (point-max)))))) (eval-and-compile (cond ((featurep 'xemacs) @@ -98,7 +99,7 @@ If no image available, return 'error." (let ((data (gravatar-get-data))) (if data - (gravatar-create-image data nil t) + (gravatar-create-image data nil t) 'error))) ;;;###autoload @@ -107,9 +108,15 @@ If no image available, return 'error." You can provide a list of argument to pass to CB in CBARGS." (let ((url (gravatar-build-url mail-address))) (if (gravatar-cache-expired url) - (url-retrieve url - 'gravatar-retrieved - (list cb (when cbargs cbargs))) + (let ((args (list url + 'gravatar-retrieved + (list cb (when cbargs cbargs))))) + (when (> (length (if (featurep 'xemacs) + (cdr (split-string (function-arglist 'url-retrieve))) + (help-function-arglist 'url-retrieve))) + 4) + (setq args (nconc args (list t)))) + (apply #'url-retrieve args)) (apply cb (with-temp-buffer (mm-disable-multibyte) @@ -117,6 +124,23 @@ You can provide a list of argument to pass to CB in CBARGS." (gravatar-data->image)) cbargs)))) +;;;###autoload +(defun gravatar-retrieve-synchronously (mail-address) + "Retrieve MAIL-ADDRESS gravatar and returns it." + (let ((url (gravatar-build-url mail-address))) + (if (gravatar-cache-expired url) + (with-current-buffer (url-retrieve-synchronously url) + (when gravatar-automatic-caching + (url-store-in-cache (current-buffer))) + (let ((data (gravatar-data->image))) + (kill-buffer (current-buffer)) + data)) + (with-temp-buffer + (mm-disable-multibyte) + (url-cache-extract (url-cache-create-filename url)) + (gravatar-data->image))))) + + (defun gravatar-retrieved (status cb &optional cbargs) "Callback function used by `gravatar-retrieve'." ;; Store gravatar? @@ -125,7 +149,8 @@ You can provide a list of argument to pass to CB in CBARGS." (if (plist-get status :error) ;; Error happened. (apply cb 'error cbargs) - (apply cb (gravatar-data->image) cbargs))) + (apply cb (gravatar-data->image) cbargs)) + (kill-buffer (current-buffer))) (provide 'gravatar)