aboutsummaryrefslogtreecommitdiff
path: root/matrix/rooms/roomcache.go
diff options
context:
space:
mode:
Diffstat (limited to 'matrix/rooms/roomcache.go')
-rw-r--r--matrix/rooms/roomcache.go28
1 files changed, 26 insertions, 2 deletions
diff --git a/matrix/rooms/roomcache.go b/matrix/rooms/roomcache.go
index ffdcad1..5af0c5b 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()
@@ -115,11 +139,11 @@ func (cache *RoomCache) LoadList() error {
func (cache *RoomCache) SaveLoadedRooms() {
cache.Lock()
- defer cache.Unlock()
cache.clean(false)
for node := cache.head; node != nil; node = node.prev {
node.Save()
}
+ cache.Unlock()
}
func (cache *RoomCache) SaveList() error {
@@ -169,7 +193,7 @@ func (cache *RoomCache) Touch(roomID id.RoomID) {
}
func (cache *RoomCache) TouchNode(node *Room) {
- if cache.noUnload || node.touch + 2 > time.Now().Unix() {
+ if cache.noUnload || node.touch+2 > time.Now().Unix() {
return
}
cache.Lock()