Fix player faces on admin page

This commit is contained in:
Evan Goode 2025-03-22 17:43:56 -04:00
parent 5c1f6c1cfa
commit 8ccb3babeb
6 changed files with 70 additions and 16 deletions

View File

@ -62,9 +62,10 @@ func NewTemplate(app *App) *Template {
}
funcMap := template.FuncMap{
"PlayerSkinURL": app.PlayerSkinURL,
"InviteURL": app.InviteURL,
"IsDefaultAdmin": app.IsDefaultAdmin,
"PrimaryPlayerSkinURL": app.PrimaryPlayerSkinURL,
"PlayerSkinURL": app.PlayerSkinURL,
"InviteURL": app.InviteURL,
"IsDefaultAdmin": app.IsDefaultAdmin,
}
for _, name := range names {

View File

@ -291,17 +291,6 @@ func (app *App) InviteURL(invite *Invite) (string, error) {
return url + "?invite=" + invite.Code, nil
}
func (app *App) PlayerSkinURL(player *Player) (*string, error) {
if !player.SkinHash.Valid {
return nil, nil
}
url, err := app.SkinURL(player.SkinHash.String)
if err != nil {
return nil, err
}
return &url, nil
}
func (app *App) CapeURL(hash string) (string, error) {
return url.JoinPath(app.FrontEndURL, "web/texture/cape/"+hash+".png")
}

View File

@ -602,3 +602,14 @@ func (app *App) DeletePlayer(caller *User, player *Player) error {
return nil
}
func (app *App) PlayerSkinURL(player *Player) (*string, error) {
if !player.SkinHash.Valid {
return nil, nil
}
url, err := app.SkinURL(player.SkinHash.String)
if err != nil {
return nil, err
}
return &url, nil
}

49
user.go
View File

@ -7,11 +7,13 @@ import (
"errors"
"fmt"
"github.com/google/uuid"
"github.com/samber/mo"
"github.com/zitadel/oidc/v3/pkg/client/rp"
"github.com/zitadel/oidc/v3/pkg/oidc"
"gorm.io/gorm"
"io"
"net/http"
"slices"
"time"
)
@ -674,3 +676,50 @@ func (app *App) DeleteOIDCIdentity(
return nil
})
}
func (app *App) PrimaryPlayerSkinURL(user *User) (*string, error) {
if len(user.Players) == 0 {
return nil, nil
}
player := (func() mo.Option[*Player] {
if len(user.Players) == 0 {
return mo.None[*Player]()
}
for _, player := range user.Players {
if player.Name == user.Username {
if player.SkinHash.Valid {
return mo.Some(&player)
}
break
}
}
playersDecreasingAge := make([]*Player, 0, len(user.Players))
for i := range user.Players {
playersDecreasingAge = append(playersDecreasingAge, &user.Players[i])
}
slices.SortFunc(playersDecreasingAge, func(a *Player, b *Player) int {
return a.CreatedAt.Compare(b.CreatedAt)
})
for _, player := range playersDecreasingAge {
if player.SkinHash.Valid {
return mo.Some(player)
}
}
return mo.None[*Player]()
})()
if p, ok := player.Get(); ok {
skinURL, err := app.SkinURL(p.SkinHash.String)
if err != nil {
return nil, err
}
return &skinURL, nil
}
return nil, nil
}

View File

@ -103,7 +103,11 @@
<td style="width: 30px">
<div
class="list-profile-picture"
{{/*style="background-image: url({{ PlayerSkinURL $user }});"*/}}
{{ with $playerSkinURL := PrimaryPlayerSkinURL $user }}
{{ if $playerSkinURL }}
style="background-image: url({{ $playerSkinURL }});"
{{ end }}
{{ end }}
></div>
</td>
<td>

View File

@ -55,7 +55,7 @@
class="list-profile-picture"
{{ with $playerSkinURL := PlayerSkinURL $player }}
{{ if $playerSkinURL }}
style="background-image: url({{ PlayerSkinURL $player }});"
style="background-image: url({{ $playerSkinURL }});"
{{ end }}
{{ end }}
></div>