diff options
author | Tulir Asokan <tulir@maunium.net> | 2020-02-20 01:10:26 +0200 |
---|---|---|
committer | Tulir Asokan <tulir@maunium.net> | 2020-02-20 01:10:26 +0200 |
commit | db7d2da50cd0f4c20bc0966bff7c388c017e182f (patch) | |
tree | 0b7c450f0df7d912a9c30354ed84197a9931582d | |
parent | 8a0a3a6487bafbbcd3e0ae630b7ba95bf8ce76ce (diff) |
Hide tombstoned rooms from room list
-rw-r--r-- | go.mod | 2 | ||||
-rw-r--r-- | go.sum | 2 | ||||
-rw-r--r-- | matrix/rooms/room.go | 33 | ||||
-rw-r--r-- | ui/fuzzy-search-modal.go | 5 | ||||
-rw-r--r-- | ui/room-list.go | 6 |
5 files changed, 41 insertions, 7 deletions
@@ -19,7 +19,7 @@ require ( golang.org/x/net v0.0.0-20200202094626-16171245cfb2 gopkg.in/toast.v1 v1.0.0-20180812000517-0a84660828b2 gopkg.in/yaml.v2 v2.2.8 - maunium.net/go/mautrix v0.1.0-alpha.3.0.20200219223957-21a588b7e623 + maunium.net/go/mautrix v0.1.0-alpha.3.0.20200219230859-de66c34ea5bc maunium.net/go/mauview v0.0.0-20200219222453-b984e20438e6 maunium.net/go/tcell v1.1.2-0.20200218183045-87c4a25c5b09 ) @@ -78,6 +78,8 @@ maunium.net/go/mautrix v0.1.0-alpha.3.0.20200218232310-9638cb6d80d2 h1:X4ONPO3Ny maunium.net/go/mautrix v0.1.0-alpha.3.0.20200218232310-9638cb6d80d2/go.mod h1:g10T1fh2Q2HkJWycVs93eBXdWpqD67f1YVQhNxdIDr4= maunium.net/go/mautrix v0.1.0-alpha.3.0.20200219223957-21a588b7e623 h1:StXwGEEdQA+aACru6CSPXPafhQqYCc9CnQW4fIwz+KU= maunium.net/go/mautrix v0.1.0-alpha.3.0.20200219223957-21a588b7e623/go.mod h1:g10T1fh2Q2HkJWycVs93eBXdWpqD67f1YVQhNxdIDr4= +maunium.net/go/mautrix v0.1.0-alpha.3.0.20200219230859-de66c34ea5bc h1:1iMzqdMF4z9Rp3CDfDa+gjuRHGfb9cZjZZR9Y68nPuo= +maunium.net/go/mautrix v0.1.0-alpha.3.0.20200219230859-de66c34ea5bc/go.mod h1:g10T1fh2Q2HkJWycVs93eBXdWpqD67f1YVQhNxdIDr4= maunium.net/go/mauview v0.0.0-20200218183549-88ecb1321176 h1:KoTm7ASEzFIZ1SvPWuWYzpkeA+wiR1fuUu4l7TCHcE0= maunium.net/go/mauview v0.0.0-20200218183549-88ecb1321176/go.mod h1:jwg3Ow7akzsCX3q38pZAfmEC5gGN8gXwMyyjy/yZVMg= maunium.net/go/mauview v0.0.0-20200218231215-04d01c601d5b h1:Bfov5IkJQpkqDexiFioHIZpx4XL7AILDA1GwLVdqtBw= diff --git a/matrix/rooms/room.go b/matrix/rooms/room.go index 80c42bd..4632730 100644 --- a/matrix/rooms/room.go +++ b/matrix/rooms/room.go @@ -108,6 +108,10 @@ type Room struct { CanonicalAliasCache string // The list of aliases. Directly fetched from the m.room.aliases state event. aliasesCache []string + // Whether or not the room has been tombstoned. + replacedCache bool + // The room ID that replaced this room. + replacedByCache *string // Path for state store file. path string @@ -342,6 +346,9 @@ func (room *Room) Tags() []RoomTag { // UpdateState updates the room's current state with the given Event. This will clobber events based // on the type/state_key combination. func (room *Room) UpdateState(event *mautrix.Event) { + if event.StateKey == nil { + panic("Tried to UpdateState() event with no state key.") + } room.Load() room.lock.Lock() defer room.lock.Unlock() @@ -378,11 +385,7 @@ func (room *Room) UpdateState(event *mautrix.Event) { debug.Printf("Updating state %s#%s for %s", event.Type.String(), event.GetStateKey(), room.ID) } - if event.StateKey == nil { - room.state[event.Type][""] = event - } else { - room.state[event.Type][*event.StateKey] = event - } + room.state[event.Type][*event.StateKey] = event } func (room *Room) updateMemberState(event *mautrix.Event) { @@ -549,6 +552,26 @@ func (room *Room) GetTitle() string { return room.NameCache } +func (room *Room) IsReplaced() bool { + if room.replacedByCache == nil { + evt := room.GetStateEvent(mautrix.StateTombstone, "") + var replacement string + if evt != nil { + replacement = evt.Content.ReplacementRoom + } + room.replacedCache = evt != nil + room.replacedByCache = &replacement + } + return room.replacedCache +} + +func (room *Room) ReplacedBy() string { + if room.replacedByCache == nil { + room.IsReplaced() + } + return *room.replacedByCache +} + func (room *Room) eventToMember(userID string, content *mautrix.Content) *mautrix.Member { member := &content.Member member.Membership = content.Membership diff --git a/ui/fuzzy-search-modal.go b/ui/fuzzy-search-modal.go index 97a029a..9f91877 100644 --- a/ui/fuzzy-search-modal.go +++ b/ui/fuzzy-search-modal.go @@ -89,6 +89,10 @@ func (fs *FuzzySearchModal) Blur() { func (fs *FuzzySearchModal) InitList(rooms map[string]*RoomView) { for _, room := range rooms { + if room.Room.IsReplaced() { + //if _, ok := rooms[room.Room.ReplacedBy()]; ok + continue + } fs.roomList = append(fs.roomList, room.Room) fs.roomTitles = append(fs.roomTitles, room.Room.GetTitle()) } @@ -134,6 +138,7 @@ func (fs *FuzzySearchModal) OnKeyEvent(event mauview.KeyEvent) bool { fs.results.Highlight(strconv.Itoa(fs.matches[fs.selected].OriginalIndex)) fs.results.ScrollToHighlight() } + return true case tcell.KeyEnter: // Switch room to currently selected room if len(highlights) > 0 { diff --git a/ui/room-list.go b/ui/room-list.go index b6fc612..2b8af87 100644 --- a/ui/room-list.go +++ b/ui/room-list.go @@ -88,7 +88,11 @@ func (list *RoomList) Contains(roomID string) bool { } func (list *RoomList) Add(room *rooms.Room) { - debug.Print("Adding room to list", room.ID, room.GetTitle(), room.IsDirect, room.Tags()) + if room.IsReplaced() { + debug.Print(room.ID, "is replaced by", room.ReplacedBy(), "-> not adding to room list") + return + } + debug.Print("Adding room to list", room.ID, room.GetTitle(), room.IsDirect, room.ReplacedBy(), room.Tags()) for _, tag := range room.Tags() { list.AddToTag(tag, room) } |