aboutsummaryrefslogtreecommitdiff
path: root/matrix
diff options
context:
space:
mode:
authorTulir Asokan <tulir@maunium.net>2018-04-22 23:23:30 +0300
committerTulir Asokan <tulir@maunium.net>2018-04-22 23:23:30 +0300
commit1085ddc3903716fa30c8a902f607cc40f1cd606d (patch)
tree77ca09d8854bcae422fe0f0232919b208d354fd2 /matrix
parent64fa922ec013079f8f0c90fc9e93c56db3611d30 (diff)
Make room name from aliases calculation consistent
Diffstat (limited to 'matrix')
-rw-r--r--matrix/rooms/room.go22
1 files changed, 12 insertions, 10 deletions
diff --git a/matrix/rooms/room.go b/matrix/rooms/room.go
index 2b41ebc..c10a2fd 100644
--- a/matrix/rooms/room.go
+++ b/matrix/rooms/room.go
@@ -18,6 +18,7 @@ package rooms
import (
"fmt"
+ "sort"
"sync"
"maunium.net/go/gomatrix"
@@ -26,7 +27,7 @@ import (
type RoomNameSource int
const (
- ExplicitRoomName RoomNameSource = iota
+ ExplicitRoomName RoomNameSource = iota
CanonicalAliasRoomName
AliasRoomName
MemberRoomName
@@ -126,7 +127,11 @@ func (room *Room) UpdateState(event *gomatrix.Event) {
case "m.room.topic":
room.topicCache = ""
}
- room.State[event.Type][*event.StateKey] = event
+ if event.StateKey == nil {
+ room.State[event.Type][""] = event
+ } else {
+ room.State[event.Type][*event.StateKey] = event
+ }
}
// GetStateEvent returns the state event for the given type/state_key combo, or nil.
@@ -179,7 +184,7 @@ func (room *Room) GetAliases() []string {
newAliases := make([]string, len(room.aliasesCache)+len(aliases))
copy(newAliases, room.aliasesCache)
for index, alias := range aliases {
- newAliases[len(room.aliasesCache) + index], _ = alias.(string)
+ newAliases[len(room.aliasesCache)+index], _ = alias.(string)
}
room.aliasesCache = newAliases
}
@@ -201,13 +206,10 @@ func (room *Room) updateNameFromNameEvent() {
func (room *Room) updateNameFromAliases() {
// TODO the spec says clients should not use m.room.aliases for room names.
// However, Riot also uses m.room.aliases, so this is here now.
- aliasEvents := room.GetStateEvents("m.room.aliases")
- for _, event := range aliasEvents {
- aliases, _ := event.Content["aliases"].([]interface{})
- if len(aliases) > 0 {
- room.nameCache, _ = aliases[0].(string)
- break
- }
+ aliases := room.GetAliases()
+ if len(aliases) > 0 {
+ sort.Sort(sort.StringSlice(aliases))
+ room.nameCache = aliases[0]
}
}