fuzzyworld

find-stone-beer / commit

Removed some logging statements from message and start enforcing message length by adding a "more info" link to the message if there are more results that aren't shown.

4ee45a455892e558bd6e32ac13dcaf723c179db5 · Pavel Safronov · 2023-08-23 11:39:26 -0700 · parents d741e30ebd6e

Removed some logging statements from message and start enforcing message length by adding a "more info" link to the message if there are more results that aren't shown.
 main.go | 60 +++++++++++++++++++++++++++++++++++++++++++++---------------
 1 file changed, 45 insertions(+), 15 deletions(-)

diff --git a/main.go b/main.go
index c9e2c40..d808959 100644
--- a/main.go
+++ b/main.go
@@ -6,7 +6,6 @@ import (
 	"errors"
 	"fmt"
 	"io"
-	"math"
 	"net/http"
 	"os"
 	"path/filepath"
@@ -15,9 +14,16 @@ import (
 	"time"
 
 	"github.com/jftuga/geodist"
+	"golang.org/x/exp/slices"
 	"golang.org/x/net/html"
 )
 
+type relevantSeller struct {
+	Name            string
+	Pos             geodist.Coord
+	DeliveryAgeDays int
+}
+
 const (
 	COORDINATE_LAT_ENV_VAR    = "COORDINATE_LAT"
 	COORDINATE_LON_ENV_VAR    = "COORDINATE_LON"
@@ -63,8 +69,9 @@ func main() {
 		}
 	}
 
-	messageSB := strings.Builder{}
 	now := time.Now()
+	relevantSellers := []relevantSeller{}
+
 	for _, seller := range arrogantBastardSellers {
 		dist, _, err := geodist.VincentyDistance(coords, seller.Pos)
 		if err != nil {
@@ -74,10 +81,6 @@ func main() {
 			continue
 		}
 
-		shouldPrint := false
-		sb := strings.Builder{}
-		sb.WriteString(fmt.Sprintf("%s (%d miles away) - %s\n", seller.Title, int(math.Ceil(dist)), seller.Addr))
-
 		sellerInfo, err := getSellerInfo(seller.Nid)
 		if err != nil {
 			panic(err)
@@ -95,31 +98,58 @@ func main() {
 			if daysSinceDelivery > maxDeliveryWindowDays {
 				continue
 			}
-			sb.WriteString(fmt.Sprintf("\t%s - Last delivered %d days ago, \n\n", brand.Name, daysSinceDelivery))
-			shouldPrint = true
+			relevantSellers = append(relevantSellers, relevantSeller{
+				Name:            seller.Title,
+				Pos:             seller.Pos,
+				DeliveryAgeDays: daysSinceDelivery,
+			})
 		}
-		if shouldPrint {
-			messageSB.WriteString(sb.String())
-			messageSB.WriteString("\n")
+	}
+
+	// sort by delivery age
+	slices.SortFunc(relevantSellers, func(a, b relevantSeller) int {
+		return a.DeliveryAgeDays - b.DeliveryAgeDays
+	})
+
+	// more info text and link
+	var moreInfoText = "\n\nResults truncated, see full list <a href='https://gitlab.com/PavelSafronov/find-stone-beer'>here</a>"
+	var message string
+	for _, seller := range relevantSellers {
+		mapsLink := getGoogleMapsLink(seller.Pos)
+		sellerLink := fmt.Sprintf("<a href='%s'>%s</a> - delivered %d days ago\n", mapsLink, seller.Name, seller.DeliveryAgeDays)
+		newMessage := message + sellerLink
+		if len(newMessage)+len(moreInfoText) > MaxMessageLength {
+			message += moreInfoText
+			break
 		}
+		message = newMessage
 	}
 
-	fmt.Print(messageSB.String())
+	fmt.Printf("Message length: %d\n", len(message))
+	fmt.Println()
+	fmt.Print(message)
+	fmt.Println()
+	SendPushoverMessage(message)
+}
 
+func getGoogleMapsLink(coords geodist.Coord) string {
+	// https://www.google.com/maps/search/?api=1&query=<lat>,<lng>
+	// https://www.google.com/maps/search/?api=1&query=47.665824,-122.197289
+	return fmt.Sprintf("https://www.google.com/maps/search/?api=1&query=%f,%f", coords.Lat, coords.Lon)
 }
 
 func getEnvVarInteger(envVarName string, defaultIfNotSet int) int {
 	envVarValue := os.Getenv(envVarName)
 	if envVarValue == "" {
-		fmt.Printf("Environment variable %s not set, using default value of %d\n", envVarName, defaultIfNotSet)
+		// fmt.Printf("Environment variable %s not set, using default value of %d\n", envVarName, defaultIfNotSet)
 		return defaultIfNotSet
 	}
 	intValue, err := strconv.Atoi(envVarValue)
 	if err != nil {
-		fmt.Printf("Could not parse environment variable %s as integer: %s, using default value of %d\n", envVarName, err, defaultIfNotSet)
+		// fmt.Printf("Could not parse environment variable %s as integer: %s, using default value of %d\n", envVarName, err, defaultIfNotSet)
 		return defaultIfNotSet
 	}
-	fmt.Printf("Using environment variable %s value of %d\n", envVarName, intValue)
+	// fmt.Printf("Using environment variable %s value of %d\n", envVarName, intValue)
 	return intValue
 }