@@ 4,7 4,6 @@ import (
"fmt"
"os"
- log "github.com/sirupsen/logrus"
"maunium.net/go/mautrix"
"maunium.net/go/mautrix/event"
"maunium.net/go/mautrix/id"
@@ 15,10 14,6 @@ import (
"tallyard.xyz/ui"
)
-func DebugCB(source mautrix.EventSource, evt *event.Event) {
- log.Debugf("%[5]d: <%[1]s> %[4]s (%[2]s/%[3]s)\n", evt.Sender, evt.Type.String(), evt.ID, evt.Content.AsMessage().Body, source)
-}
-
func electionFilter(localUserID id.UserID) *mautrix.Filter {
return &mautrix.Filter{
Room: mautrix.RoomFilter{
@@ 59,54 54,7 @@ func main() {
syncer := client.Syncer.(*mautrix.DefaultSyncer)
syncer.OnEvent(client.Store.(*mautrix.InMemoryStore).UpdateState)
- syncer.OnEventType(election.CreateElectionMessage, func(source mautrix.EventSource, evt *event.Event) {
- DebugCB(source, evt)
- if evt.Unsigned.RedactedBecause != nil {
- log.Debug("redacted")
- return
- }
- election.OnCreateElectionMessage(evt, elections)
- })
- syncer.OnEventType(election.JoinElectionMessage, func(source mautrix.EventSource, evt *event.Event) {
- DebugCB(source, evt)
- if evt.Unsigned.RedactedBecause != nil {
- log.Debug("redacted")
- return
- }
- election.OnJoinElectionMessage(client, evt, elections)
- })
- syncer.OnEventType(election.StartElectionMessage, func(source mautrix.EventSource, evt *event.Event) {
- DebugCB(source, evt)
- if evt.Unsigned.RedactedBecause != nil {
- log.Debug("redacted")
- return
- }
- election.OnStartElectionMessage(client, evt, elections)
- })
- syncer.OnEventType(election.EvalMessage, func(source mautrix.EventSource, evt *event.Event) {
- DebugCB(source, evt)
- if evt.Unsigned.RedactedBecause != nil {
- log.Debug("redacted")
- return
- }
- election.OnEvalMessage(client, evt, elections)
- })
- syncer.OnEventType(election.SumMessage, func(source mautrix.EventSource, evt *event.Event) {
- DebugCB(source, evt)
- if evt.Unsigned.RedactedBecause != nil {
- log.Debug("redacted")
- return
- }
- election.OnSumMessage(client, evt, elections)
- })
- syncer.OnEventType(election.ResultMessage, func(source mautrix.EventSource, evt *event.Event) {
- DebugCB(source, evt)
- if evt.Unsigned.RedactedBecause != nil {
- log.Debug("redacted")
- return
- }
- election.OnResultMessage(client, evt, elections)
- })
+ election.SetupEventHooks(client, syncer, elections)
go func() {
res, err := client.CreateFilter(electionFilter(client.UserID))
@@ 87,6 87,39 @@ func init() {
event.TypeMap[ResultMessage] = reflect.TypeOf(ResultMessageContent{})
}
+func SetupEventHooks(client *mautrix.Client, syncer mautrix.ExtensibleSyncer, elections *ElectionsMap) {
+ wrapper := func(f func(*event.Event)) func(mautrix.EventSource, *event.Event) {
+ return func(source mautrix.EventSource, evt *event.Event) {
+ log.Debugf("%[5]d: <%[1]s> %[4]s (%[2]s/%[3]s)\n",
+ evt.Sender, evt.Type.String(), evt.ID,
+ evt.Content.AsMessage().Body, source)
+ if evt.Unsigned.RedactedBecause != nil {
+ log.Debugf("%s redacted\n", evt.ID.String())
+ return
+ }
+ f(evt)
+ }
+ }
+ syncer.OnEventType(CreateElectionMessage, wrapper(func(evt *event.Event) {
+ OnCreateElectionMessage(evt, elections)
+ }))
+ syncer.OnEventType(JoinElectionMessage, wrapper(func(evt *event.Event) {
+ OnJoinElectionMessage(client, evt, elections)
+ }))
+ syncer.OnEventType(StartElectionMessage, wrapper(func(evt *event.Event) {
+ OnStartElectionMessage(client, evt, elections)
+ }))
+ syncer.OnEventType(EvalMessage, wrapper(func(evt *event.Event) {
+ OnEvalMessage(client, evt, elections)
+ }))
+ syncer.OnEventType(SumMessage, wrapper(func(evt *event.Event) {
+ OnSumMessage(client, evt, elections)
+ }))
+ syncer.OnEventType(ResultMessage, wrapper(func(evt *event.Event) {
+ OnResultMessage(client, evt, elections)
+ }))
+}
+
func OnCreateElectionMessage(evt *event.Event, elections *ElectionsMap) {
// TODO: check version
content, ok := evt.Content.Parsed.(*CreateElectionContent)