MCPcopy Create free account
hub / github.com/pydio/cells / DeleteNode

Method DeleteNode

common/nodes/sync/handler-sync-folder-tasks.go:58–112  ·  view source on GitHub ↗

DeleteNode synchronously and recursively delete a node

(ctx context.Context, in *tree.DeleteNodeRequest, opts ...grpc.CallOption)

Source from the content-addressed store, hash-verified

56
57// DeleteNode synchronously and recursively delete a node
58func (h *FolderTasksHandler) DeleteNode(ctx context.Context, in *tree.DeleteNodeRequest, opts ...grpc.CallOption) (*tree.DeleteNodeResponse, error) {
59
60 bi, er := nodes.GetBranchInfo(ctx, "in")
61 if er != nil {
62 return nil, er
63 }
64 isFlat := bi.FlatStorage
65 node := in.Node
66 var err error
67 if node.IsLeaf() {
68 _, err = h.Next.DeleteNode(ctx, &tree.DeleteNodeRequest{Node: node.Clone()})
69 } else {
70 pFile := path.Join(node.Path, common.PydioSyncHiddenFile)
71 // Now list all children and delete them all
72 stream, er := h.Next.ListNodes(ctx, &tree.ListNodesRequest{Node: node, Recursive: true})
73 if er != nil {
74 return nil, er
75 }
76 defer stream.CloseSend()
77 for {
78 resp, e := stream.Recv()
79 if e != nil {
80 break
81 }
82 if resp == nil {
83 continue
84 }
85 if resp.Node.Path == pFile {
86 continue
87 }
88 if !resp.Node.IsLeaf() {
89 continue
90 }
91 if _, err := h.Next.DeleteNode(ctx, &tree.DeleteNodeRequest{Node: resp.Node}); err != nil {
92 log.Logger(ctx).Error("Error while deleting node child " + err.Error())
93 return nil, err
94 }
95 }
96 if !isFlat {
97 fakeChild := node.Clone()
98 fakeChild.Path = pFile
99 initMetaPath := fakeChild.GetStringMeta(common.MetaNamespaceDatasourcePath)
100 fakeChild.MustSetMeta(common.MetaNamespaceDatasourcePath, path.Join(initMetaPath, common.PydioSyncHiddenFile))
101 _, err = h.Next.DeleteNode(ctx, &tree.DeleteNodeRequest{Node: fakeChild})
102 } else {
103 _, err = h.Next.DeleteNode(ctx, &tree.DeleteNodeRequest{Node: node.Clone()})
104 }
105 }
106 if err != nil {
107 return nil, err
108 } else {
109 return &tree.DeleteNodeResponse{Success: true}, nil
110 }
111
112}
113
114// UpdateNode synchronously and recursively performs a Move operation of a node
115func (h *FolderTasksHandler) UpdateNode(ctx context.Context, in *tree.UpdateNodeRequest, opts ...grpc.CallOption) (*tree.UpdateNodeResponse, error) {

Callers

nothing calls this directly

Calls 12

GetBranchInfoFunction · 0.92
LoggerFunction · 0.92
MustSetMetaMethod · 0.80
IsLeafMethod · 0.65
DeleteNodeMethod · 0.65
CloneMethod · 0.65
ListNodesMethod · 0.65
CloseSendMethod · 0.65
RecvMethod · 0.65
ErrorMethod · 0.65
GetStringMetaMethod · 0.65
JoinMethod · 0.45

Tested by

no test coverage detected