X-Git-Url: http://cgit.sxemacs.org/?p=gnus;a=blobdiff_plain;f=lisp%2Fgravatar.el;h=158347fb0041597ee047d5b824958a50b16e0b55;hp=ec03b1b8a0034c95b8bfe2961d18b74e52b8ba28;hb=a28756d54b5ecb21426950a5fa12cfbea88225e7;hpb=e0fa5bdbb734014fe95f2902cbd9a86bbbe4e5c7 diff --git a/lisp/gravatar.el b/lisp/gravatar.el index ec03b1b8a..158347fb0 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 @@ -24,7 +24,6 @@ ;;; Code: -(require 'image) (require 'url) (require 'url-cache) @@ -79,17 +78,28 @@ (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) + (require 'gnus-xmas) + (defalias 'gravatar-create-image 'gnus-xmas-create-image)) + ((featurep 'gnus-ems) + (defalias 'gravatar-create-image 'gnus-create-image)) + (t + (require 'image) + (defalias 'gravatar-create-image 'create-image)))) (defun gravatar-data->image () "Get data of current buffer and return an image. If no image available, return 'error." (let ((data (gravatar-get-data))) (if data - (create-image data nil t) + (gravatar-create-image data nil t) 'error))) ;;;###autoload @@ -108,6 +118,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? @@ -116,7 +143,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)