folder and project command

This commit is contained in:
Erik Winter 2021-08-20 08:18:26 +02:00
parent 1448ea627b
commit 9d36a37246
3 changed files with 115 additions and 2 deletions

View File

@ -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:

62
cmd/cli/command/folder.go Normal file
View File

@ -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)
}

View File

@ -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)
}