forked from Mirrors/gomuks
hicli/sync: fix processing space events
This commit is contained in:
parent
e0f107f028
commit
572ef41b80
2 changed files with 24 additions and 7 deletions
|
@ -69,13 +69,15 @@ const (
|
||||||
revalidateAllParentsOfRoomQuery = revalidateAllParents + ` AND child_id=$1`
|
revalidateAllParentsOfRoomQuery = revalidateAllParents + ` AND child_id=$1`
|
||||||
revalidateSpecificParentQuery = revalidateAllParents + ` AND space_id=$1 AND child_id=$2`
|
revalidateSpecificParentQuery = revalidateAllParents + ` AND space_id=$1 AND child_id=$2`
|
||||||
clearSpaceChildrenQuery = `
|
clearSpaceChildrenQuery = `
|
||||||
UPDATE space_edge SET child_event_rowid=NULL, "order"=NULL, suggested=false
|
UPDATE space_edge SET child_event_rowid=NULL, "order"='', suggested=false
|
||||||
WHERE space_id=$1
|
WHERE space_id=$1
|
||||||
`
|
`
|
||||||
clearSpaceParentsQuery = `
|
clearSpaceParentsQuery = `
|
||||||
UPDATE space_edge SET parent_event_rowid=NULL, canonical=false, parent_validated=false
|
UPDATE space_edge SET parent_event_rowid=NULL, canonical=false, parent_validated=false
|
||||||
WHERE child_id=$1
|
WHERE child_id=$1
|
||||||
`
|
`
|
||||||
|
removeSpaceChildQuery = clearSpaceChildrenQuery + ` AND child_id=$2`
|
||||||
|
removeSpaceParentQuery = clearSpaceParentsQuery + ` AND space_id=$2`
|
||||||
deleteEmptySpaceEdgeRowsQuery = `
|
deleteEmptySpaceEdgeRowsQuery = `
|
||||||
DELETE FROM space_edge WHERE child_event_rowid IS NULL AND parent_event_rowid IS NULL
|
DELETE FROM space_edge WHERE child_event_rowid IS NULL AND parent_event_rowid IS NULL
|
||||||
`
|
`
|
||||||
|
@ -139,8 +141,13 @@ func (seq *SpaceEdgeQuery) SetChildren(ctx context.Context, spaceID id.RoomID, c
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
} else {
|
} else if len(removedChildren) > 0 {
|
||||||
|
for _, child := range removedChildren {
|
||||||
|
err := seq.Exec(ctx, removeSpaceChildQuery, spaceID, child)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if len(removedChildren) > 0 {
|
if len(removedChildren) > 0 {
|
||||||
err := seq.Exec(ctx, deleteEmptySpaceEdgeRowsQuery, spaceID)
|
err := seq.Exec(ctx, deleteEmptySpaceEdgeRowsQuery, spaceID)
|
||||||
|
@ -152,7 +159,7 @@ func (seq *SpaceEdgeQuery) SetChildren(ctx context.Context, spaceID id.RoomID, c
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
query, params := massInsertSpaceChildBuilder.Build([1]any{spaceID}, children)
|
query, params := massInsertSpaceChildBuilder.Build([1]any{spaceID}, children)
|
||||||
return seq.Exec(ctx, query, params)
|
return seq.Exec(ctx, query, params...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (seq *SpaceEdgeQuery) SetParents(ctx context.Context, childID id.RoomID, parents []SpaceParentEntry, removedParents []id.RoomID, clear bool) error {
|
func (seq *SpaceEdgeQuery) SetParents(ctx context.Context, childID id.RoomID, parents []SpaceParentEntry, removedParents []id.RoomID, clear bool) error {
|
||||||
|
@ -161,6 +168,13 @@ func (seq *SpaceEdgeQuery) SetParents(ctx context.Context, childID id.RoomID, pa
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
} else if len(removedParents) > 0 {
|
||||||
|
for _, parent := range removedParents {
|
||||||
|
err := seq.Exec(ctx, removeSpaceParentQuery, childID, parent)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if len(removedParents) > 0 {
|
if len(removedParents) > 0 {
|
||||||
err := seq.Exec(ctx, deleteEmptySpaceEdgeRowsQuery)
|
err := seq.Exec(ctx, deleteEmptySpaceEdgeRowsQuery)
|
||||||
|
@ -172,7 +186,7 @@ func (seq *SpaceEdgeQuery) SetParents(ctx context.Context, childID id.RoomID, pa
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
query, params := massInsertSpaceParentBuilder.Build([1]any{childID}, parents)
|
query, params := massInsertSpaceParentBuilder.Build([1]any{childID}, parents)
|
||||||
return seq.Exec(ctx, query, params)
|
return seq.Exec(ctx, query, params...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (seq *SpaceEdgeQuery) RevalidateAllChildrenOfParentValidity(ctx context.Context, spaceID id.RoomID) error {
|
func (seq *SpaceEdgeQuery) RevalidateAllChildrenOfParentValidity(ctx context.Context, spaceID id.RoomID) error {
|
||||||
|
|
|
@ -1131,11 +1131,14 @@ func processImportantEvent(
|
||||||
}
|
}
|
||||||
switch evt.Type {
|
switch evt.Type {
|
||||||
case event.StateCreate, event.StateTombstone, event.StateRoomName, event.StateCanonicalAlias,
|
case event.StateCreate, event.StateTombstone, event.StateRoomName, event.StateCanonicalAlias,
|
||||||
event.StateRoomAvatar, event.StateTopic, event.StateEncryption,
|
event.StateRoomAvatar, event.StateTopic, event.StateEncryption, event.StatePowerLevels:
|
||||||
event.StateSpaceChild, event.StateSpaceParent, event.StatePowerLevels:
|
|
||||||
if *evt.StateKey != "" {
|
if *evt.StateKey != "" {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
case event.StateSpaceChild, event.StateSpaceParent:
|
||||||
|
if !strings.HasPrefix(*evt.StateKey, "!") {
|
||||||
|
return
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue