mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-12 09:23:09 -06:00
Restructure update membership
This commit is contained in:
parent
675db40c73
commit
82b9cc0c5e
|
|
@ -97,67 +97,54 @@ func updateMembership(
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return updateWithNewMembership(mu, new, add, updates)
|
switch new {
|
||||||
}
|
|
||||||
|
|
||||||
func updateWithNewMembership(
|
|
||||||
mu types.MembershipUpdater, newMembership string, add *gomatrixserverlib.Event,
|
|
||||||
updates []api.OutputEvent,
|
|
||||||
) ([]api.OutputEvent, error) {
|
|
||||||
switch newMembership {
|
|
||||||
case "invite":
|
case "invite":
|
||||||
needsSending, err := mu.SetToInvite(*add)
|
return updateToInviteMembership(mu, add, updates)
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if needsSending {
|
|
||||||
updates = appendInviteUpdate(updates, add)
|
|
||||||
}
|
|
||||||
return updates, nil
|
|
||||||
case "join":
|
case "join":
|
||||||
if mu.IsJoin() {
|
return updateToJoinMembership(mu, add, updates)
|
||||||
return updates, nil
|
|
||||||
}
|
|
||||||
retired, err := mu.SetToJoin(add.Sender())
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return appendRetireUpdates(updates, add, newMembership, retired), nil
|
|
||||||
case "leave", "ban":
|
case "leave", "ban":
|
||||||
if mu.IsLeave() {
|
return updateToLeaveMembership(mu, add, new, updates)
|
||||||
return updates, nil
|
|
||||||
}
|
|
||||||
retired, err := mu.SetToLeave(add.Sender())
|
|
||||||
if err != nil {
|
|
||||||
mu.SetToLeave(add.Sender())
|
|
||||||
}
|
|
||||||
return appendRetireUpdates(updates, add, newMembership, retired), nil
|
|
||||||
default:
|
default:
|
||||||
panic(fmt.Errorf(
|
panic(fmt.Errorf(
|
||||||
"input: membership %q is not one of the allowed values", newMembership,
|
"input: membership %q is not one of the allowed values", new,
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func appendInviteUpdate(
|
func updateToInviteMembership(
|
||||||
updates []api.OutputEvent, add *gomatrixserverlib.Event,
|
mu types.MembershipUpdater, add *gomatrixserverlib.Event, updates []api.OutputEvent,
|
||||||
) []api.OutputEvent {
|
) ([]api.OutputEvent, error) {
|
||||||
onie := api.OutputNewInviteEvent{
|
needsSending, err := mu.SetToInvite(*add)
|
||||||
Event: *add,
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
}
|
}
|
||||||
return append(updates, api.OutputEvent{
|
if needsSending {
|
||||||
Type: api.OutputTypeNewInviteEvent,
|
onie := api.OutputNewInviteEvent{
|
||||||
NewInviteEvent: &onie,
|
Event: *add,
|
||||||
})
|
}
|
||||||
|
updates = append(updates, api.OutputEvent{
|
||||||
|
Type: api.OutputTypeNewInviteEvent,
|
||||||
|
NewInviteEvent: &onie,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return updates, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func appendRetireUpdates(
|
func updateToJoinMembership(
|
||||||
updates []api.OutputEvent, add *gomatrixserverlib.Event, membership string, retired []string,
|
mu types.MembershipUpdater, add *gomatrixserverlib.Event, updates []api.OutputEvent,
|
||||||
) []api.OutputEvent {
|
) ([]api.OutputEvent, error) {
|
||||||
|
|
||||||
|
if mu.IsJoin() {
|
||||||
|
return updates, nil
|
||||||
|
}
|
||||||
|
retired, err := mu.SetToJoin(add.Sender())
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
for _, eventID := range retired {
|
for _, eventID := range retired {
|
||||||
orie := api.OutputRetireInviteEvent{
|
orie := api.OutputRetireInviteEvent{
|
||||||
EventID: eventID,
|
EventID: eventID,
|
||||||
Membership: membership,
|
Membership: "join",
|
||||||
}
|
}
|
||||||
if add != nil {
|
if add != nil {
|
||||||
orie.RetiredByEventID = add.EventID()
|
orie.RetiredByEventID = add.EventID()
|
||||||
|
|
@ -167,7 +154,35 @@ func appendRetireUpdates(
|
||||||
RetireInviteEvent: &orie,
|
RetireInviteEvent: &orie,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
return updates
|
return updates, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func updateToLeaveMembership(
|
||||||
|
mu types.MembershipUpdater, add *gomatrixserverlib.Event,
|
||||||
|
newMembership string, updates []api.OutputEvent,
|
||||||
|
) ([]api.OutputEvent, error) {
|
||||||
|
|
||||||
|
if mu.IsLeave() {
|
||||||
|
return updates, nil
|
||||||
|
}
|
||||||
|
retired, err := mu.SetToLeave(add.Sender())
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
for _, eventID := range retired {
|
||||||
|
orie := api.OutputRetireInviteEvent{
|
||||||
|
EventID: eventID,
|
||||||
|
Membership: newMembership,
|
||||||
|
}
|
||||||
|
if add != nil {
|
||||||
|
orie.RetiredByEventID = add.EventID()
|
||||||
|
}
|
||||||
|
updates = append(updates, api.OutputEvent{
|
||||||
|
Type: api.OutputTypeRetireInviteEvent,
|
||||||
|
RetireInviteEvent: &orie,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return updates, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type stateChange struct {
|
type stateChange struct {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue