mirror of https://github.com/djcb/mu.git
better handle maildir cache
- get an updated maildir list after indexing - add mu4e-added items to the list opportunistically Remove mu4e-clear-caches / mu4e-cache-maildir-list to mu4e-obsolete.el Fixes #2537.
This commit is contained in:
parent
15f08488d3
commit
f73aad2b41
6
NEWS.org
6
NEWS.org
|
@ -81,8 +81,10 @@
|
||||||
If and how much this helps, depends on your setup, see the
|
If and how much this helps, depends on your setup, see the
|
||||||
=mu4e-mu-allow-temp-file= docstring for details on how to determine this.
|
=mu4e-mu-allow-temp-file= docstring for details on how to determine this.
|
||||||
|
|
||||||
- Jumping to the 'jo' /other/ Maildirs used to quite slow the first time, but
|
- Maildir lists are now generated server-side; so e.g. jumping to the 'jo'
|
||||||
this now done on the server side, making it much faster.
|
/other/ Maildirs used to be quite slow the first time.
|
||||||
|
|
||||||
|
~mu4e-cache-maildir-list~ is obsolete / non-functional now.
|
||||||
|
|
||||||
- after retrieving mail (~mu4e-update-mail-and-index~), save the output of the
|
- after retrieving mail (~mu4e-update-mail-and-index~), save the output of the
|
||||||
retrieval command in a buffer =*mu4e-last-update*=, = which can be useful
|
retrieval command in a buffer =*mu4e-last-update*=, = which can be useful
|
||||||
|
|
|
@ -886,15 +886,20 @@ Server::Private::mkdir_handler(const Command& cmd)
|
||||||
const auto path{cmd.string_arg(":path").value_or("<error>")};
|
const auto path{cmd.string_arg(":path").value_or("<error>")};
|
||||||
const auto update{cmd.boolean_arg(":update")};
|
const auto update{cmd.boolean_arg(":update")};
|
||||||
|
|
||||||
|
if (path.find(store().root_maildir()) != 0)
|
||||||
|
throw Error{Error::Code::File, "maildir is not below root-maildir"};
|
||||||
|
|
||||||
if (auto&& res = maildir_mkdir(path, 0755, false); !res)
|
if (auto&& res = maildir_mkdir(path, 0755, false); !res)
|
||||||
throw res.error();
|
throw res.error();
|
||||||
|
|
||||||
/* mu4e does a lot of opportunistic 'mkdir', only send it updates when
|
/* mu4e does a lot of opportunistic 'mkdir', only send it updates when
|
||||||
* requested */
|
* requested */
|
||||||
if (update)
|
if (!update)
|
||||||
output_sexp(Sexp().put_props(":info", "mkdir",
|
return;
|
||||||
":message",
|
|
||||||
mu_format("{} has been created", path)));
|
output_sexp(Sexp().put_props(":info", "mkdir",
|
||||||
|
":message",
|
||||||
|
mu_format("{} has been created", path)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -162,17 +162,6 @@ mime-type are nil."
|
||||||
(defvar mu4e-maildir-list nil
|
(defvar mu4e-maildir-list nil
|
||||||
"Cached list of maildirs.")
|
"Cached list of maildirs.")
|
||||||
|
|
||||||
(defcustom mu4e-cache-maildir-list t
|
|
||||||
"Whether to cache the list of maildirs.
|
|
||||||
Set it to t if you find that generating the list on the fly is
|
|
||||||
too slow.
|
|
||||||
|
|
||||||
If you do so, you can set `mu4e-maildir-list' to nil to force
|
|
||||||
regenerating the cache the next time `mu4e-get-maildirs' gets
|
|
||||||
called."
|
|
||||||
:type 'boolean
|
|
||||||
:group 'mu4e-folders)
|
|
||||||
|
|
||||||
|
|
||||||
(defun mu4e-maildir-shortcuts ()
|
(defun mu4e-maildir-shortcuts ()
|
||||||
"Get `mu4e-maildir-shortcuts' in the (new) format.
|
"Get `mu4e-maildir-shortcuts' in the (new) format.
|
||||||
|
@ -204,19 +193,19 @@ the result."
|
||||||
(or val (mu4e-error "%S evaluates to nil" foldervar)))))
|
(or val (mu4e-error "%S evaluates to nil" foldervar)))))
|
||||||
|
|
||||||
(defun mu4e-get-drafts-folder (&optional msg)
|
(defun mu4e-get-drafts-folder (&optional msg)
|
||||||
"Get the drafts folder, optionallly based on MSG.
|
"Get the drafts folder, optionally based on MSG.
|
||||||
See `mu4e-drafts-folder'." (mu4e--get-folder 'mu4e-drafts-folder msg))
|
See `mu4e-drafts-folder'." (mu4e--get-folder 'mu4e-drafts-folder msg))
|
||||||
|
|
||||||
(defun mu4e-get-refile-folder (&optional msg)
|
(defun mu4e-get-refile-folder (&optional msg)
|
||||||
"Get the folder for refiling, optionallly based on MSG.
|
"Get the folder for refiling, optionally based on MSG.
|
||||||
See `mu4e-refile-folder'." (mu4e--get-folder 'mu4e-refile-folder msg))
|
See `mu4e-refile-folder'." (mu4e--get-folder 'mu4e-refile-folder msg))
|
||||||
|
|
||||||
(defun mu4e-get-sent-folder (&optional msg)
|
(defun mu4e-get-sent-folder (&optional msg)
|
||||||
"Get the sent folder, optionallly based on MSG.
|
"Get the sent folder, optionally based on MSG.
|
||||||
See `mu4e-sent-folder'." (mu4e--get-folder 'mu4e-sent-folder msg))
|
See `mu4e-sent-folder'." (mu4e--get-folder 'mu4e-sent-folder msg))
|
||||||
|
|
||||||
(defun mu4e-get-trash-folder (&optional msg)
|
(defun mu4e-get-trash-folder (&optional msg)
|
||||||
"Get the trash folder, optionallly based on MSG.
|
"Get the trash folder, optionally based on MSG.
|
||||||
See `mu4e-trash-folder'." (mu4e--get-folder 'mu4e-trash-folder msg))
|
See `mu4e-trash-folder'." (mu4e--get-folder 'mu4e-trash-folder msg))
|
||||||
|
|
||||||
;;; Maildirs
|
;;; Maildirs
|
||||||
|
@ -237,11 +226,9 @@ to create it; otherwise return nil."
|
||||||
(let ((seems-to-exist (file-directory-p dir)))
|
(let ((seems-to-exist (file-directory-p dir)))
|
||||||
(when (or seems-to-exist
|
(when (or seems-to-exist
|
||||||
(yes-or-no-p (mu4e-format "%s does not exist yet. Create now?" dir)))
|
(yes-or-no-p (mu4e-format "%s does not exist yet. Create now?" dir)))
|
||||||
;; even when the maildir already seems to exist,
|
;; even when the maildir already seems to exist, call mkdir for a deeper
|
||||||
;; call mkdir for a deeper check. However only get an update
|
;; check. However only get an update when the maildir is totally new.
|
||||||
;; when the maildir is totally new.
|
|
||||||
(mu4e--server-mkdir dir (not seems-to-exist))
|
(mu4e--server-mkdir dir (not seems-to-exist))
|
||||||
(setq mu4e-maildir-list nil) ;; clear cache
|
|
||||||
t)))
|
t)))
|
||||||
|
|
||||||
(defun mu4e-get-maildirs ()
|
(defun mu4e-get-maildirs ()
|
||||||
|
|
|
@ -224,5 +224,11 @@
|
||||||
(define-obsolete-function-alias 'mu4e-quote-for-modeline
|
(define-obsolete-function-alias 'mu4e-quote-for-modeline
|
||||||
'mu4e--modeline-quote-and-truncate "1.9.16")
|
'mu4e--modeline-quote-and-truncate "1.9.16")
|
||||||
|
|
||||||
|
;; mu4e-folder
|
||||||
|
(make-obsolete-variable 'mu4e-cache-maildir-list "No longer used" "1.11.15")
|
||||||
|
|
||||||
|
;; mu4e.
|
||||||
|
(make-obsolete 'mu4e-clear-caches "No longer used" "1.11.15")
|
||||||
|
|
||||||
(provide 'mu4e-obsolete)
|
(provide 'mu4e-obsolete)
|
||||||
;;; mu4e-obsolete.el ends here
|
;;; mu4e-obsolete.el ends here
|
||||||
|
|
|
@ -643,7 +643,13 @@ the directory time stamp."
|
||||||
|
|
||||||
(defun mu4e--server-mkdir (path &optional update)
|
(defun mu4e--server-mkdir (path &optional update)
|
||||||
"Create a new maildir-directory at filesystem PATH.
|
"Create a new maildir-directory at filesystem PATH.
|
||||||
When UPDATE is non-nil, send a update when completed."
|
When UPDATE is non-nil, send a update when completed.
|
||||||
|
PATH must be below the root-maildir."
|
||||||
|
;; handle maildir cache
|
||||||
|
(if (not (string-prefix-p (mu4e-root-maildir) path))
|
||||||
|
(mu4e-error "Cannot create maildir outside root-maildir")
|
||||||
|
(add-to-list 'mu4e-maildir-list ;; update cache
|
||||||
|
(substring path (length (mu4e-root-maildir)))))
|
||||||
(mu4e--server-call-mu `(mkdir
|
(mu4e--server-call-mu `(mkdir
|
||||||
:path ,path
|
:path ,path
|
||||||
:update ,(or update nil))))
|
:update ,(or update nil))))
|
||||||
|
|
17
mu4e/mu4e.el
17
mu4e/mu4e.el
|
@ -160,7 +160,12 @@ Otherwise, check requirements, then start mu4e. When successful, invoke
|
||||||
(when mu4e--update-timer
|
(when mu4e--update-timer
|
||||||
(cancel-timer mu4e--update-timer)
|
(cancel-timer mu4e--update-timer)
|
||||||
(setq mu4e--update-timer nil))
|
(setq mu4e--update-timer nil))
|
||||||
(mu4e-clear-caches)
|
|
||||||
|
(setq ;; clear some caches
|
||||||
|
mu4e-maildir-list nil
|
||||||
|
mu4e--contacts-set nil
|
||||||
|
mu4e--contacts-tstamp "0")
|
||||||
|
|
||||||
(remove-hook 'mu4e-query-items-updated-hook #'mu4e--main-redraw)
|
(remove-hook 'mu4e-query-items-updated-hook #'mu4e--main-redraw)
|
||||||
(remove-hook 'mu4e-query-items-updated-hook #'mu4e--modeline-update)
|
(remove-hook 'mu4e-query-items-updated-hook #'mu4e--modeline-update)
|
||||||
(remove-hook 'mu4e-query-items-updated-hook #'mu4e--notification)
|
(remove-hook 'mu4e-query-items-updated-hook #'mu4e--notification)
|
||||||
|
@ -229,7 +234,8 @@ Otherwise, check requirements, then start mu4e. When successful, invoke
|
||||||
mu4e-message-changed-hook)
|
mu4e-message-changed-hook)
|
||||||
(unless (and (not (string= mu4e--contacts-tstamp "0"))
|
(unless (and (not (string= mu4e--contacts-tstamp "0"))
|
||||||
(zerop (plist-get info :updated)))
|
(zerop (plist-get info :updated)))
|
||||||
(mu4e--request-contacts-maybe))
|
(mu4e--request-contacts-maybe)
|
||||||
|
(mu4e--server-data 'maildirs)) ;; update maildir list
|
||||||
(mu4e--main-redraw))))
|
(mu4e--main-redraw))))
|
||||||
((plist-get info :message)
|
((plist-get info :message)
|
||||||
(mu4e-index-message "%s" (plist-get info :message))))))
|
(mu4e-index-message "%s" (plist-get info :message))))))
|
||||||
|
@ -253,13 +259,6 @@ chance."
|
||||||
(mu4e-setq-if-nil mu4e-pong-func #'mu4e--default-handler)
|
(mu4e-setq-if-nil mu4e-pong-func #'mu4e--default-handler)
|
||||||
|
|
||||||
(mu4e-setq-if-nil mu4e-queries-func #'mu4e--query-items-queries-handler))
|
(mu4e-setq-if-nil mu4e-queries-func #'mu4e--query-items-queries-handler))
|
||||||
|
|
||||||
(defun mu4e-clear-caches ()
|
|
||||||
"Clear any cached resources."
|
|
||||||
(setq
|
|
||||||
mu4e-maildir-list nil
|
|
||||||
mu4e--contacts-set nil
|
|
||||||
mu4e--contacts-tstamp "0"))
|
|
||||||
|
|
||||||
;;;
|
;;;
|
||||||
(provide 'mu4e)
|
(provide 'mu4e)
|
||||||
|
|
Loading…
Reference in New Issue