summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--bpod/json.go17
-rw-r--r--cmd/cetus/bpod.go22
2 files changed, 38 insertions, 1 deletions
diff --git a/bpod/json.go b/bpod/json.go
index a05c6fc..5822f11 100644
--- a/bpod/json.go
+++ b/bpod/json.go
@@ -26,6 +26,23 @@ type List struct {
 	Photos []BPOD `json:"images"`
 }
 
+// MarshalJson takes res as input and returns body. This remarshaling
+// is required because of a bug. To learn about why this is required,
+// remove this function & then run `cetus set bpod -random`. Put a
+// `fmt.Println(res, body)` somewhere and look at how they differ. res
+// will contain a single entry but body will have all 7 entries which
+// is bad because body is cached to disk to view later.
+func MarshalJson(res BPOD) (string, error) {
+	out, err := json.Marshal(res)
+	if err != nil {
+		err = fmt.Errorf("%s\n%s",
+			"MarshalJson failed",
+			err.Error())
+	}
+	body := string(out)
+	return body, err
+}
+
 // UnmarshalJson will take body as input & unmarshal it to res,
 func UnmarshalJson(body string) (BPOD, error) {
 	list := List{}
diff --git a/cmd/cetus/bpod.go b/cmd/cetus/bpod.go
index e3b898f..5c3cd36 100644
--- a/cmd/cetus/bpod.go
+++ b/cmd/cetus/bpod.go
@@ -2,6 +2,7 @@ package main
 
 import (
 	"fmt"
+	"io/ioutil"
 	"log"
 	"os"
 	"time"
@@ -55,6 +56,25 @@ func execBPOD() {
 	}
 	res.StartDate = dt.Format("2006-01-02")
 
+	// Save response in cache after marshalling it again, we do
+	// this instead of saving the response so as to not break the
+	// format in which cache is saved. If random flag was passed
+	// then the response will contain all 7 values so we have to
+	// marshal it but why not save non-random directly? Because
+	// that means the format in which both are saved will be
+	// different. One will be the raw response whereas other will
+	// be marshalled response. We're currently not using this body
+	// cache but this is just to save information.
+	file := fmt.Sprintf("%s/%s.json", cacheDir, res.StartDate)
+	body, err = bpod.MarshalJson(res)
+	if err != nil {
+		// We should warn the user if this returns an error
+		// but the program shouldn't exit.
+		log.Println("bpod.go: failed to marshal res to body, not saving cache")
+	} else {
+		err = ioutil.WriteFile(file, []byte(body), 0644)
+	}
+
 	// Send a desktop notification if notify flag was passed.
 	if notify {
 		n := notification.Notif{}
@@ -87,7 +107,7 @@ func execBPOD() {
 	// First it downloads the image to the cache directory and
 	// then tries to set it with feh. If the download fails then
 	// it exits with a non-zero exit code.
-	imgFile := fmt.Sprintf("%s/%s:%s", cacheDir, res.StartDate, res.Title)
+	imgFile := fmt.Sprintf("%s/%s", cacheDir, res.Title)
 
 	// Check if the file is available locally, if it is then don't
 	// download it again and set it from disk