mirror of
https://codeberg.org/forgejo/forgejo
synced 2024-08-21 15:11:48 +02: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
|
|
}
|