* elmo.el (elmo-crosspost-message-alist-save): Don't use
[elisp/wanderlust.git] / elmo / modb-standard.el
index d813447..1082887 100644 (file)
              (modb-standard-key number)
              (modb-standard-entity-map-internal msgdb))))
     (cond
-     ((and ret (eq (car-safe ret) 'autoload))
-      (cdr (cdr ret))) ; message-id.
-     ((and ret (stringp (car-safe ret)))
-      ;; Already loaded.
-      (car ret))
      ((null ret)
       ;; Garbage entity.
       (elmo-clear-hash-val (modb-standard-key number)
                           (modb-standard-entity-map-internal msgdb))
       nil)                             ; return nil.
+     ((eq (car-safe ret) 'autoload)
+      (cdr (cdr ret)))                 ; message-id.
+     ((elmo-msgdb-message-entity-field (elmo-message-entity-handler ret)
+                                      ret 'message-id)) ; Already loaded.
      (t (error "Internal error: invalid msgdb status")))))
 
 (defun modb-standard-load-entity (modb path &optional section)
                           entities))
       (ignore-errors (delete-file filename)))))
 
+(defun modb-standard-cleanup-stale-entities (modb path)
+  (message "Removing stale entities...")
+  (let* ((entity-regex
+         (concat "^" modb-standard-entity-filename "-\\([0-9]+\\)"))
+        (entities (elmo-uniq-list
+                   (mapcar
+                    (lambda (x) (/ x modb-standard-divide-number))
+                    (modb-standard-number-list-internal modb))))
+        (files (mapcar (lambda(x)
+                         (when (string-match entity-regex x)
+                           (string-to-number (match-string 1 x))))
+                       (directory-files path nil entity-regex))))
+    (dolist (entity (car (elmo-list-diff-nonsortable files entities)))
+      (ignore-errors (delete-file
+                     (expand-file-name
+                      (modb-standard-entity-filename entity) path))))))
+
 (defun modb-standard-save-entity (modb path)
   (let ((modified (modb-generic-message-modified-internal modb)))
     (cond ((listp modified)
          (msg-id (elmo-msgdb-message-entity-field
                   (elmo-message-entity-handler entity) entity 'message-id))
          duplicate)
-      (when msg-id
+      (when (and number msg-id)
        ;; number-list
        (modb-standard-set-number-list-internal
         msgdb