Restructure update membership

This commit is contained in:
Mark Haines 2017-08-07 15:15:22 +01:00
parent 675db40c73
commit 82b9cc0c5e

View file

@ -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 {