~edwargix/tallyard

243308b140b00cd680c1360b090f9d38915a4a94 — David Florness 4 years ago 0cd6e3b
Move event hook setup to msg.go
2 files changed, 34 insertions(+), 53 deletions(-)

M cmd/tallyard/main.go
M election/msg.go
M cmd/tallyard/main.go => cmd/tallyard/main.go +1 -53
@@ 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))

M election/msg.go => election/msg.go +33 -0
@@ 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)