76 lines
1.3 KiB
Go
Raw Normal View History

package search
import (
2017-06-20 20:54:45 +00:00
"strings"
"github.com/aerogo/aero"
2017-06-20 20:54:45 +00:00
"github.com/animenotifier/arn"
"github.com/animenotifier/notify.moe/components"
)
2017-06-20 21:27:14 +00:00
const maxUsers = 9 * 7
const maxAnime = 9 * 7
2017-06-20 20:54:45 +00:00
2017-06-16 23:25:02 +00:00
// Get search page.
func Get(ctx *aero.Context) string {
2017-06-20 20:54:45 +00:00
term := strings.ToLower(ctx.Get("term"))
var users []*arn.User
var animeResults []*arn.Anime
2017-06-20 21:27:14 +00:00
// Search everything in parallel
2017-06-20 20:54:45 +00:00
aero.Parallel(func() {
2017-06-20 21:27:14 +00:00
// Search users
var user *arn.User
userSearchIndex, err := arn.GetSearchIndex("User")
if err != nil {
return
}
for name, id := range userSearchIndex.TextToID {
2017-06-20 20:54:45 +00:00
if strings.Index(name, term) != -1 {
2017-06-20 21:27:14 +00:00
user, err = arn.GetUser(id)
2017-06-20 20:54:45 +00:00
if err != nil {
continue
}
users = append(users, user)
if len(users) >= maxUsers {
break
}
}
}
}, func() {
2017-06-20 21:27:14 +00:00
// Search anime
var anime *arn.Anime
animeSearchIndex, err := arn.GetSearchIndex("Anime")
if err != nil {
return
}
for title, id := range animeSearchIndex.TextToID {
2017-06-20 20:54:45 +00:00
if strings.Index(title, term) != -1 {
2017-06-20 21:27:14 +00:00
anime, err = arn.GetAnime(id)
2017-06-20 20:54:45 +00:00
if err != nil {
continue
}
animeResults = append(animeResults, anime)
if len(animeResults) >= maxAnime {
break
}
}
}
})
return ctx.HTML(components.Search(users, animeResults))
}