-
Notifications
You must be signed in to change notification settings - Fork 0
/
metadata.go
35 lines (32 loc) · 1.35 KB
/
metadata.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package proc
import (
"context"
"fmt"
"path"
"github.com/pydio/cells/common/proto/tree"
"github.com/pydio/cells/common/sync/merger"
"github.com/pydio/cells/common/sync/model"
)
// processMetadata applies the Metadata operations (OpCreateMeta, OpUpdateMeta, OpDeleteMeta)
func (pr *Processor) processMetadata(canceler context.Context, operation merger.Operation, operationId string, progress chan int64) error {
if mr, ok := operation.Target().(model.MetadataReceiver); ok {
opNode := operation.GetNode()
if opNode == nil {
return fmt.Errorf("cannot find operation node for operating on metadata")
}
parentUuid := operation.GetNode().GetStringMeta(merger.MetaNodeParentUUIDMeta)
if parentUuid == "" {
return fmt.Errorf("cannot find parent Uuid for operating on Metadata")
}
parentPath := operation.GetNode().GetStringMeta(merger.MetaNodeParentPathMeta)
switch operation.Type() {
case merger.OpCreateMeta:
return mr.CreateMetadata(canceler, &tree.Node{Uuid: parentUuid, Path: parentPath}, path.Base(opNode.GetPath()), opNode.Etag)
case merger.OpUpdateMeta:
return mr.UpdateMetadata(canceler, &tree.Node{Uuid: parentUuid, Path: parentPath}, path.Base(opNode.GetPath()), opNode.Etag)
case merger.OpDeleteMeta:
return mr.DeleteMetadata(canceler, &tree.Node{Uuid: parentUuid, Path: parentPath}, path.Base(opNode.GetPath()))
}
}
return nil
}