summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--flatbot.go10
-rw-r--r--sent.go39
2 files changed, 21 insertions, 28 deletions
diff --git a/flatbot.go b/flatbot.go
index c04a6b0..ef10854 100644
--- a/flatbot.go
+++ b/flatbot.go
@@ -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")
}
diff --git a/sent.go b/sent.go
index dd3c4c4..0c72e6b 100644
--- a/sent.go
+++ b/sent.go
@@ -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 {