Add Build method to document

This commit is contained in:
mcrakhman 2022-07-05 18:09:45 +02:00 committed by Mikhail Iudin
parent 1ed6a6f7da
commit 2bd5bf742d
No known key found for this signature in database
GPG Key ID: FAAAA8BAABDFF1C0
2 changed files with 72 additions and 44 deletions

View File

@ -11,14 +11,18 @@ type AccountData struct {
}
type Document struct {
thread threadmodels.Thread
stateProvider InitialStateProvider
accountData AccountData
decoder threadmodels.SigningPubKeyDecoder
aclTree *Tree
fullTree *Tree
aclTreeBuilder *ACLTreeBuilder
aclStateBuilder *ACLStateBuilder
thread threadmodels.Thread
stateProvider InitialStateProvider
accountData *AccountData
decoder threadmodels.SigningPubKeyDecoder
treeBuilder *TreeBuilder
aclTreeBuilder *ACLTreeBuilder
aclStateBuilder *ACLStateBuilder
snapshotValidator *SnapshotValidator
docStateBuilder *documentStateBuilder
docContext *documentContext
}
type UpdateResult int
@ -33,12 +37,19 @@ const (
func NewDocument(
thread threadmodels.Thread,
stateProvider InitialStateProvider,
accountData AccountData) *Document {
accountData *AccountData) *Document {
decoder := threadmodels.NewEd25519Decoder()
return &Document{
thread: thread,
stateProvider: stateProvider,
accountData: accountData,
decoder: threadmodels.NewEd25519Decoder(),
thread: thread,
stateProvider: stateProvider,
accountData: accountData,
decoder: decoder,
aclTreeBuilder: NewACLTreeBuilder(thread, decoder),
treeBuilder: NewTreeBuilder(thread, decoder),
snapshotValidator: NewSnapshotValidator(decoder, accountData),
aclStateBuilder: NewACLStateBuilder(decoder, accountData),
docStateBuilder: newDocumentStateBuilder(stateProvider),
docContext: &documentContext{},
}
}
@ -47,10 +58,51 @@ func (d *Document) Update(changes []*pb.ACLChange) (DocumentState, UpdateResult,
}
func (d *Document) Build() (DocumentState, error) {
//treeBuilder := NewTreeBuilder(d.thread, threadmodels.NewEd25519Decoder())
return d.build(false)
}
//return treeBuilder.Build(fromStart)
return nil, nil
func (d *Document) build(fromStart bool) (DocumentState, error) {
d.treeBuilder.Init()
d.aclTreeBuilder.Init()
var err error
d.docContext.fullTree, err = d.treeBuilder.Build(fromStart)
if err != nil {
return nil, err
}
d.docContext.aclTree, err = d.aclTreeBuilder.Build()
if err != nil {
return nil, err
}
if !fromStart {
d.snapshotValidator.Init(d.docContext.aclTree)
valid, err := d.snapshotValidator.ValidateSnapshot(d.docContext.fullTree.root)
if err != nil {
return nil, err
}
if !valid {
return d.build(true)
}
}
err = d.aclStateBuilder.Init(d.docContext.fullTree)
if err != nil {
return nil, err
}
d.docContext.aclState, err = d.aclStateBuilder.Build()
if err != nil {
return nil, err
}
d.docStateBuilder.init(d.docContext.aclState, d.docContext.fullTree)
d.docContext.docState, err = d.docStateBuilder.build()
if err != nil {
return nil, err
}
return d.docContext.docState, nil
}
func (d *Document) State() DocumentState {

View File

@ -1,32 +1,8 @@
package data
import "github.com/anytypeio/go-anytype-infrastructure-experiments/data/threadmodels"
type documentContext struct {
aclTree *Tree
fullTree *Tree
identity string
encryptionKey threadmodels.EncryptionPrivKey
decoder threadmodels.SigningPubKeyDecoder
aclState *ACLState
docState DocumentState
changeCache map[string]*Change
identityKeys map[string]threadmodels.SigningPubKey
}
func newDocumentContext(
identity string,
encryptionKey threadmodels.EncryptionPrivKey,
decoder threadmodels.SigningPubKeyDecoder) *documentContext {
return &documentContext{
aclTree: &Tree{},
fullTree: &Tree{},
identity: identity,
encryptionKey: encryptionKey,
decoder: decoder,
aclState: nil,
docState: nil,
changeCache: make(map[string]*Change),
identityKeys: make(map[string]threadmodels.SigningPubKey),
}
aclTree *Tree
fullTree *Tree
aclState *ACLState
docState DocumentState
}