* wl.el (wl-plugged-set-variables, wl-plugged-dop-queue-info)
[elisp/wanderlust.git] / wl / wl-thread.el
index 8ed56f1..a9026f3 100644 (file)
                                      (nth (- (length curc) 1)
                                           curc))))
                        (wl-thread-entity-get-number curp)))
                                      (nth (- (length curc) 1)
                                           curc))))
                        (wl-thread-entity-get-number curp)))
-    (setcar (cddr to) (wl-append children
-                                (list (car entity))))
+    (wl-thread-entity-set-children to (wl-append children (list (car entity))))
     (setq wl-thread-entities (cons entity wl-thread-entities))
     (elmo-set-hash-val (format "#%d" (car entity)) entity
                       wl-thread-entity-hashtb)))
     (setq wl-thread-entities (cons entity wl-thread-entities))
     (elmo-set-hash-val (format "#%d" (car entity)) entity
                       wl-thread-entity-hashtb)))
@@ -296,7 +295,7 @@ ENTITY is returned."
   "Jump to the message with specified number in the current summary."
   (interactive)
   (let ((num (or number
   "Jump to the message with specified number in the current summary."
   (interactive)
   (let ((num (or number
-                (string-to-int
+                (string-to-number
                  (read-from-minibuffer "Jump to Message(No.): ")))))
     (wl-thread-entity-force-open (wl-thread-get-entity num))
     (wl-summary-jump-to-msg num)))
                  (read-from-minibuffer "Jump to Message(No.): ")))))
     (wl-thread-entity-force-open (wl-thread-get-entity num))
     (wl-summary-jump-to-msg num)))
@@ -304,53 +303,34 @@ ENTITY is returned."
 (defun wl-thread-close-all ()
   "Close all top threads."
   (interactive)
 (defun wl-thread-close-all ()
   "Close all top threads."
   (interactive)
-  (message "Closing all threads...")
-  (save-excursion
-    (let ((entities wl-thread-entity-list)
-         (cur 0)
-         (len (length wl-thread-entity-list)))
-      (while entities
+  (elmo-with-progress-display
+      (wl-thread-close-all (length wl-thread-entity-list))
+      "Closing all threads"
+    (save-excursion
+      (dolist (entity wl-thread-entity-list)
        (when (and (wl-thread-entity-get-opened (wl-thread-get-entity
        (when (and (wl-thread-entity-get-opened (wl-thread-get-entity
-                                                (car entities)))
+                                                entity))
                   (wl-thread-entity-get-children (wl-thread-get-entity
                   (wl-thread-entity-get-children (wl-thread-get-entity
-                                                  (car entities))))
-         (wl-summary-jump-to-msg (car entities))
+                                                  entity)))
+         (wl-summary-jump-to-msg entity)
          (wl-thread-open-close))
          (wl-thread-open-close))
-       (when (> len elmo-display-progress-threshold)
-         (setq cur (1+ cur))
-         (if (or (zerop (% cur 5)) (= cur len))
-             (elmo-display-progress
-              'wl-thread-close-all "Closing all threads..."
-              (/ (* cur 100) len))))
-       (setq entities (cdr entities)))))
-  (message "Closing all threads...done"))
+       (elmo-progress-notify 'wl-thread-close-all)))))
 
 (defun wl-thread-open-all ()
   "Open all threads."
   (interactive)
 
 (defun wl-thread-open-all ()
   "Open all threads."
   (interactive)
-  (message "Opening all threads...")
-  (save-excursion
-    (goto-char (point-min))
-    (let ((len (count-lines (point-min) (point-max)))
-         (cur 0)
-         entity)
+  (elmo-with-progress-display
+      (wl-thread-open-all (count-lines (point-min) (point-max)))
+      "Opening all threads"
+    (save-excursion
+      (goto-char (point-min))
       (while (not (eobp))
        (if (wl-thread-entity-get-opened
       (while (not (eobp))
        (if (wl-thread-entity-get-opened
-            (setq entity (wl-thread-get-entity
-                          (wl-summary-message-number))))
+            (wl-thread-get-entity (wl-summary-message-number)))
            (forward-line 1)
          (wl-thread-force-open)
          (wl-thread-goto-bottom-of-sub-thread))
            (forward-line 1)
          (wl-thread-force-open)
          (wl-thread-goto-bottom-of-sub-thread))
-       (when (> len elmo-display-progress-threshold)
-         (setq cur (1+ cur))
-         (elmo-display-progress
-          'wl-thread-open-all "Opening all threads..."
-          (/ (* cur 100) len)))))
-    ;; Make sure to be 100%.
-    (elmo-display-progress
-     'wl-thread-open-all "Opening all threads..."
-     100))
-  (message "Opening all threads...done"))
+       (elmo-progress-notify 'wl-thread-open-all)))))
 
 (defun wl-thread-open-all-unread ()
   (interactive)
 
 (defun wl-thread-open-all-unread ()
   (interactive)
@@ -431,28 +411,11 @@ ENTITY is returned."
                  (wl-thread-get-entity (car msgs)))))))))
    updates))
 
                  (wl-thread-get-entity (car msgs)))))))))
    updates))
 
