From 035d09900ec51a03cfd8c6049eddb197b32074e9 Mon Sep 17 00:00:00 2001 From: Martin Date: Thu, 30 May 2024 10:15:57 +0200 Subject: [PATCH] Fix new project/tags --- common/keymap.go | 6 ++++++ pages/report.go | 9 ++++++++- pages/taskEditor.go | 23 ++++++++++++++++++----- taskwarrior/config.go | 1 + taskwarrior/taskwarrior.go | 13 +++++++++++++ 5 files changed, 46 insertions(+), 6 deletions(-) diff --git a/common/keymap.go b/common/keymap.go index 3ff5b42..1356c9d 100644 --- a/common/keymap.go +++ b/common/keymap.go @@ -9,6 +9,7 @@ type Keymap struct { Quit key.Binding Back key.Binding Ok key.Binding + Delete key.Binding Input key.Binding Add key.Binding Edit key.Binding @@ -45,6 +46,11 @@ func NewKeymap() *Keymap { key.WithHelp("enter", "Ok"), ), + Delete: key.NewBinding( + key.WithKeys("d"), + key.WithHelp("d", "Delete"), + ), + Input: key.NewBinding( key.WithKeys(":"), key.WithHelp(":", "Input"), diff --git a/pages/report.go b/pages/report.go index 4bab187..b18dfb0 100644 --- a/pages/report.go +++ b/pages/report.go @@ -18,6 +18,7 @@ type ReportPage struct { activeContext *taskwarrior.Context activeProject string selectedTask *taskwarrior.Task + taskCursor int tasks taskwarrior.Tasks @@ -109,6 +110,9 @@ func (p *ReportPage) Update(msg tea.Msg) (tea.Model, tea.Cmd) { case key.Matches(msg, p.common.Keymap.Ok): p.common.TW.SetTaskDone(p.selectedTask) return p, p.getTasks() + case key.Matches(msg, p.common.Keymap.Delete): + p.common.TW.DeleteTask(p.selectedTask) + return p, p.getTasks() case key.Matches(msg, p.common.Keymap.SetProject): p.subpage = NewProjectPickerPage(p.common, p.activeProject) p.subpage.Init() @@ -167,7 +171,7 @@ func (p *ReportPage) populateTaskTable(tasks taskwarrior.Tasks) { return } - selected := 0 + selected := p.taskTable.Cursor() if p.selectedTask != nil { for i, task := range tasks { @@ -176,6 +180,9 @@ func (p *ReportPage) populateTaskTable(tasks taskwarrior.Tasks) { } } } + if selected > len(tasks)-1 { + selected = len(tasks) - 1 + } p.taskTable = table.New( p.common, diff --git a/pages/taskEditor.go b/pages/taskEditor.go index b4d5f14..3406327 100644 --- a/pages/taskEditor.go +++ b/pages/taskEditor.go @@ -3,6 +3,8 @@ package pages import ( "fmt" "log/slog" + "slices" + "strings" "tasksquire/common" "tasksquire/taskwarrior" @@ -50,6 +52,8 @@ func NewTaskEditorPage(com *common.Common, task taskwarrior.Task) *TaskEditorPag priorityOptions := append([]string{"(none)"}, p.common.TW.GetPriorities()...) projectOptions := append([]string{"(none)"}, p.common.TW.GetProjects()...) tagOptions := p.common.TW.GetTags() + tagOptions = append(tagOptions, strings.Split(p.common.TW.GetConfig().Get("uda.tasksquire.tags.default"), ",")...) + slices.Sort(tagOptions) p.areas = map[area]tea.Model{ areaTask: NewTaskEdit(p.common, &p.task.Description, &p.task.Priority, &p.task.Project, priorityOptions, projectOptions), @@ -63,9 +67,10 @@ func NewTaskEditorPage(com *common.Common, task taskwarrior.Task) *TaskEditorPag p.areaPicker = NewAreaPicker(com, []string{"Task", "Tags", "Dates"}) + p.columnCursor = 1 if p.task.Uuid == "" { // p.mode = modeInsert - p.mode = modeNormal + p.mode = modeInsert } else { p.mode = modeNormal } @@ -173,7 +178,9 @@ func (p *TaskEditorPage) Update(msg tea.Msg) (tea.Model, tea.Cmd) { case key.Matches(msg, p.common.Keymap.Back): return p, changeMode(modeNormal) case key.Matches(msg, p.common.Keymap.Ok): - return p, nextField() + area, cmd := p.areas[p.area].Update(msg) + p.areas[p.area] = area + return p, tea.Batch(cmd, nextField()) } } @@ -788,9 +795,15 @@ func (p *TaskEditorPage) updateTasksCmd() tea.Msg { if p.task.Priority == "(none)" { p.task.Priority = "" } - // if p.additionalTags != "" { - // p.task.Tags = append(p.task.Tags, strings.Split(p.additionalTags, " ")...) - // } + + if *p.areas[areaTask].(taskEdit).newProjectName != "" { + p.task.Project = *p.areas[areaTask].(taskEdit).newProjectName + } + + if *p.areas[areaTags].(tagEdit).newTagsValue != "" { + p.task.Tags = append(p.task.Tags, strings.Split(*p.areas[areaTags].(tagEdit).newTagsValue, " ")...) + } + // if p.additionalProject != "" { // p.task.Project = p.additionalProject // } diff --git a/taskwarrior/config.go b/taskwarrior/config.go index 1d134c5..e71718d 100644 --- a/taskwarrior/config.go +++ b/taskwarrior/config.go @@ -14,6 +14,7 @@ var ( defaultConfig = map[string]string{ "uda.tasksquire.report.default": "next", "uda.tasksquire.tag.default": "next", + "uda.tasksquire.tags.default": "low_energy,customer,delegate,code,communication,research", } ) diff --git a/taskwarrior/taskwarrior.go b/taskwarrior/taskwarrior.go index 71d0256..4af37e9 100644 --- a/taskwarrior/taskwarrior.go +++ b/taskwarrior/taskwarrior.go @@ -93,6 +93,7 @@ type TaskWarrior interface { AddTask(task *Task) error ImportTask(task *Task) SetTaskDone(task *Task) + DeleteTask(task *Task) StartTask(task *Task) StopTask(task *Task) @@ -394,6 +395,18 @@ func (ts *TaskSquire) SetTaskDone(task *Task) { } } +func (ts *TaskSquire) DeleteTask(task *Task) { + ts.mutex.Lock() + defer ts.mutex.Unlock() + + cmd := exec.Command(twBinary, append(ts.defaultArgs, []string{task.Uuid, "delete"}...)...) + err := cmd.Run() + if err != nil { + slog.Error("Failed deleting task:", err) + } + +} + func (ts *TaskSquire) Undo() { ts.mutex.Lock() defer ts.mutex.Unlock()