diff options
Diffstat (limited to 'internal/web/thread.go')
-rw-r--r-- | internal/web/thread.go | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/internal/web/thread.go b/internal/web/thread.go index 3db4952c7..d3b92bde3 100644 --- a/internal/web/thread.go +++ b/internal/web/thread.go @@ -23,6 +23,7 @@ import ( "encoding/json" "errors" "fmt" + "math/rand" "net/http" "strings" @@ -35,6 +36,21 @@ import ( "github.com/superseriousbusiness/gotosocial/internal/oauth" ) +var randAvatars = make(map[string]string) + +func (m *Module) ensureAvatar(status apimodel.Status) { + if status.Account.Avatar == "" && len(m.defaultAvatars) > 0 { + avatar, ok := randAvatars[status.Account.ID] + if !ok { + //nolint:gosec + randomIndex := rand.Intn(len(m.defaultAvatars)) + avatar = m.defaultAvatars[randomIndex] + randAvatars[status.Account.ID] = avatar + } + status.Account.Avatar = avatar + } +} + func (m *Module) threadGETHandler(c *gin.Context) { ctx := c.Request.Context() @@ -104,6 +120,16 @@ func (m *Module) threadGETHandler(c *gin.Context) { return } + m.ensureAvatar(*status) + + for _, status := range context.Descendants { + m.ensureAvatar(status) + } + + for _, status := range context.Ancestors { + m.ensureAvatar(status) + } + c.HTML(http.StatusOK, "thread.tmpl", gin.H{ "instance": instance, "status": status, |