From a0db863a64d1530b15a18725d323e87776a8a52c Mon Sep 17 00:00:00 2001 From: Ashish Vijayaram Date: Mon, 17 Apr 2017 12:36:46 -0700 Subject: Add support for showing tasks due the previous week. This is useful for those who need a report of entries from last week. --- todo.go | 2 +- todolist/date_filter.go | 17 +++++++++++++++++ todolist/parser.go | 3 +++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/todo.go b/todo.go index d4d3b60..f41410d 100644 --- a/todo.go +++ b/todo.go @@ -43,7 +43,7 @@ func usage() { blueBold.Println("\nListing todos") fmt.Println(" When listing todos, you can filter and group the output.\n") - fmt.Println(" todo l due (tod|today|tom|tomorrow|overdue|this week|next week|mon|tue|wed|thu|fri|sat|sun|none)") + fmt.Println(" todo l due (tod|today|tom|tomorrow|overdue|this week|next week|last week|mon|tue|wed|thu|fri|sat|sun|none)") fmt.Println(" todo l overdue") cyan.Println(" Filtering by date:\n") diff --git a/todolist/date_filter.go b/todolist/date_filter.go index b56f117..fb06682 100644 --- a/todolist/date_filter.go +++ b/todolist/date_filter.go @@ -45,6 +45,8 @@ func (f *DateFilter) FilterDate(input string) []*Todo { return f.filterThisWeek(bod(time.Now())) case match == "due next week": return f.filterNextWeek(bod(time.Now())) + case match == "due last week": + return f.filterLastWeek(bod(time.Now())) case match == "overdue": return f.filterOverdue(bod(time.Now())) } @@ -130,6 +132,21 @@ func (f *DateFilter) filterNextWeek(pivot time.Time) []*Todo { return ret } +func (f *DateFilter) filterLastWeek(pivot time.Time) []*Todo { + var ret []*Todo + + begin := f.FindSunday(pivot).AddDate(0, 0, -7) + end := begin.AddDate(0, 0, 7) + + for _, todo := range f.Todos { + dueTime, _ := time.ParseInLocation("2006-01-02", todo.Due, f.Location) + if begin.Before(dueTime) && end.After(dueTime) { + ret = append(ret, todo) + } + } + return ret +} + func (f *DateFilter) filterOverdue(pivot time.Time) []*Todo { var ret []*Todo diff --git a/todolist/parser.go b/todolist/parser.go index ca5083a..1f070c3 100644 --- a/todolist/parser.go +++ b/todolist/parser.go @@ -94,6 +94,9 @@ func (p *Parser) Due(input string, day time.Time) string { return p.saturday(day) case "sunday", "sun": return p.sunday(day) + case "last week": + n := bod(time.Now()) + return getNearestMonday(n).AddDate(0, 0, -7).Format("2006-01-02") case "next week": n := bod(time.Now()) return getNearestMonday(n).AddDate(0, 0, 7).Format("2006-01-02") -- cgit v1.3