mirror of
https://github.com/anyproto/anytype-heart.git
synced 2025-06-07 21:37:04 +09:00
47 lines
1 KiB
Go
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
|
|
}
|