diff options
author | Dmitry Ilvokhin <d@ilvokhin.com> | 2025-03-01 20:10:26 +0000 |
---|---|---|
committer | Dmitry Ilvokhin <d@ilvokhin.com> | 2025-03-02 21:58:24 +0000 |
commit | 96bcc15d6e3e820309c874fe39df11cb88b30af2 (patch) | |
tree | 1674002cc4378c5d077c0fe4ca239dd3c4ef9ab0 /sent.go | |
parent | 602dcb4ec617634d1fed182ac0309123992e43c6 (diff) | |
download | flatbot-96bcc15d6e3e820309c874fe39df11cb88b30af2.tar.gz flatbot-96bcc15d6e3e820309c874fe39df11cb88b30af2.tar.bz2 flatbot-96bcc15d6e3e820309c874fe39df11cb88b30af2.zip |
Split logic to multiple files
Diffstat (limited to 'sent.go')
-rw-r--r-- | sent.go | 52 |
1 files changed, 52 insertions, 0 deletions
@@ -0,0 +1,52 @@ +package main + +import ( + "encoding/json" + "errors" + "os" + "slices" +) + +func readSent(filename string) ([]flat, error) { + data, err := os.ReadFile(filename) + sent := make([]flat, 0) + if err != nil { + // This is fine, as we might just started and didn't dump + // anything into sent file yet. + if errors.Is(err, os.ErrNotExist) { + return sent, nil + } + return sent, err + } + err = json.Unmarshal(data, &sent) + if err != nil { + return sent, err + } + if !slices.IsSortedFunc(sent, compareID) { + return nil, errors.New("Invalid sent: not sorted") + } + return sent, nil +} + +func removeAlreadySent(fetched []flat, sent []flat) []flat { + if !slices.IsSortedFunc(sent, compareID) { + panic("Sent expected to be sorted") + } + recent := make([]flat, 0) + for _, f := range fetched { + _, found := slices.BinarySearchFunc(sent, f, compareID) + if found { + continue + } + recent = append(recent, f) + } + return recent +} + +func writeSent(sent []flat, filename string) error { + jsonData, err := json.Marshal(sent) + if err != nil { + return err + } + return os.WriteFile(filename, jsonData, 0644) +} |