diff options
Diffstat (limited to 'models/repo.go')
-rw-r--r-- | models/repo.go | 47 |
1 files changed, 36 insertions, 11 deletions
diff --git a/models/repo.go b/models/repo.go index 8b805338..d70454fc 100644 --- a/models/repo.go +++ b/models/repo.go @@ -46,6 +46,9 @@ var ( var ( Gitignores, Licenses, Readmes []string + + // Maximum items per page in forks, watchers and stars of a repo + ItemsPerPage = 54 ) func LoadRepoConfig() { @@ -776,21 +779,16 @@ func CountPublicRepositories() int64 { return countRepositories(false) } -// GetRepositoriesWithUsers returns given number of repository objects with offset. -// It also auto-gets corresponding users. -func GetRepositoriesWithUsers(num, offset int) ([]*Repository, error) { - repos := make([]*Repository, 0, num) - if err := x.Limit(num, offset).Asc("id").Find(&repos); err != nil { +// RepositoriesWithUsers returns number of repos in given page. +func RepositoriesWithUsers(page, pageSize int) (_ []*Repository, err error) { + repos := make([]*Repository, 0, pageSize) + if err = x.Limit(pageSize, (page-1)*pageSize).Asc("id").Find(&repos); err != nil { return nil, err } - for _, repo := range repos { - repo.Owner = &User{Id: repo.OwnerID} - has, err := x.Get(repo.Owner) - if err != nil { + for i := range repos { + if err = repos[i].GetOwner(); err != nil { return nil, err - } else if !has { - return nil, ErrUserNotExist{repo.OwnerID, ""} } } @@ -1617,6 +1615,16 @@ func GetWatchers(rid int64) ([]*Watch, error) { return getWatchers(x, rid) } +// Repository.GetWatchers returns all users watching given repository. +func (repo *Repository) GetWatchers(offset int) ([]*User, error) { + users := make([]*User, 0, 10) + offset = (offset - 1) * ItemsPerPage + + err := x.Limit(ItemsPerPage, offset).Where("repo_id=?", repo.ID).Join("LEFT", "watch", "user.id=watch.user_id").Find(&users) + + return users, err +} + func notifyWatchers(e Engine, act *Action) error { // Add feeds for user self and all watchers. watches, err := getWatchers(e, act.RepoID) @@ -1694,6 +1702,15 @@ func IsStaring(uid, repoId int64) bool { return has } +func (repo *Repository) GetStars(offset int) ([]*User, error) { + users := make([]*User, 0, 10) + offset = (offset - 1) * ItemsPerPage + + err := x.Limit(ItemsPerPage, offset).Where("repo_id=?", repo.ID).Join("LEFT", "star", "user.id=star.uid").Find(&users) + + return users, err +} + // ___________ __ // \_ _____/__________| | __ // | __)/ _ \_ __ \ |/ / @@ -1761,3 +1778,11 @@ func ForkRepository(u *User, oldRepo *Repository, name, desc string) (_ *Reposit return repo, sess.Commit() } + +func (repo *Repository) GetForks() ([]*Repository, error) { + forks := make([]*Repository, 0, 10) + + err := x.Find(&forks, &Repository{ForkID: repo.ID}) + + return forks, err +} |