@@ -48,38 +48,17 @@ func newLsCmd() *cobra.Command {
4848}
4949
5050func applyFilters (in []model.Task , f lsFilters ) ([]model.Task , error ) {
51- var prio model.Priority
52- prioFilter := false
53- if f .priorityStr != "" {
54- p , err := model .ParsePriority (f .priorityStr )
55- if err != nil {
56- return nil , err
57- }
58- prio = p
59- prioFilter = true
51+ prio , prioFilter , err := resolvePriorityFilter (f .priorityStr )
52+ if err != nil {
53+ return nil , err
6054 }
6155 now := time .Now ()
6256 out := make ([]model.Task , 0 , len (in ))
6357 for _ , t := range in {
64- switch {
65- case f .all :
66- // everything
67- case f .done :
68- if ! t .Done {
69- continue
70- }
71- default :
72- if t .Done {
73- continue
74- }
75- }
76- if f .today && ! t .IsDueToday (now ) {
58+ if ! passStateFilter (t , f ) {
7759 continue
7860 }
79- if f .overdue && ! t .IsOverdue (now ) {
80- continue
81- }
82- if f .upcoming && ! t .IsUpcoming (now ) {
61+ if ! passDueFilter (t , f , now ) {
8362 continue
8463 }
8564 if f .tag != "" && ! t .HasTag (f .tag ) {
@@ -93,14 +72,49 @@ func applyFilters(in []model.Task, f lsFilters) ([]model.Task, error) {
9372 return out , nil
9473}
9574
75+ func resolvePriorityFilter (s string ) (model.Priority , bool , error ) {
76+ if s == "" {
77+ return model .PriorityMedium , false , nil
78+ }
79+ p , err := model .ParsePriority (s )
80+ if err != nil {
81+ return 0 , false , err
82+ }
83+ return p , true , nil
84+ }
85+
86+ func passStateFilter (t model.Task , f lsFilters ) bool {
87+ switch {
88+ case f .all :
89+ return true
90+ case f .done :
91+ return t .Done
92+ default :
93+ return ! t .Done
94+ }
95+ }
96+
97+ func passDueFilter (t model.Task , f lsFilters , now time.Time ) bool {
98+ if f .today && ! t .IsDueToday (now ) {
99+ return false
100+ }
101+ if f .overdue && ! t .IsOverdue (now ) {
102+ return false
103+ }
104+ if f .upcoming && ! t .IsUpcoming (now ) {
105+ return false
106+ }
107+ return true
108+ }
109+
96110func printTasks (w io.Writer , tasks []model.Task , asJSON bool ) error {
97111 if asJSON {
98112 enc := json .NewEncoder (w )
99113 enc .SetIndent ("" , " " )
100114 return enc .Encode (tasks )
101115 }
102116 if len (tasks ) == 0 {
103- fmt . Fprintln (w , "no tasks" )
117+ pln (w , "no tasks" )
104118 return nil
105119 }
106120 for _ , t := range tasks {
@@ -115,7 +129,7 @@ func printTasks(w io.Writer, tasks []model.Task, asJSON bool) error {
115129 if len (t .Tags ) > 0 {
116130 line += " #" + strings .Join (t .Tags , " #" )
117131 }
118- fmt . Fprintln (w , line )
132+ pln (w , line )
119133 }
120134 return nil
121135}
0 commit comments