branch: elpa/gnosis commit a7e613d4da79113ac4ccefbe0c89f88b48d3e961 Author: Thanos Apollo <pub...@thanosapollo.org> Commit: Thanos Apollo <pub...@thanosapollo.org>
Add gnosis-calculate-average-daily-reviews. + Function that calculates average review for DAYS number. --- gnosis.el | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/gnosis.el b/gnosis.el index 8e0c82d700..ee435f03cc 100644 --- a/gnosis.el +++ b/gnosis.el @@ -298,6 +298,25 @@ When VERIFICATION is non-nil, skip `y-or-n-p' prompt." (emacsql-with-transaction gnosis-db (gnosis--delete 'decks `(= id ,id))) (message "Deleted deck `%s'" deck-name)))) +(defun gnosis-calculate-average-daily-reviews (&optional days) + "Calculate average reviews over the last DAYS days." + (let* ((days (or days gnosis-default-average-review-period)) + (review-counts '()) + (collect-reviews + (lambda (d) + (let ((day-reviews (gnosis-select 'reviewed-total 'activity-log + `(and (> reviewed-total 0) + (= date ',(gnosis-algorithm-date (- d)))) + t))) + (setq review-counts (append review-counts day-reviews)))))) + ;; Collect reviews for each day + (dotimes (d days) + (funcall collect-reviews d)) + ;; Return average, avoiding division by zero + (if (> (length review-counts) 0) + (/ (apply '+ review-counts) (float (length review-counts))) + 0))) + (defun gnosis-shuffle (seq) "Shuffle SEQ." (cl-loop with len = (length seq)