mirror of
https://github.com/SqrtMinusOne/pomm.el.git
synced 2025-12-10 14:43:03 +03:00
feat: CSV history
This commit is contained in:
parent
248ef58270
commit
d4aba46750
1 changed files with 35 additions and 1 deletions
36
pomm.el
36
pomm.el
|
|
@ -109,6 +109,20 @@ The format is the same as in `format-seconds'"
|
|||
:group 'pomm
|
||||
:type 'string)
|
||||
|
||||
(defcustom pomm-csv-history-file nil
|
||||
"The csv history file location.
|
||||
|
||||
The parent directory has to exists!
|
||||
|
||||
A new entry is written whenever the timer changes status or kind
|
||||
of period. The format is as follows:
|
||||
- timestamp
|
||||
- status
|
||||
- kind
|
||||
- iteration"
|
||||
:group 'pomm
|
||||
:type 'string)
|
||||
|
||||
(defcustom pomm-on-tick-hook nil
|
||||
"A hook to run on every tick when the timer is running."
|
||||
:group 'pomm
|
||||
|
|
@ -166,13 +180,16 @@ Updated by `pomm-update-mode-line-string'.")
|
|||
(history . ,nil)
|
||||
(last-changed-time ,(time-convert nil 'integer)))
|
||||
pomm-current-mode-line-string "")
|
||||
(setf (alist-get 'status pomm--state) 'stopped))
|
||||
(setf (alist-get 'status pomm--state) 'stopped)
|
||||
(run-hooks 'pomm-on-status-changed-hook))
|
||||
|
||||
(defun pomm--init-state ()
|
||||
"Initialize the Pomodoro timer state.
|
||||
|
||||
This function is meant to be ran only once, at the first start of the timer."
|
||||
(add-hook 'pomm-on-status-changed-hook #'pomm--save-state)
|
||||
(add-hook 'pomm-on-status-changed-hook #'pomm--maybe-save-csv)
|
||||
(add-hook 'pomm-on-period-changed-hook #'pomm--maybe-save-csv)
|
||||
(if (or (not (file-exists-p pomm-state-file-location))
|
||||
(not pomm-state-file-location))
|
||||
(pomm--do-reset)
|
||||
|
|
@ -204,6 +221,23 @@ This function is meant to be ran only once, at the first start of the timer."
|
|||
(> (alist-get 'start-time item) cleanup-timestamp))
|
||||
(alist-get 'history pomm--state))))))
|
||||
|
||||
(defun pomm--maybe-save-csv ()
|
||||
"Write down the current state of the time to csv history.
|
||||
|
||||
Set `pomm-csv-history-file' to customize the file location. If the
|
||||
variable doesn't exist, function does nothing."
|
||||
(when pomm-csv-history-file
|
||||
(unless (file-exists-p pomm-csv-history-file)
|
||||
(with-temp-file pomm-csv-history-file
|
||||
(insert "timestamp,status,period,iteration\n")))
|
||||
(write-region
|
||||
(format "%d,%s,%s,%d\n"
|
||||
(time-convert nil 'integer)
|
||||
(symbol-name (alist-get 'status pomm--state))
|
||||
(symbol-name (alist-get 'kind (alist-get 'current pomm--state)))
|
||||
(or (alist-get 'iteration (alist-get 'current pomm--state)) 0))
|
||||
nil pomm-csv-history-file 'append 1)))
|
||||
|
||||
(defun pomm-reset ()
|
||||
"Reset the Pomodoro timer."
|
||||
(interactive)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue