From 13e774f27d5bed3c83e7355d3006a1ca9fec92ac Mon Sep 17 00:00:00 2001 From: Aaron Liu Date: Thu, 21 Aug 2025 13:14:11 +0800 Subject: [PATCH] feat(dashboard): filter file by shared link, direct link, uploading status (#2667) --- assets | 2 +- inventory/file.go | 15 +++++++++++++++ service/admin/file.go | 34 ++++++++++++++++++++++++++++------ 3 files changed, 44 insertions(+), 7 deletions(-) diff --git a/assets b/assets index 5a1665a..2827c6b 160000 --- a/assets +++ b/assets @@ -1 +1 @@ -Subproject commit 5a1665a96a96234fb7ea5fd5131b15ecebe127be +Subproject commit 2827c6bc2eddc44597f429d1a35c446c15aa7f30 diff --git a/inventory/file.go b/inventory/file.go index 56b4d4c..788808e 100644 --- a/inventory/file.go +++ b/inventory/file.go @@ -57,6 +57,9 @@ type ( UserID int Name string StoragePolicyID int + HasMetadata string + Shared bool + HasDirectLink bool } MetadataFilter struct { @@ -1098,6 +1101,18 @@ func (f *fileClient) FlattenListFiles(ctx context.Context, args *FlattenListFile query = query.Where(file.NameContainsFold(args.Name)) } + if args.HasMetadata != "" { + query = query.Where(file.HasMetadataWith(metadata.Name(args.HasMetadata))) + } + + if args.Shared { + query = query.Where(file.HasSharesWith(share.DeletedAtIsNil())) + } + + if args.HasDirectLink { + query = query.Where(file.HasDirectLinksWith(directlink.DeletedAtIsNil())) + } + query.Order(getFileOrderOption(&ListFileParameters{ PaginationArgs: args.PaginationArgs, })...) diff --git a/service/admin/file.go b/service/admin/file.go index 4e46db0..aeb3fb0 100644 --- a/service/admin/file.go +++ b/service/admin/file.go @@ -16,6 +16,7 @@ import ( "github.com/cloudreve/Cloudreve/v4/pkg/filemanager/manager/entitysource" "github.com/cloudreve/Cloudreve/v4/pkg/hashid" "github.com/cloudreve/Cloudreve/v4/pkg/serializer" + "github.com/cloudreve/Cloudreve/v4/pkg/setting" "github.com/gin-gonic/gin" "github.com/samber/lo" ) @@ -150,9 +151,12 @@ func (service *FileBatchService) Delete(c *gin.Context) serializer.Response { } const ( - fileNameCondition = "file_name" - fileUserCondition = "file_user" - filePolicyCondition = "file_policy" + fileNameCondition = "file_name" + fileUserCondition = "file_user" + filePolicyCondition = "file_policy" + fileMetadataCondition = "file_metadata" + fileSharedCondition = "file_shared" + fileDirectLinkCondition = "file_direct_link" ) func (service *AdminListService) Files(c *gin.Context) (*ListFileResponse, error) { @@ -167,9 +171,12 @@ func (service *AdminListService) Files(c *gin.Context) (*ListFileResponse, error ctx = context.WithValue(ctx, inventory.LoadFileDirectLink{}, true) var ( - err error - userID int - policyID int + err error + userID int + policyID int + metadata string + shared bool + directLink bool ) if service.Conditions[fileUserCondition] != "" { @@ -186,6 +193,18 @@ func (service *AdminListService) Files(c *gin.Context) (*ListFileResponse, error } } + if service.Conditions[fileMetadataCondition] != "" { + metadata = service.Conditions[fileMetadataCondition] + } + + if service.Conditions[fileSharedCondition] != "" && setting.IsTrueValue(service.Conditions[fileSharedCondition]) { + shared = true + } + + if service.Conditions[fileDirectLinkCondition] != "" && setting.IsTrueValue(service.Conditions[fileDirectLinkCondition]) { + directLink = true + } + res, err := fileClient.FlattenListFiles(ctx, &inventory.FlattenListFileParameters{ PaginationArgs: &inventory.PaginationArgs{ Page: service.Page - 1, @@ -196,6 +215,9 @@ func (service *AdminListService) Files(c *gin.Context) (*ListFileResponse, error UserID: userID, StoragePolicyID: policyID, Name: service.Conditions[fileNameCondition], + HasMetadata: metadata, + Shared: shared, + HasDirectLink: directLink, }) if err != nil {