From 9d36a37246b6ece32b5d2bafba2aa3074bb7a039 Mon Sep 17 00:00:00 2001 From: Erik Winter Date: Fri, 20 Aug 2021 08:18:26 +0200 Subject: [PATCH] folder and project command --- cmd/cli/command/command.go | 6 ++-- cmd/cli/command/folder.go | 62 ++++++++++++++++++++++++++++++++++++++ cmd/cli/command/project.go | 49 ++++++++++++++++++++++++++++++ 3 files changed, 115 insertions(+), 2 deletions(-) create mode 100644 cmd/cli/command/folder.go create mode 100644 cmd/cli/command/project.go diff --git a/cmd/cli/command/command.go b/cmd/cli/command/command.go index c83c35f..c78a048 100644 --- a/cmd/cli/command/command.go +++ b/cmd/cli/command/command.go @@ -37,10 +37,12 @@ func Parse(args []string, conf *configuration.Configuration) (Command, error) { return NewToday(conf) case "tomorrow": return NewTomorrow(conf) + case "project": + return NewProject(conf, cmdArgs) case "projects": return NewProjects(conf) - case "list": - return NewList(conf, cmdArgs) + case "folder": + return NewFolder(conf, cmdArgs) case "add": return NewAdd(conf, cmdArgs) default: diff --git a/cmd/cli/command/folder.go b/cmd/cli/command/folder.go new file mode 100644 index 0000000..55bf0e8 --- /dev/null +++ b/cmd/cli/command/folder.go @@ -0,0 +1,62 @@ +package command + +import ( + "strings" + + "git.ewintr.nl/gte/cmd/cli/format" + "git.ewintr.nl/gte/internal/configuration" + "git.ewintr.nl/gte/internal/process" + "git.ewintr.nl/gte/internal/storage" + "git.ewintr.nl/gte/internal/task" +) + +type Folder struct { + local storage.LocalRepository + lister *process.List +} + +func (f *Folder) Cmd() string { return "folder" } + +func NewFolder(conf *configuration.Configuration, cmdArgs []string) (*Folder, error) { + local, err := storage.NewSqlite(conf.Sqlite()) + if err != nil { + return &Folder{}, err + } + if len(cmdArgs) < 1 { + return &Folder{}, ErrInvalidAmountOfArgs + } + knownFolders := []string{task.FOLDER_NEW, task.FOLDER_PLANNED, task.FOLDER_UNPLANNED} + var folder string + for _, f := range knownFolders { + if strings.ToLower(f) == strings.ToLower(cmdArgs[0]) { + folder = f + break + } + } + if folder == "" { + return &Folder{}, ErrUnknownFolder + } + + reqs := process.ListReqs{ + Folder: folder, + } + lister := process.NewList(local, reqs) + + return &Folder{ + local: local, + lister: lister, + }, nil +} + +func (f *Folder) Do() string { + res, err := f.lister.Process() + if err != nil { + return format.FormatError(err) + } + + if len(res.Tasks) == 0 { + return "no tasks here\n" + } + + return format.FormatTaskTable(f.local, res.Tasks) +} diff --git a/cmd/cli/command/project.go b/cmd/cli/command/project.go new file mode 100644 index 0000000..06bd967 --- /dev/null +++ b/cmd/cli/command/project.go @@ -0,0 +1,49 @@ +package command + +import ( + "strings" + + "git.ewintr.nl/gte/cmd/cli/format" + "git.ewintr.nl/gte/internal/configuration" + "git.ewintr.nl/gte/internal/process" + "git.ewintr.nl/gte/internal/storage" +) + +type Project struct { + local storage.LocalRepository + lister *process.List +} + +func (p *Project) Cmd() string { return "project" } + +func NewProject(conf *configuration.Configuration, cmdArgs []string) (*Project, error) { + local, err := storage.NewSqlite(conf.Sqlite()) + if err != nil { + return &Project{}, err + } + if len(cmdArgs) < 1 { + return &Project{}, ErrInvalidAmountOfArgs + } + reqs := process.ListReqs{ + Project: strings.ToLower(cmdArgs[0]), + } + lister := process.NewList(local, reqs) + + return &Project{ + local: local, + lister: lister, + }, nil +} + +func (p *Project) Do() string { + res, err := p.lister.Process() + if err != nil { + return format.FormatError(err) + } + + if len(res.Tasks) == 0 { + return "no tasks here\n" + } + + return format.FormatTaskTable(p.local, res.Tasks) +}