- Creating db file in home dir or DB_FILE env variable - Updated README with usages details - Added GIF screencast
104 lines
2.3 KiB
Go
104 lines
2.3 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/gdamore/tcell"
|
|
"github.com/rivo/tview"
|
|
|
|
"github.com/ajaxray/geek-life/model"
|
|
)
|
|
|
|
var (
|
|
tasks []model.Task
|
|
currentTask *model.Task
|
|
currentTaskIdx int
|
|
)
|
|
|
|
func prepareTaskPane() {
|
|
taskList = tview.NewList().ShowSecondaryText(false)
|
|
taskList.SetDoneFunc(func() {
|
|
app.SetFocus(projectPane)
|
|
})
|
|
|
|
newTask = makeLightTextInput("+[New Task]").
|
|
SetDoneFunc(func(key tcell.Key) {
|
|
switch key {
|
|
case tcell.KeyEnter:
|
|
task, err := taskRepo.Create(*currentProject, newTask.GetText(), "", "", 0)
|
|
if err != nil {
|
|
showMessage("[red::]Could not create Task:" + err.Error())
|
|
}
|
|
|
|
tasks = append(tasks, task)
|
|
addTaskToList(task, len(tasks)-1)
|
|
newTask.SetText("")
|
|
case tcell.KeyEsc:
|
|
app.SetFocus(taskPane)
|
|
}
|
|
|
|
})
|
|
|
|
taskPane = tview.NewFlex().SetDirection(tview.FlexRow).
|
|
AddItem(taskList, 0, 1, true).
|
|
AddItem(newTask, 1, 0, false)
|
|
|
|
taskPane.SetBorder(true).SetTitle("[::u]T[::-]asks")
|
|
}
|
|
|
|
func addTaskToList(task model.Task, i int) *tview.List {
|
|
return taskList.AddItem(makeTaskListingTitle(task), "", 0, func(taskidx int) func() {
|
|
return func() { loadTask(taskidx) }
|
|
}(i))
|
|
}
|
|
|
|
func loadTask(idx int) {
|
|
removeThirdCol()
|
|
currentTaskIdx = idx
|
|
currentTask = &tasks[currentTaskIdx]
|
|
|
|
taskName.SetText(fmt.Sprintf("[%s::b]# %s", getTaskTitleColor(*currentTask), currentTask.Title))
|
|
taskDetailView.Buf = makeBufferFromString(currentTask.Details)
|
|
taskDetailView.SetColorscheme(colorscheme)
|
|
taskDetailView.Start()
|
|
setTaskDate(currentTask.DueDate, false)
|
|
setStatusToggle()
|
|
|
|
contents.AddItem(taskDetailPane, 0, 3, false)
|
|
deactivateEditor()
|
|
}
|
|
|
|
func removeThirdCol() {
|
|
contents.RemoveItem(taskDetailPane)
|
|
contents.RemoveItem(projectDetailPane)
|
|
}
|
|
|
|
func getTaskTitleColor(task model.Task) string {
|
|
colorName := "olive"
|
|
if task.Completed {
|
|
colorName = "lime"
|
|
} else if task.DueDate != 0 && task.DueDate < time.Now().Truncate(24*time.Hour).Unix() {
|
|
colorName = "red"
|
|
}
|
|
|
|
return colorName
|
|
}
|
|
|
|
func makeTaskListingTitle(task model.Task) string {
|
|
checkbox := "[ []"
|
|
if task.Completed {
|
|
checkbox = "[x[]"
|
|
}
|
|
return fmt.Sprintf("[%s]%s %s", getTaskTitleColor(task), checkbox, task.Title)
|
|
}
|
|
|
|
func handleTaskPaneShortcuts(event *tcell.EventKey) *tcell.EventKey {
|
|
switch event.Rune() {
|
|
case 'n':
|
|
app.SetFocus(newTask)
|
|
}
|
|
|
|
return event
|
|
}
|