mirror of
https://github.com/anyproto/any-sync.git
synced 2025-06-08 05:57:03 +09:00
75 lines
2.3 KiB
Go
75 lines
2.3 KiB
Go
package clientspace
|
|
|
|
import (
|
|
"context"
|
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace"
|
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto"
|
|
)
|
|
|
|
type rpcHandler struct {
|
|
s *service
|
|
}
|
|
|
|
func (r *rpcHandler) SpacePull(ctx context.Context, request *spacesyncproto.SpacePullRequest) (resp *spacesyncproto.SpacePullResponse, err error) {
|
|
sp, err := r.s.GetSpace(ctx, request.Id)
|
|
if err != nil {
|
|
if err != spacesyncproto.ErrSpaceMissing {
|
|
err = spacesyncproto.ErrUnexpected
|
|
}
|
|
return
|
|
}
|
|
|
|
spaceDesc, err := sp.Description()
|
|
if err != nil {
|
|
err = spacesyncproto.ErrUnexpected
|
|
return
|
|
}
|
|
|
|
resp = &spacesyncproto.SpacePullResponse{
|
|
Payload: &spacesyncproto.SpacePayload{
|
|
SpaceHeader: spaceDesc.SpaceHeader,
|
|
AclPayloadId: spaceDesc.AclId,
|
|
AclPayload: spaceDesc.AclPayload,
|
|
SpaceSettingsPayload: spaceDesc.SpaceSettingsPayload,
|
|
SpaceSettingsPayloadId: spaceDesc.SpaceSettingsId,
|
|
},
|
|
}
|
|
return
|
|
}
|
|
|
|
func (r *rpcHandler) SpacePush(ctx context.Context, req *spacesyncproto.SpacePushRequest) (resp *spacesyncproto.SpacePushResponse, err error) {
|
|
description := commonspace.SpaceDescription{
|
|
SpaceHeader: req.Payload.SpaceHeader,
|
|
AclId: req.Payload.AclPayloadId,
|
|
AclPayload: req.Payload.AclPayload,
|
|
SpaceSettingsPayload: req.Payload.SpaceSettingsPayload,
|
|
SpaceSettingsId: req.Payload.SpaceSettingsPayloadId,
|
|
}
|
|
ctx = context.WithValue(ctx, commonspace.AddSpaceCtxKey, description)
|
|
_, err = r.s.GetSpace(ctx, description.SpaceHeader.GetId())
|
|
if err != nil {
|
|
return
|
|
}
|
|
resp = &spacesyncproto.SpacePushResponse{}
|
|
return
|
|
}
|
|
|
|
func (r *rpcHandler) HeadSync(ctx context.Context, req *spacesyncproto.HeadSyncRequest) (*spacesyncproto.HeadSyncResponse, error) {
|
|
sp, err := r.s.GetSpace(ctx, req.SpaceId)
|
|
if err != nil {
|
|
return nil, spacesyncproto.ErrSpaceMissing
|
|
}
|
|
return sp.SpaceSyncRpc().HeadSync(ctx, req)
|
|
}
|
|
|
|
func (r *rpcHandler) ObjectSyncStream(stream spacesyncproto.DRPCSpaceSync_ObjectSyncStreamStream) error {
|
|
msg, err := stream.Recv()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
sp, err := r.s.GetSpace(stream.Context(), msg.SpaceId)
|
|
if err != nil {
|
|
return spacesyncproto.ErrSpaceMissing
|
|
}
|
|
return sp.SpaceSyncRpc().Stream(stream)
|
|
}
|