fuzzyworld

find-stone-beer / commit

Limit Pushover exports and move the functionality that combines messages up to the service limit into the file with everything else. Also started to error out if the message is too long.

abecb80c6168f154ecd331b0d06334b6c63d36d8 · Pavel Safronov · 2023-08-27 00:18:42 -0700 · parents aba75e09761b

Limit Pushover exports and move the functionality that combines messages up to the service limit into the file with everything else. Also started to error out if the message is too long.
 main.go     | 15 ++++++---------
 pushover.go | 35 +++++++++++++++++++++++++++++------
 2 files changed, 35 insertions(+), 15 deletions(-)

diff --git a/main.go b/main.go
index 45046fe..4dce8ac 100644
--- a/main.go
+++ b/main.go
@@ -115,7 +115,7 @@ func main() {
 			if hasReplacement {
 				seller.Title = replacement
 			}
-			message := fmt.Sprintf("<a href='%s'>%s (%.1fm)</a> - %d days\n", mapsLink, seller.Title, dist, daysSinceDelivery)
+			message := fmt.Sprintf("<a href='%s'>%s (%.1fm)</a> - %dd\n", mapsLink, seller.Title, dist, daysSinceDelivery)
 
 			relevantSellers = append(relevantSellers, relevantSeller{
 				Name:            seller.Title,
@@ -131,16 +131,13 @@ func main() {
 		return a.DeliveryAgeDays - b.DeliveryAgeDays
 	})
 
-	var moreInfoText = "\n\nResults truncated, see full list <a href='https://pavelsafronov.gitlab.io/find-stone-beer/'>here</a>"
-	var message string
+	var moreInfoText = "\n<a href='https://pavelsafronov.gitlab.io/find-stone-beer/'>...continue</a>"
+	var startingText = fmt.Sprintf("Sellers on %d/%d/%d\n", now.Year(), now.Month(), now.Day())
+	var lines []string
 	for _, seller := range relevantSellers {
-		newMessage := message + seller.Message
-		if len(newMessage)+len(moreInfoText) > MaxMessageLength {
-			message += moreInfoText
-			break
-		}
-		message = newMessage
+		lines = append(lines, seller.Message)
 	}
+	var message = CombineUpToMaxMessageLength(startingText, moreInfoText, lines)
 	fmt.Printf("Message length: %d\n", len(message))
 	SendPushoverMessage(message)
 
diff --git a/pushover.go b/pushover.go
index 669d2eb..cc60d3f 100644
--- a/pushover.go
+++ b/pushover.go
@@ -8,18 +8,40 @@ import (
 )
 
 const (
-	PushoverTokenEnvVar     = "PUSHOVER_TOKEN"
-	PushoverUserTokenEnvVar = "PUSHOVER_USER_TOKEN"
-	MaxMessageLength        = 1024
+	pushoverTokenEnvVar     = "PUSHOVER_TOKEN"
+	pushoverUserTokenEnvVar = "PUSHOVER_USER_TOKEN"
+	maxMessageLength        = 1024
+	// this project runs daily, so this is the max TTL for now
+	// if this project is run more frequently, then this value should be changed
+	ttlDays = 2
+
+	// automatically calculated, do not change
+	ttlSeconds = ttlDays * 24 * 60 * 60
 )
 
+func CombineUpToMaxMessageLength(prefix string, moreInfo string, messages []string) string {
+	var combinedMessage = prefix
+	for _, message := range messages {
+		newMessage := combinedMessage + message
+		if len(newMessage)+len(moreInfo) > maxMessageLength {
+			combinedMessage += moreInfo
+			break
+		}
+		combinedMessage = newMessage
+	}
+	return combinedMessage
+}
+
 func SendPushoverMessage(message string) error {
+	if len(message) > maxMessageLength {
+		return fmt.Errorf("message is too long: %d > %d", len(message), maxMessageLength)
+	}
 	postUrl := "https://api.pushover.net/1/messages.json"
 
-	pushoverToken := os.Getenv(PushoverTokenEnvVar)
-	pushoverUser := os.Getenv(PushoverUserTokenEnvVar)
+	pushoverToken := os.Getenv(pushoverTokenEnvVar)
+	pushoverUser := os.Getenv(pushoverUserTokenEnvVar)
 	if pushoverUser == "" || pushoverToken == "" {
-		return fmt.Errorf("missing environment variable %s or %s", PushoverUserTokenEnvVar, PushoverTokenEnvVar)
+		return fmt.Errorf("missing environment variable %s or %s", pushoverUserTokenEnvVar, pushoverTokenEnvVar)
 	}
 
 	response, err := http.PostForm(postUrl, url.Values{
@@ -27,6 +49,7 @@ func SendPushoverMessage(message string) error {
 		"user":    {pushoverUser},
 		"message": {message},
 		"html":    {"1"},
+		"ttl":     {fmt.Sprintf("%d", ttlSeconds)},
 	})
 
 	if err != nil {