;; gnus-notifications.el -- Send notification on new message in Gnus
-;; Copyright (C) 2012 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2014 Free Software Foundation, Inc.
;; Author: Julien Danjou <julien@danjou.info>
;; Keywords: news
;;; Code:
-(require 'notifications nil t)
+(ignore-errors
+ (require 'notifications))
(require 'gnus-sum)
(require 'gnus-group)
(require 'gnus-int)
(require 'gnus-art)
(require 'gnus-util)
-(require 'google-contacts nil t) ; Optional
+(ignore-errors
+ (require 'google-contacts)) ; Optional
+(require 'gnus-fun)
(defgroup gnus-notifications nil
"Send notifications on new message in Gnus."
+ :version "24.3"
:group 'gnus)
(defcustom gnus-notifications-use-google-contacts t
(defcustom gnus-notifications-timeout nil
"Timeout used for notifications sent via `notifications-notify'."
- :type 'integer
+ :type '(choice (const :tag "Server default" nil)
+ (integer :tag "Milliseconds"))
:group 'gnus-notifications)
(defvar gnus-notifications-sent nil
(let ((group-article (assoc id gnus-notifications-id-to-msg)))
(when group-article
(let ((group (cadr group-article))
- (article (caddr group-article)))
+ (article (nth 2 group-article)))
(gnus-fetch-group group (list article)))))))
(defun gnus-notifications-notify (from subject photo-file)
"Send a notification about a new mail.
Return a notification id if any, or t on success."
(if (fboundp 'notifications-notify)
- (notifications-notify
+ (gnus-funcall-no-warning
+ 'notifications-notify
:title from
:body subject
:actions '("read" "Read")
:on-action 'gnus-notifications-action
- :app-icon (image-search-load-path "gnus/gnus.png")
+ :app-icon (or photo-file
+ (gnus-funcall-no-warning
+ 'image-search-load-path "gnus/gnus.png"))
:app-name "Gnus"
:category "email.arrived"
- :timeout gnus-notifications-timeout
- :image-path photo-file)
+ :timeout gnus-notifications-timeout)
(message "New message from %s: %s" from subject)
;; Don't return an id
t))
+(declare-function gravatar-retrieve-synchronously "gravatar.el"
+ (mail-address))
+
(defun gnus-notifications-get-photo (mail-address)
"Get photo for mail address."
(let ((google-photo (when (and gnus-notifications-use-google-contacts
(fboundp 'google-contacts-get-photo))
(ignore-errors
- (google-contacts-get-photo mail-address)))))
+ (gnus-funcall-no-warning
+ 'google-contacts-get-photo mail-address)))))
(if google-photo
google-photo
(when gnus-notifications-use-gravatar
(or (mail-fetch-field "From") "")))
(address (cadr address-components)))
;; Ignore mails from ourselves
- (unless (gnus-string-match-p gnus-ignored-from-addresses
- address)
+ (unless (and gnus-ignored-from-addresses
+ address
+ (gnus-string-match-p gnus-ignored-from-addresses
+ address))
(let* ((photo-file (gnus-notifications-get-photo-file address))
(notification-id (gnus-notifications-notify
(or (car address-components) address)