diff options
-rw-r--r-- | flatbot.go | 10 | ||||
-rw-r--r-- | sent.go | 39 |
2 files changed, 21 insertions, 28 deletions
@@ -6,7 +6,6 @@ import ( "log" "net/http" "os" - "slices" ) func main() { @@ -15,7 +14,7 @@ func main() { if err != nil { log.Fatal(err) } - allFlats, err := parse(body) + fetched, err := parse(body) if err != nil { log.Fatal(err) } @@ -23,7 +22,7 @@ func main() { if err != nil { log.Fatal(err) } - newFlats := removeAlreadySent(allFlats, sent) + newFlats := removeAlreadySent(fetched, sent) m := messenger{ Token: os.Getenv("FLATBOT_TELEGRAM_BOT_API_TOKEN"), ChatID: os.Getenv("FLATBOT_TELEGRAM_CHANNEL_ID"), @@ -39,9 +38,8 @@ func main() { sent = append(sent, f) } // Remove flats from sent that are no longer in the search response to - // prevent indefinite grow. - slices.SortFunc(allFlats, compareID) - sent = removeDelisted(sent, allFlats) + // prevent indefinite grow of sent file. + sent = removeDelisted(sent, fetched) writeSent(sent, "/tmp/sent.json") } @@ -28,34 +28,29 @@ func readSent(filename string) ([]flat, error) { 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 { +func removeFlats(whenFound bool, from, superset []flat) []flat { + if !slices.IsSortedFunc(superset, compareID) { + slices.SortFunc(superset, compareID) + } + out := make([]flat, 0) + for _, f := range from { + _, found := slices.BinarySearchFunc(superset, f, compareID) + if found == whenFound { continue } - recent = append(recent, f) + out = append(out, f) } - return recent + return out +} + +func removeAlreadySent(fetched []flat, sent []flat) []flat { + whenFound := true + return removeFlats(whenFound, fetched, sent) } func removeDelisted(sent []flat, allFlats []flat) []flat { - if !slices.IsSortedFunc(allFlats, compareID) { - panic("allFlats expected to be sorted") - } - recent := make([]flat, 0) - for _, f := range sent { - _, found := slices.BinarySearchFunc(allFlats, f, compareID) - if !found { - continue - } - recent = append(recent, f) - } - return recent + whenFound := true + return removeFlats(!whenFound, sent, allFlats) } func writeSent(sent []flat, filename string) error { |