diff --git a/task.go b/task.go index 07c5159..c76fa56 100644 --- a/task.go +++ b/task.go @@ -48,7 +48,8 @@ type Task struct { // Contexts, Projects, Tags // // For example: -// "(A) 2013-07-23 Call Dad @Home @Phone +Family due:2013-07-31 customTag1:Important!" +// +// "(A) 2013-07-23 Call Dad @Home @Phone +Family due:2013-07-31 customTag1:Important!" func (task Task) String() string { var text string @@ -270,3 +271,21 @@ func (task *Task) Due() time.Duration { } return task.DueDate.Sub(time.Now()) } + +func (task *Task) HasContext(ctx string) bool { + for _, c := range task.Contexts { + if c == ctx { + return true + } + } + return false +} + +func (task *Task) HasProject(proj string) bool { + for _, p := range task.Projects { + if p == proj { + return true + } + } + return false +} diff --git a/todotxt.go b/todotxt.go index 293e14b..122aff4 100644 --- a/todotxt.go +++ b/todotxt.go @@ -183,6 +183,19 @@ func (tasklist *TaskList) WriteToFilename(filename string) error { return ioutil.WriteFile(filename, []byte(tasklist.String()), 0640) } +func (tasklist *TaskList) ArchiveTaskToFile(task Task, filename string) error { + if err := tasklist.RemoveTask(task); err != nil { + return err + } + f, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, 0600) + if err != nil { + return err + } + defer f.Close() + _, err = f.WriteString(task.String() + "\n") + return err +} + // LoadFromFile loads and returns a TaskList from *os.File. // // Using *os.File instead of a filename allows to also use os.Stdin.