code.gitea.io/gitea@v1.21.7/routers/web/admin/packages.go (about) 1 // Copyright 2014 The Gogs Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package admin 5 6 import ( 7 "net/http" 8 "net/url" 9 "time" 10 11 "code.gitea.io/gitea/models/db" 12 packages_model "code.gitea.io/gitea/models/packages" 13 "code.gitea.io/gitea/modules/base" 14 "code.gitea.io/gitea/modules/context" 15 "code.gitea.io/gitea/modules/setting" 16 "code.gitea.io/gitea/modules/util" 17 packages_service "code.gitea.io/gitea/services/packages" 18 packages_cleanup_service "code.gitea.io/gitea/services/packages/cleanup" 19 ) 20 21 const ( 22 tplPackagesList base.TplName = "admin/packages/list" 23 ) 24 25 // Packages shows all packages 26 func Packages(ctx *context.Context) { 27 page := ctx.FormInt("page") 28 if page <= 1 { 29 page = 1 30 } 31 query := ctx.FormTrim("q") 32 packageType := ctx.FormTrim("type") 33 sort := ctx.FormTrim("sort") 34 35 pvs, total, err := packages_model.SearchVersions(ctx, &packages_model.PackageSearchOptions{ 36 Type: packages_model.Type(packageType), 37 Name: packages_model.SearchValue{Value: query}, 38 Sort: sort, 39 IsInternal: util.OptionalBoolFalse, 40 Paginator: &db.ListOptions{ 41 PageSize: setting.UI.PackagesPagingNum, 42 Page: page, 43 }, 44 }) 45 if err != nil { 46 ctx.ServerError("SearchVersions", err) 47 return 48 } 49 50 pds, err := packages_model.GetPackageDescriptors(ctx, pvs) 51 if err != nil { 52 ctx.ServerError("GetPackageDescriptors", err) 53 return 54 } 55 56 totalBlobSize, err := packages_model.GetTotalBlobSize(ctx) 57 if err != nil { 58 ctx.ServerError("GetTotalBlobSize", err) 59 return 60 } 61 62 totalUnreferencedBlobSize, err := packages_model.GetTotalUnreferencedBlobSize(ctx) 63 if err != nil { 64 ctx.ServerError("CalculateBlobSize", err) 65 return 66 } 67 68 ctx.Data["Title"] = ctx.Tr("packages.title") 69 ctx.Data["PageIsAdminPackages"] = true 70 ctx.Data["Query"] = query 71 ctx.Data["PackageType"] = packageType 72 ctx.Data["AvailableTypes"] = packages_model.TypeList 73 ctx.Data["SortType"] = sort 74 ctx.Data["PackageDescriptors"] = pds 75 ctx.Data["TotalCount"] = total 76 ctx.Data["TotalBlobSize"] = totalBlobSize - totalUnreferencedBlobSize 77 ctx.Data["TotalUnreferencedBlobSize"] = totalUnreferencedBlobSize 78 79 pager := context.NewPagination(int(total), setting.UI.PackagesPagingNum, page, 5) 80 pager.AddParamString("q", query) 81 pager.AddParamString("type", packageType) 82 pager.AddParamString("sort", sort) 83 ctx.Data["Page"] = pager 84 85 ctx.HTML(http.StatusOK, tplPackagesList) 86 } 87 88 // DeletePackageVersion deletes a package version 89 func DeletePackageVersion(ctx *context.Context) { 90 pv, err := packages_model.GetVersionByID(ctx, ctx.FormInt64("id")) 91 if err != nil { 92 ctx.ServerError("GetRepositoryByID", err) 93 return 94 } 95 96 if err := packages_service.RemovePackageVersion(ctx, ctx.Doer, pv); err != nil { 97 ctx.ServerError("RemovePackageVersion", err) 98 return 99 } 100 101 ctx.Flash.Success(ctx.Tr("packages.settings.delete.success")) 102 ctx.JSONRedirect(setting.AppSubURL + "/admin/packages?page=" + url.QueryEscape(ctx.FormString("page")) + "&q=" + url.QueryEscape(ctx.FormString("q")) + "&type=" + url.QueryEscape(ctx.FormString("type"))) 103 } 104 105 func CleanupExpiredData(ctx *context.Context) { 106 if err := packages_cleanup_service.CleanupExpiredData(ctx, time.Duration(0)); err != nil { 107 ctx.ServerError("CleanupExpiredData", err) 108 return 109 } 110 111 ctx.Flash.Success(ctx.Tr("packages.cleanup.success")) 112 ctx.Redirect(setting.AppSubURL + "/admin/packages") 113 }