39 lines
907 B
Go
39 lines
907 B
Go
package pttodo
|
|
|
|
type Root struct {
|
|
Todo []Todo
|
|
Scheduled []Todo
|
|
Done []Todo
|
|
}
|
|
|
|
func (root *Root) MoveScheduledToTodo() {
|
|
for i := len(root.Scheduled) - 1; i >= 0; i-- {
|
|
if root.Scheduled[i].Triggered() {
|
|
root.Todo = append(root.Todo, root.Scheduled[i])
|
|
root.Scheduled[i] = root.Scheduled[len(root.Scheduled)-1]
|
|
root.Scheduled = root.Scheduled[:len(root.Scheduled)-1]
|
|
if i < len(root.Scheduled)-1 {
|
|
i += 1
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func (root *Root) MergeIn(root2 Root) {
|
|
for _, listPair := range [][2]*[]Todo{
|
|
[2]*[]Todo{&root.Todo, &root2.Todo},
|
|
[2]*[]Todo{&root.Scheduled, &root2.Scheduled},
|
|
[2]*[]Todo{&root.Done, &root2.Done},
|
|
} {
|
|
for _, candidate := range *listPair[1] {
|
|
found := false
|
|
for i := range *listPair[0] {
|
|
found = found || ((*listPair[0])[i].Todo == candidate.Todo)
|
|
}
|
|
if !found {
|
|
*listPair[0] = append(*listPair[0], candidate)
|
|
}
|
|
}
|
|
}
|
|
}
|