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
10 changes: 8 additions & 2 deletions cmd/tasks/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,15 +63,21 @@ func CreatCmd() *cobra.Command {
form := huh.NewForm(grps...).WithTheme(styles.HuhTheme())
form.Run()

tasks := daily.GetItems()
tasks, err := daily.GetItems()
if err != nil {
return fmt.Errorf("failed to get tasks: %w", err)
}

tasks = append(tasks, daily.Task{
TaskTitle: opts.Title,
TaskType: opts.Type,
TaskDesc: opts.Description,
Status: opts.Status,
})

daily.WriteItems(tasks)
if err := daily.WriteItems(tasks); err != nil {
return fmt.Errorf("failed to write tasks: %w", err)
}

return nil
},
Expand Down
9 changes: 7 additions & 2 deletions cmd/tasks/delete.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,10 @@ func DeleteCmd() *cobra.Command {
return fmt.Errorf("failed to load config: %v\n\n%s", err, "Try running the `toney init` command and try again.")
}

tasks := daily.GetItems()
tasks, err := daily.GetItems()
if err != nil {
return fmt.Errorf("failed to get tasks: %w", err)
}

options := make([]huh.Option[int], 0)
for _, v := range tasks {
Expand Down Expand Up @@ -58,7 +61,9 @@ func DeleteCmd() *cobra.Command {
fmt.Printf("Deleted Task: `%s`\n", tasks[opts.ID].Title())
tasks = slices.Delete(tasks, opts.ID-1, opts.ID)

daily.WriteItems(tasks)
if err := daily.WriteItems(tasks); err != nil {
return fmt.Errorf("failed to write tasks: %w", err)
}

return nil
},
Expand Down
9 changes: 7 additions & 2 deletions cmd/tasks/edit.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,10 @@ func EditCmd() *cobra.Command {
return fmt.Errorf("failed to load config: %v\n\n%s", err, "Try running the `toney init` command and try again.")
}

tasks := daily.GetItems()
tasks, err := daily.GetItems()
if err != nil {
return fmt.Errorf("failed to get tasks: %w", err)
}

options := make([]huh.Option[int], 0)
for k, v := range tasks {
Expand Down Expand Up @@ -113,7 +116,9 @@ func EditCmd() *cobra.Command {

tasks[opts.ID] = task

daily.WriteItems(tasks)
if err := daily.WriteItems(tasks); err != nil {
return fmt.Errorf("failed to write tasks: %w", err)
}

return nil
},
Expand Down
10 changes: 8 additions & 2 deletions cmd/tasks/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,15 @@ func ListCmd() *cobra.Command {

dl := CmdDelegate{Verbose: opts.Verbose}
ht := dl.Height() + dl.Spacing()
tasks := daily.TaskToItems(daily.GetItems())

lst := list.New(tasks, dl, 1000, len(tasks)*ht)
tasks, err := daily.GetItems()
if err != nil {
return fmt.Errorf("failed to get tasks: %w", err)
}

taskItems := daily.TaskToItems(tasks)

lst := list.New(taskItems, dl, 1000, len(taskItems)*ht)
lst.SetShowTitle(false)
lst.SetShowHelp(false)
lst.SetShowFilter(false)
Expand Down
36 changes: 26 additions & 10 deletions internal/models/daily/daily.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"github.com/SourcewareLab/Toney/v2/internal/messages"
taskpopup "github.com/SourcewareLab/Toney/v2/internal/models/taskPopup"
"github.com/SourcewareLab/Toney/v2/internal/styles"
"github.com/SourcewareLab/Toney/v2/internal/utils"
"github.com/charmbracelet/bubbles/help"
"github.com/charmbracelet/bubbles/key"
"github.com/charmbracelet/bubbles/list"
Expand All @@ -25,8 +26,11 @@ type Daily struct {
Help help.Model
}

func NewDaily(w int, h int) *Daily {
tasks := GetItems()
func NewDaily(w int, h int) (*Daily, error) {
tasks, err := GetItems()
if err != nil {
return nil, err
}

lst := list.New(TaskToItems(tasks), TaskDelegate{}, w/2, 2*h/3)
km := list.DefaultKeyMap()
Expand All @@ -42,7 +46,7 @@ func NewDaily(w int, h int) *Daily {
Tasks: tasks,
Keymap: keymap.NewDailyTaskMap(),
Help: help.New(),
}
}, nil
}

func (m *Daily) Init() tea.Cmd {
Expand All @@ -52,20 +56,27 @@ func (m *Daily) Init() tea.Cmd {
func (m *Daily) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
switch msg := msg.(type) {
case messages.TaskPopupMessage:
var err error
switch msg.Type {
case enums.CreateRecurring:
fallthrough
case enums.CreateUnique:
m.CreateTask(msg, msg.Type == enums.CreateUnique)
err = m.CreateTask(msg, msg.Type == enums.CreateUnique)
case enums.Delete:
m.DeleteTask(msg)
err = m.DeleteTask(msg)
case enums.ChangeStatus:
m.StatusChangeTask(msg)
err = m.StatusChangeTask(msg)
case enums.Edit:
m.EditTask(msg)
err = m.EditTask(msg)
}

if err != nil {
return m, utils.ReturnError("Daily", "Task Operation Error", err)
}

m.Refresh()
if err := m.Refresh(); err != nil {
return m, utils.ReturnError("Daily", "Error Refreshing Tasks", err)
}
m.ShowPopup = false
return m, nil
case tea.KeyMsg:
Expand Down Expand Up @@ -144,8 +155,12 @@ func (m *Daily) View() string {
return lipgloss.JoinVertical(lipgloss.Left, main, help)
}

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

lst := list.New(TaskToItems(m.Tasks), TaskDelegate{}, m.Width/2, 2*m.Height/3)
km := list.DefaultKeyMap()
Expand All @@ -155,4 +170,5 @@ func (m *Daily) Refresh() {
lst.SetShowTitle(false)

m.List = lst
return nil
}
24 changes: 12 additions & 12 deletions internal/models/daily/handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import (
"github.com/SourcewareLab/Toney/v2/internal/messages"
)

func (m Daily) CreateTask(msg messages.TaskPopupMessage, isUnique bool) {
func (m Daily) CreateTask(msg messages.TaskPopupMessage, isUnique bool) error {
task := Task{
TaskTitle: msg.Title,
TaskDesc: msg.Desc,
Expand All @@ -22,42 +22,42 @@ func (m Daily) CreateTask(msg messages.TaskPopupMessage, isUnique bool) {

m.Tasks = append(m.Tasks, task)

WriteItems(m.Tasks)
return WriteItems(m.Tasks)
}

func (m Daily) DeleteTask(msg messages.TaskPopupMessage) {
func (m Daily) DeleteTask(msg messages.TaskPopupMessage) error {
if !msg.IsDeleted {
return
return nil
}

item := m.List.SelectedItem()

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

m.Tasks = slices.Delete(m.Tasks, task.ID-1, task.ID)

WriteItems(m.Tasks)
return WriteItems(m.Tasks)
}

func (m Daily) StatusChangeTask(msg messages.TaskPopupMessage) {
func (m Daily) StatusChangeTask(msg messages.TaskPopupMessage) error {
item := m.List.SelectedItem()

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

task.Status = msg.Status

m.Tasks[task.ID-1] = task

WriteItems(m.Tasks)
return WriteItems(m.Tasks)
}

func (m Daily) EditTask(msg messages.TaskPopupMessage) {
func (m Daily) EditTask(msg messages.TaskPopupMessage) error {
task := Task{
TaskTitle: msg.Title,
TaskDesc: msg.Desc,
Expand All @@ -68,12 +68,12 @@ func (m Daily) EditTask(msg messages.TaskPopupMessage) {

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

task.Status = oldTask.Status

m.Tasks[oldTask.ID-1] = task

WriteItems(m.Tasks)
return WriteItems(m.Tasks)
}
41 changes: 27 additions & 14 deletions internal/models/daily/items.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package daily

import (
"fmt"
"os"
"path/filepath"
"slices"
Expand Down Expand Up @@ -36,60 +35,74 @@ func TaskToItems(tasks []Task) []list.Item {
return list
}

func GetItems() []Task {
func GetItems() ([]Task, error) {
path := GetPath()

_, err := os.Stat(path)
if os.IsNotExist(err) {
f, err2 := os.Create(path)
if err2 != nil {
fmt.Println(err2.Error())
return nil, err2
}

prevPath := getMostRecentDailyPath()
if prevPath != "" {
content, err2 := os.ReadFile(prevPath)
if err2 != nil {
fmt.Println(err2.Error())
return nil, err2
}

var allTasks []Task
csvutil.Unmarshal(content, &allTasks)
if err := csvutil.Unmarshal(content, &allTasks); err != nil {
return nil, err
}

tasks := filterRolloverTasks(allTasks)

data, err2 := csvutil.Marshal(tasks)
if err2 != nil {
fmt.Println(err2.Error())
return nil, err2
}

f.Write(data)
if _, err := f.Write(data); err != nil {
return nil, err
}
}
} else if err != nil {
fmt.Println("Error: ", err.Error())
return nil, err
}

content, _ := os.ReadFile(path)
content, err := os.ReadFile(path)
if err != nil {
return nil, err
}

tasks := make([]Task, 0)
err = csvutil.Unmarshal(content, &tasks)
if err != nil {
fmt.Println(err.Error())
return nil, err
}

slices.SortStableFunc(tasks, func(a, b Task) int {
return getStatusOrder(a.Status) - getStatusOrder(b.Status)
})

return tasks
return tasks, nil
}

func WriteItems(tasks []Task) {
func WriteItems(tasks []Task) error {
path := GetPath()

data, _ := csvutil.Marshal(tasks)
data, err := csvutil.Marshal(tasks)
if err != nil {
return err
}

if err := os.WriteFile(path, data, 0o644); err != nil {
return err
}

os.WriteFile(path, data, 0o644)
return nil
}

func GetPath() string {
Expand Down
9 changes: 3 additions & 6 deletions internal/models/fileExplorer/fileExplorer.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package fileexplorer

import (
"fmt"
"os"
"os/exec"
"path/filepath"
"strings"
Expand Down Expand Up @@ -36,11 +34,10 @@ type FileExplorer struct {
Keymap keymap.ExplorerKeyMap
}

func NewFileExplorer(w int, h int) *FileExplorer {
func NewFileExplorer(w int, h int) (*FileExplorer, error) {
root, err := filetree.CreateTree()
if err != nil {
fmt.Println(err.Error())
os.Exit(1)
return nil, err
}

return &FileExplorer{
Expand All @@ -52,7 +49,7 @@ func NewFileExplorer(w int, h int) *FileExplorer {
CurrentIndex: 0,
VisibleNodes: filetree.FlattenVisibleTree(root),
Keymap: keymap.NewExplorerKeyMap(),
}
}, nil
}

func (m FileExplorer) Init() tea.Cmd {
Expand Down
Loading