Optimization - reduce use of chronometrist-tasks-from-table

We now avoid running chronometrist-tasks-from-table for the
chronometrist-sexp-new and the chronometrist-sexp-replace-last
operations.

Hurray. Clocking in/out is tangibly faster now.
This commit is contained in:
contrapunctus 2020-06-25 18:14:25 +05:30
parent 5e4854272e
commit dd7ec40da7
4 changed files with 23 additions and 11 deletions

View File

@ -72,18 +72,19 @@
2. Variable - chronometrist-date-re
3. Variable - chronometrist-time-re-ui
4. Variable - chronometrist-task-list
5. Internal Variable - chronometrist--fs-watch
6. Function - chronometrist-current-task ()
7. Function - chronometrist-format-time (seconds &optional (blank " "))
5. Function - chronometrist-task-list-add (task)
6. Internal Variable - chronometrist--fs-watch
7. Function - chronometrist-current-task ()
8. Function - chronometrist-format-time (seconds &optional (blank " "))
* seconds -> "h:m:s"
8. Function - chronometrist-common-file-empty-p (file)
9. Function - chronometrist-common-clear-buffer (buffer)
10. Function - chronometrist-format-keybinds (command map &optional firstonly)
11. Function - chronometrist-events->ts-pairs (events)
9. Function - chronometrist-common-file-empty-p (file)
10. Function - chronometrist-common-clear-buffer (buffer)
11. Function - chronometrist-format-keybinds (command map &optional firstonly)
12. Function - chronometrist-events->ts-pairs (events)
* (plist ...) -> ((ts . ts) ...)
12. Function - chronometrist-ts-pairs->durations (ts-pairs)
13. Function - chronometrist-ts-pairs->durations (ts-pairs)
* ((ts . ts) ...) -> seconds
13. Function - chronometrist-previous-week-start (ts)
14. Function - chronometrist-previous-week-start (ts)
* ts -> ts
*** chronometrist-custom.el
1. Custom variable - chronometrist-file

View File

@ -45,6 +45,13 @@ must correspond to the output from `chronometrist-format-time'.")
(defvar chronometrist-task-list nil
"List of tasks in `chronometrist-file', as returned by `chronometrist-tasks-from-table'.")
(defun chronometrist-task-list-add (task)
"Add TASK to `chronometrist-task-list', if it is not already present."
(unless (member task chronometrist-task-list)
(--> (append chronometrist-task-list task)
(sort it #'string-lessp)
(setq chronometrist-task-list it))))
(defvar chronometrist--fs-watch nil
"Filesystem watch object.

View File

@ -88,7 +88,10 @@ were none."
(unless (bobp) (insert "\n"))
(unless (bolp) (insert "\n"))
(chronometrist-plist-pp plist (current-buffer))
;; update in-memory (`chronometrist-events', `chronometrist-task-list') too...
(chronometrist-events-new plist)
(chronometrist-task-list-add (plist-get plist :name))
;; ...so we can skip some expensive operations.
(setq chronometrist--inhibit-read-p t)
(save-buffer)))
@ -108,6 +111,7 @@ were none."
(chronometrist-sexp-delete-list)
(chronometrist-plist-pp plist (current-buffer))
(chronometrist-events-replace-last plist)
;; We make an assumption here - that this function will always be used to replace something with the same :name. Thus, we don't update `chronometrist-task-list' here (unlike `chronometrist-sexp-new')
(setq chronometrist--inhibit-read-p t)
(save-buffer)))

View File

@ -225,8 +225,8 @@ Argument _FS-EVENT is ignored."
;; REVIEW - can we move most/all of this to the `chronometrist-file-change-hook'?
(if chronometrist--inhibit-read-p
(setq chronometrist--inhibit-read-p nil)
(chronometrist-events-populate))
(setq chronometrist-task-list (chronometrist-tasks-from-table))
(chronometrist-events-populate)
(setq chronometrist-task-list (chronometrist-tasks-from-table)))
(chronometrist-tags-history-populate)
(chronometrist-key-history-populate)
(chronometrist-value-history-populate)