-(defun wl-thread-update-line-msgs (msgs &optional no-msg)
+(defun wl-thread-update-line-msgs (msgs)
   (wl-delete-all-overlays)
   (wl-delete-all-overlays)
-  (let ((i 0)
-       (updates msgs)
-       len)
-;;; (while msgs
-;;;   (setq updates
-;;;        (append updates
-;;;                (wl-thread-get-children-msgs (car msgs))))
-;;;   (setq msgs (cdr msgs)))
-;;; (setq updates (elmo-uniq-list updates))
-    (setq len (length updates))
-    (while updates
-      (wl-thread-update-line-on-buffer-sub nil (car updates))
-      (setq updates (cdr updates))
-      (when (and (not no-msg)
-                (> len elmo-display-progress-threshold))
-       (setq i (1+ i))
-       (if (or (zerop (% i 5)) (= i len))
-           (elmo-display-progress
-            'wl-thread-update-line-msgs "Updating deleted thread..."
-            (/ (* i 100) len)))))))
+  (dolist (message msgs)
+    (wl-thread-update-line-on-buffer-sub nil message)
+    (elmo-progress-notify 'wl-thread-update-line)))
 
 (defun wl-thread-delete-line-from-buffer (msg)
   "Simply delete msg line."
 
 (defun wl-thread-delete-line-from-buffer (msg)
   "Simply delete msg line."
@@ -525,9 +488,8 @@ ENTITY is returned."
                        (apply (function nconc)
                               update-msgs
                               (mapcar
                        (apply (function nconc)
                               update-msgs
                               (mapcar
-                               (function
-                                (lambda (message)
-                                  (wl-thread-get-children-msgs message t)))
+                               (lambda (message)
+                                 (wl-thread-get-children-msgs message t))
                                children))))
                (wl-thread-entity-set-children
                 parent (append older-brothers children younger-brothers))
                                children))))
                (wl-thread-entity-set-children
                 parent (append older-brothers children younger-brothers))
@@ -649,8 +611,9 @@ Message is inserted to the summary buffer."
        ;; insert as children.
        (wl-thread-entity-insert-as-children
         parent
        ;; insert as children.
        (wl-thread-entity-insert-as-children
         parent
-        (setq child-entity (wl-thread-create-entity
-                            msg (nth 0 parent) nil linked)))
+        (setq child-entity
+              (wl-thread-create-entity
+               msg (wl-thread-entity-get-number parent) nil linked)))
       ;; insert as top message.
       (wl-thread-entity-insert-as-top
        (wl-thread-create-entity msg nil)))
       ;; insert as top message.
       (wl-thread-entity-insert-as-top
        (wl-thread-create-entity msg nil)))
