X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=elmo%2Felmo-map.el;h=08f23df1f45d9693731b25c3705915fbab652427;hb=129ba17ee2b41bc7f6d10a871fb5db09dcc4a968;hp=aafd7a8c3bc91aea396e7177403f83992d76d081;hpb=d9e2a1d256315bb9d148e2d1996f0c8c693d1d84;p=elisp%2Fwanderlust.git diff --git a/elmo/elmo-map.el b/elmo/elmo-map.el index aafd7a8..08f23df 100644 --- a/elmo/elmo-map.el +++ b/elmo/elmo-map.el @@ -62,23 +62,11 @@ (luna-define-generic elmo-map-folder-list-message-locations (folder) "Return a location list of the FOLDER.") -(luna-define-generic elmo-map-folder-unmark-important (folder locations) - "") - -(luna-define-generic elmo-map-folder-mark-as-important (folder locations) - "") +(luna-define-generic elmo-map-folder-set-flag (folder locations flag) + "Set FLAG to LOCATIONS.") -(luna-define-generic elmo-map-folder-unmark-read (folder locations) - "") - -(luna-define-generic elmo-map-folder-mark-as-read (folder locations) - "") - -(luna-define-generic elmo-map-folder-unmark-answered (folder locations) - "") - -(luna-define-generic elmo-map-folder-mark-as-answered (folder locations) - "") +(luna-define-generic elmo-map-folder-unset-flag (folder locations flag) + "Unset FLAG from LOCATIONS.") (luna-define-generic elmo-map-message-fetch (folder location strategy @@ -87,24 +75,6 @@ unseen) "") -(luna-define-generic elmo-map-folder-list-unreads (folder) - "") - -(luna-define-method elmo-map-folder-list-unreads ((folder elmo-map-folder)) - t) - -(luna-define-generic elmo-map-folder-list-importants (folder) - "") - -(luna-define-method elmo-map-folder-list-importants ((folder elmo-map-folder)) - t) - -(luna-define-generic elmo-map-folder-list-answereds (folder) - "") - -(luna-define-method elmo-map-folder-list-answereds ((folder elmo-map-folder)) - t) - (luna-define-generic elmo-map-folder-delete-messages (folder locations) "") @@ -116,7 +86,9 @@ (let ((numbers (mapcar 'car (elmo-map-folder-location-alist-internal folder)))) - (setq numbers (elmo-living-messages numbers (elmo-folder-killed-list-internal folder))) + (setq numbers (elmo-living-messages + numbers + (elmo-folder-killed-list-internal folder))) (prog1 (cons (elmo-max-of-list numbers) (length numbers)) @@ -139,16 +111,15 @@ (luna-define-method elmo-folder-pack-numbers ((folder elmo-map-folder)) (let* ((msgdb (elmo-folder-msgdb folder)) (numbers (sort (elmo-folder-list-messages folder nil 'in-msgdb) '<)) - (new-msgdb (elmo-make-msgdb)) + (new-msgdb (elmo-make-msgdb (elmo-folder-msgdb-path folder))) (number 1) total location entity) - (elmo-msgdb-set-path new-msgdb (elmo-folder-msgdb-path folder)) (setq total (length numbers)) (elmo-with-progress-display (> total elmo-display-progress-threshold) (elmo-folder-pack-numbers total "Packing...") (dolist (old-number numbers) (setq entity (elmo-msgdb-message-entity msgdb old-number)) - (elmo-msgdb-overview-entity-set-number entity number) + (elmo-message-entity-set-number entity number) (elmo-msgdb-append-entity new-msgdb entity (elmo-msgdb-flags msgdb old-number)) (setq location @@ -231,7 +202,7 @@ (luna-define-method elmo-folder-open-internal ((folder elmo-map-folder)) (elmo-map-folder-location-setup - folder + folder (elmo-msgdb-location-load (elmo-folder-msgdb-path folder))) (if (elmo-folder-plugged-p folder) (elmo-map-folder-update-locations @@ -247,12 +218,15 @@ (luna-define-method elmo-folder-close-internal ((folder elmo-map-folder)) (elmo-map-folder-set-location-alist-internal folder nil) (elmo-map-folder-set-location-hash-internal folder nil)) - + (luna-define-method elmo-folder-check ((folder elmo-map-folder)) (elmo-map-folder-update-locations folder (elmo-map-folder-list-message-locations folder))) +(luna-define-method elmo-folder-next-message-number ((folder elmo-map-folder)) + (1+ (elmo-map-folder-number-max-internal folder))) + (luna-define-method elmo-folder-clear :around ((folder elmo-map-folder) &optional keep-killed) (unless keep-killed @@ -266,56 +240,25 @@ ((folder elmo-map-folder) &optional nohide) (mapcar 'car (elmo-map-folder-location-alist-internal folder))) -(luna-define-method elmo-folder-unmark-important :before ((folder - elmo-map-folder) - numbers - &optional - ignore-flags) - (unless ignore-flags - (elmo-map-folder-unmark-important - folder - (elmo-map-folder-numbers-to-locations folder numbers)))) - -(luna-define-method elmo-folder-mark-as-important :before ((folder - elmo-map-folder) - numbers - &optional - ignore-flags) - (unless ignore-flags - (elmo-map-folder-mark-as-important - folder - (elmo-map-folder-numbers-to-locations folder numbers)))) - -(luna-define-method elmo-folder-unmark-read :before ((folder elmo-map-folder) - numbers - &optional ignore-flags) - (unless ignore-flags - (elmo-map-folder-unmark-read +(luna-define-method elmo-folder-set-flag :before ((folder elmo-map-folder) + numbers + flag + &optional is-local) + (unless is-local + (elmo-map-folder-set-flag folder - (elmo-map-folder-numbers-to-locations folder numbers)))) - -(luna-define-method elmo-folder-mark-as-read :before ((folder - elmo-map-folder) - numbers - &optional ignore-flags) - (unless ignore-flags - (elmo-map-folder-mark-as-read + (elmo-map-folder-numbers-to-locations folder numbers) + flag))) + +(luna-define-method elmo-folder-unset-flag :before ((folder elmo-map-folder) + numbers + flag + &optional is-local) + (unless is-local + (elmo-map-folder-unset-flag folder - (elmo-map-folder-numbers-to-locations folder numbers)))) - -(luna-define-method elmo-folder-unmark-answered :before ((folder - elmo-map-folder) - numbers) - (elmo-map-folder-unmark-answered - folder - (elmo-map-folder-numbers-to-locations folder numbers))) - -(luna-define-method elmo-folder-mark-as-answered :before ((folder - elmo-map-folder) - numbers) - (elmo-map-folder-mark-as-answered - folder - (elmo-map-folder-numbers-to-locations folder numbers))) + (elmo-map-folder-numbers-to-locations folder numbers) + flag))) (luna-define-method elmo-message-fetch-internal ((folder elmo-map-folder) number strategy @@ -325,40 +268,44 @@ (elmo-map-message-location folder number) strategy section unread)) -(luna-define-method elmo-folder-list-unreads :around ((folder elmo-map-folder)) - (let ((locations (elmo-map-folder-list-unreads folder))) +(luna-define-method elmo-folder-list-flagged-internal ((folder elmo-map-folder) + flag) + (let ((locations (elmo-map-folder-list-flagged folder flag))) (if (listp locations) (elmo-map-folder-locations-to-numbers folder locations) - (luna-call-next-method)))) + t))) -(luna-define-method elmo-folder-list-importants :around ((folder - elmo-map-folder)) - (let ((locations (elmo-map-folder-list-importants folder))) - (if (listp locations) - (elmo-map-folder-locations-to-numbers folder locations) - (luna-call-next-method)))) +(luna-define-generic elmo-map-folder-list-flagged (folder flag) + "Return a list of message location in the FOLDER with FLAG. +Return t if the message list is not available.") -(luna-define-method elmo-folder-list-answereds :around ((folder - elmo-map-folder)) - (let ((locations (elmo-map-folder-list-answereds folder))) - (if (listp locations) - (elmo-map-folder-locations-to-numbers folder locations) - (luna-call-next-method)))) +(luna-define-method elmo-map-folder-list-flagged ((folder elmo-map-folder) + flag) + t) -(luna-define-method elmo-folder-delete-messages ((folder elmo-map-folder) - numbers) +(luna-define-method elmo-folder-delete-messages-internal ((folder + elmo-map-folder) + numbers) (elmo-map-folder-delete-messages folder - (elmo-map-folder-numbers-to-locations folder numbers)) - (dolist (number numbers) - (elmo-map-folder-set-location-alist-internal - folder - (delq (elmo-get-hash-val - (concat "#" (int-to-string number)) - (elmo-map-folder-location-hash-internal - folder)) - (elmo-map-folder-location-alist-internal folder)))) - t) ; success + (elmo-map-folder-numbers-to-locations folder numbers))) + +(luna-define-method elmo-folder-detach-messages :around ((folder + elmo-map-folder) + numbers) + (when (luna-call-next-method) + (dolist (number numbers) + (elmo-map-folder-set-location-alist-internal + folder + (delq (elmo-get-hash-val + (concat "#" (int-to-string number)) + (elmo-map-folder-location-hash-internal + folder)) + (elmo-map-folder-location-alist-internal folder))) + (elmo-clear-hash-val (concat "#" (int-to-string number)) + (elmo-map-folder-location-hash-internal + folder))) + t)) ; success (require 'product) (product-provide (provide 'elmo-map) (require 'elmo-version))