mirror of
https://github.com/anyproto/anytype-heart.git
synced 2025-06-09 09:35:00 +09:00
GO-4400 WIP new invite without approve logic
This commit is contained in:
parent
3097b3855b
commit
f610462beb
11 changed files with 759 additions and 661 deletions
|
@ -49,6 +49,48 @@ func (s *service) Join(ctx context.Context, id, aclHeadId string) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (s *service) InviteJoin(ctx context.Context, id, aclHeadId string) error {
|
||||
s.mu.Lock()
|
||||
waiter, exists := s.waiting[id]
|
||||
if exists {
|
||||
s.mu.Unlock()
|
||||
<-waiter.wait
|
||||
if waiter.err != nil {
|
||||
return waiter.err
|
||||
}
|
||||
s.mu.Lock()
|
||||
ctrl := s.spaceControllers[id]
|
||||
s.mu.Unlock()
|
||||
if ctrl.Mode() != mode.ModeLoading {
|
||||
info := spaceinfo.NewSpacePersistentInfo(id)
|
||||
info.SetAclHeadId(aclHeadId).SetAccountStatus(spaceinfo.AccountStatusActive)
|
||||
return ctrl.SetPersistentInfo(ctx, info)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
wait := make(chan struct{})
|
||||
s.waiting[id] = controllerWaiter{
|
||||
wait: wait,
|
||||
}
|
||||
s.mu.Unlock()
|
||||
ctrl, err := s.factory.CreateActiveSpace(ctx, id, aclHeadId)
|
||||
if err != nil {
|
||||
s.mu.Lock()
|
||||
close(wait)
|
||||
s.waiting[id] = controllerWaiter{
|
||||
wait: wait,
|
||||
err: err,
|
||||
}
|
||||
s.mu.Unlock()
|
||||
return err
|
||||
}
|
||||
s.mu.Lock()
|
||||
close(wait)
|
||||
s.spaceControllers[ctrl.SpaceId()] = ctrl
|
||||
s.mu.Unlock()
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *service) CancelLeave(ctx context.Context, id string) error {
|
||||
info := spaceinfo.NewSpacePersistentInfo(id)
|
||||
info.SetAccountStatus(spaceinfo.AccountStatusActive)
|
||||
|
|
|
@ -61,6 +61,7 @@ type Service interface {
|
|||
Create(ctx context.Context) (space clientspace.Space, err error)
|
||||
|
||||
Join(ctx context.Context, id, aclHeadId string) error
|
||||
InviteJoin(ctx context.Context, id, aclHeadId string) error
|
||||
CancelLeave(ctx context.Context, id string) (err error)
|
||||
Get(ctx context.Context, id string) (space clientspace.Space, err error)
|
||||
Wait(ctx context.Context, spaceId string) (sp clientspace.Space, err error)
|
||||
|
|
|
@ -32,6 +32,7 @@ type SpaceFactory interface {
|
|||
NewShareableSpace(ctx context.Context, id string, info spaceinfo.SpacePersistentInfo) (spacecontroller.SpaceController, error)
|
||||
CreateStreamableSpace(ctx context.Context, privKey crypto.PrivKey, id string, metadata []byte) (spacecontroller.SpaceController, error)
|
||||
NewStreamableSpace(ctx context.Context, id string, info spaceinfo.SpacePersistentInfo, metadata []byte) (spacecontroller.SpaceController, error)
|
||||
CreateActiveSpace(ctx context.Context, id, aclHeadId string) (sp spacecontroller.SpaceController, err error)
|
||||
CreateMarketplaceSpace(ctx context.Context) (sp spacecontroller.SpaceController, err error)
|
||||
CreateAndSetTechSpace(ctx context.Context) (*clientspace.TechSpace, error)
|
||||
LoadAndSetTechSpace(ctx context.Context) (*clientspace.TechSpace, error)
|
||||
|
@ -208,6 +209,26 @@ func (s *spaceFactory) CreateInvitingSpace(ctx context.Context, id, aclHeadId st
|
|||
return ctrl, err
|
||||
}
|
||||
|
||||
func (s *spaceFactory) CreateActiveSpace(ctx context.Context, id, aclHeadId string) (sp spacecontroller.SpaceController, err error) {
|
||||
exists, err := s.techSpace.SpaceViewExists(ctx, id)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
info := spaceinfo.NewSpacePersistentInfo(id)
|
||||
info.SetAclHeadId(aclHeadId).SetAccountStatus(spaceinfo.AccountStatusActive)
|
||||
if !exists {
|
||||
if err := s.techSpace.SpaceViewCreate(ctx, id, true, info); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
ctrl, err := shareablespace.NewSpaceController(id, info, s.app)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
err = ctrl.Start(ctx)
|
||||
return ctrl, err
|
||||
}
|
||||
|
||||
func (s *spaceFactory) CreateShareableSpace(ctx context.Context, id string) (sp spacecontroller.SpaceController, err error) {
|
||||
coreSpace, err := s.spaceCore.Get(ctx, id)
|
||||
if err != nil {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue