Migrate -statistics to sexp format

This commit is contained in:
contrapunctus 2019-10-22 23:41:03 +05:30
parent 5979a8143b
commit 207c3b2cee
2 changed files with 49 additions and 25 deletions

View File

@ -218,8 +218,8 @@ If FIRSTONLY is non-nil, return only the first keybinding found."
(insert ", from")
(insert
(format " %s to %s\n"
(chronometrist-statistics-format-date (plist-get chronometrist-statistics--ui-state :start))
(chronometrist-statistics-format-date (plist-get chronometrist-statistics--ui-state :end))))))
(plist-get chronometrist-statistics--ui-state :start)
(plist-get chronometrist-statistics--ui-state :end)))))
(defun chronometrist-statistics-refresh (&optional ignore-auto noconfirm)
"Refresh the `chronometrist-statistics' buffer, without re-reading `timeclock-file'.
@ -281,19 +281,21 @@ If PRESERVE-STATE is nil (the default when not supplied), display
data from the current week. Otherwise, display data from the week
specified by `chronometrist-statistics--ui-state'."
(interactive)
(let* ((buffer (get-buffer-create chronometrist-statistics-buffer-name))
(today (decode-time))
(week-start (chronometrist-calendrical->date
(chronometrist-report-previous-week-start today)))
(week-end (chronometrist-date-op week-start #'+ 6)))
(let* ((buffer (get-buffer-create chronometrist-statistics-buffer-name))
(today (chronometrist-date))
(week-start (chronometrist-report-previous-week-start today))
(week-end (time-add week-start
`(0 ,(* 6 chronometrist-seconds-in-day))))
(week-start-iso (chronometrist-date week-start))
(week-end-iso (chronometrist-date week-end)))
(with-current-buffer buffer
(cond ((get-buffer-window chronometrist-statistics-buffer-name)
(kill-buffer buffer))
(t ;; (delete-other-windows)
(when (not preserve-state)
(setq chronometrist-statistics--ui-state `(:mode week
:start ,week-start
:end ,week-end)))
(setq chronometrist-statistics--ui-state `(:mode week
:start ,week-start-iso
:end ,week-end-iso)))
(chronometrist-common-create-chronometrist-file)
(chronometrist-statistics-mode)
(switch-to-buffer buffer)
@ -304,17 +306,27 @@ specified by `chronometrist-statistics--ui-state'."
If ARG is a numeric argument, go back that many times."
(interactive "P")
(let* ((arg (if (and arg (numberp arg))
(abs arg)
1))
(start (plist-get chronometrist-statistics--ui-state :start))
(end (plist-get chronometrist-statistics--ui-state :end)))
(let* ((arg (if (and arg (numberp arg))
(abs arg)
1))
(start-unix (->> (plist-get chronometrist-statistics--ui-state :start)
(chronometrist-iso-date->timestamp)
(parse-iso8601-time-string)))
(end-unix (->> (plist-get chronometrist-statistics--ui-state :end)
(chronometrist-iso-date->timestamp)
(parse-iso8601-time-string))))
(case (plist-get chronometrist-statistics--ui-state :mode)
('week
(let* ((new-start (chronometrist-date-op start #'- (* 7 arg)))
(new-end (chronometrist-date-op new-start #'+ 6)))
(plist-put chronometrist-statistics--ui-state :start new-start)
(plist-put chronometrist-statistics--ui-state :end new-end))))
(let* ((new-start (time-subtract start-unix
(* 7 chronometrist-seconds-in-day arg)))
(new-end (time-add new-start
(* 6 chronometrist-seconds-in-day))))
(plist-put chronometrist-statistics--ui-state
:start
(chronometrist-date new-start))
(plist-put chronometrist-statistics--ui-state
:end
(chronometrist-date new-end)))))
(setq chronometrist-statistics--point (point))
(kill-buffer)
(chronometrist-statistics t)))
@ -327,14 +339,24 @@ If ARG is a numeric argument, go forward that many times."
(let* ((arg (if (and arg (numberp arg))
(abs arg)
1))
(start (plist-get chronometrist-statistics--ui-state :start))
(end (plist-get chronometrist-statistics--ui-state :end)))
(start-unix (->> (plist-get chronometrist-statistics--ui-state :start)
(chronometrist-iso-date->timestamp)
(parse-iso8601-time-string)))
(end-unix (->> (plist-get chronometrist-statistics--ui-state :end)
(chronometrist-iso-date->timestamp)
(parse-iso8601-time-string))))
(case (plist-get chronometrist-statistics--ui-state :mode)
('week
(let* ((new-start (chronometrist-date-op start #'+ (* 7 arg)))
(new-end (chronometrist-date-op new-start #'+ 6)))
(plist-put chronometrist-statistics--ui-state :start new-start)
(plist-put chronometrist-statistics--ui-state :end new-end))))
(let* ((new-start (time-add start-unix
(* 7 chronometrist-seconds-in-day arg)))
(new-end (time-add new-start
(* 6 chronometrist-seconds-in-day))))
(plist-put chronometrist-statistics--ui-state
:start
(chronometrist-date new-start))
(plist-put chronometrist-statistics--ui-state
:end
(chronometrist-date new-end)))))
(setq chronometrist-statistics--point (point))
(kill-buffer)
(chronometrist-statistics t)))

View File

@ -10,6 +10,8 @@
;;; Code:
(defconst chronometrist-seconds-in-day (* 60 60 24))
(defun chronometrist-date (&optional time)
"Return date for TIME or today, in the form \"YYYY-MM-DD\"."
(s-left 10 (chronometrist-format-time-iso8601 time)))