package explore import ( "sort" "github.com/aerogo/aero" "github.com/animenotifier/arn" "github.com/animenotifier/notify.moe/components" ) const ( currentlyAiringBonus = 5.0 popularityThreshold = 5 popularityPenalty = 8.0 watchingPopularityWeight = 0.3 plannedPopularityWeight = 0.2 ) // Get ... func Get(ctx *aero.Context) string { animeList := arn.GetAiringAnime() sort.Slice(animeList, func(i, j int) bool { a := animeList[i] b := animeList[j] scoreA := a.Rating.Overall scoreB := b.Rating.Overall if a.Status == "current" { scoreA += currentlyAiringBonus } if b.Status == "current" { scoreB += currentlyAiringBonus } if a.Popularity.Total() < popularityThreshold { scoreA -= popularityPenalty } if b.Popularity.Total() < popularityThreshold { scoreB -= popularityPenalty } scoreA += float64(a.Popularity.Watching) * watchingPopularityWeight scoreB += float64(b.Popularity.Watching) * watchingPopularityWeight scoreA += float64(a.Popularity.Planned) * plannedPopularityWeight scoreB += float64(b.Popularity.Planned) * plannedPopularityWeight return scoreA > scoreB }) return ctx.HTML(components.Explore(animeList)) }