-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathtask_list.go
More file actions
71 lines (61 loc) · 1.59 KB
/
task_list.go
File metadata and controls
71 lines (61 loc) · 1.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package main
import (
"fmt"
"github.com/spf13/cobra"
"github.com/wltechblog/notes/internal/tasks"
)
var (
statusFilter string
)
var taskListCmd = &cobra.Command{
Use: "list",
Aliases: []string{"ls"},
Short: "List all tasks",
Long: "List all tasks. Use --status flag to filter by open, completed, or abandoned",
RunE: func(cmd *cobra.Command, args []string) error {
if !taskMode {
return fmt.Errorf("this command is only available for tasks, use 'note list' instead")
}
tm, err := tasks.NewTaskManager()
if err != nil {
return err
}
var filter tasks.Status
if statusFilter != "" {
filter = tasks.Status(statusFilter)
switch filter {
case tasks.StatusOpen, tasks.StatusCompleted, tasks.StatusAbandoned:
default:
return fmt.Errorf("invalid status: %s (must be: open, completed, or abandoned)", statusFilter)
}
}
taskList, err := tm.ListTasks(filter)
if err != nil {
return err
}
if len(taskList) == 0 {
fmt.Println("No tasks found")
return nil
}
for _, task := range taskList {
contentPreview := task.Content
if len(contentPreview) > 30 {
contentPreview = contentPreview[:30] + "..."
}
fmt.Printf("%s | %s | [%s] | %s | Created: %s | Updated: %s\n",
task.ID,
task.Name,
task.Status,
contentPreview,
task.CreatedAt.Format("2006-01-02 15:04:05"),
task.UpdatedAt.Format("2006-01-02 15:04:05"))
}
return nil
},
}
func init() {
if taskMode {
taskListCmd.Flags().StringVarP(&statusFilter, "status", "s", "", "Filter by status (open, completed, abandoned)")
rootCmd.AddCommand(taskListCmd)
}
}