(wl-score-ov-entity-get): Call 'elmo-message-entity-field' with TYPE artgument.
[elisp/wanderlust.git] / wl / wl-score.el
index 45edbef..a6ae125 100644 (file)
@@ -176,8 +176,8 @@ Remove Re, Was, Fwd etc."
   (not (or (string< s1 s2)
           (string= s1 s2))))
 
-(defsubst wl-score-ov-entity-get (entity index &optional extra decode)
-  (elmo-message-entity-field entity index decode))
+(defsubst wl-score-ov-entity-get (entity index &optional extra)
+  (elmo-message-entity-field entity (if extra (intern extra) index) 'string))
 
 (defun wl-score-string< (a1 a2)
   (string-lessp (wl-score-ov-entity-get (car a1) wl-score-index)
@@ -367,7 +367,7 @@ Set `wl-score-cache' nil."
 (defun wl-score-headers (scores &optional force-msgs not-add)
   (let* ((elmo-mime-charset wl-summary-buffer-mime-charset)
         (folder wl-summary-buffer-elmo-folder)
-        (now (wl-day-number (current-time-string)))
+        (now (elmo-time-to-days (current-time)))
         (expire (and wl-score-expiry-days
                      (- now wl-score-expiry-days)))
         (wl-score-stop-add-entry not-add)
@@ -558,13 +558,14 @@ Set `wl-score-cache' nil."
       (make-local-variable 'wl-score-alike-hashtb)
       (setq wl-score-alike-hashtb (elmo-make-hash (* (length messages) 2)))
       (when mime-decode
-       (elmo-set-buffer-multibyte default-enable-multibyte-characters))
+       (set-buffer-multibyte default-enable-multibyte-characters))
       (let (art last this alike)
        (while (setq art (pop messages))
          (setq this (wl-score-ov-entity-get (car art)
                                             wl-score-index
                                             extra-header))
-         (and this (setq this (std11-unfold-string this)))
+         (when (stringp this)
+           (setq this (std11-unfold-string this)))
          (if (equal last this)
              ;; O(N*H) cons-cells used here, where H is the number of
              ;; headers.
@@ -754,7 +755,7 @@ Set `wl-score-cache' nil."
                               expire
                               (< expire
                                  (setq day
-                                       (wl-day-number
+                                       (elmo-time-to-days
                                         (elmo-message-entity-field
                                          (car art) 'date))))))
                  (when (setq new (wl-score-add-followups
@@ -780,7 +781,7 @@ Set `wl-score-cache' nil."
       (list (cons "references" news)))))
 
 (defun wl-score-add-followups (header score scores alist &optional thread day)
-  (let* ((id (car header))
+  (let* ((id (elmo-message-entity-field header 'message-id))
         (scores (car scores))
         entry dont)
     (when id
@@ -792,7 +793,7 @@ Set `wl-score-cache' nil."
             (setq dont t)))
       (unless dont
        (let ((entry (list id score
-                          (or day (wl-day-number (current-time-string))) 's)))
+                          (or day (elmo-time-to-days (current-time))) 's)))
          (unless (or thread wl-score-stop-add-entry)
            (wl-score-update-score-entry "references" entry alist))
          (wl-score-set 'touched '(t) alist)
@@ -892,7 +893,7 @@ Set `wl-score-cache' nil."
     (wl-summary-score-effect (car entry) list (eq (nth 2 list) 'now)))))
 
 (defun wl-score-get-latest-msgs ()
-  (let* ((now (wl-day-number (current-time-string)))
+  (let* ((now (elmo-time-to-days (current-time)))
         (expire (and wl-score-expiry-days
                      (- now wl-score-expiry-days)))
         (rnumbers (reverse wl-summary-buffer-number-list))
@@ -902,11 +903,10 @@ Set `wl-score-cache' nil."
                                   nil t)
       (catch 'break
        (while rnumbers
-         (if (< (wl-day-number
-                 (elmo-message-entity-field
-                  (elmo-message-entity wl-summary-buffer-elmo-folder
-                                       (car rnumbers))
-                  'date))
+         (if (< (elmo-time-to-days
+                 (elmo-message-entity-field wl-summary-buffer-elmo-folder
+                                            (car rnumbers)
+                                            'date))
                 expire)
              (throw 'break t))
          (wl-push (car rnumbers) msgs)
@@ -920,7 +920,7 @@ Set `wl-score-cache' nil."
        (wl-score-ov-entity-get
         (elmo-message-entity wl-summary-buffer-elmo-folder
                              (wl-summary-message-number))
-        index extra decode))))
+        index extra))))
 
 (defun wl-score-kill-help-buffer ()
   (when (get-buffer "*Score Help*")
@@ -1075,7 +1075,7 @@ Set `wl-score-cache' nil."
           (perm (cond ((eq perm 'perm)
                        nil)
                       ((eq perm 'temp)
-                       (wl-day-number (current-time-string)))
+                       (elmo-time-to-days (current-time)))
                       ((eq perm 'now)
                        perm)))
           (new (list match score perm type extra)))
@@ -1166,64 +1166,59 @@ Set `wl-score-cache' nil."
       (wl-score-headers scores force-msgs not-add))))
 
 (defun wl-summary-score-update-all-lines (&optional update)
-  (let* ((alist wl-summary-scored)
-        (count (length alist))
-        (i 0)
-        (update-unread nil)
-        wl-summary-unread-message-hook
-        num score dels visible score-mark mark-alist)
+  (let ((alist wl-summary-scored)
+       (update-unread nil)
+       wl-summary-unread-message-hook
+       num score dels visible score-mark mark-alist)
     (save-excursion
-      (message "Updating score...")
-      (while alist
-       (setq num (caar alist)
-             score (cdar alist))
-       (when wl-score-debug
-         (message "Scored %d with %d" score num)
-         (wl-push (list (elmo-string (wl-summary-buffer-folder-name)) num score)
-               wl-score-trace))
-       (setq score-mark (wl-summary-get-score-mark num))
-       (and (setq visible (wl-summary-jump-to-msg num))
-            (wl-summary-set-score-mark score-mark))
-       (cond ((and wl-summary-expunge-below
-                   (< score wl-summary-expunge-below))
-              (wl-push num dels))
-             ((< score wl-summary-mark-below)
-              (if visible
-                  (wl-summary-mark-as-read num); opened
-                (setq update-unread t)
-                (wl-summary-mark-as-read num))) ; closed
-             ((and wl-summary-important-above
-                   (> score wl-summary-important-above))
-              (if (wl-thread-jump-to-msg num);; force open
-                  (wl-summary-mark-as-important num " ")))
-             ((and wl-summary-target-above
-                   (> score wl-summary-target-above))
-              (if visible
-                  (wl-summary-set-mark "*"))))
-       (setq alist (cdr alist))
-       (when (> count elmo-display-progress-threshold)
-         (setq i (1+ i))
-         (elmo-display-progress
-          'wl-summary-score-update-all-lines "Updating score..."
-          (/ (* i 100) count))))
-      (when dels
-       (dolist (del dels)
-         (elmo-message-set-flag wl-summary-buffer-elmo-folder
-                                del 'read))
-       (elmo-folder-kill-messages wl-summary-buffer-elmo-folder dels)
-       (wl-summary-delete-messages-on-buffer dels))
-      (when (and update update-unread)
-       ;; Update Folder mode
-       (wl-folder-set-folder-updated (wl-summary-buffer-folder-name)
-                                     (list
-                                      0
-                                      (let ((pair
-                                             (wl-summary-count-unread)))
-                                        (+ (car pair) (cdr pair)))
-                                      (elmo-folder-length
-                                       wl-summary-buffer-elmo-folder)))
-       (wl-summary-update-modeline))
-      (message "Updating score...done")
+      (elmo-with-progress-display (wl-update-score (length alist))
+         "Updating score"
+       (while alist
+         (setq num (caar alist)
+               score (cdar alist))
+         (when wl-score-debug
+           (message "Scored %d with %d" score num)
+           (wl-push (list (elmo-string (wl-summary-buffer-folder-name)) num score)
+                    wl-score-trace))
+         (setq score-mark (wl-summary-get-score-mark num))
+         (and (setq visible (wl-summary-jump-to-msg num))
+              (wl-summary-set-score-mark score-mark))
+         (cond ((and wl-summary-expunge-below
+                     (< score wl-summary-expunge-below))
+                (wl-push num dels))
+               ((< score wl-summary-mark-below)
+                (if visible
+                    (wl-summary-mark-as-read num); opened
+                  (setq update-unread t)
+                  (wl-summary-mark-as-read num))) ; closed
+               ((and wl-summary-important-above
+                     (> score wl-summary-important-above))
+                (if (wl-thread-jump-to-msg num);; force open
+                    (wl-summary-set-persistent-mark 'important num)))
+               ((and wl-summary-target-above
+                     (> score wl-summary-target-above))
+                (if visible
+                    (wl-summary-set-mark "*"))))
+         (setq alist (cdr alist))
+         (elmo-progress-notify 'wl-update-score))
+       (when dels
+         (dolist (del dels)
+           (elmo-message-unset-flag wl-summary-buffer-elmo-folder
+                                    del 'unread))
+         (elmo-folder-kill-messages wl-summary-buffer-elmo-folder dels)
+         (wl-summary-delete-messages-on-buffer dels))
+       (when (and update update-unread)
+         ;; Update Folder mode
+         (wl-folder-set-folder-updated (wl-summary-buffer-folder-name)
+                                       (list
+                                        0
+                                        (let ((flag-count
+                                               (wl-summary-count-unread)))
+                                          (or (cdr (assq 'unread flag-count))
+                                              0))
+                                        (elmo-folder-length
+                                         wl-summary-buffer-elmo-folder)))
+         (wl-summary-update-modeline)))
       dels)))
 
 (defun wl-score-edit-done ()
@@ -1320,7 +1315,7 @@ Entering Score mode calls the value of `wl-score-mode-hook'."
 (defun wl-score-edit-insert-date ()
   "Insert date in numerical format."
   (interactive)
-  (princ (wl-day-number (current-time-string)) (current-buffer)))
+  (princ (elmo-time-to-days (current-time)) (current-buffer)))
 
 (defun wl-score-pretty-print ()
   "Format the current score file."