summaryrefslogtreecommitdiff
path: root/internal/task/stats.go
diff options
context:
space:
mode:
authorPaul Bütow <1224732+snonux@users.noreply.github.com>2025-06-20 09:40:56 +0300
committerPaul Bütow <1224732+snonux@users.noreply.github.com>2025-06-20 09:40:56 +0300
commit13f7678a9fd092ac20eec10e4d2196f5bd1ae107 (patch)
tree512a6b9f8017f8cf0cc24158acc154034c121225 /internal/task/stats.go
parent13ec0a6ec615b4c7e7ddc461a7a6a623109826f9 (diff)
Add cell navigation, editor hotkey, stats and filter
Diffstat (limited to 'internal/task/stats.go')
-rw-r--r--internal/task/stats.go40
1 files changed, 40 insertions, 0 deletions
diff --git a/internal/task/stats.go b/internal/task/stats.go
new file mode 100644
index 0000000..c516249
--- /dev/null
+++ b/internal/task/stats.go
@@ -0,0 +1,40 @@
+package task
+
+import "time"
+
+// TotalTasks returns the number of tasks provided.
+func TotalTasks(tasks []Task) int {
+ return len(tasks)
+}
+
+// InProgressTasks returns the number of tasks that have been started and are not completed.
+func InProgressTasks(tasks []Task) int {
+ count := 0
+ for _, t := range tasks {
+ if t.Status == "completed" {
+ continue
+ }
+ if t.Start != "" {
+ count++
+ }
+ }
+ return count
+}
+
+// DueTasks returns the number of tasks with a due date that is not in the future.
+func DueTasks(tasks []Task, now time.Time) int {
+ count := 0
+ for _, t := range tasks {
+ if t.Status == "completed" || t.Due == "" {
+ continue
+ }
+ ts, err := time.Parse("20060102T150405Z", t.Due)
+ if err != nil {
+ continue
+ }
+ if !ts.After(now) {
+ count++
+ }
+ }
+ return count
+}