diff options
author | Tulir Asokan <tulir@maunium.net> | 2020-05-06 20:06:35 +0300 |
---|---|---|
committer | Tulir Asokan <tulir@maunium.net> | 2020-05-06 20:06:35 +0300 |
commit | 5b3e91524e000fe07fe30eff70061c9dd796014e (patch) | |
tree | 47eac32a4ce211b7d240841fe35e1a0cb745680c /matrix/rooms | |
parent | 96bb87e8ac8f45d56d487ea6c16d67f057d97e1f (diff) | |
parent | ebdfe914283fb91204ca8512a0a73a78fe41998f (diff) |
Merge branch 'e2ee'
Diffstat (limited to 'matrix/rooms')
-rw-r--r-- | matrix/rooms/room.go | 13 | ||||
-rw-r--r-- | matrix/rooms/roomcache.go | 24 |
2 files changed, 36 insertions, 1 deletions
diff --git a/matrix/rooms/room.go b/matrix/rooms/room.go index 0238cfb..d5d1d8f 100644 --- a/matrix/rooms/room.go +++ b/matrix/rooms/room.go @@ -412,7 +412,7 @@ func (room *Room) UpdateState(evt *event.Event) { case *event.TopicEventContent: room.topicCache = content.Topic case *event.EncryptionEventContent: - if content.Algorithm == event.AlgorithmMegolmV1 { + if content.Algorithm == id.AlgorithmMegolmV1 { room.Encrypted = true } } @@ -650,6 +650,17 @@ func (room *Room) GetMembers() map[id.UserID]*Member { return room.memberCache } +func (room *Room) GetMemberList() []id.UserID { + members := room.GetMembers() + memberList := make([]id.UserID, len(members)) + index := 0 + for userID, _ := range members { + memberList[index] = userID + index++ + } + return memberList +} + // GetMember returns the member with the given MXID. // If the member doesn't exist, nil is returned. func (room *Room) GetMember(userID id.UserID) *Member { diff --git a/matrix/rooms/roomcache.go b/matrix/rooms/roomcache.go index ffdcad1..067cbb6 100644 --- a/matrix/rooms/roomcache.go +++ b/matrix/rooms/roomcache.go @@ -27,6 +27,7 @@ import ( sync "github.com/sasha-s/go-deadlock" "maunium.net/go/gomuks/debug" + "maunium.net/go/mautrix/event" "maunium.net/go/mautrix/id" ) @@ -67,6 +68,29 @@ func (cache *RoomCache) EnableUnloading() { cache.noUnload = false } +func (cache *RoomCache) IsEncrypted(roomID id.RoomID) bool { + room := cache.Get(roomID) + return room != nil && room.Encrypted +} + +func (cache *RoomCache) FindSharedRooms(userID id.UserID) (shared []id.RoomID) { + // FIXME this disables unloading so TouchNode wouldn't try to double-lock + cache.DisableUnloading() + cache.Lock() + for _, room := range cache.Map { + if !room.Encrypted { + continue + } + member, ok := room.GetMembers()[userID] + if ok && member.Membership == event.MembershipJoin { + shared = append(shared, room.ID) + } + } + cache.Unlock() + cache.EnableUnloading() + return +} + func (cache *RoomCache) LoadList() error { cache.Lock() defer cache.Unlock() |