diff options
-rw-r--r-- | README.org | 23 | ||||
-rw-r--r-- | main.go | 120 |
2 files changed, 95 insertions, 48 deletions
diff --git a/README.org b/README.org index e88fd23..4d8ee07 100644 --- a/README.org +++ b/README.org @@ -4,12 +4,25 @@ Cetus is a wallpaper tool written in Go. It can set wallpapers from various sources. Default behaviour is to set a random wallpaper. * Defaults -| mode | random | -| src | random | +| flag | var | default | +|------+------+-------------------------------------------| +| mode | mode | random (daily when random is unavailable) | +| src | src | random | +** Astronomy Picture of the Day +| flag | var | default | +|--------------+------------+-------------------------------------| +| apod-api | apodAPI | https://api.nasa.gov/planetary/apod | +| apod-api-key | apodAPIKey | DEMO_KEY | +| mode | mode | daily | ** Bing Photo of the Day -| bpodAPI | https://www.bing.com/HPImageArchive.aspx | -| bpodNum | 16 | - +| flag | var | default | +|----------+---------+------------------------------------------| +| bpod-api | bpodAPI | https://www.bing.com/HPImageArchive.aspx | +| bpod-num | bpodNum | 16 | +** Unsplash Source +| flag | var | default | +|--------------+-------------+-----------------------------| +| unsplash-api | unsplashAPI | https://source.unsplash.com | * Dependency - [[https://feh.finalrewind.org/][feh]] * Features diff --git a/main.go b/main.go index 95e91fa..c8ad829 100644 --- a/main.go +++ b/main.go @@ -35,6 +35,9 @@ var ( bpodAPI string bpodNum int unsplashAPI string + + width int + height int ) func main() { @@ -57,10 +60,14 @@ func main() { flag.StringVar(&src, "src", "random", "Source for the image") flag.StringVar(&mode, "mode", "random", "Daily, Weekly or Random wallpaper") + flag.IntVar(&width, "width", 1920, "Width of the image") + flag.IntVar(&height, "height", 1080, "Height of the image") + flag.StringVar(&apodAPI, "apod-api", "https://api.nasa.gov/planetary/apod", "APOD API URL") flag.StringVar(&apodAPIKey, "apod-api-key", "DEMO_KEY", "APOD API Key") flag.StringVar(&bpodAPI, "bpod-api", "https://www.bing.com/HPImageArchive.aspx", "BPOD API URL") flag.IntVar(&bpodNum, "bpod-num", 16, "BPOD Number of images to fetch") + flag.StringVar(&unsplashAPI, "unsplash-api", "https://source.unsplash.com", "Unsplash Source API URL") flag.DurationVar(&timeout, "timeout", 16, "Timeout for http client") flag.Parse() @@ -112,6 +119,53 @@ func parseSrcAndGetPath(src string, mode string) (string, error) { func getPathAPOD(mode string) (string, error) { var err error var imgPath string + + switch mode { + case "daily", "random": + break + default: + return "", fmt.Errorf("Error: Unknown Mode") + } + + type apodRes struct { + Copyright string `json:"copyright"` + Date string `json:"string"` + Explanation string `json:"explanation"` + HDURL string `json:"hdurl"` + MediaType string `json:"media_type"` + ServiceVersion string `json:"service_version"` + Title string `json:"title"` + URL string `json:"url"` + } + + apodNow := apodRes{} + + req, err := http.NewRequest(http.MethodGet, apodAPI, nil) + if err != nil { + return "", err + } + q := req.URL.Query() + q.Add("api_key", apodAPIKey) + req.URL.RawQuery = q.Encode() + + res, err := getRes(req) + if err != nil { + fmt.Printf("Error: GET %s\n", apodAPI) + return "", err + } + defer res.Body.Close() + + apiBody, err := ioutil.ReadAll(res.Body) + if err != nil { + return "", err + } + + err = json.Unmarshal([]byte(apiBody), &apodNow) + if err != nil { + return "", err + } + + imgPath = apodNow.HDURL return imgPath, err } @@ -182,65 +236,45 @@ func getPathBPOD(mode string) (string, error) { func getPathUnsplash(mode string) (string, error) { var err error var imgPath string - return imgPath, err -} - -// Calls feh to set the wallpaper -func setWall(imgPath string) error { - feh, err := exec.LookPath("feh") - if err != nil { - fmt.Println("Error: feh is not in $PATH") - return err - } - - fmt.Printf("Path to set as Wallpaper: %s\n", imgPath) - - err = exec.Command(feh, "--bg-fill", imgPath).Run() - return err -} -// Get url of Astronomy Picture of the Day & pass it to setWall() -func setWallFromAPOD(apodI map[string]string) error { - type apodRes struct { - Copyright string `json:"copyright"` - Date string `json:"string"` - Explanation string `json:"explanation"` - HDURL string `json:"hdurl"` - MediaType string `json:"media_type"` - ServiceVersion string `json:"service_version"` - Title string `json:"title"` - URL string `json:"url"` + switch mode { + case "daily", "weekly": + unsplashAPI = fmt.Sprintf("%s/%s", + unsplashAPI, mode) + case "random": + unsplashAPI = fmt.Sprintf("%s/%sx%s", + unsplashAPI, strconv.Itoa(width), strconv.Itoa(height)) + default: + return "", fmt.Errorf("Error: Unknown Mode") } - apodNow := apodRes{} - - req, err := http.NewRequest(http.MethodGet, apodI["api"], nil) + req, err := http.NewRequest(http.MethodGet, unsplashAPI, nil) if err != nil { - return err + return "", err } - q := req.URL.Query() - q.Add("api_key", apodI["apiKey"]) - req.URL.RawQuery = q.Encode() res, err := getRes(req) if err != nil { - fmt.Printf("Error: GET %s\n", apodI["api"]) - return err + return "", err } defer res.Body.Close() - apiBody, err := ioutil.ReadAll(res.Body) - if err != nil { - return err - } + // Unsplash Source API will redirect to the image + imgPath = res.Request.URL.String() + return imgPath, err +} - err = json.Unmarshal([]byte(apiBody), &apodNow) +// Calls feh to set the wallpaper +func setWall(imgPath string) error { + feh, err := exec.LookPath("feh") if err != nil { + fmt.Println("Error: feh is not in $PATH") return err } - // Set Astronomy Picture of the Day as wallpaper - err = setWall(apodNow.HDURL) + fmt.Printf("Path to set as Wallpaper: %s\n", imgPath) + + err = exec.Command(feh, "--bg-fill", imgPath).Run() return err } |