diff --git a/main.go b/main.go index a90f557..41d99aa 100644 --- a/main.go +++ b/main.go @@ -88,38 +88,52 @@ func matrixrecv() error { }() func() { log.Printf("looking for states") + db := config.Get().DB() states := map[string]map[config.State]struct{}{} for _, msg := range messages { + key := fmt.Sprintf("states_%d", msg.Timestamp.Unix()) if !strings.HasPrefix(msg.Content, "!state") { continue } if _, ok := states[msg.Sender]; ok { continue } - states[msg.Sender] = map[config.State]struct{}{} - for _, state := range parseOutStates([]byte(msg.Content)) { - states[msg.Sender][state] = struct{}{} + if _, err := db.Get(key); err == storage.ErrNotFound { + states[msg.Sender] = map[config.State]struct{}{} + for _, state := range parseOutStates([]byte(msg.Content)) { + states[msg.Sender][state] = struct{}{} + } + } + if err := db.Set(key, []byte{'k'}); err != nil { + log.Printf("failed to mark state gathered @%s: %v", key, err) } } setNewStates(states) }() func() { log.Printf("looking for pauses") + db := config.Get().DB() pauses := map[string]time.Time{} for _, msg := range messages { + key := fmt.Sprintf("pauses_%d", msg.Timestamp.Unix()) if !strings.HasPrefix(msg.Content, "!available ") { continue } if _, ok := pauses[msg.Sender]; ok { continue } - t, err := time.ParseInLocation( - "2006-01-02", - strings.TrimSpace(strings.TrimPrefix(msg.Content, "!available ")), - time.Local, - ) - if err == nil { - pauses[msg.Sender] = t + if _, err := db.Get(key); err == storage.ErrNotFound { + t, err := time.ParseInLocation( + "2006-01-02", + strings.TrimSpace(strings.TrimPrefix(msg.Content, "!available ")), + time.Local, + ) + if err == nil { + pauses[msg.Sender] = t + } + } + if err := db.Set(key, []byte{'k'}); err != nil { + log.Printf("failed to mark state gathered @%s: %v", key, err) } } setNewPauses(pauses)