mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 02:46:04 +01:00 
			
		
		
		
	Refactor packages (func name & UI) (#34773)
1. Use `OpenXxx` instead of `GetXxx` because the returned readers should be correctly closed, and clarify the behaviors of the functions: they increase the download counter 2. Use `packages-content` styles instead of `issue-content`
This commit is contained in:
		| @@ -68,7 +68,7 @@ func GetRepositoryFile(ctx *context.Context) { | |||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	s, u, pf, err := packages_service.GetFileStreamByPackageVersion( | 	s, u, pf, err := packages_service.OpenFileForDownloadByPackageVersion( | ||||||
| 		ctx, | 		ctx, | ||||||
| 		pv, | 		pv, | ||||||
| 		&packages_service.PackageFileInfo{ | 		&packages_service.PackageFileInfo{ | ||||||
| @@ -216,7 +216,7 @@ func DownloadPackageFile(ctx *context.Context) { | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	s, u, pf, err := packages_service.GetPackageFileStream(ctx, pfs[0]) | 	s, u, pf, err := packages_service.OpenFileForDownload(ctx, pfs[0]) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		if errors.Is(err, util.ErrNotExist) { | 		if errors.Is(err, util.ErrNotExist) { | ||||||
| 			apiError(ctx, http.StatusNotFound, err) | 			apiError(ctx, http.StatusNotFound, err) | ||||||
|   | |||||||
| @@ -239,7 +239,7 @@ func GetPackageOrRepositoryFile(ctx *context.Context) { | |||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	s, u, pf, err := packages_service.GetPackageFileStream(ctx, pfs[0]) | 	s, u, pf, err := packages_service.OpenFileForDownload(ctx, pfs[0]) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		if errors.Is(err, util.ErrNotExist) { | 		if errors.Is(err, util.ErrNotExist) { | ||||||
| 			apiError(ctx, http.StatusNotFound, err) | 			apiError(ctx, http.StatusNotFound, err) | ||||||
|   | |||||||
| @@ -165,7 +165,7 @@ func ListOwners(ctx *context.Context) { | |||||||
|  |  | ||||||
| // DownloadPackageFile serves the content of a package | // DownloadPackageFile serves the content of a package | ||||||
| func DownloadPackageFile(ctx *context.Context) { | func DownloadPackageFile(ctx *context.Context) { | ||||||
| 	s, u, pf, err := packages_service.GetFileStreamByPackageNameAndVersion( | 	s, u, pf, err := packages_service.OpenFileForDownloadByPackageNameAndVersion( | ||||||
| 		ctx, | 		ctx, | ||||||
| 		&packages_service.PackageInfo{ | 		&packages_service.PackageInfo{ | ||||||
| 			Owner:       ctx.Package.Owner, | 			Owner:       ctx.Package.Owner, | ||||||
|   | |||||||
| @@ -343,7 +343,7 @@ func DownloadPackage(ctx *context.Context) { | |||||||
|  |  | ||||||
| 	pf := pd.Files[0].File | 	pf := pd.Files[0].File | ||||||
|  |  | ||||||
| 	s, u, _, err := packages_service.GetPackageFileStream(ctx, pf) | 	s, u, _, err := packages_service.OpenFileForDownload(ctx, pf) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		apiError(ctx, http.StatusInternalServerError, err) | 		apiError(ctx, http.StatusInternalServerError, err) | ||||||
| 		return | 		return | ||||||
|   | |||||||
| @@ -160,7 +160,7 @@ func PackageMetadata(ctx *context.Context) { | |||||||
|  |  | ||||||
| // DownloadPackageFile serves the content of a package | // DownloadPackageFile serves the content of a package | ||||||
| func DownloadPackageFile(ctx *context.Context) { | func DownloadPackageFile(ctx *context.Context) { | ||||||
| 	s, u, pf, err := packages_service.GetFileStreamByPackageNameAndVersion( | 	s, u, pf, err := packages_service.OpenFileForDownloadByPackageNameAndVersion( | ||||||
| 		ctx, | 		ctx, | ||||||
| 		&packages_service.PackageInfo{ | 		&packages_service.PackageInfo{ | ||||||
| 			Owner:       ctx.Package.Owner, | 			Owner:       ctx.Package.Owner, | ||||||
|   | |||||||
| @@ -480,7 +480,7 @@ func downloadFile(ctx *context.Context, fileFilter container.Set[string], fileKe | |||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	s, u, pf, err := packages_service.GetFileStreamByPackageNameAndVersion( | 	s, u, pf, err := packages_service.OpenFileForDownloadByPackageNameAndVersion( | ||||||
| 		ctx, | 		ctx, | ||||||
| 		&packages_service.PackageInfo{ | 		&packages_service.PackageInfo{ | ||||||
| 			Owner:       ctx.Package.Owner, | 			Owner:       ctx.Package.Owner, | ||||||
|   | |||||||
| @@ -293,7 +293,7 @@ func DownloadPackageFile(ctx *context.Context) { | |||||||
|  |  | ||||||
| 	pf := pfs[0] | 	pf := pfs[0] | ||||||
|  |  | ||||||
| 	s, u, _, err := packages_service.GetPackageFileStream(ctx, pf) | 	s, u, _, err := packages_service.OpenFileForDownload(ctx, pf) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		apiError(ctx, http.StatusInternalServerError, err) | 		apiError(ctx, http.StatusInternalServerError, err) | ||||||
| 		return | 		return | ||||||
|   | |||||||
| @@ -705,7 +705,7 @@ func DeleteManifest(ctx *context.Context) { | |||||||
| func serveBlob(ctx *context.Context, pfd *packages_model.PackageFileDescriptor) { | func serveBlob(ctx *context.Context, pfd *packages_model.PackageFileDescriptor) { | ||||||
| 	serveDirectReqParams := make(url.Values) | 	serveDirectReqParams := make(url.Values) | ||||||
| 	serveDirectReqParams.Set("response-content-type", pfd.Properties.GetByName(container_module.PropertyMediaType)) | 	serveDirectReqParams.Set("response-content-type", pfd.Properties.GetByName(container_module.PropertyMediaType)) | ||||||
| 	s, u, _, err := packages_service.GetPackageBlobStream(ctx, pfd.File, pfd.Blob, serveDirectReqParams) | 	s, u, _, err := packages_service.OpenBlobForDownload(ctx, pfd.File, pfd.Blob, serveDirectReqParams) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		apiError(ctx, http.StatusInternalServerError, err) | 		apiError(ctx, http.StatusInternalServerError, err) | ||||||
| 		return | 		return | ||||||
|   | |||||||
| @@ -250,7 +250,7 @@ func downloadPackageFile(ctx *context.Context, opts *cran_model.SearchOptions) { | |||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	s, u, _, err := packages_service.GetPackageFileStream(ctx, pf) | 	s, u, _, err := packages_service.OpenFileForDownload(ctx, pf) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		if errors.Is(err, util.ErrNotExist) { | 		if errors.Is(err, util.ErrNotExist) { | ||||||
| 			apiError(ctx, http.StatusNotFound, err) | 			apiError(ctx, http.StatusNotFound, err) | ||||||
|   | |||||||
| @@ -59,7 +59,7 @@ func GetRepositoryFile(ctx *context.Context) { | |||||||
| 		key += "|" + component + "|" + architecture | 		key += "|" + component + "|" + architecture | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	s, u, pf, err := packages_service.GetFileStreamByPackageVersion( | 	s, u, pf, err := packages_service.OpenFileForDownloadByPackageVersion( | ||||||
| 		ctx, | 		ctx, | ||||||
| 		pv, | 		pv, | ||||||
| 		&packages_service.PackageFileInfo{ | 		&packages_service.PackageFileInfo{ | ||||||
| @@ -106,7 +106,7 @@ func GetRepositoryFileByHash(ctx *context.Context) { | |||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	s, u, pf, err := packages_service.GetPackageFileStream(ctx, pfs[0]) | 	s, u, pf, err := packages_service.OpenFileForDownload(ctx, pfs[0]) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		if errors.Is(err, util.ErrNotExist) { | 		if errors.Is(err, util.ErrNotExist) { | ||||||
| 			apiError(ctx, http.StatusNotFound, err) | 			apiError(ctx, http.StatusNotFound, err) | ||||||
| @@ -210,7 +210,7 @@ func DownloadPackageFile(ctx *context.Context) { | |||||||
| 	name := ctx.PathParam("name") | 	name := ctx.PathParam("name") | ||||||
| 	version := ctx.PathParam("version") | 	version := ctx.PathParam("version") | ||||||
|  |  | ||||||
| 	s, u, pf, err := packages_service.GetFileStreamByPackageNameAndVersion( | 	s, u, pf, err := packages_service.OpenFileForDownloadByPackageNameAndVersion( | ||||||
| 		ctx, | 		ctx, | ||||||
| 		&packages_service.PackageInfo{ | 		&packages_service.PackageInfo{ | ||||||
| 			Owner:       ctx.Package.Owner, | 			Owner:       ctx.Package.Owner, | ||||||
|   | |||||||
| @@ -31,7 +31,7 @@ func apiError(ctx *context.Context, status int, obj any) { | |||||||
|  |  | ||||||
| // DownloadPackageFile serves the specific generic package. | // DownloadPackageFile serves the specific generic package. | ||||||
| func DownloadPackageFile(ctx *context.Context) { | func DownloadPackageFile(ctx *context.Context) { | ||||||
| 	s, u, pf, err := packages_service.GetFileStreamByPackageNameAndVersion( | 	s, u, pf, err := packages_service.OpenFileForDownloadByPackageNameAndVersion( | ||||||
| 		ctx, | 		ctx, | ||||||
| 		&packages_service.PackageInfo{ | 		&packages_service.PackageInfo{ | ||||||
| 			Owner:       ctx.Package.Owner, | 			Owner:       ctx.Package.Owner, | ||||||
|   | |||||||
| @@ -106,7 +106,7 @@ func DownloadPackageFile(ctx *context.Context) { | |||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	s, u, _, err := packages_service.GetPackageFileStream(ctx, pfs[0]) | 	s, u, _, err := packages_service.OpenFileForDownload(ctx, pfs[0]) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		if errors.Is(err, util.ErrNotExist) { | 		if errors.Is(err, util.ErrNotExist) { | ||||||
| 			apiError(ctx, http.StatusNotFound, err) | 			apiError(ctx, http.StatusNotFound, err) | ||||||
|   | |||||||
| @@ -122,7 +122,7 @@ func DownloadPackageFile(ctx *context.Context) { | |||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	s, u, pf, err := packages_service.GetFileStreamByPackageVersion( | 	s, u, pf, err := packages_service.OpenFileForDownloadByPackageVersion( | ||||||
| 		ctx, | 		ctx, | ||||||
| 		pvs[0], | 		pvs[0], | ||||||
| 		&packages_service.PackageFileInfo{ | 		&packages_service.PackageFileInfo{ | ||||||
|   | |||||||
| @@ -223,7 +223,7 @@ func servePackageFile(ctx *context.Context, params parameters, serveContent bool | |||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	s, u, _, err := packages_service.GetPackageBlobStream(ctx, pf, pb, nil) | 	s, u, _, err := packages_service.OpenBlobForDownload(ctx, pf, pb, nil) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		apiError(ctx, http.StatusInternalServerError, err) | 		apiError(ctx, http.StatusInternalServerError, err) | ||||||
| 		return | 		return | ||||||
|   | |||||||
| @@ -85,7 +85,7 @@ func DownloadPackageFile(ctx *context.Context) { | |||||||
| 	packageVersion := ctx.PathParam("version") | 	packageVersion := ctx.PathParam("version") | ||||||
| 	filename := ctx.PathParam("filename") | 	filename := ctx.PathParam("filename") | ||||||
|  |  | ||||||
| 	s, u, pf, err := packages_service.GetFileStreamByPackageNameAndVersion( | 	s, u, pf, err := packages_service.OpenFileForDownloadByPackageNameAndVersion( | ||||||
| 		ctx, | 		ctx, | ||||||
| 		&packages_service.PackageInfo{ | 		&packages_service.PackageInfo{ | ||||||
| 			Owner:       ctx.Package.Owner, | 			Owner:       ctx.Package.Owner, | ||||||
| @@ -132,7 +132,7 @@ func DownloadPackageFileByName(ctx *context.Context) { | |||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	s, u, pf, err := packages_service.GetFileStreamByPackageVersion( | 	s, u, pf, err := packages_service.OpenFileForDownloadByPackageVersion( | ||||||
| 		ctx, | 		ctx, | ||||||
| 		pvs[0], | 		pvs[0], | ||||||
| 		&packages_service.PackageFileInfo{ | 		&packages_service.PackageFileInfo{ | ||||||
|   | |||||||
| @@ -405,7 +405,7 @@ func DownloadPackageFile(ctx *context.Context) { | |||||||
| 	packageVersion := ctx.PathParam("version") | 	packageVersion := ctx.PathParam("version") | ||||||
| 	filename := ctx.PathParam("filename") | 	filename := ctx.PathParam("filename") | ||||||
|  |  | ||||||
| 	s, u, pf, err := packages_service.GetFileStreamByPackageNameAndVersion( | 	s, u, pf, err := packages_service.OpenFileForDownloadByPackageNameAndVersion( | ||||||
| 		ctx, | 		ctx, | ||||||
| 		&packages_service.PackageInfo{ | 		&packages_service.PackageInfo{ | ||||||
| 			Owner:       ctx.Package.Owner, | 			Owner:       ctx.Package.Owner, | ||||||
| @@ -669,7 +669,7 @@ func DownloadSymbolFile(ctx *context.Context) { | |||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	s, u, pf, err := packages_service.GetPackageFileStream(ctx, pfs[0]) | 	s, u, pf, err := packages_service.OpenFileForDownload(ctx, pfs[0]) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		if errors.Is(err, packages_model.ErrPackageNotExist) || errors.Is(err, packages_model.ErrPackageFileNotExist) { | 		if errors.Is(err, packages_model.ErrPackageNotExist) || errors.Is(err, packages_model.ErrPackageFileNotExist) { | ||||||
| 			apiError(ctx, http.StatusNotFound, err) | 			apiError(ctx, http.StatusNotFound, err) | ||||||
|   | |||||||
| @@ -274,7 +274,7 @@ func DownloadPackageFile(ctx *context.Context) { | |||||||
|  |  | ||||||
| 	pf := pd.Files[0].File | 	pf := pd.Files[0].File | ||||||
|  |  | ||||||
| 	s, u, _, err := packages_service.GetPackageFileStream(ctx, pf) | 	s, u, _, err := packages_service.OpenFileForDownload(ctx, pf) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		apiError(ctx, http.StatusInternalServerError, err) | 		apiError(ctx, http.StatusInternalServerError, err) | ||||||
| 		return | 		return | ||||||
|   | |||||||
| @@ -82,7 +82,7 @@ func DownloadPackageFile(ctx *context.Context) { | |||||||
| 	packageVersion := ctx.PathParam("version") | 	packageVersion := ctx.PathParam("version") | ||||||
| 	filename := ctx.PathParam("filename") | 	filename := ctx.PathParam("filename") | ||||||
|  |  | ||||||
| 	s, u, pf, err := packages_service.GetFileStreamByPackageNameAndVersion( | 	s, u, pf, err := packages_service.OpenFileForDownloadByPackageNameAndVersion( | ||||||
| 		ctx, | 		ctx, | ||||||
| 		&packages_service.PackageInfo{ | 		&packages_service.PackageInfo{ | ||||||
| 			Owner:       ctx.Package.Owner, | 			Owner:       ctx.Package.Owner, | ||||||
|   | |||||||
| @@ -96,7 +96,7 @@ func GetRepositoryFile(ctx *context.Context) { | |||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	s, u, pf, err := packages_service.GetFileStreamByPackageVersion( | 	s, u, pf, err := packages_service.OpenFileForDownloadByPackageVersion( | ||||||
| 		ctx, | 		ctx, | ||||||
| 		pv, | 		pv, | ||||||
| 		&packages_service.PackageFileInfo{ | 		&packages_service.PackageFileInfo{ | ||||||
| @@ -220,7 +220,7 @@ func DownloadPackageFile(ctx *context.Context) { | |||||||
| 	name := ctx.PathParam("name") | 	name := ctx.PathParam("name") | ||||||
| 	version := ctx.PathParam("version") | 	version := ctx.PathParam("version") | ||||||
|  |  | ||||||
| 	s, u, pf, err := packages_service.GetFileStreamByPackageNameAndVersion( | 	s, u, pf, err := packages_service.OpenFileForDownloadByPackageNameAndVersion( | ||||||
| 		ctx, | 		ctx, | ||||||
| 		&packages_service.PackageInfo{ | 		&packages_service.PackageInfo{ | ||||||
| 			Owner:       ctx.Package.Owner, | 			Owner:       ctx.Package.Owner, | ||||||
|   | |||||||
| @@ -178,7 +178,7 @@ func DownloadPackageFile(ctx *context.Context) { | |||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	s, u, pf, err := packages_service.GetFileStreamByPackageVersion( | 	s, u, pf, err := packages_service.OpenFileForDownloadByPackageVersion( | ||||||
| 		ctx, | 		ctx, | ||||||
| 		pvs[0], | 		pvs[0], | ||||||
| 		&packages_service.PackageFileInfo{ | 		&packages_service.PackageFileInfo{ | ||||||
|   | |||||||
| @@ -429,7 +429,7 @@ func DownloadPackageFile(ctx *context.Context) { | |||||||
|  |  | ||||||
| 	pf := pd.Files[0].File | 	pf := pd.Files[0].File | ||||||
|  |  | ||||||
| 	s, u, _, err := packages_service.GetPackageFileStream(ctx, pf) | 	s, u, _, err := packages_service.OpenFileForDownload(ctx, pf) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		apiError(ctx, http.StatusInternalServerError, err) | 		apiError(ctx, http.StatusInternalServerError, err) | ||||||
| 		return | 		return | ||||||
|   | |||||||
| @@ -218,7 +218,7 @@ func UploadPackageFile(ctx *context.Context) { | |||||||
| } | } | ||||||
|  |  | ||||||
| func DownloadPackageFile(ctx *context.Context) { | func DownloadPackageFile(ctx *context.Context) { | ||||||
| 	s, u, pf, err := packages_service.GetFileStreamByPackageNameAndVersion( | 	s, u, pf, err := packages_service.OpenFileForDownloadByPackageNameAndVersion( | ||||||
| 		ctx, | 		ctx, | ||||||
| 		&packages_service.PackageInfo{ | 		&packages_service.PackageInfo{ | ||||||
| 			Owner:       ctx.Package.Owner, | 			Owner:       ctx.Package.Owner, | ||||||
|   | |||||||
| @@ -513,9 +513,9 @@ func DownloadPackageFile(ctx *context.Context) { | |||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	s, u, _, err := packages_service.GetPackageFileStream(ctx, pf) | 	s, u, _, err := packages_service.OpenFileForDownload(ctx, pf) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		ctx.ServerError("GetPackageFileStream", err) | 		ctx.ServerError("OpenFileForDownload", err) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -563,8 +563,8 @@ func DeletePackageFile(ctx context.Context, pf *packages_model.PackageFile) erro | |||||||
| 	return packages_model.DeleteFileByID(ctx, pf.ID) | 	return packages_model.DeleteFileByID(ctx, pf.ID) | ||||||
| } | } | ||||||
|  |  | ||||||
| // GetFileStreamByPackageNameAndVersion returns the content of the specific package file | // OpenFileForDownloadByPackageNameAndVersion returns the content of the specific package file and increases the download counter. | ||||||
| func GetFileStreamByPackageNameAndVersion(ctx context.Context, pvi *PackageInfo, pfi *PackageFileInfo) (io.ReadSeekCloser, *url.URL, *packages_model.PackageFile, error) { | func OpenFileForDownloadByPackageNameAndVersion(ctx context.Context, pvi *PackageInfo, pfi *PackageFileInfo) (io.ReadSeekCloser, *url.URL, *packages_model.PackageFile, error) { | ||||||
| 	log.Trace("Getting package file stream: %v, %v, %s, %s, %s, %s", pvi.Owner.ID, pvi.PackageType, pvi.Name, pvi.Version, pfi.Filename, pfi.CompositeKey) | 	log.Trace("Getting package file stream: %v, %v, %s, %s, %s, %s", pvi.Owner.ID, pvi.PackageType, pvi.Name, pvi.Version, pfi.Filename, pfi.CompositeKey) | ||||||
|  |  | ||||||
| 	pv, err := packages_model.GetVersionByNameAndVersion(ctx, pvi.Owner.ID, pvi.PackageType, pvi.Name, pvi.Version) | 	pv, err := packages_model.GetVersionByNameAndVersion(ctx, pvi.Owner.ID, pvi.PackageType, pvi.Name, pvi.Version) | ||||||
| @@ -576,27 +576,27 @@ func GetFileStreamByPackageNameAndVersion(ctx context.Context, pvi *PackageInfo, | |||||||
| 		return nil, nil, nil, err | 		return nil, nil, nil, err | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return GetFileStreamByPackageVersion(ctx, pv, pfi) | 	return OpenFileForDownloadByPackageVersion(ctx, pv, pfi) | ||||||
| } | } | ||||||
|  |  | ||||||
| // GetFileStreamByPackageVersion returns the content of the specific package file | // OpenFileForDownloadByPackageVersion returns the content of the specific package file and increases the download counter. | ||||||
| func GetFileStreamByPackageVersion(ctx context.Context, pv *packages_model.PackageVersion, pfi *PackageFileInfo) (io.ReadSeekCloser, *url.URL, *packages_model.PackageFile, error) { | func OpenFileForDownloadByPackageVersion(ctx context.Context, pv *packages_model.PackageVersion, pfi *PackageFileInfo) (io.ReadSeekCloser, *url.URL, *packages_model.PackageFile, error) { | ||||||
| 	pf, err := packages_model.GetFileForVersionByName(ctx, pv.ID, pfi.Filename, pfi.CompositeKey) | 	pf, err := packages_model.GetFileForVersionByName(ctx, pv.ID, pfi.Filename, pfi.CompositeKey) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, nil, nil, err | 		return nil, nil, nil, err | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return GetPackageFileStream(ctx, pf) | 	return OpenFileForDownload(ctx, pf) | ||||||
| } | } | ||||||
|  |  | ||||||
| // GetPackageFileStream returns the content of the specific package file | // OpenFileForDownload returns the content of the specific package file and increases the download counter. | ||||||
| func GetPackageFileStream(ctx context.Context, pf *packages_model.PackageFile) (io.ReadSeekCloser, *url.URL, *packages_model.PackageFile, error) { | func OpenFileForDownload(ctx context.Context, pf *packages_model.PackageFile) (io.ReadSeekCloser, *url.URL, *packages_model.PackageFile, error) { | ||||||
| 	pb, err := packages_model.GetBlobByID(ctx, pf.BlobID) | 	pb, err := packages_model.GetBlobByID(ctx, pf.BlobID) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, nil, nil, err | 		return nil, nil, nil, err | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return GetPackageBlobStream(ctx, pf, pb, nil) | 	return OpenBlobForDownload(ctx, pf, pb, nil) | ||||||
| } | } | ||||||
|  |  | ||||||
| func OpenBlobStream(pb *packages_model.PackageBlob) (io.ReadSeekCloser, error) { | func OpenBlobStream(pb *packages_model.PackageBlob) (io.ReadSeekCloser, error) { | ||||||
| @@ -605,9 +605,9 @@ func OpenBlobStream(pb *packages_model.PackageBlob) (io.ReadSeekCloser, error) { | |||||||
| 	return cs.OpenBlob(key) | 	return cs.OpenBlob(key) | ||||||
| } | } | ||||||
|  |  | ||||||
| // GetPackageBlobStream returns the content of the specific package blob | // OpenBlobForDownload returns the content of the specific package blob and increases the download counter. | ||||||
| // If the storage supports direct serving and it's enabled, only the direct serving url is returned. | // If the storage supports direct serving and it's enabled, only the direct serving url is returned. | ||||||
| func GetPackageBlobStream(ctx context.Context, pf *packages_model.PackageFile, pb *packages_model.PackageBlob, serveDirectReqParams url.Values) (io.ReadSeekCloser, *url.URL, *packages_model.PackageFile, error) { | func OpenBlobForDownload(ctx context.Context, pf *packages_model.PackageFile, pb *packages_model.PackageBlob, serveDirectReqParams url.Values) (io.ReadSeekCloser, *url.URL, *packages_model.PackageFile, error) { | ||||||
| 	key := packages_module.BlobHash256Key(pb.HashSHA256) | 	key := packages_module.BlobHash256Key(pb.HashSHA256) | ||||||
|  |  | ||||||
| 	cs := packages_module.NewContentStore() | 	cs := packages_module.NewContentStore() | ||||||
|   | |||||||
| @@ -84,7 +84,7 @@ | |||||||
| 			{{end}} | 			{{end}} | ||||||
| 		</h4> | 		</h4> | ||||||
| 		<div class="ui attached segment tw-break-anywhere"> | 		<div class="ui attached segment tw-break-anywhere"> | ||||||
| 			<table class="ui very basic compact table"> | 			<table class="ui very basic compact table tw-font-mono"> | ||||||
| 				<tbody> | 				<tbody> | ||||||
| 					{{range $imageMetadata.ImageLayers}} | 					{{range $imageMetadata.ImageLayers}} | ||||||
| 						<tr> | 						<tr> | ||||||
| @@ -98,7 +98,7 @@ | |||||||
| 	{{if $imageMetadata.Labels}} | 	{{if $imageMetadata.Labels}} | ||||||
| 		<h4 class="ui top attached header">{{ctx.Locale.Tr "packages.container.labels"}}</h4> | 		<h4 class="ui top attached header">{{ctx.Locale.Tr "packages.container.labels"}}</h4> | ||||||
| 		<div class="ui attached segment"> | 		<div class="ui attached segment"> | ||||||
| 			<table class="ui very basic compact table"> | 			<table class="ui very basic compact table tw-font-mono"> | ||||||
| 				<thead> | 				<thead> | ||||||
| 					<tr> | 					<tr> | ||||||
| 						<th>{{ctx.Locale.Tr "packages.container.labels.key"}}</th> | 						<th>{{ctx.Locale.Tr "packages.container.labels.key"}}</th> | ||||||
|   | |||||||
| @@ -10,8 +10,8 @@ | |||||||
| 		{{end}} | 		{{end}} | ||||||
| 	</div> | 	</div> | ||||||
| </div> | </div> | ||||||
| <div class="issue-content"> | <div class="packages-content"> | ||||||
| 	<div class="issue-content-left"> | 	<div class="packages-content-left"> | ||||||
| 		{{template "package/content/alpine" .}} | 		{{template "package/content/alpine" .}} | ||||||
| 		{{template "package/content/arch" .}} | 		{{template "package/content/arch" .}} | ||||||
| 		{{template "package/content/cargo" .}} | 		{{template "package/content/cargo" .}} | ||||||
| @@ -35,7 +35,7 @@ | |||||||
| 		{{template "package/content/swift" .}} | 		{{template "package/content/swift" .}} | ||||||
| 		{{template "package/content/vagrant" .}} | 		{{template "package/content/vagrant" .}} | ||||||
| 	</div> | 	</div> | ||||||
| 	<div class="issue-content-right ui segment"> | 	<div class="ui segment packages-content-right"> | ||||||
| 		<strong>{{ctx.Locale.Tr "packages.details"}}</strong> | 		<strong>{{ctx.Locale.Tr "packages.details"}}</strong> | ||||||
| 		<div class="ui relaxed list flex-items-block"> | 		<div class="ui relaxed list flex-items-block"> | ||||||
| 			<div class="item">{{svg .PackageDescriptor.Package.Type.SVGName}} {{.PackageDescriptor.Package.Type.Name}}</div> | 			<div class="item">{{svg .PackageDescriptor.Package.Type.SVGName}} {{.PackageDescriptor.Package.Type.Name}}</div> | ||||||
| @@ -76,7 +76,7 @@ | |||||||
| 			{{range .PackageDescriptor.Files}} | 			{{range .PackageDescriptor.Files}} | ||||||
| 			<div class="item"> | 			<div class="item"> | ||||||
| 				<a href="{{$packageVersionLink}}/files/{{.File.ID}}">{{.File.Name}}</a> | 				<a href="{{$packageVersionLink}}/files/{{.File.ID}}">{{.File.Name}}</a> | ||||||
| 				<span class="text small file-size">{{FileSize .Blob.Size}}</span> | 				<span class="text small tw-whitespace-nowrap">{{FileSize .Blob.Size}}</span> | ||||||
| 			</div> | 			</div> | ||||||
| 			{{end}} | 			{{end}} | ||||||
| 		</div> | 		</div> | ||||||
|   | |||||||
| @@ -70,6 +70,7 @@ | |||||||
| @import "./repo/reactions.css"; | @import "./repo/reactions.css"; | ||||||
| @import "./repo/clone.css"; | @import "./repo/clone.css"; | ||||||
| @import "./repo/commit-sign.css"; | @import "./repo/commit-sign.css"; | ||||||
|  | @import "./repo/packages.css"; | ||||||
|  |  | ||||||
| @import "./editor/fileeditor.css"; | @import "./editor/fileeditor.css"; | ||||||
| @import "./editor/combomarkdowneditor.css"; | @import "./editor/combomarkdowneditor.css"; | ||||||
|   | |||||||
| @@ -1227,10 +1227,6 @@ td .commit-summary { | |||||||
|   font-weight: var(--font-weight-normal); |   font-weight: var(--font-weight-normal); | ||||||
| } | } | ||||||
|  |  | ||||||
| .repository.packages .file-size { |  | ||||||
|   white-space: nowrap; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .repository .activity-header { | .repository .activity-header { | ||||||
|   display: flex; |   display: flex; | ||||||
|   justify-content: space-between; |   justify-content: space-between; | ||||||
|   | |||||||
							
								
								
									
										25
									
								
								web_src/css/repo/packages.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								web_src/css/repo/packages.css
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | |||||||
|  | .packages-content { | ||||||
|  |   display: flex; | ||||||
|  |   align-items: flex-start; | ||||||
|  |   gap: 16px; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .packages-content-left { | ||||||
|  |   margin: 0 !important; | ||||||
|  |   width: calc(100% - 250px - 16px); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .packages-content-right { | ||||||
|  |   margin: 0 !important; | ||||||
|  |   width: 250px; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @media (max-width: 767.98px) { | ||||||
|  |   .packages-content { | ||||||
|  |     flex-direction: column; | ||||||
|  |   } | ||||||
|  |   .packages-content-left, | ||||||
|  |   .packages-content-right { | ||||||
|  |     width: 100%; | ||||||
|  |   } | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user