Fix new project/tags

This commit is contained in:
Martin
2024-05-30 10:15:57 +02:00
parent 3c50c6ffd8
commit 035d09900e
5 changed files with 46 additions and 6 deletions

View File

@ -9,6 +9,7 @@ type Keymap struct {
Quit key.Binding Quit key.Binding
Back key.Binding Back key.Binding
Ok key.Binding Ok key.Binding
Delete key.Binding
Input key.Binding Input key.Binding
Add key.Binding Add key.Binding
Edit key.Binding Edit key.Binding
@ -45,6 +46,11 @@ func NewKeymap() *Keymap {
key.WithHelp("enter", "Ok"), key.WithHelp("enter", "Ok"),
), ),
Delete: key.NewBinding(
key.WithKeys("d"),
key.WithHelp("d", "Delete"),
),
Input: key.NewBinding( Input: key.NewBinding(
key.WithKeys(":"), key.WithKeys(":"),
key.WithHelp(":", "Input"), key.WithHelp(":", "Input"),

View File

@ -18,6 +18,7 @@ type ReportPage struct {
activeContext *taskwarrior.Context activeContext *taskwarrior.Context
activeProject string activeProject string
selectedTask *taskwarrior.Task selectedTask *taskwarrior.Task
taskCursor int
tasks taskwarrior.Tasks 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): case key.Matches(msg, p.common.Keymap.Ok):
p.common.TW.SetTaskDone(p.selectedTask) p.common.TW.SetTaskDone(p.selectedTask)
return p, p.getTasks() 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): case key.Matches(msg, p.common.Keymap.SetProject):
p.subpage = NewProjectPickerPage(p.common, p.activeProject) p.subpage = NewProjectPickerPage(p.common, p.activeProject)
p.subpage.Init() p.subpage.Init()
@ -167,7 +171,7 @@ func (p *ReportPage) populateTaskTable(tasks taskwarrior.Tasks) {
return return
} }
selected := 0 selected := p.taskTable.Cursor()
if p.selectedTask != nil { if p.selectedTask != nil {
for i, task := range tasks { 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.taskTable = table.New(
p.common, p.common,

View File

@ -3,6 +3,8 @@ package pages
import ( import (
"fmt" "fmt"
"log/slog" "log/slog"
"slices"
"strings"
"tasksquire/common" "tasksquire/common"
"tasksquire/taskwarrior" "tasksquire/taskwarrior"
@ -50,6 +52,8 @@ func NewTaskEditorPage(com *common.Common, task taskwarrior.Task) *TaskEditorPag
priorityOptions := append([]string{"(none)"}, p.common.TW.GetPriorities()...) priorityOptions := append([]string{"(none)"}, p.common.TW.GetPriorities()...)
projectOptions := append([]string{"(none)"}, p.common.TW.GetProjects()...) projectOptions := append([]string{"(none)"}, p.common.TW.GetProjects()...)
tagOptions := p.common.TW.GetTags() 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{ p.areas = map[area]tea.Model{
areaTask: NewTaskEdit(p.common, &p.task.Description, &p.task.Priority, &p.task.Project, priorityOptions, projectOptions), 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.areaPicker = NewAreaPicker(com, []string{"Task", "Tags", "Dates"})
p.columnCursor = 1
if p.task.Uuid == "" { if p.task.Uuid == "" {
// p.mode = modeInsert // p.mode = modeInsert
p.mode = modeNormal p.mode = modeInsert
} else { } else {
p.mode = modeNormal 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): case key.Matches(msg, p.common.Keymap.Back):
return p, changeMode(modeNormal) return p, changeMode(modeNormal)
case key.Matches(msg, p.common.Keymap.Ok): 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)" { if p.task.Priority == "(none)" {
p.task.Priority = "" 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 != "" { // if p.additionalProject != "" {
// p.task.Project = p.additionalProject // p.task.Project = p.additionalProject
// } // }

View File

@ -14,6 +14,7 @@ var (
defaultConfig = map[string]string{ defaultConfig = map[string]string{
"uda.tasksquire.report.default": "next", "uda.tasksquire.report.default": "next",
"uda.tasksquire.tag.default": "next", "uda.tasksquire.tag.default": "next",
"uda.tasksquire.tags.default": "low_energy,customer,delegate,code,communication,research",
} }
) )

View File

@ -93,6 +93,7 @@ type TaskWarrior interface {
AddTask(task *Task) error AddTask(task *Task) error
ImportTask(task *Task) ImportTask(task *Task)
SetTaskDone(task *Task) SetTaskDone(task *Task)
DeleteTask(task *Task)
StartTask(task *Task) StartTask(task *Task)
StopTask(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() { func (ts *TaskSquire) Undo() {
ts.mutex.Lock() ts.mutex.Lock()
defer ts.mutex.Unlock() defer ts.mutex.Unlock()