From 947752333d588b18e36d1b5605d7796c08c05882 Mon Sep 17 00:00:00 2001 From: Eduard Urbach Date: Tue, 20 Mar 2018 01:43:23 +0100 Subject: [PATCH] Improved low resolution search --- pages/editor/lowresimages.go | 122 +++++++++++------- pages/index.go | 2 + .../refresh-anime-thumbnails.go} | 34 +++-- 3 files changed, 102 insertions(+), 56 deletions(-) rename patches/{add-image-ext/add-image-ext.go => refresh-anime-thumbnails/refresh-anime-thumbnails.go} (54%) diff --git a/pages/editor/lowresimages.go b/pages/editor/lowresimages.go index 83194660..74302e42 100644 --- a/pages/editor/lowresimages.go +++ b/pages/editor/lowresimages.go @@ -1,14 +1,6 @@ package editor import ( - "image" - "io/ioutil" - "net/http" - "os" - "path" - "path/filepath" - "strings" - "github.com/aerogo/aero" "github.com/animenotifier/arn" "github.com/animenotifier/notify.moe/components" @@ -16,36 +8,22 @@ import ( const maxImageEntries = 70 -// LowResolutionAnimeImages ... +// LowResolutionAnimeImages filters anime with low resolution images. func LowResolutionAnimeImages(ctx *aero.Context) string { - basePath := path.Join(arn.Root, "images/anime/original/") - files, err := ioutil.ReadDir(basePath) + year, _ := ctx.GetInt("year") + animeType := ctx.Get("type") - if err != nil { - return ctx.Error(http.StatusInternalServerError, "Error reading anime images directory", err) - } - - lowResAnime := []*arn.Anime{} - - for _, file := range files { - if file.IsDir() || strings.HasPrefix(file.Name(), ".") { - continue + lowResAnime := arn.FilterAnime(func(anime *arn.Anime) bool { + if year != 0 && year != anime.StartDateTime().Year() { + return false } - fullPath := path.Join(basePath, file.Name()) - width, height, _ := getImageDimensions(fullPath) - - if width < arn.AnimeImageLargeWidth*2 || height < arn.AnimeImageLargeHeight*2 { - animeID := file.Name() - animeID = strings.TrimSuffix(animeID, filepath.Ext(animeID)) - - anime, err := arn.GetAnime(animeID) - - if err == nil { - lowResAnime = append(lowResAnime, anime) - } + if animeType != "" && anime.Type != animeType { + return false } - } + + return anime.Image.Width < arn.AnimeImageLargeWidth || anime.Image.Height < arn.AnimeImageLargeHeight + }) // Sort arn.SortAnimeByQuality(lowResAnime) @@ -68,20 +46,72 @@ func LowResolutionAnimeImages(ctx *aero.Context) string { )) } -// getImageDimensions retrieves the dimensions for the given file path. -func getImageDimensions(imagePath string) (int, int, error) { - file, err := os.Open(imagePath) - defer file.Close() +// // LowResolutionAnimeImages ... +// func LowResolutionAnimeImages(ctx *aero.Context) string { +// basePath := path.Join(arn.Root, "images/anime/original/") +// files, err := ioutil.ReadDir(basePath) - if err != nil { - return 0, 0, err - } +// if err != nil { +// return ctx.Error(http.StatusInternalServerError, "Error reading anime images directory", err) +// } - image, _, err := image.DecodeConfig(file) +// lowResAnime := []*arn.Anime{} - if err != nil { - return 0, 0, err - } +// for _, file := range files { +// if file.IsDir() || strings.HasPrefix(file.Name(), ".") { +// continue +// } - return image.Width, image.Height, nil -} +// fullPath := path.Join(basePath, file.Name()) +// width, height, _ := getImageDimensions(fullPath) + +// if width < arn.AnimeImageLargeWidth*2 || height < arn.AnimeImageLargeHeight*2 { +// animeID := file.Name() +// animeID = strings.TrimSuffix(animeID, filepath.Ext(animeID)) + +// anime, err := arn.GetAnime(animeID) + +// if err == nil { +// lowResAnime = append(lowResAnime, anime) +// } +// } +// } + +// // Sort +// arn.SortAnimeByQuality(lowResAnime) + +// // Limit +// count := len(lowResAnime) + +// if count > maxImageEntries { +// lowResAnime = lowResAnime[:maxImageEntries] +// } + +// return ctx.HTML(components.AnimeEditorListFull( +// "Anime with low resolution images", +// lowResAnime, +// count, +// "/editor/anime/missing/hiresimage", +// func(anime *arn.Anime) string { +// return "https://www.google.com/search?q=" + anime.Title.Canonical + "&tbm=isch" +// }, +// )) +// } + +// // getImageDimensions retrieves the dimensions for the given file path. +// func getImageDimensions(imagePath string) (int, int, error) { +// file, err := os.Open(imagePath) +// defer file.Close() + +// if err != nil { +// return 0, 0, err +// } + +// image, _, err := image.DecodeConfig(file) + +// if err != nil { +// return 0, 0, err +// } + +// return image.Width, image.Height, nil +// } diff --git a/pages/index.go b/pages/index.go index 56db3b10..c4d55ef2 100644 --- a/pages/index.go +++ b/pages/index.go @@ -255,6 +255,8 @@ func Configure(app *aero.Application) { l.Page("/editor/anime/missing/genres/:year", editor.Genres) l.Page("/editor/anime/missing/genres/:year/:type", editor.Genres) l.Page("/editor/anime/missing/hiresimage", editor.LowResolutionAnimeImages) + l.Page("/editor/anime/missing/hiresimage/:year", editor.LowResolutionAnimeImages) + l.Page("/editor/anime/missing/hiresimage/:year/:type", editor.LowResolutionAnimeImages) // Editor - MALdiff l.Page("/editor/anime/maldiff", editor.CompareMAL) diff --git a/patches/add-image-ext/add-image-ext.go b/patches/refresh-anime-thumbnails/refresh-anime-thumbnails.go similarity index 54% rename from patches/add-image-ext/add-image-ext.go rename to patches/refresh-anime-thumbnails/refresh-anime-thumbnails.go index df261ff2..bfc50f96 100644 --- a/patches/add-image-ext/add-image-ext.go +++ b/patches/refresh-anime-thumbnails/refresh-anime-thumbnails.go @@ -1,46 +1,60 @@ package main import ( + "fmt" + "io/ioutil" "os" "path" "github.com/animenotifier/arn" + "github.com/fatih/color" ) func main() { + color.Yellow("Updating anime thumbnails") + defer arn.Node.Close() + defer color.Green("Finished.") for anime := range arn.StreamAnime() { base := path.Join(arn.Root, "/images/anime/original/", anime.ID) if _, err := os.Stat(base + ".png"); err == nil { - anime.Image.Extension = ".png" - anime.Save() + update(anime, base+".png") continue } if _, err := os.Stat(base + ".jpg"); err == nil { - anime.Image.Extension = ".jpg" - anime.Save() + update(anime, base+".jpg") continue } if _, err := os.Stat(base + ".jpeg"); err == nil { - anime.Image.Extension = ".jpg" - anime.Save() + update(anime, base+".jpg") continue } if _, err := os.Stat(base + ".gif"); err == nil { - anime.Image.Extension = ".gif" - anime.Save() + update(anime, base+".gif") continue } if _, err := os.Stat(base + ".webp"); err == nil { - anime.Image.Extension = ".webp" - anime.Save() + update(anime, base+".webp") continue } } } + +func update(anime *arn.Anime, filePath string) { + fmt.Println(anime.ID, anime) + + data, err := ioutil.ReadFile(filePath) + + if err != nil { + return + } + + anime.SetImageBytes(data) + anime.Save() +}