2001-09-08 Simon Josefsson <jas@extundo.com>
+ * nnfolder.el (nnfolder-marks-modtime): New variable.
+ (nnfolder-marks-changed-p): New function.
+ (nnfolder-save-marks, nnfolder-open-marks): Save modtime.
+ (nnfolder-request-update-info): Don't update if marks didn't change.
+
* nnml.el (nnml-marks-modtime): New variable.
(nnml-marks-changed-p): New function.
(nnml-save-marks, nnml-open-marks): Save modtime.
(defvoo nnfolder-marks-file-suffix ".mrk")
+(defvar nnfolder-marks-modtime (makehash))
+
\f
;;; Interface functions
(when (and server
(not (nnfolder-server-opened server)))
(nnfolder-open-server server))
- (unless nnfolder-marks-is-evil
+ (when (and (not nnfolder-marks-is-evil) (nnfolder-marks-changed-p group))
(nnheader-message 8 "Updating marks for %s..." group)
(nnfolder-open-marks group server)
;; Update info using `nnfolder-marks'.
(let ((nnfolder-directory (or nnfolder-marks-directory nnfolder-directory)))
(concat (nnfolder-group-pathname group) nnfolder-marks-file-suffix)))
+(defun nnfolder-marks-changed-p (group)
+ (let ((file (nnfolder-group-marks-pathname group)))
+ (if (null (gethash file nnfolder-marks-modtime))
+ t ;; never looked at marks file, assume it has changed
+ (not (eq (gethash fil nnfolder-marks-modtime)
+ (nth 5 (file-attributes file)))))))
+
(defun nnfolder-save-marks (group server)
(let ((file-name-coding-system nnmail-pathname-coding-system)
(file (nnfolder-group-marks-pathname group)))
(condition-case err
- (with-temp-file file
- (erase-buffer)
- (princ nnfolder-marks (current-buffer))
- (insert "\n"))
+ (progn
+ (with-temp-file file
+ (erase-buffer)
+ (princ nnfolder-marks (current-buffer))
+ (insert "\n"))
+ (puthash file
+ (nth 5 (file-attributes file))
+ nnml-marks-modtime))
(error (or (gnus-yes-or-no-p
(format "Could not write to %s (%s). Continue? " file err))
(error "Cannot write to %s (%s)" err))))))
(if (file-exists-p file)
(setq nnfolder-marks (condition-case err
(with-temp-buffer
+ (puthash file
+ (nth 5 (file-attributes file))
+ nnml-marks-modtime)
(nnheader-insert-file-contents file)
(read (current-buffer)))
(error (or (gnus-yes-or-no-p