mirror of
https://github.com/anyproto/anytype-heart.git
synced 2025-06-08 05:47:07 +09:00
59 lines
1.3 KiB
Go
59 lines
1.3 KiB
Go
package virtualspaceservice
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/anyproto/any-sync/app"
|
|
|
|
"github.com/anyproto/anytype-heart/pkg/lib/localstore/objectstore"
|
|
)
|
|
|
|
const CName = "common.space.virtualspaceservice"
|
|
|
|
type VirtualSpaceService interface {
|
|
app.ComponentRunnable
|
|
RegisterVirtualSpace(spaceID string) (err error)
|
|
}
|
|
|
|
type virtualSpaceService struct {
|
|
objectStore objectstore.ObjectStore
|
|
}
|
|
|
|
func (v *virtualSpaceService) Init(a *app.App) (err error) {
|
|
v.objectStore = app.MustComponent[objectstore.ObjectStore](a)
|
|
return nil
|
|
}
|
|
|
|
func (v *virtualSpaceService) Name() string {
|
|
return CName
|
|
}
|
|
|
|
func (v *virtualSpaceService) Run(ctx context.Context) (err error) {
|
|
return v.cleanupVirtualSpaces(err)
|
|
}
|
|
|
|
func (v *virtualSpaceService) Close(ctx context.Context) (err error) {
|
|
return v.cleanupVirtualSpaces(err)
|
|
}
|
|
|
|
func (v *virtualSpaceService) cleanupVirtualSpaces(err error) error {
|
|
spaces, err := v.objectStore.ListVirtualSpaces()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for _, id := range spaces {
|
|
err := v.objectStore.DeleteVirtualSpace(id)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (v *virtualSpaceService) RegisterVirtualSpace(spaceID string) (err error) {
|
|
return v.objectStore.SaveVirtualSpace(spaceID)
|
|
}
|
|
|
|
func New() VirtualSpaceService {
|
|
return &virtualSpaceService{}
|
|
}
|