MCPcopy
hub / github.com/cloudreve/cloudreve / CreateFile

Method CreateFile

inventory/file.go:798–854  ·  view source on GitHub ↗
(ctx context.Context, root *ent.File, args *CreateFileParameters)

Source from the content-addressed store, hash-verified

796}
797
798func (f *fileClient) CreateFile(ctx context.Context, root *ent.File, args *CreateFileParameters) (*ent.File, *ent.Entity, StorageDiff, error) {
799 var defaultEntity *ent.Entity
800 stm := f.client.File.
801 Create().
802 SetOwnerID(root.OwnerID).
803 SetType(int(args.FileType)).
804 SetName(args.Name).
805 SetParent(root).
806 SetIsSymbolic(args.IsSymbolic).
807 SetStoragePoliciesID(args.StoragePolicyID)
808
809 if args.EntityParameters != nil && args.EntityParameters.Importing {
810 stm.SetSize(args.EntityParameters.Size)
811 }
812
813 newFile, err := stm.Save(ctx)
814 if err != nil {
815 return nil, nil, nil, fmt.Errorf("failed to create file: %v", err)
816 }
817
818 // Create default primary file entity if needed
819 var storageDiff StorageDiff
820 if args.EntityParameters != nil {
821 args.EntityParameters.OwnerID = root.OwnerID
822 args.EntityParameters.StoragePolicyID = args.StoragePolicyID
823 defaultEntity, storageDiff, err = f.CreateEntity(ctx, newFile, args.EntityParameters)
824 if err != nil {
825 return nil, nil, storageDiff, fmt.Errorf("failed to create default entity: %v", err)
826 }
827
828 if args.EntityParameters.Importing {
829 if err := f.client.File.UpdateOne(newFile).SetPrimaryEntity(defaultEntity.ID).Exec(ctx); err != nil {
830 return nil, nil, storageDiff, fmt.Errorf("failed to set primary entity: %v", err)
831 }
832 }
833 }
834
835 // Create metadata if needed
836 if len(args.Metadata) > 0 {
837 _, err := f.client.Metadata.
838 CreateBulk(lo.MapToSlice(args.Metadata, func(key, value string) *ent.MetadataCreate {
839 _, isPrivate := args.MetadataPrivateMask[key]
840 return f.client.Metadata.Create().
841 SetName(key).
842 SetValue(value).
843 SetFile(newFile).
844 SetIsPublic(!isPrivate)
845 })...).
846 Save(ctx)
847 if err != nil {
848 return nil, nil, storageDiff, fmt.Errorf("failed to create metadata: %v", err)
849 }
850 }
851
852 return newFile, defaultEntity, storageDiff, err
853
854}
855

Callers

nothing calls this directly

Calls 15

CreateEntityMethod · 0.95
SetParentMethod · 0.65
CreateMethod · 0.65
ExecMethod · 0.65
SetPrimaryEntityMethod · 0.65
SetStoragePoliciesIDMethod · 0.45
SetIsSymbolicMethod · 0.45
SetNameMethod · 0.45
SetTypeMethod · 0.45
SetOwnerIDMethod · 0.45
SetSizeMethod · 0.45
SaveMethod · 0.45

Tested by

no test coverage detected