Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions docs/docs/config/general.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,3 +48,29 @@ default value is:
```toml
script = []
```


## Todo

Configure synchronization with TODO: Comments in a project. Use the `[general.todo]` tag in TOML.

### Enable

can enable/disable todo integration using the `enable` key.

default value is:
```toml
enable = false
```

### Todo Projects

can add project directories using the `[[general.todo.todo_projects]]` key which will be searched for TODO comments.

example value is:
```toml
[[general.todo.todo_projects]]
name = "Toney"
path = "/home/nucleofusion/Programming/projects/toney"
exclude_dir = []
```
22 changes: 17 additions & 5 deletions internal/config/configModels.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,21 @@ type Config struct {
}

type GeneralConfig struct {
Editor []string `mapstructure:"editor"`
NotesDir string `mapstructure:"notes_dir"`
StartScript []string `mapstructure:"start_script"`
StopScript []string `mapstructure:"stop_script"`
Script []string `mapstructure:"script"`
Editor []string `mapstructure:"editor"`
NotesDir string `mapstructure:"notes_dir"`
StartScript []string `mapstructure:"start_script"`
StopScript []string `mapstructure:"stop_script"`
Script []string `mapstructure:"script"`
Todo TodoConfig `mapstructure:"todo"`
}

type TodoConfig struct { // TODO: Include in Docs
Enable bool `mapstructure:"enable"`
Projects []TodoProject `mapstructure:"todo_projects"`
}

