1
0
Fork 0
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:
Mikhail Rakhmanov 2025-05-13 15:36:40 +02:00
parent 3097b3855b
commit f610462beb
No known key found for this signature in database
GPG key ID: DED12CFEF5B8396B
11 changed files with 759 additions and 661 deletions

View file

@ -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)

View file

@ -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)

View file

@ -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 {