Added user lists
This commit is contained in:
parent
cd6641cc06
commit
e57e67610f
@ -11,16 +11,13 @@ import (
|
|||||||
func main() {
|
func main() {
|
||||||
color.Yellow("Caching list of active users")
|
color.Yellow("Caching list of active users")
|
||||||
|
|
||||||
cache := arn.ListOfIDs{}
|
|
||||||
|
|
||||||
// Filter out active users with an avatar
|
// Filter out active users with an avatar
|
||||||
users, err := arn.FilterUsers(func(user *arn.User) bool {
|
users, err := arn.FilterUsers(func(user *arn.User) bool {
|
||||||
return user.IsActive() && user.Avatar.Extension != ""
|
return user.IsActive() && user.Avatar.Extension != ""
|
||||||
})
|
})
|
||||||
|
fmt.Println(len(users))
|
||||||
|
|
||||||
if err != nil {
|
arn.PanicOnError(err)
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sort
|
// Sort
|
||||||
sort.Slice(users, func(i, j int) bool {
|
sort.Slice(users, func(i, j int) bool {
|
||||||
@ -36,17 +33,82 @@ func main() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
// Add users to list
|
// Add users to list
|
||||||
for _, user := range users {
|
SaveInCache("active users", users)
|
||||||
cache.IDList = append(cache.IDList, user.ID)
|
|
||||||
|
// Sort by osu rank
|
||||||
|
osuUsers := users[:]
|
||||||
|
|
||||||
|
sort.Slice(osuUsers, func(i, j int) bool {
|
||||||
|
return osuUsers[i].Accounts.Osu.PP > osuUsers[j].Accounts.Osu.PP
|
||||||
|
})
|
||||||
|
|
||||||
|
// Cut off users with 0 pp
|
||||||
|
for index, user := range osuUsers {
|
||||||
|
if user.Accounts.Osu.PP == 0 {
|
||||||
|
osuUsers = osuUsers[:index]
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Println(len(cache.IDList), "users")
|
// Save osu users
|
||||||
|
SaveInCache("active osu users", osuUsers)
|
||||||
|
|
||||||
err = arn.DB.Set("Cache", "active users", cache)
|
// Sort by role
|
||||||
|
staff := users[:]
|
||||||
|
|
||||||
if err != nil {
|
sort.Slice(staff, func(i, j int) bool {
|
||||||
panic(err)
|
if staff[i].Role == "" {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if staff[j].Role == "" {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return staff[i].Role == "admin"
|
||||||
|
})
|
||||||
|
|
||||||
|
// Cut off non-staff
|
||||||
|
for index, user := range staff {
|
||||||
|
if user.Role == "" {
|
||||||
|
staff = staff[:index]
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Save staff users
|
||||||
|
SaveInCache("active staff users", staff)
|
||||||
|
|
||||||
|
// Sort by anime watching list length
|
||||||
|
watching := users[:]
|
||||||
|
|
||||||
|
sort.Slice(watching, func(i, j int) bool {
|
||||||
|
return len(watching[i].AnimeList().FilterStatus(arn.AnimeListStatusWatching).Items) > len(watching[j].AnimeList().FilterStatus(arn.AnimeListStatusWatching).Items)
|
||||||
|
})
|
||||||
|
|
||||||
|
// Save watching users
|
||||||
|
SaveInCache("active anime watching users", watching)
|
||||||
|
|
||||||
color.Green("Finished.")
|
color.Green("Finished.")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SaveInCache ...
|
||||||
|
func SaveInCache(key string, users []*arn.User) {
|
||||||
|
cache := arn.ListOfIDs{
|
||||||
|
IDList: GenerateIDList(users),
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println(len(cache.IDList), key)
|
||||||
|
arn.PanicOnError(arn.DB.Set("Cache", key, cache))
|
||||||
|
}
|
||||||
|
|
||||||
|
// GenerateIDList generates an ID list from a slice of users.
|
||||||
|
func GenerateIDList(users []*arn.User) []string {
|
||||||
|
list := []string{}
|
||||||
|
|
||||||
|
for _, user := range users {
|
||||||
|
list = append(list, user.ID)
|
||||||
|
}
|
||||||
|
|
||||||
|
return list
|
||||||
|
}
|
||||||
|
5
main.go
5
main.go
@ -84,7 +84,10 @@ func configure(app *aero.Application) *aero.Application {
|
|||||||
app.Ajax("/new/soundtrack", newsoundtrack.Get)
|
app.Ajax("/new/soundtrack", newsoundtrack.Get)
|
||||||
app.Ajax("/settings", settings.Get)
|
app.Ajax("/settings", settings.Get)
|
||||||
app.Ajax("/soundtracks", music.Get)
|
app.Ajax("/soundtracks", music.Get)
|
||||||
app.Ajax("/users", users.Get)
|
app.Ajax("/users", users.Active)
|
||||||
|
app.Ajax("/users/osu", users.Osu)
|
||||||
|
app.Ajax("/users/staff", users.Staff)
|
||||||
|
app.Ajax("/users/anime/watching", users.AnimeWatching)
|
||||||
app.Ajax("/login", login.Get)
|
app.Ajax("/login", login.Get)
|
||||||
|
|
||||||
// User profiles
|
// User profiles
|
||||||
|
@ -22,7 +22,7 @@ component ProfileHeader(viewUser *arn.User, user *arn.User, uri string)
|
|||||||
Icon("home")
|
Icon("home")
|
||||||
a(href=viewUser.WebsiteURL(), target="_blank", rel="nofollow")= viewUser.WebsiteShortURL()
|
a(href=viewUser.WebsiteURL(), target="_blank", rel="nofollow")= viewUser.WebsiteShortURL()
|
||||||
|
|
||||||
if viewUser.Accounts.Osu.Nick != "" && viewUser.Accounts.Osu.PP >= 1000
|
if viewUser.Accounts.Osu.Nick != "" && viewUser.Accounts.Osu.PP >= 100
|
||||||
p.profile-field.osu(title="osu! Level " + toString(int(viewUser.Accounts.Osu.Level)) + " | Accuracy: " + fmt.Sprintf("%.1f", viewUser.Accounts.Osu.Accuracy) + "%")
|
p.profile-field.osu(title="osu! Level " + toString(int(viewUser.Accounts.Osu.Level)) + " | Accuracy: " + fmt.Sprintf("%.1f", viewUser.Accounts.Osu.Accuracy) + "%")
|
||||||
Icon("trophy")
|
Icon("trophy")
|
||||||
a(href="https://osu.ppy.sh/u/" + viewUser.Accounts.Osu.Nick, target="_blank", rel="noopener")= toString(int(viewUser.Accounts.Osu.PP)) + " pp"
|
a(href="https://osu.ppy.sh/u/" + viewUser.Accounts.Osu.Nick, target="_blank", rel="noopener")= toString(int(viewUser.Accounts.Osu.PP)) + " pp"
|
||||||
|
@ -8,9 +8,42 @@ import (
|
|||||||
"github.com/animenotifier/notify.moe/components"
|
"github.com/animenotifier/notify.moe/components"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Get ...
|
// Active ...
|
||||||
func Get(ctx *aero.Context) string {
|
func Active(ctx *aero.Context) string {
|
||||||
users, err := arn.GetActiveUsersCached()
|
users, err := arn.GetListOfUsersCached("active users")
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return ctx.Error(http.StatusInternalServerError, "Could not fetch user data", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return ctx.HTML(components.Users(users))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Osu ...
|
||||||
|
func Osu(ctx *aero.Context) string {
|
||||||
|
users, err := arn.GetListOfUsersCached("active osu users")
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return ctx.Error(http.StatusInternalServerError, "Could not fetch user data", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return ctx.HTML(components.Users(users))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Staff ...
|
||||||
|
func Staff(ctx *aero.Context) string {
|
||||||
|
users, err := arn.GetListOfUsersCached("active staff users")
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return ctx.Error(http.StatusInternalServerError, "Could not fetch user data", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return ctx.HTML(components.Users(users))
|
||||||
|
}
|
||||||
|
|
||||||
|
// AnimeWatching ...
|
||||||
|
func AnimeWatching(ctx *aero.Context) string {
|
||||||
|
users, err := arn.GetListOfUsersCached("active anime watching users")
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return ctx.Error(http.StatusInternalServerError, "Could not fetch user data", err)
|
return ctx.Error(http.StatusInternalServerError, "Could not fetch user data", err)
|
||||||
|
@ -1,6 +1,23 @@
|
|||||||
component Users(users []*arn.User)
|
component Users(users []*arn.User)
|
||||||
h1.page-title Users
|
h1.page-title Users
|
||||||
|
|
||||||
|
.buttons.tabs
|
||||||
|
a.button.tab.action(href="/users", data-action="diff", data-trigger="click")
|
||||||
|
Icon("users")
|
||||||
|
span Active
|
||||||
|
|
||||||
|
a.button.tab.action(href="/users/anime/watching", data-action="diff", data-trigger="click")
|
||||||
|
Icon("tv")
|
||||||
|
span Watching
|
||||||
|
|
||||||
|
a.button.tab.action(href="/users/osu", data-action="diff", data-trigger="click")
|
||||||
|
Icon("gamepad")
|
||||||
|
span Osu
|
||||||
|
|
||||||
|
a.button.tab.action(href="/users/staff", data-action="diff", data-trigger="click")
|
||||||
|
Icon("user-secret")
|
||||||
|
span Staff
|
||||||
|
|
||||||
.user-avatars
|
.user-avatars
|
||||||
each user in users
|
each user in users
|
||||||
Avatar(user)
|
Avatar(user)
|
Loading…
Reference in New Issue
Block a user