type TodoProject struct {
Name string `mapstructure:"name"`
Path string `mapstructure:"path"`
Exclude []string `mapstructure:"exclude"`
}
4 changes: 4 additions & 0 deletions internal/config/default.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ func DefaultConfig() Config {
StartScript: []string{},
StopScript: []string{},
Script: []string{},
Todo: TodoConfig{
Enable: false,
Projects: []TodoProject{},
},
},
Keybinds: KeybindsConfig{
Global: GlobalKeybinds{
Expand Down
1 change: 1 addition & 0 deletions internal/enums/task.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,5 @@ const (
Unique TaskTabs = "Unique"
Recurring TaskTabs = "Recurring"
Github TaskTabs = "Github"
Todo TaskTabs = "Todo"
)
1 change: 1 addition & 0 deletions internal/enums/tasktype.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@ type TaskType int
const (
RecurringTask = iota
UniqueTask
TodoTask
)
51 changes: 41 additions & 10 deletions internal/models/daily/daily.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package daily

import (
"fmt"
"log"

"github.com/SourcewareLab/Toney/internal/colors"
"github.com/SourcewareLab/Toney/internal/config"
Expand All @@ -10,6 +11,7 @@ import (
"github.com/SourcewareLab/Toney/internal/messages"
taskpopup "github.com/SourcewareLab/Toney/internal/models/taskPopup"
"github.com/SourcewareLab/Toney/internal/styles"
"github.com/SourcewareLab/Toney/internal/utils"
"github.com/charmbracelet/bubbles/help"
"github.com/charmbracelet/bubbles/key"
"github.com/charmbracelet/bubbles/list"
Expand All @@ -31,15 +33,24 @@ type Daily struct {
}

func NewDaily(w int, h int) *Daily {
tasks := GetItems()
tasks, err := GetItems()
if err != nil {
log.Fatal("Error Querying Tasks: ", err)
return nil
}

lst := list.New(tasks.ItemsAsList(), TaskDelegate{}, w/2, 2*h/3)
lst := list.New(tasks.ItemsAsList(), TaskDelegate{}, w*2/3, 2*h/3)
km := list.DefaultKeyMap()
km.Quit.Unbind()
lst.KeyMap = km
lst.SetShowHelp(false)
lst.SetShowTitle(false)

tabs := []enums.TaskTabs{enums.All, enums.Unique, enums.Recurring, enums.Github}
if config.AppConfig.General.Todo.Enable {
tabs = append(tabs, enums.Todo)
}

return &Daily{
Width: w,
Height: h,
Expand All @@ -48,7 +59,7 @@ func NewDaily(w int, h int) *Daily {
Keymap: keymap.NewDailyTaskMap(),
Help: help.New(),
CurrentTab: 0,
Tabs: []enums.TaskTabs{enums.All, enums.Unique, enums.Recurring, enums.Github},
Tabs: tabs,
}
}

Expand All @@ -72,7 +83,11 @@ func (m *Daily) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
m.EditTask(msg)
}

m.Refresh()
err := m.Refresh()
if err != nil {
return m, utils.ReturnError("Tasks Page", "Error Parsing Tasks", err)
}

m.ShowPopup = false
return m, nil
case tea.KeyMsg:
Expand Down Expand Up @@ -126,15 +141,23 @@ func (m *Daily) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
m.CurrentTab = m.CurrentTab % len(m.Tabs)
}

m.Refresh()
err := m.Refresh()
if err != nil {
return m, utils.ReturnError("Tasks Page", "Error Parsing Tasks", err)
}

return m, nil
case key.Matches(msg, m.Keymap.TabLeft):
m.CurrentTab--
if m.CurrentTab < 0 {
m.CurrentTab = len(m.Tabs) + m.CurrentTab
}

m.Refresh()
err := m.Refresh()
if err != nil {
return m, utils.ReturnError("Tasks Page", "Error Parsing Tasks", err)
}

return m, nil
}
}
Expand Down Expand Up @@ -183,15 +206,22 @@ func (m *Daily) GetTabs() string {
return lipgloss.PlaceHorizontal(m.Width, lipgloss.Center, text)
}

func (m *Daily) Refresh() {
m.Tasks = GetItems()
func (m *Daily) Refresh() error {
tasks, err := GetItems()
if err != nil {
return err
}

m.Tasks = tasks

curr := m.Tasks.ItemsAsList()
switch m.Tabs[m.CurrentTab] {
case enums.Unique:
curr = TaskToItems(m.Tasks.Unique)
curr = TaskToItems(m.Tasks.Unique, enums.RecurringTask)
case enums.Recurring:
curr = TaskToItems(m.Tasks.Recurring)
curr = TaskToItems(m.Tasks.Recurring, enums.UniqueTask)
case enums.Todo:
curr = TodoTaskToItems(m.Tasks.Todo)
// TODO: Github
}

Expand All @@ -203,4 +233,5 @@ func (m *Daily) Refresh() {
lst.SetShowTitle(false)

m.List = lst
return nil
}
81 changes: 41 additions & 40 deletions internal/models/daily/handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,16 +29,19 @@ func (m Daily) DeleteTask(msg messages.TaskPopupMessage) {

item := m.List.SelectedItem()

task, ok := item.(Task)
if !ok { // Making sure that item is of type Task
return
}

switch task.TaskType {
case enums.RecurringTask:
m.Tasks.Recurring = slices.Delete(m.Tasks.Recurring, task.Index, task.Index+1)
case enums.UniqueTask:
m.Tasks.Unique = slices.Delete(m.Tasks.Unique, task.Index, task.Index+1)
switch task := item.(type) {
case Task:
switch task.TaskType {
case enums.RecurringTask:
m.Tasks.Recurring = slices.Delete(m.Tasks.Recurring, task.Index, task.Index+1)
case enums.UniqueTask:
m.Tasks.Unique = slices.Delete(m.Tasks.Unique, task.Index, task.Index+1)
}
case TodoTask:
m.Tasks.Todo = slices.Delete(m.Tasks.Todo, task.Index, task.Index+1)
for k := range m.Tasks.Todo {
m.Tasks.Todo[k].Index = k
}
}

WriteItems(m.Tasks)
Expand All @@ -47,44 +50,42 @@ func (m Daily) DeleteTask(msg messages.TaskPopupMessage) {
func (m Daily) StatusChangeTask(msg messages.TaskPopupMessage) {
item := m.List.SelectedItem()

task, ok := item.(Task)
if !ok { // Making sure that item is of type Task
return
}

task.Status = msg.Status

switch task.TaskType {
case enums.RecurringTask:
m.Tasks.Recurring[task.Index] = task
case enums.UniqueTask:
m.Tasks.Unique[task.Index] = task
switch task := item.(type) {
case Task:
switch task.TaskType {
case enums.RecurringTask:
m.Tasks.Recurring[task.Index].Status = msg.Status
case enums.UniqueTask:
m.Tasks.Unique[task.Index].Status = msg.Status
}
case TodoTask:
m.Tasks.Todo[task.Index].Status = msg.Status
}

WriteItems(m.Tasks)
}

func (m Daily) EditTask(msg messages.TaskPopupMessage) {
task := Task{
TaskTitle: msg.Title,
TaskDesc: msg.Desc,
Status: msg.Status,
}

item := m.List.SelectedItem()

oldTask, ok := item.(Task)
if !ok { // Making sure that item is of type Task
return
}

task.Status = oldTask.Status

switch oldTask.TaskType {
case enums.RecurringTask:
m.Tasks.Recurring[oldTask.Index] = task
case enums.UniqueTask:
m.Tasks.Unique[oldTask.Index] = task
switch task := item.(type) {
case Task:
switch task.TaskType {
case enums.RecurringTask:
v := &m.Tasks.Recurring[task.Index]
v.Status = msg.Status
v.TaskTitle = msg.Title
v.TaskDesc = msg.Desc
case enums.UniqueTask:
v := &m.Tasks.Unique[task.Index]
v.Status = msg.Status
v.TaskTitle = msg.Title
v.TaskDesc = msg.Desc
}
case TodoTask: // Cant Edit Title
v := &m.Tasks.Todo[task.Index]
v.Status = msg.Status
v.Text = msg.Desc
}

WriteItems(m.Tasks)
Expand Down
Loading