@@ -703,25 +666,19 @@ Message is inserted to the summary buffer."
     ret))
 
 (defun wl-thread-update-indent-string-thread (top-list)
     ret))
 
 (defun wl-thread-update-indent-string-thread (top-list)
-  (let* ((top-list (wl-thread-get-parent-list top-list))
-        (num (length top-list))
-        (i 0)
-        beg)
-    (while top-list
-      (when (> num elmo-display-progress-threshold)
-       (setq i (1+ i))
-       (when (or (zerop (% i 5)) (= i num))
-         (elmo-display-progress
-          'wl-thread-update-indent-string-thread
-          "Updating thread indent..."
-          (/ (* i 100) num))))
-      (when (car top-list)
-       (wl-summary-jump-to-msg (car top-list))
-       (setq beg (point))
-       (wl-thread-goto-bottom-of-sub-thread)
-       (wl-thread-update-indent-string-region beg (point)))
-      (setq top-list (cdr top-list)))
-    (message "Updating thread indent...done")))
+  (let ((top-list (wl-thread-get-parent-list top-list))
+       beg)
+    (elmo-with-progress-display
+       (wl-thread-update-indent-string-thread (length top-list))
+       "Updating thread indent"
+      (while top-list
+       (when (car top-list)
+         (wl-summary-jump-to-msg (car top-list))
+         (setq beg (point))
+         (wl-thread-goto-bottom-of-sub-thread)
+         (wl-thread-update-indent-string-region beg (point)))
+       (elmo-progress-notify 'wl-thread-update-indent-string-thread)
+       (setq top-list (cdr top-list))))))
 
 (defun wl-thread-update-children-number (entity)
   "Update the children number."
 
 (defun wl-thread-update-children-number (entity)
   "Update the children number."
@@ -799,22 +756,19 @@ Message is inserted to the summary buffer."
 
 (defun wl-thread-insert-top ()
   (let ((elist wl-thread-entity-list)
 
 (defun wl-thread-insert-top ()
   (let ((elist wl-thread-entity-list)
-       (len (length wl-thread-entity-list))
-       (cur 0))
-    (wl-delete-all-overlays)
-    (while elist
-      (wl-thread-insert-entity
-       0
-       (wl-thread-get-entity (car elist))
-       nil
-       len)
-      (setq elist (cdr elist))
-      (when (> len elmo-display-progress-threshold)
-       (setq cur (1+ cur))
-       (if (or (zerop (% cur 2)) (= cur len))
-           (elmo-display-progress
-            'wl-thread-insert-top "Inserting message..."
-            (/ (* cur 100) len)))))))
+       (len (length wl-thread-entity-list)))
+    (elmo-with-progress-display
+       (wl-thread-insert-entity (length wl-thread-entity-list))
+       "Inserting message"
+      (wl-delete-all-overlays)
+      (while elist
+       (wl-thread-insert-entity
+        0
+        (wl-thread-get-entity (car elist))
+        nil
+        len)
+       (elmo-progress-notify 'wl-thread-insert-entity)
+       (setq elist (cdr elist))))))
 
 (defsubst wl-thread-insert-entity-sub (indent entity parent-entity all)
   (let (msg-num
 
 (defsubst wl-thread-insert-entity-sub (indent entity parent-entity all)
   (let (msg-num
@@ -831,14 +785,14 @@ Message is inserted to the summary buffer."
        (setq temp-mark (wl-summary-get-score-mark msg-num)))
       (setq message-entity
            (elmo-message-entity wl-summary-buffer-elmo-folder
        (setq temp-mark (wl-summary-get-score-mark msg-num)))
       (setq message-entity
            (elmo-message-entity wl-summary-buffer-elmo-folder
-                                (nth 0 entity)))
+                                msg-num))
 ;;;   (wl-delete-all-overlays)
       (when message-entity
        (wl-summary-insert-line
         (wl-summary-create-line
          message-entity
          (elmo-message-entity wl-summary-buffer-elmo-folder
 ;;;   (wl-delete-all-overlays)
       (when message-entity
        (wl-summary-insert-line
         (wl-summary-create-line
          message-entity
          (elmo-message-entity wl-summary-buffer-elmo-folder
-                              (nth 0 parent-entity))
+                              (wl-thread-entity-get-number parent-entity))
          temp-mark
          (elmo-message-status wl-summary-buffer-elmo-folder msg-num)
          (if wl-thread-insert-force-opened
          temp-mark
          (elmo-message-status wl-summary-buffer-elmo-folder msg-num)
          (if wl-thread-insert-force-opened
@@ -854,7 +808,7 @@ Message is inserted to the summary buffer."
     (while msgs
       (wl-thread-insert-entity-sub indent entity parent-entity all)
       (setq msgs (cdr msgs))
     (while msgs
       (wl-thread-insert-entity-sub indent entity parent-entity all)
       (setq msgs (cdr msgs))
-      (setq children (nth 2 entity))
+      (setq children (wl-thread-entity-get-children entity))
       (if children
          ;; insert children
          (when (or wl-thread-insert-force-opened
       (if children
          ;; insert children
          (when (or wl-thread-insert-force-opened
@@ -989,8 +943,7 @@ Message is inserted to the summary buffer."
   (let (depth beg)
     (wl-thread-entity-set-opened entity nil)
     (setq depth (wl-thread-get-depth-of-current-line))
   (let (depth beg)
     (wl-thread-entity-set-opened entity nil)
     (setq depth (wl-thread-get-depth-of-current-line))
-    (beginning-of-line)
-    (setq beg (point))
+    (setq beg (point-at-bol))
     (wl-thread-goto-bottom-of-sub-thread)
     (wl-thread-remove-argument-region beg
                                      (point))
     (wl-thread-goto-bottom-of-sub-thread)
     (wl-thread-remove-argument-region beg
                                      (point))
@@ -999,7 +952,7 @@ Message is inserted to the summary buffer."
     (wl-thread-insert-entity (- depth 1)
                             entity
                             (wl-thread-get-entity
     (wl-thread-insert-entity (- depth 1)
                             entity
                             (wl-thread-get-entity
-                             (nth 3 entity))
+                             (wl-thread-entity-get-parent entity))
                             nil)
     (delete-char 1) ; delete '\n'
     (wl-thread-print-argument-region beg (point))))
                             nil)
     (delete-char 1) ; delete '\n'
     (wl-thread-print-argument-region beg (point))))
@@ -1016,16 +969,15 @@ Message is inserted to the summary buffer."
 
 (defun wl-thread-open (entity)
   (let (depth beg)
 
 (defun wl-thread-open (entity)
   (let (depth beg)
-    (beginning-of-line)
-    (setq beg (point))
+    (setq beg (point-at-bol))
     (setq depth (wl-thread-get-depth-of-current-line))
     (setq depth (wl-thread-get-depth-of-current-line))
-    (end-of-line)
-    (delete-region beg (point))
+    (delete-region (point-at-bol) (point-at-eol))
     (wl-thread-entity-set-opened entity t)
     (wl-thread-insert-entity depth ;(- depth 1)
                             entity
                             (wl-thread-get-entity
     (wl-thread-entity-set-opened entity t)
     (wl-thread-insert-entity depth ;(- depth 1)
                             entity
                             (wl-thread-get-entity
-                             (nth 3 entity)) nil)
+                             (wl-thread-entity-get-parent entity))
+                            nil)
     (delete-char 1) ; delete '\n'
     (wl-thread-print-argument-region beg (point))))
 
     (delete-char 1) ; delete '\n'
     (wl-thread-print-argument-region beg (point))))
 
@@ -1136,7 +1088,7 @@ Message is inserted to the summary buffer."
     (if (string= dst-parent "")
        (setq dst-parent nil)
       (if (interactive-p)
     (if (string= dst-parent "")
        (setq dst-parent nil)
       (if (interactive-p)
-         (setq dst-parent (string-to-int dst-parent))
+         (setq dst-parent (string-to-number dst-parent))
        (setq dst-parent parent-number)))
     (if (and dst-parent
             (memq dst-parent (wl-thread-get-children-msgs number)))
        (setq dst-parent parent-number)))
     (if (and dst-parent
             (memq dst-parent (wl-thread-get-children-msgs number)))
@@ -1176,7 +1128,7 @@ Message is inserted to the summary buffer."
       (wl-thread-entity-set-parent entity dst-parent)
       ;; update thread on buffer
       (wl-thread-make-number-list)
       (wl-thread-entity-set-parent entity dst-parent)
       ;; update thread on buffer
       (wl-thread-make-number-list)
-      (wl-thread-update-line-msgs update-msgs t))))
+      (wl-thread-update-line-msgs update-msgs))))
 
 (require 'product)
 (product-provide (provide 'wl-thread) (require 'wl-version))
 
 (require 'product)
 (product-provide (provide 'wl-thread) (require 'wl-version))