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  }