From 96bcc15d6e3e820309c874fe39df11cb88b30af2 Mon Sep 17 00:00:00 2001 From: Dmitry Ilvokhin Date: Sat, 1 Mar 2025 20:10:26 +0000 Subject: Split logic to multiple files --- sent.go | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 sent.go (limited to 'sent.go') 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) +} -- cgit v1.2.3-70-g09d2