mark state, pause msgs as processed

master v0.0.11
Bel LaPointe 2022-01-13 00:22:59 -05:00
parent 1cc082083c
commit 266ccb5f98
1 changed files with 24 additions and 10 deletions

34
main.go
View File

@ -88,38 +88,52 @@ func matrixrecv() error {
}() }()
func() { func() {
log.Printf("looking for states") log.Printf("looking for states")
db := config.Get().DB()
states := map[string]map[config.State]struct{}{} states := map[string]map[config.State]struct{}{}
for _, msg := range messages { for _, msg := range messages {
key := fmt.Sprintf("states_%d", msg.Timestamp.Unix())
if !strings.HasPrefix(msg.Content, "!state") { if !strings.HasPrefix(msg.Content, "!state") {
continue continue
} }
if _, ok := states[msg.Sender]; ok { if _, ok := states[msg.Sender]; ok {
continue continue
} }
states[msg.Sender] = map[config.State]struct{}{} if _, err := db.Get(key); err == storage.ErrNotFound {
for _, state := range parseOutStates([]byte(msg.Content)) { states[msg.Sender] = map[config.State]struct{}{}
states[msg.Sender][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) setNewStates(states)
}() }()
func() { func() {
log.Printf("looking for pauses") log.Printf("looking for pauses")
db := config.Get().DB()
pauses := map[string]time.Time{} pauses := map[string]time.Time{}
for _, msg := range messages { for _, msg := range messages {
key := fmt.Sprintf("pauses_%d", msg.Timestamp.Unix())
if !strings.HasPrefix(msg.Content, "!available ") { if !strings.HasPrefix(msg.Content, "!available ") {
continue continue
} }
if _, ok := pauses[msg.Sender]; ok { if _, ok := pauses[msg.Sender]; ok {
continue continue
} }
t, err := time.ParseInLocation( if _, err := db.Get(key); err == storage.ErrNotFound {
"2006-01-02", t, err := time.ParseInLocation(
strings.TrimSpace(strings.TrimPrefix(msg.Content, "!available ")), "2006-01-02",
time.Local, strings.TrimSpace(strings.TrimPrefix(msg.Content, "!available ")),
) time.Local,
if err == nil { )
pauses[msg.Sender] = t 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) setNewPauses(pauses)