mirror of
				https://github.com/cloudreve/cloudreve.git
				synced 2025-10-31 08:39:10 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			48 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package share
 | |
| 
 | |
| import (
 | |
| 	"net/url"
 | |
| 
 | |
| 	"github.com/cloudreve/Cloudreve/v4/ent"
 | |
| 	"github.com/cloudreve/Cloudreve/v4/inventory"
 | |
| 	"github.com/cloudreve/Cloudreve/v4/inventory/types"
 | |
| 	"github.com/cloudreve/Cloudreve/v4/pkg/filemanager/fs"
 | |
| 	"github.com/cloudreve/Cloudreve/v4/pkg/filemanager/fs/dbfs"
 | |
| 	"github.com/cloudreve/Cloudreve/v4/pkg/hashid"
 | |
| 	"github.com/cloudreve/Cloudreve/v4/service/explorer"
 | |
| 	"github.com/samber/lo"
 | |
| )
 | |
| 
 | |
| type ListShareResponse struct {
 | |
| 	Shares     []explorer.Share             `json:"shares"`
 | |
| 	Pagination *inventory.PaginationResults `json:"pagination"`
 | |
| }
 | |
| 
 | |
| func BuildListShareResponse(res *inventory.ListShareResult, hasher hashid.Encoder, base *url.URL, requester *ent.User, unlocked bool) *ListShareResponse {
 | |
| 	var infos []explorer.Share
 | |
| 	for _, share := range res.Shares {
 | |
| 		expired := inventory.IsValidShare(share) != nil
 | |
| 		shareName := share.Edges.File.Name
 | |
| 		if share.Edges.File.FileChildren == 0 && len(share.Edges.File.Edges.Metadata) >= 0 {
 | |
| 			// For files in trash bin, read the real name from metadata
 | |
| 			restoreUri, found := lo.Find(share.Edges.File.Edges.Metadata, func(m *ent.Metadata) bool {
 | |
| 				return m.Name == dbfs.MetadataRestoreUri
 | |
| 			})
 | |
| 			if found {
 | |
| 				uri, err := fs.NewUriFromString(restoreUri.Value)
 | |
| 				if err == nil {
 | |
| 					shareName = uri.Name()
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		infos = append(infos, *explorer.BuildShare(share, base, hasher, requester, share.Edges.User, shareName,
 | |
| 			types.FileType(share.Edges.File.Type), unlocked, expired))
 | |
| 	}
 | |
| 
 | |
| 	return &ListShareResponse{
 | |
| 		Shares:     infos,
 | |
| 		Pagination: res.PaginationResults,
 | |
| 	}
 | |
| }
 | 
