aboutsummaryrefslogtreecommitdiff
path: root/ui/view-main.go
diff options
context:
space:
mode:
authorTulir Asokan <tulir@maunium.net>2018-04-24 02:13:17 +0300
committerTulir Asokan <tulir@maunium.net>2018-04-24 02:13:43 +0300
commit2a0145db884038342ba00cdb29fc29085e1faace (patch)
treee4362a636292981450c1884be16ba947ec2dc9a2 /ui/view-main.go
parent135fcbf284e941a312567d22af80fe69d49cbd89 (diff)
Handle tag events
Diffstat (limited to 'ui/view-main.go')
-rw-r--r--ui/view-main.go55
1 files changed, 46 insertions, 9 deletions
diff --git a/ui/view-main.go b/ui/view-main.go
index d1af09d..ba3a55b 100644
--- a/ui/view-main.go
+++ b/ui/view-main.go
@@ -248,7 +248,7 @@ func (view *MainView) MouseEventHandler(roomView *RoomView, event *tcell.EventMo
return event
}
-func (view *MainView) SwitchRoom(room *rooms.Room) {
+func (view *MainView) SwitchRoom(tag string, room *rooms.Room) {
if room == nil {
return
}
@@ -258,13 +258,13 @@ func (view *MainView) SwitchRoom(room *rooms.Room) {
if roomView.MessageView().ScrollOffset == 0 {
roomView.Room.MarkRead()
}
- view.roomList.SetSelected(room)
+ view.roomList.SetSelected(tag, room)
view.parent.app.SetFocus(view)
view.parent.Render()
}
func (view *MainView) Focus(delegate func(p tview.Primitive)) {
- room := view.roomList.Selected()
+ room := view.roomList.SelectedRoom()
if room != nil {
roomView, ok := view.rooms[room.ID]
if ok {
@@ -283,7 +283,6 @@ func (view *MainView) SaveAllHistory() {
}
func (view *MainView) addRoomPage(room *rooms.Room) {
-
if !view.roomView.HasPage(room.ID) {
roomView := NewRoomView(view, room).
SetInputSubmitFunc(view.InputSubmit).
@@ -304,7 +303,13 @@ func (view *MainView) addRoomPage(room *rooms.Room) {
}
func (view *MainView) GetRoom(roomID string) ifc.RoomView {
- return view.rooms[roomID]
+ room, ok := view.rooms[roomID]
+ if !ok {
+ view.AddRoom(roomID)
+ room, _ := view.rooms[roomID]
+ return room
+ }
+ return room
}
func (view *MainView) AddRoom(roomID string) {
@@ -335,14 +340,46 @@ func (view *MainView) SetRooms(roomIDs []string) {
view.roomList.Clear()
view.roomView.Clear()
view.rooms = make(map[string]*RoomView)
- for index, roomID := range roomIDs {
+ for _, roomID := range roomIDs {
room := view.matrix.GetRoom(roomID)
view.roomList.Add(room)
view.addRoomPage(room)
- if index == len(roomIDs)-1 {
- view.SwitchRoom(room)
+ }
+ view.SwitchRoom(view.roomList.First())
+}
+
+func (view *MainView) UpdateTags(room *rooms.Room, newTags []rooms.RoomTag) {
+ if len(newTags) == 0 {
+ for _, tag := range room.RawTags {
+ view.roomList.RemoveFromTag(tag.Tag, room)
+ }
+ view.roomList.AddToTag("", room)
+ } else if len(room.RawTags) == 0 {
+ view.roomList.RemoveFromTag("", room)
+ for _, tag := range newTags {
+ view.roomList.AddToTag(tag.Tag, room)
+ }
+ } else {
+ NewTags:
+ for _, newTag := range newTags {
+ for _, oldTag := range room.RawTags {
+ if newTag.Tag == oldTag.Tag {
+ continue NewTags
+ }
+ }
+ view.roomList.AddToTag(newTag.Tag, room)
+ }
+ OldTags:
+ for _, oldTag := range room.RawTags {
+ for _, newTag := range newTags {
+ if newTag.Tag == oldTag.Tag {
+ continue OldTags
+ }
+ }
+ view.roomList.RemoveFromTag(oldTag.Tag, room)
}
}
+ room.RawTags = newTags
}
func (view *MainView) SetTyping(room string, users []string) {
@@ -362,7 +399,7 @@ func sendNotification(room *rooms.Room, sender, text string, critical, sound boo
func (view *MainView) NotifyMessage(room *rooms.Room, message ifc.Message, should pushrules.PushActionArrayShould) {
// Whether or not the room where the message came is the currently shown room.
- isCurrent := room == view.roomList.Selected()
+ isCurrent := room == view.roomList.SelectedRoom()
// Whether or not the terminal window is focused.
isFocused := view.lastFocusTime.Add(30 * time.Second).Before(time.Now())