Function: gnus-notifications

gnus-notifications is an autoloaded and byte-compiled function defined in gnus-notifications.el.gz.

Signature

(gnus-notifications)

Documentation

Send a notification on new message.

This check for new messages that are in group with a level lower or equal to gnus-notifications-minimum-level and send a notification using notifications-notify for it.

This is typically a function to add in gnus-after-getting-new-news-hook

Source Code

;; Defined in /usr/src/emacs/lisp/gnus/gnus-notifications.el.gz
;;;###autoload
(defun gnus-notifications ()
  "Send a notification on new message.
This check for new messages that are in group with a level lower
or equal to `gnus-notifications-minimum-level' and send a
notification using `notifications-notify' for it.

This is typically a function to add in
`gnus-after-getting-new-news-hook'"
  (dolist (entry gnus-newsrc-alist)
    (let ((group (car entry)))
      ;; Check that the group level is less than
      ;; `gnus-notifications-minimum-level' and the group has unread
      ;; messages.
      (when (and (<= (gnus-group-level group) gnus-notifications-minimum-level)
                 (let ((unread (gnus-group-unread group)))
                   (and (numberp unread)
                        (> unread 0))))
        ;; Each group should have an entry in the `gnus-notifications-sent'
        ;; alist. If not, we add one at this time.
        (let ((group-notifications (or (assoc group gnus-notifications-sent)
                                       ;; Nothing, add one and return it.
                                       (assoc group
                                              (add-to-list
                                               'gnus-notifications-sent
                                               (cons group nil))))))
          (dolist (article (gnus-list-of-unread-articles group))
            ;; Check if the article already has been notified
            (unless (memq article (cdr group-notifications))
              (with-current-buffer nntp-server-buffer
                (gnus-request-head article group)
                (article-decode-encoded-words) ; to decode mail addresses, subjects, etc
                (let* ((address-components (mail-extract-address-components
                                            (or (mail-fetch-field "From") "")))
                       (address (cadr address-components)))
                  ;; Ignore mails from ourselves
                  (unless (and gnus-ignored-from-addresses
                               address
                               (cond ((functionp gnus-ignored-from-addresses)
                                      (funcall gnus-ignored-from-addresses address))
                                     (t (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)
                                             (mail-fetch-field "Subject")
                                             photo-file)))
                      (when notification-id
                        ;; Register that we did notify this message
                        (setcdr group-notifications (cons article (cdr group-notifications)))
                        (unless (eq notification-id t)
                          ;; Register the notification id for later actions
                          (add-to-list 'gnus-notifications-id-to-msg (list notification-id group article))))
                      (when photo-file
                        (delete-file photo-file)))))))))))))