mirror of
https://github.com/anyproto/anytype-heart.git
synced 2025-06-08 05:47:07 +09:00
80 lines
2.2 KiB
Go
80 lines
2.2 KiB
Go
package clientspace
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/anyproto/any-sync/accountservice"
|
|
"github.com/anyproto/any-sync/commonspace"
|
|
"go.uber.org/zap"
|
|
|
|
"github.com/anyproto/anytype-heart/core/block/object/objectcache"
|
|
"github.com/anyproto/anytype-heart/core/domain"
|
|
"github.com/anyproto/anytype-heart/pkg/lib/bundle"
|
|
"github.com/anyproto/anytype-heart/space/clientspace/keyvalueservice"
|
|
"github.com/anyproto/anytype-heart/space/spacecore/keyvalueobserver"
|
|
"github.com/anyproto/anytype-heart/space/techspace"
|
|
)
|
|
|
|
type TechSpace struct {
|
|
*space
|
|
techspace.TechSpace
|
|
}
|
|
|
|
type TechSpaceDeps struct {
|
|
CommonSpace commonspace.Space
|
|
ObjectFactory objectcache.ObjectFactory
|
|
AccountService accountservice.Service
|
|
PersonalSpaceId string
|
|
Indexer spaceIndexer
|
|
Installer bundledObjectsInstaller
|
|
TechSpace techspace.TechSpace
|
|
KeyValueObserver keyvalueobserver.Observer
|
|
}
|
|
|
|
func NewTechSpace(deps TechSpaceDeps) (*TechSpace, error) {
|
|
sp := &TechSpace{
|
|
space: &space{
|
|
indexer: deps.Indexer,
|
|
installer: deps.Installer,
|
|
common: deps.CommonSpace,
|
|
loadMandatoryObjectsCh: make(chan struct{}),
|
|
personalSpaceId: deps.PersonalSpaceId,
|
|
aclIdentity: deps.AccountService.Account().SignKey.GetPublic(),
|
|
},
|
|
TechSpace: deps.TechSpace,
|
|
}
|
|
var err error
|
|
sp.keyValueService, err = keyvalueservice.New(sp.common, deps.KeyValueObserver)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("create key value service: %w", err)
|
|
}
|
|
sp.Cache = objectcache.New(deps.AccountService, deps.ObjectFactory, deps.PersonalSpaceId, sp)
|
|
return sp, nil
|
|
}
|
|
|
|
func (s *TechSpace) Close(ctx context.Context) error {
|
|
if s == nil || s.space == nil {
|
|
return nil
|
|
}
|
|
err := s.space.Close(ctx)
|
|
if err != nil {
|
|
log.Error("close tech space", zap.Error(err))
|
|
}
|
|
err = s.TechSpace.Close(ctx)
|
|
if err != nil {
|
|
log.Error("close tech space", zap.Error(err))
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (s *TechSpace) GetTypeIdByKey(ctx context.Context, key domain.TypeKey) (id string, err error) {
|
|
if key == bundle.TypeKeyProfile {
|
|
return key.BundledURL(), nil
|
|
}
|
|
return s.space.GetTypeIdByKey(ctx, key)
|
|
}
|
|
|
|
func (s *TechSpace) CommonSpace() commonspace.Space {
|
|
return s.space.CommonSpace()
|
|
}
|