From 2dbe60384f010cd732ec2ca7ae5f498ab4a65fda Mon Sep 17 00:00:00 2001 From: FIGBERT Date: Mon, 12 Jun 2023 18:53:39 -0700 Subject: [PATCH] Add method to return latest state event of type --- matrix/rooms/room.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/matrix/rooms/room.go b/matrix/rooms/room.go index da39e3e..6c00202 100644 --- a/matrix/rooms/room.go +++ b/matrix/rooms/room.go @@ -463,6 +463,23 @@ func (room *Room) GetStateEvent(eventType event.Type, stateKey string) *event.Ev return evt } +// GetMostRecentEvent returns the most recent state event for the given +// type, or nil. +func (room *Room) GetMostRecentEvent(eventType event.Type) *event.Event { + room.Load() + room.lock.RLock() + defer room.lock.RUnlock() + stateEventMap, _ := room.state[eventType] + + var evt *event.Event = nil + for _, e := range stateEventMap { + if evt == nil || time.UnixMilli(e.Timestamp).After(time.UnixMilli(evt.Timestamp)) { + evt = e + } + } + return evt +} + // getStateEvents returns the state events for the given type. func (room *Room) getStateEvents(eventType event.Type) map[string]*event.Event { stateEventMap, _ := room.state[eventType]