Fixed RFC number of SMTPTLS.
[elisp/wanderlust.git] / wl / wl-score.el
index 20dd43c..e0a771d 100644 (file)
 
 (defconst wl-score-header-index
   ;; Name to function alist.
-  '(("number"     wl-score-integer  elmo-msgdb-overview-entity-get-number) ;;0
-    ("subject"    wl-score-string   3 charset)
-    ("from"       wl-score-string   2 charset)
-    ("date"       wl-score-date     elmo-msgdb-overview-entity-get-date) ;;4
-    ("message-id" wl-score-string   elmo-msgdb-overview-entity-get-id)
-    ("references" wl-score-string   1)
-    ("to"         wl-score-string   5)
-    ("cc"         wl-score-string   6)
-    ("chars"      wl-score-integer  elmo-msgdb-overview-entity-get-size) ;;7
-    ("lines"      wl-score-integer  wl-score-overview-entity-get-lines)
-    ("xref"       wl-score-string   wl-score-overview-entity-get-xref)
-    ("extra"      wl-score-extra    wl-score-overview-entity-get-extra mime)
-    ("followup"   wl-score-followup 2 charset)
-    ("thread"     wl-score-thread   1)))
+  '(("number"     wl-score-integer  number)
+    ("subject"    wl-score-string   subject charset)
+    ("from"       wl-score-string   from charset)
+    ("date"       wl-score-date     date)
+    ("message-id" wl-score-string   message-id)
+    ("references" wl-score-string   references)
+    ("to"        wl-score-string   to)
+    ("cc"        wl-score-string   cc)
+    ("chars"      wl-score-integer  size)
+    ("lines"      wl-score-integer  lines)
+    ("xref"       wl-score-string   xref)
+    ("extra"      wl-score-extra    extra mime)
+    ("followup"   wl-score-followup from charset)
+    ("thread"     wl-score-thread   references)))
 
 (defvar wl-score-auto-make-followup-entry nil)
 (defvar wl-score-debug nil)
@@ -172,45 +172,19 @@ Remove Re, Was, Fwd etc."
   (or (elmo-message-entity-field entity 'xref)
       ""))
 
-(defun wl-score-overview-entity-get-extra (entity header &optional decode)
-  (let ((extra (elmo-msgdb-overview-entity-get-extra-field entity header)))
-    (if (and extra decode)
-       (eword-decode-string
-        (decode-mime-charset-string extra elmo-mime-charset))
-      (or extra ""))))
-
 (defun wl-string> (s1 s2)
   (not (or (string< s1 s2)
           (string= s1 s2))))
 
-(defmacro wl-score-ov-entity-get-by-index (entity index)
-  (` (aref (cdr (, entity)) (, index))))
-
-(defsubst wl-score-ov-entity-get (entity index &optional extra decode)
-  (let ((str (cond ((integerp index)
-                   (wl-score-ov-entity-get-by-index entity index))
-                  (extra
-                   (funcall index entity extra decode))
-                  (t
-                   (funcall index entity)))))
-    (if (and decode (not extra))
-       (decode-mime-charset-string str elmo-mime-charset)
-      str)))
-
-(defun wl-score-string-index< (a1 a2)
-  (string-lessp (wl-score-ov-entity-get-by-index (car a1) wl-score-index)
-               (wl-score-ov-entity-get-by-index (car a2) wl-score-index)))
+(defsubst wl-score-ov-entity-get (entity index &optional extra)
+  (elmo-message-entity-field entity (if extra (intern extra) index)))
 
-(defun wl-score-string-func< (a1 a2)
-  (string-lessp (funcall wl-score-index (car a1))
-               (funcall wl-score-index (car a2))))
+(defun wl-score-string< (a1 a2)
+  (string-lessp (wl-score-ov-entity-get (car a1) wl-score-index)
+               (wl-score-ov-entity-get (car a2) wl-score-index)))
 
 (defun wl-score-string-sort (messages index)
-  (let ((func (cond ((integerp index)
-                    'wl-score-string-index<)
-                   (t
-                    'wl-score-string-func<))))
-    (sort messages func)))
+  (sort messages 'wl-score-string<))
 
 (defsubst wl-score-get (symbol &optional alist)
   "Get SYMBOL's definition in ALIST."
@@ -393,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)
@@ -403,14 +377,14 @@ Set `wl-score-cache' nil."
     (message "Scoring...")
 
     ;; Create messages, an alist of the form `(ENTITY . SCORE)'.
-    (elmo-folder-do-each-message-entity (entity folder)
-      (setq num (elmo-message-entity-number entity))
+    (dolist (num (elmo-folder-list-messages folder 'visible 'in-db))
       (when (and (not (assq num wl-summary-scored))
                 (or (memq num force-msgs)
                     (member (wl-summary-message-mark folder num)
                             wl-summary-score-marks)))
        (setq wl-scores-messages
-             (cons (cons entity (or wl-summary-default-score 0))
+             (cons (cons (elmo-message-entity folder num)
+                         (or wl-summary-default-score 0))
                    wl-scores-messages))))
 
     (save-excursion
@@ -584,7 +558,7 @@ 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)
@@ -780,7 +754,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
@@ -806,7 +780,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
@@ -818,7 +792,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)
@@ -918,7 +892,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))
@@ -928,11 +902,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)
@@ -946,7 +919,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*")
@@ -1101,7 +1074,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)))
@@ -1221,7 +1194,7 @@ Set `wl-score-cache' nil."
              ((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 " ")))
+                  (wl-summary-set-persistent-mark 'important num)))
              ((and wl-summary-target-above
                    (> score wl-summary-target-above))
               (if visible
@@ -1234,8 +1207,8 @@ Set `wl-score-cache' nil."
           (/ (* i 100) count))))
       (when dels
        (dolist (del dels)
-         (elmo-message-set-flag wl-summary-buffer-elmo-folder
-                                del 'read))
+         (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)
@@ -1243,9 +1216,10 @@ Set `wl-score-cache' nil."
        (wl-folder-set-folder-updated (wl-summary-buffer-folder-name)
                                      (list
                                       0
-                                      (let ((pair
+                                      (let ((flag-count
                                              (wl-summary-count-unread)))
-                                        (+ (car pair) (cdr pair)))
+                                        (or (cdr (assq 'unread flag-count))
+                                            0))
                                       (elmo-folder-length
                                        wl-summary-buffer-elmo-folder)))
        (wl-summary-update-modeline))
@@ -1346,7 +1320,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."