summary refs log blame commit diff stats
path: root/cmd/cetus-bing/cetus-bing.go
blob: b8c397c1d8b4d391554cac7d664e750e65273381 (plain) (tree)
1
2
3
4
5
6


            
                       

              







                                                   















                                                   
     


                               
                      
                      
                      
                      
                      











                                     
                           
 



                                 

         

                                                 
                                                  
 

                                                                

                                               

                             
                                                                                  

                              
                                                              
                                                             
                                                     
 






                                                         
                                           
                                                      





                                                                                              
                                                                         




                                                                                               
                                                                                             



                    
                                    



                      
                                              

                      




                                                                   

 


                                          
                   
                                          
         
 


                                                 
package main

import (
	"encoding/json"
	"flag"
	"fmt"
	"math/rand"
	"time"

	"framagit.org/andinus/cetus/pkg/background"
	"framagit.org/andinus/cetus/pkg/bing"
	"framagit.org/andinus/cetus/pkg/cetus"
)

type photo struct {
	startDate     string `json:"startdate"`
	fullStartDate string `json:"fullstartdate"`
	endDate       string `json:"enddate"`
	url           string `json:"url"`
	urlBase       string `json:"urlbase"`
	copyright     string `json:"copyright"`
	copyrightLink string `json:"copyrightlink"`
	title         string `json:"title"`
	hsh           string `json:"hsh"`
}

type bpod struct {
	photos []photo `json:"images"`
}

var (
	t         time.Duration
	api       string
	dump      bool
	quiet     bool
	random    bool
	version   bool
	pathOnly  bool
	fetchOnly bool
)

func main() {
	parseFlags()

	if version {
		cetus.Version()
		return
	}
	rand.Seed(time.Now().Unix())

	// Convert timeout to seconds
	t = t * time.Second

	body, err := bpodBody()
	if dump {
		fmt.Println(body)
		return
	}

	bpod := bpod{}
	err = json.Unmarshal([]byte(body), &bpod)
	cetus.ErrChk("body unmarshal failed", err)

	// if random was set then bpodRes holds list of multiple
	// responses, choose a random response from the list
	var i int = rand.Intn(len(bpod.photos))
	bpodPhoto := bpod.photos[i]

	// correct image path
	bpodPhoto.url = fmt.Sprintf("%s%s", "https://www.bing.com", bpodPhoto.url)

	// correct date format
	dt, err := time.Parse("20060102", bpodPhoto.startDate)
	cetus.ErrChk("bpodPhoto.startDate parse failed", err)
	bpodPhoto.startDate = dt.Format("2006-01-02")

	printDetails(bpodPhoto)

	// if fetchOnly is true then don't set background
	if fetchOnly {
		return
	}

	err = background.Set(bpodPhoto.url)
	cetus.ErrChk("setting background failed", err)
}

func parseFlags() {
	flag.BoolVar(&quiet, "quiet", false, "No output")
	flag.BoolVar(&version, "version", false, "Cetus version")
	flag.BoolVar(&fetchOnly, "fetch-only", false, "Don't set background, only fetch info")
	flag.BoolVar(&dump, "dump", false, "Only dump received response")
	flag.BoolVar(&random, "random", false, "Choose a random image (from 7 images)")
	flag.BoolVar(&pathOnly, "path-only", false, "Print only path of the image")

	flag.StringVar(&api, "api", "https://www.bing.com/HPImageArchive.aspx", "BPOD API URL")

	flag.DurationVar(&t, "timeout", 32*time.Second, "Timeout for http client in seconds")
	flag.Parse()

}

func printDetails(bpodPhoto photo) {
	if quiet {
		return
	}
	if pathOnly {
		cetus.PrintPath(bpodPhoto.url)
		return
	}
	fmt.Printf("Title: %s\n\n", bpodPhoto.title)
	fmt.Printf("Copyright: %s\n", bpodPhoto.copyright)
	fmt.Printf("Copyright Link: %s\n", bpodPhoto.copyrightLink)
	fmt.Printf("Date: %s\n\n", bpodPhoto.startDate)
	fmt.Printf("URL: %s\n", bpodPhoto.url)
}

func bpodBody() (string, error) {
	reqInfo := make(map[string]string)
	reqInfo["api"] = api
	if random {
		reqInfo["random"] = "true"
	}

	body, err := bing.GetBpodJson(reqInfo, t)
	return body, err
}