summaryrefslogtreecommitdiff
path: root/sent.go
diff options
context:
space:
mode:
authorDmitry Ilvokhin <d@ilvokhin.com>2025-03-01 20:10:26 +0000
committerDmitry Ilvokhin <d@ilvokhin.com>2025-03-02 21:58:24 +0000
commit96bcc15d6e3e820309c874fe39df11cb88b30af2 (patch)
tree1674002cc4378c5d077c0fe4ca239dd3c4ef9ab0 /sent.go
parent602dcb4ec617634d1fed182ac0309123992e43c6 (diff)
downloadflatbot-96bcc15d6e3e820309c874fe39df11cb88b30af2.tar.gz
flatbot-96bcc15d6e3e820309c874fe39df11cb88b30af2.tar.bz2
flatbot-96bcc15d6e3e820309c874fe39df11cb88b30af2.zip
Split logic to multiple files
Diffstat (limited to 'sent.go')
-rw-r--r--sent.go52
1 files changed, 52 insertions, 0 deletions
diff --git a/sent.go b/sent.go
new file mode 100644
index 0000000..dc16051
--- /dev/null
+++ b/sent.go
@@ -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)
+}