remove weird dependecy on local repository in commands
This commit is contained in:
parent
33f0b43cdc
commit
c035bf5cab
|
@ -2,11 +2,9 @@ package command
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
"git.ewintr.nl/gte/internal/configuration"
|
"git.ewintr.nl/gte/internal/configuration"
|
||||||
"git.ewintr.nl/gte/internal/storage"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -67,22 +65,3 @@ func parseTaskCommand(id int, tArgs []string, conf *configuration.Configuration)
|
||||||
return NewShow(id, conf)
|
return NewShow(id, conf)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func findId(id int, local storage.LocalRepository) (string, error) {
|
|
||||||
localIds, err := local.LocalIds()
|
|
||||||
if err != nil {
|
|
||||||
return "", fmt.Errorf("%w: %v", ErrCouldNotFindTask, err)
|
|
||||||
}
|
|
||||||
var tId string
|
|
||||||
for remoteId, localId := range localIds {
|
|
||||||
if localId == id {
|
|
||||||
tId = remoteId
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if tId == "" {
|
|
||||||
return "", ErrCouldNotFindTask
|
|
||||||
}
|
|
||||||
|
|
||||||
return tId, nil
|
|
||||||
}
|
|
||||||
|
|
|
@ -23,12 +23,12 @@ func NewDone(localId int, conf *configuration.Configuration) (*Done, error) {
|
||||||
|
|
||||||
disp := storage.NewDispatcher(msend.NewSSLSMTP(conf.SMTP()))
|
disp := storage.NewDispatcher(msend.NewSSLSMTP(conf.SMTP()))
|
||||||
fields := process.UpdateFields{"done": "true"}
|
fields := process.UpdateFields{"done": "true"}
|
||||||
tId, err := findId(localId, local)
|
localTask, err := local.FindByLocalId(localId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return &Done{}, err
|
return &Done{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
updater := process.NewUpdate(local, disp, tId, fields)
|
updater := process.NewUpdate(local, disp, localTask.Id, fields)
|
||||||
|
|
||||||
return &Done{
|
return &Done{
|
||||||
doner: updater,
|
doner: updater,
|
||||||
|
|
|
@ -11,7 +11,6 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
type Folder struct {
|
type Folder struct {
|
||||||
local storage.LocalRepository
|
|
||||||
lister *process.List
|
lister *process.List
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,7 +42,6 @@ func NewFolder(conf *configuration.Configuration, cmdArgs []string) (*Folder, er
|
||||||
lister := process.NewList(local, reqs)
|
lister := process.NewList(local, reqs)
|
||||||
|
|
||||||
return &Folder{
|
return &Folder{
|
||||||
local: local,
|
|
||||||
lister: lister,
|
lister: lister,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
@ -58,5 +56,5 @@ func (f *Folder) Do() string {
|
||||||
return "no tasks here\n"
|
return "no tasks here\n"
|
||||||
}
|
}
|
||||||
|
|
||||||
return format.FormatTaskTable(f.local, res.Tasks)
|
return format.FormatTaskTable(res.Tasks)
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,6 @@ var (
|
||||||
|
|
||||||
// List lists all the tasks in a project or a folder
|
// List lists all the tasks in a project or a folder
|
||||||
type List struct {
|
type List struct {
|
||||||
local storage.LocalRepository
|
|
||||||
lister *process.List
|
lister *process.List
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,7 +38,6 @@ func NewList(conf *configuration.Configuration, cmdArgs []string) (*List, error)
|
||||||
lister := process.NewList(local, reqs)
|
lister := process.NewList(local, reqs)
|
||||||
|
|
||||||
return &List{
|
return &List{
|
||||||
local: local,
|
|
||||||
lister: lister,
|
lister: lister,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
@ -50,11 +48,7 @@ func (l *List) Do() string {
|
||||||
return format.FormatError(err)
|
return format.FormatError(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(res.Tasks) == 0 {
|
return format.FormatTaskTable(res.Tasks)
|
||||||
return "no tasks there\n"
|
|
||||||
}
|
|
||||||
|
|
||||||
return format.FormatTaskTable(l.local, res.Tasks)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseReqs(kind, item string) (process.ListReqs, error) {
|
func parseReqs(kind, item string) (process.ListReqs, error) {
|
||||||
|
|
|
@ -10,7 +10,6 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
type Project struct {
|
type Project struct {
|
||||||
local storage.LocalRepository
|
|
||||||
lister *process.List
|
lister *process.List
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,7 +29,6 @@ func NewProject(conf *configuration.Configuration, cmdArgs []string) (*Project,
|
||||||
lister := process.NewList(local, reqs)
|
lister := process.NewList(local, reqs)
|
||||||
|
|
||||||
return &Project{
|
return &Project{
|
||||||
local: local,
|
|
||||||
lister: lister,
|
lister: lister,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
@ -45,5 +43,5 @@ func (p *Project) Do() string {
|
||||||
return "no tasks here\n"
|
return "no tasks here\n"
|
||||||
}
|
}
|
||||||
|
|
||||||
return format.FormatTaskTable(p.local, res.Tasks)
|
return format.FormatTaskTable(res.Tasks)
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,5 +31,5 @@ func (s *Show) Do() string {
|
||||||
return format.FormatError(err)
|
return format.FormatError(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return format.FormatTask(s.id, t)
|
return format.FormatTask(t)
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,8 +10,7 @@ import (
|
||||||
|
|
||||||
// Today lists all task that are due today or past their due date
|
// Today lists all task that are due today or past their due date
|
||||||
type Today struct {
|
type Today struct {
|
||||||
local storage.LocalRepository
|
lister *process.List
|
||||||
todayer *process.List
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Today) Cmd() string { return "today" }
|
func (t *Today) Cmd() string { return "today" }
|
||||||
|
@ -25,22 +24,18 @@ func NewToday(conf *configuration.Configuration) (*Today, error) {
|
||||||
Due: task.Today,
|
Due: task.Today,
|
||||||
IncludeBefore: true,
|
IncludeBefore: true,
|
||||||
}
|
}
|
||||||
todayer := process.NewList(local, reqs)
|
lister := process.NewList(local, reqs)
|
||||||
|
|
||||||
return &Today{
|
return &Today{
|
||||||
local: local,
|
lister: lister,
|
||||||
todayer: todayer,
|
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Today) Do() string {
|
func (t *Today) Do() string {
|
||||||
res, err := t.todayer.Process()
|
res, err := t.lister.Process()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return format.FormatError(err)
|
return format.FormatError(err)
|
||||||
}
|
}
|
||||||
if len(res.Tasks) == 0 {
|
|
||||||
return "nothing left\n"
|
|
||||||
}
|
|
||||||
|
|
||||||
return format.FormatTaskTable(t.local, res.Tasks)
|
return format.FormatTaskTable(res.Tasks)
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,8 +10,7 @@ import (
|
||||||
|
|
||||||
// Tomorrow lists all tasks that are due tomorrow
|
// Tomorrow lists all tasks that are due tomorrow
|
||||||
type Tomorrow struct {
|
type Tomorrow struct {
|
||||||
local storage.LocalRepository
|
lister *process.List
|
||||||
tomorrower *process.List
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Tomorrow) Cmd() string { return "tomorrow" }
|
func (t *Tomorrow) Cmd() string { return "tomorrow" }
|
||||||
|
@ -25,16 +24,15 @@ func NewTomorrow(conf *configuration.Configuration) (*Tomorrow, error) {
|
||||||
reqs := process.ListReqs{
|
reqs := process.ListReqs{
|
||||||
Due: task.Today.Add(1),
|
Due: task.Today.Add(1),
|
||||||
}
|
}
|
||||||
tomorrower := process.NewList(local, reqs)
|
lister := process.NewList(local, reqs)
|
||||||
|
|
||||||
return &Tomorrow{
|
return &Tomorrow{
|
||||||
local: local,
|
lister: lister,
|
||||||
tomorrower: tomorrower,
|
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Tomorrow) Do() string {
|
func (t *Tomorrow) Do() string {
|
||||||
res, err := t.tomorrower.Process()
|
res, err := t.lister.Process()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return format.FormatError(err)
|
return format.FormatError(err)
|
||||||
}
|
}
|
||||||
|
@ -43,5 +41,5 @@ func (t *Tomorrow) Do() string {
|
||||||
return "nothing to do tomorrow\n"
|
return "nothing to do tomorrow\n"
|
||||||
}
|
}
|
||||||
|
|
||||||
return format.FormatTaskTable(t.local, res.Tasks)
|
return format.FormatTaskTable(res.Tasks)
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,12 +34,12 @@ func NewUpdate(localId int, conf *configuration.Configuration, cmdArgs []string)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return &Update{}, err
|
return &Update{}, err
|
||||||
}
|
}
|
||||||
tId, err := findId(localId, local)
|
localTask, err := local.FindByLocalId(localId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return &Update{}, err
|
return &Update{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
updater := process.NewUpdate(local, disp, tId, fields)
|
updater := process.NewUpdate(local, disp, localTask.Id, fields)
|
||||||
|
|
||||||
return &Update{
|
return &Update{
|
||||||
updater: updater,
|
updater: updater,
|
||||||
|
|
|
@ -3,7 +3,6 @@ package format
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"git.ewintr.nl/gte/internal/storage"
|
|
||||||
"git.ewintr.nl/gte/internal/task"
|
"git.ewintr.nl/gte/internal/task"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -11,25 +10,20 @@ func FormatError(err error) string {
|
||||||
return fmt.Sprintf("could not perform command.\n\nerror: %s\n", err.Error())
|
return fmt.Sprintf("could not perform command.\n\nerror: %s\n", err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
func FormatTaskTable(local storage.LocalRepository, tasks []*task.LocalTask) string {
|
func FormatTaskTable(tasks []*task.LocalTask) string {
|
||||||
if len(tasks) == 0 {
|
if len(tasks) == 0 {
|
||||||
return "no tasks to display\n"
|
return "no tasks to display\n"
|
||||||
}
|
}
|
||||||
|
|
||||||
localIds, err := local.LocalIds()
|
|
||||||
if err != nil {
|
|
||||||
return FormatError(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
var output string
|
var output string
|
||||||
for _, t := range tasks {
|
for _, t := range tasks {
|
||||||
output += fmt.Sprintf("%d\t%s\t%s\n", localIds[t.Id], t.Due.String(), t.Action)
|
output += fmt.Sprintf("%d\t%s\t%s\n", t.LocalId, t.Due.String(), t.Action)
|
||||||
}
|
}
|
||||||
|
|
||||||
return output
|
return output
|
||||||
}
|
}
|
||||||
|
|
||||||
func FormatTask(id int, t *task.LocalTask) string {
|
func FormatTask(t *task.LocalTask) string {
|
||||||
output := fmt.Sprintf(`folder: %s
|
output := fmt.Sprintf(`folder: %s
|
||||||
action: %s
|
action: %s
|
||||||
project: %s
|
project: %s
|
||||||
|
|
|
@ -19,7 +19,6 @@ type LocalRepository interface {
|
||||||
FindAllInProject(project string) ([]*task.LocalTask, error)
|
FindAllInProject(project string) ([]*task.LocalTask, error)
|
||||||
FindById(id string) (*task.LocalTask, error)
|
FindById(id string) (*task.LocalTask, error)
|
||||||
FindByLocalId(id int) (*task.LocalTask, error)
|
FindByLocalId(id int) (*task.LocalTask, error)
|
||||||
LocalIds() (map[string]int, error)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func NextLocalId(used []int) int {
|
func NextLocalId(used []int) int {
|
||||||
|
|
|
@ -101,7 +101,3 @@ func (m *Memory) FindByLocalId(localId int) (*task.LocalTask, error) {
|
||||||
|
|
||||||
return &task.LocalTask{}, ErrTaskNotFound
|
return &task.LocalTask{}, ErrTaskNotFound
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Memory) LocalIds() (map[string]int, error) {
|
|
||||||
return m.localIds, nil
|
|
||||||
}
|
|
||||||
|
|
|
@ -97,17 +97,4 @@ func TestMemory(t *testing.T) {
|
||||||
test.OK(t, err)
|
test.OK(t, err)
|
||||||
test.Equals(t, localTask2, act)
|
test.Equals(t, localTask2, act)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("localids", func(t *testing.T) {
|
|
||||||
mem := storage.NewMemory()
|
|
||||||
test.OK(t, mem.SetTasks(tasks))
|
|
||||||
act, err := mem.LocalIds()
|
|
||||||
test.OK(t, err)
|
|
||||||
exp := map[string]int{
|
|
||||||
"id-1": 1,
|
|
||||||
"id-2": 2,
|
|
||||||
"id-3": 3,
|
|
||||||
}
|
|
||||||
test.Equals(t, exp, act)
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -219,26 +219,6 @@ func (s *Sqlite) FindByLocalId(localId int) (*task.LocalTask, error) {
|
||||||
return t, nil
|
return t, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Sqlite) LocalIds() (map[string]int, error) {
|
|
||||||
rows, err := s.db.Query(`SELECT id, local_id FROM local_task`)
|
|
||||||
if err != nil {
|
|
||||||
return map[string]int{}, fmt.Errorf("%w: %v", ErrSqliteFailure, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
idMap := map[string]int{}
|
|
||||||
defer rows.Close()
|
|
||||||
for rows.Next() {
|
|
||||||
var id string
|
|
||||||
var local_id int
|
|
||||||
if err := rows.Scan(&id, &local_id); err != nil {
|
|
||||||
return map[string]int{}, fmt.Errorf("%w: %v", ErrSqliteFailure, err)
|
|
||||||
}
|
|
||||||
idMap[id] = local_id
|
|
||||||
}
|
|
||||||
|
|
||||||
return idMap, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func tasksFromRows(rows *sql.Rows) ([]*task.LocalTask, error) {
|
func tasksFromRows(rows *sql.Rows) ([]*task.LocalTask, error) {
|
||||||
tasks := []*task.LocalTask{}
|
tasks := []*task.LocalTask{}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue