diff options
| author | Dmitry Ilvokhin <d@ilvokhin.com> | 2025-03-08 18:00:27 +0000 | 
|---|---|---|
| committer | Dmitry Ilvokhin <d@ilvokhin.com> | 2025-03-08 18:00:27 +0000 | 
| commit | 8f42d69c9b8c2c735089e86c7f21638271fac67e (patch) | |
| tree | 51382fc43553f7822df2827de5a9c3de26608ecc | |
| parent | 98da712a92bf3320e4a1045405564e76f58fb514 (diff) | |
| download | flatbot-8f42d69c9b8c2c735089e86c7f21638271fac67e.tar.gz flatbot-8f42d69c9b8c2c735089e86c7f21638271fac67e.tar.bz2 flatbot-8f42d69c9b8c2c735089e86c7f21638271fac67e.zip | |
Generilize `removeAlreadySent` and `removeDelisted`
| -rw-r--r-- | flatbot.go | 10 | ||||
| -rw-r--r-- | sent.go | 37 | 
2 files changed, 20 insertions, 27 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") +func removeFlats(whenFound bool, from, superset []flat) []flat { +	if !slices.IsSortedFunc(superset, compareID) { +		slices.SortFunc(superset, compareID)  	} -	recent := make([]flat, 0) -	for _, f := range fetched { -		_, found := slices.BinarySearchFunc(sent, f, compareID) -		if found { +	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 { |