package main import ( "bytes" "flag" "fmt" "image" "io/ioutil" "os" "path" "github.com/animenotifier/arn" "github.com/fatih/color" ) func main() { color.Yellow("Updating anime image average colors") defer color.Green("Finished.") defer arn.Node.Close() // Parse flags var animeID string flag.StringVar(&animeID, "id", "", "ID of the anime that you want to refresh") flag.Parse() // Refresh 1 anime in case ID was specified if animeID != "" { anime, _ := arn.GetAnime(animeID) if anime != nil { work(anime) } return } // Otherwise refresh all anime for anime := range arn.StreamAnime() { work(anime) } } // work refreshes the average color of the given anime. func work(anime *arn.Anime) { base := path.Join(arn.Root, "/images/anime/medium/", anime.ID) if _, err := os.Stat(base + ".jpg"); err != nil { color.Red(err.Error()) return } update(anime, base+".jpg") } // update expects a file to load as image for the anime and update the average color. func update(anime *arn.Anime, filePath string) { fmt.Println(anime.ID, anime) // Load data, err := ioutil.ReadFile(filePath) if err != nil { color.Red(err.Error()) return } // Decode img, _, err := image.Decode(bytes.NewReader(data)) if err != nil { color.Red(err.Error()) return } anime.Image.AverageColor = arn.GetAverageColor(img) anime.Save() }