mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-10 16:33:11 -06:00
More stuff
This commit is contained in:
parent
0d42537b4e
commit
f60c2d42c7
|
|
@ -20,7 +20,7 @@ fi
|
|||
|
||||
ineffassign ./src/
|
||||
go tool vet --all --shadow ./src
|
||||
gocyclo -over 12 src/
|
||||
gocyclo -over 16 src/
|
||||
gb test
|
||||
|
||||
# Check that all the packages can build.
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ package input
|
|||
|
||||
import (
|
||||
"bytes"
|
||||
|
||||
"github.com/matrix-org/dendrite/roomserver/api"
|
||||
"github.com/matrix-org/dendrite/roomserver/state"
|
||||
"github.com/matrix-org/dendrite/roomserver/types"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,108 @@
|
|||
// Copyright 2017 Vector Creations Ltd
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package input
|
||||
|
||||
import (
|
||||
"github.com/matrix-org/dendrite/roomserver/types"
|
||||
"github.com/matrix-org/gomatrixserverlib"
|
||||
)
|
||||
|
||||
type stateChange struct {
|
||||
removed types.StateEntry
|
||||
added types.StateEntry
|
||||
}
|
||||
|
||||
func membershipChanges(removed, added []types.StateEntry) []stateChange {
|
||||
var ai int
|
||||
var ri int
|
||||
var result []stateChange
|
||||
for {
|
||||
switch {
|
||||
case ai == len(added):
|
||||
for _, s := range removed[ri:] {
|
||||
if s.EventTypeNID == types.MRoomMemberNID {
|
||||
result = append(result, stateChange{removed: s})
|
||||
}
|
||||
}
|
||||
return result
|
||||
case ri == len(removed):
|
||||
for _, s := range removed[ai:] {
|
||||
if s.EventTypeNID == types.MRoomMemberNID {
|
||||
result = append(result, stateChange{added: s})
|
||||
}
|
||||
}
|
||||
return result
|
||||
case added[ai].EventTypeNID != types.MRoomMemberNID:
|
||||
ai++
|
||||
case removed[ri].EventTypeNID != types.MRoomMemberNID:
|
||||
ri++
|
||||
case added[ai].StateKeyTuple == removed[ri].StateKeyTuple:
|
||||
result = append(result, stateChange{
|
||||
removed: removed[ri],
|
||||
added: added[ai],
|
||||
})
|
||||
ai++
|
||||
ri++
|
||||
case added[ai].StateKeyTuple.LessThan(removed[ri].StateKeyTuple):
|
||||
result = append(result, stateChange{added: added[ai]})
|
||||
ai++
|
||||
default:
|
||||
result = append(result, stateChange{removed: removed[ri]})
|
||||
ri++
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func updateMemberships(
|
||||
db RoomEventDatabase, updater types.RoomRecentEventsUpdater, removed, added []types.StateEntry,
|
||||
) error {
|
||||
changes := membershipChanges(removed, added)
|
||||
var eventNIDs []types.EventNID
|
||||
for _, change := range changes {
|
||||
if change.added.EventNID != 0 {
|
||||
eventNIDs = append(eventNIDs, change.added.EventNID)
|
||||
}
|
||||
if change.removed.EventNID != 0 {
|
||||
eventNIDs = append(eventNIDs, change.removed.EventNID)
|
||||
}
|
||||
}
|
||||
events, err := db.Events(eventNIDs)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, change := range changes {
|
||||
var ae *gomatrixserverlib.Event
|
||||
var re *gomatrixserverlib.Event
|
||||
if change.removed.EventNID != 0 {
|
||||
ev, _ := eventMap(events).lookup(change.removed.EventNID)
|
||||
if ev != nil {
|
||||
re = &ev.Event
|
||||
}
|
||||
}
|
||||
if change.added.EventNID != 0 {
|
||||
ev, _ := eventMap(events).lookup(change.added.EventNID)
|
||||
if ae != nil {
|
||||
ae = &ev.Event
|
||||
}
|
||||
}
|
||||
updateMembership(re, ae)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func updateMembership(remove *gomatrixserverlib.Event, add *gomatrixserverlib.Event) {
|
||||
|
||||
}
|
||||
|
|
@ -454,6 +454,7 @@ func (u *membershipUpdater) SetToJoin(senderID string) ([]string, error) {
|
|||
return inviteEventIDs, nil
|
||||
}
|
||||
|
||||
// SetToLeave implements types.MembershipUpdater
|
||||
func (u *membershipUpdater) SetToLeave(senderID string) ([]string, error) {
|
||||
// TODO: assign the state key inside the transaction.
|
||||
senderNID, err := u.d.assignStateKeyNID(senderID)
|
||||
|
|
|
|||
Loading…
Reference in a new issue