From cf93554a7739e397e4977bde4fa4818bd58ae234 Mon Sep 17 00:00:00 2001 From: Andinus Date: Thu, 2 Apr 2020 13:29:29 +0530 Subject: bpod: Re-enable cache & fix issues with v0.6.2 --- bpod/json.go | 17 +++++++++++++++++ cmd/cetus/bpod.go | 22 +++++++++++++++++++++- 2 files changed, 38 insertions(+), 1 deletion(-) 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 -- cgit 1.4.1-2-gfad0