mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-11-05 00:40:38 +00:00
59 lines
1.3 KiB
Go
59 lines
1.3 KiB
Go
|
// Copyright 2018 The Gitea Authors. All rights reserved.
|
||
|
// Use of this source code is governed by a MIT-style
|
||
|
// license that can be found in the LICENSE file.
|
||
|
|
||
|
package models
|
||
|
|
||
|
// CommentList defines a list of comments
|
||
|
type CommentList []*Comment
|
||
|
|
||
|
func (comments CommentList) getPosterIDs() []int64 {
|
||
|
commentIDs := make(map[int64]struct{}, len(comments))
|
||
|
for _, comment := range comments {
|
||
|
if _, ok := commentIDs[comment.PosterID]; !ok {
|
||
|
commentIDs[comment.PosterID] = struct{}{}
|
||
|
}
|
||
|
}
|
||
|
return keysInt64(commentIDs)
|
||
|
}
|
||
|
|
||
|
// LoadPosters loads posters from database
|
||
|
func (comments CommentList) LoadPosters() error {
|
||
|
return comments.loadPosters(x)
|
||
|
}
|
||
|
|
||
|
func (comments CommentList) loadPosters(e Engine) error {
|
||
|
if len(comments) == 0 {
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
posterIDs := comments.getPosterIDs()
|
||
|
posterMaps := make(map[int64]*User, len(posterIDs))
|
||
|
var left = len(posterIDs)
|
||
|
for left > 0 {
|
||
|
var limit = defaultMaxInSize
|
||
|
if left < limit {
|
||
|
limit = left
|
||
|
}
|
||
|
err := e.
|
||
|
In("id", posterIDs[:limit]).
|
||
|
Find(&posterMaps)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
left = left - limit
|
||
|
posterIDs = posterIDs[limit:]
|
||
|
}
|
||
|
|
||
|
for _, comment := range comments {
|
||
|
if comment.PosterID <= 0 {
|
||
|
continue
|
||
|
}
|
||
|
var ok bool
|
||
|
if comment.Poster, ok = posterMaps[comment.PosterID]; !ok {
|
||
|
comment.Poster = NewGhostUser()
|
||
|
}
|
||
|
}
|
||
|
return nil
|
||
|
}
|