1
0
Fork 0
mirror of https://github.com/anyproto/anytype-heart.git synced 2025-06-07 21:37:04 +09:00
anytype-heart/space/create.go
2024-11-13 10:50:05 +01:00

47 lines
1 KiB
Go

package space
import (
"context"
"github.com/anyproto/anytype-heart/space/clientspace"
"github.com/anyproto/anytype-heart/space/internal/spaceprocess/loader"
)
func (s *service) create(ctx context.Context) (sp clientspace.Space, err error) {
coreSpace, err := s.spaceCore.Create(ctx, s.repKey, s.AccountMetadataPayload())
if err != nil {
return nil, err
}
s.mu.Lock()
wait := make(chan struct{})
s.waiting[coreSpace.Id()] = controllerWaiter{
wait: wait,
}
s.mu.Unlock()
ctrl, err := s.factory.CreateShareableSpace(ctx, coreSpace.Id())
if err != nil {
s.mu.Lock()
close(wait)
s.waiting[coreSpace.Id()] = controllerWaiter{
wait: wait,
err: err,
}
s.mu.Unlock()
return nil, err
}
sp, err = ctrl.Current().(loader.LoadWaiter).WaitLoad(ctx)
s.mu.Lock()
close(wait)
if err != nil {
s.waiting[coreSpace.Id()] = controllerWaiter{
wait: wait,
err: err,
}
s.mu.Unlock()
return nil, err
}
s.spaceControllers[ctrl.SpaceId()] = ctrl
s.mu.Unlock()
s.updater.UpdateCoordinatorStatus()
return
}