code.gitea.io/gitea@v1.21.7/routers/web/repo/packages.go (about) 1 // Copyright 2021 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package repo 5 6 import ( 7 "net/http" 8 9 "code.gitea.io/gitea/models/db" 10 "code.gitea.io/gitea/models/packages" 11 "code.gitea.io/gitea/models/unit" 12 "code.gitea.io/gitea/modules/base" 13 "code.gitea.io/gitea/modules/context" 14 "code.gitea.io/gitea/modules/setting" 15 "code.gitea.io/gitea/modules/util" 16 ) 17 18 const ( 19 tplPackagesList base.TplName = "repo/packages" 20 ) 21 22 // Packages displays a list of all packages in the repository 23 func Packages(ctx *context.Context) { 24 page := ctx.FormInt("page") 25 if page <= 1 { 26 page = 1 27 } 28 query := ctx.FormTrim("q") 29 packageType := ctx.FormTrim("type") 30 31 pvs, total, err := packages.SearchLatestVersions(ctx, &packages.PackageSearchOptions{ 32 Paginator: &db.ListOptions{ 33 PageSize: setting.UI.PackagesPagingNum, 34 Page: page, 35 }, 36 OwnerID: ctx.ContextUser.ID, 37 RepoID: ctx.Repo.Repository.ID, 38 Type: packages.Type(packageType), 39 Name: packages.SearchValue{Value: query}, 40 IsInternal: util.OptionalBoolFalse, 41 }) 42 if err != nil { 43 ctx.ServerError("SearchLatestVersions", err) 44 return 45 } 46 47 pds, err := packages.GetPackageDescriptors(ctx, pvs) 48 if err != nil { 49 ctx.ServerError("GetPackageDescriptors", err) 50 return 51 } 52 53 hasPackages, err := packages.HasRepositoryPackages(ctx, ctx.Repo.Repository.ID) 54 if err != nil { 55 ctx.ServerError("HasRepositoryPackages", err) 56 return 57 } 58 59 ctx.Data["Title"] = ctx.Tr("packages.title") 60 ctx.Data["IsPackagesPage"] = true 61 ctx.Data["Query"] = query 62 ctx.Data["PackageType"] = packageType 63 ctx.Data["AvailableTypes"] = packages.TypeList 64 ctx.Data["HasPackages"] = hasPackages 65 if ctx.Repo != nil { 66 ctx.Data["CanWritePackages"] = ctx.IsUserRepoWriter([]unit.Type{unit.TypePackages}) || ctx.IsUserSiteAdmin() 67 } 68 ctx.Data["PackageDescriptors"] = pds 69 ctx.Data["Total"] = total 70 ctx.Data["RepositoryAccessMap"] = map[int64]bool{ctx.Repo.Repository.ID: true} // There is only the current repository 71 72 pager := context.NewPagination(int(total), setting.UI.PackagesPagingNum, page, 5) 73 pager.AddParam(ctx, "q", "Query") 74 pager.AddParam(ctx, "type", "PackageType") 75 ctx.Data["Page"] = pager 76 77 ctx.HTML(http.StatusOK, tplPackagesList) 78 }