Files
zeit/z/task.go
T
2025-02-14 22:44:33 +01:00

81 lines
1.8 KiB
Go

package z
import (
"fmt"
"os"
)
type Task struct {
Name string `json:"name,omitempty"`
GitRepository string `json:"gitRepository,omitempty"`
}
func listEntries() []Entry {
user := GetCurrentUser()
entries, err := database.ListEntries(user)
if err != nil {
fmt.Printf("%s %+v\n", CharError, err)
os.Exit(1)
}
sinceTime, untilTime := ParseSinceUntil(since, until, listRange)
var filteredEntries []Entry
filteredEntries, err = GetFilteredEntries(entries, project, task, sinceTime, untilTime)
if err != nil {
fmt.Printf("%s %+v\n", CharError, err)
os.Exit(1)
}
if listOnlyProjectsAndTasks || listOnlyTasks {
printProjects(filteredEntries)
return nil
}
return filteredEntries
}
func printProjects(entries []Entry) {
projectsAndTasks, _ := listProjectsAndTasks(entries)
for project := range projectsAndTasks {
if listOnlyProjectsAndTasks && !listOnlyTasks {
fmt.Printf("%s %s\n", CharMore, project)
}
for task := range projectsAndTasks[project] {
if listOnlyProjectsAndTasks && !listOnlyTasks {
fmt.Printf("%*s└── ", 1, " ")
}
if appendProjectIDToTask {
fmt.Printf("%s [%s]\n", task, project)
} else {
fmt.Printf("%s\n", task)
}
}
}
}
func listProjectsAndTasks(entries []Entry) (map[string]map[string]bool, []string) {
var projectsAndTasks = make(map[string]map[string]bool)
var allTasks []string
for _, filteredEntry := range entries {
taskMap, ok := projectsAndTasks[filteredEntry.Project]
if !ok {
taskMap = make(map[string]bool)
projectsAndTasks[filteredEntry.Project] = taskMap
}
taskMap[filteredEntry.Task] = true
projectsAndTasks[filteredEntry.Project] = taskMap
allTasks = append(allTasks, filteredEntry.Task)
}
return projectsAndTasks, allTasks
}