Alt-a to jump to next channel with unread messages.

This commit is contained in:
Ville Ranki 2018-10-18 17:02:38 +03:00
parent 68db26bcac
commit 7417df0f3c
3 changed files with 27 additions and 2 deletions

View File

@ -21,6 +21,7 @@ import (
"strings" "strings"
"math" "math"
"maunium.net/go/gomuks/debug" "maunium.net/go/gomuks/debug"
"maunium.net/go/gomuks/matrix/rooms" "maunium.net/go/gomuks/matrix/rooms"
"maunium.net/go/tcell" "maunium.net/go/tcell"
@ -313,6 +314,27 @@ func (list *RoomList) Next() (string, *rooms.Room) {
return list.Last() return list.Last()
} }
// NextWithActivity Returns next room with activity.
//
// Sorted by (in priority):
//
// - Highlights
// - Messages
// - Other traffic (joins, parts, etc)
//
// TODO: Sorting. Now just finds first room with new messages.
func (list *RoomList) NextWithActivity() (string, *rooms.Room) {
for tag, trl := range list.items {
for _, room := range trl.All() {
if room.HasNewMessages() {
return tag, room.Room
}
}
}
// No room with activity found
return "", nil
}
func (list *RoomList) index(tag string, room *rooms.Room) int { func (list *RoomList) index(tag string, room *rooms.Room) int {
tagIndex := list.IndexTag(tag) tagIndex := list.IndexTag(tag)
if tagIndex == -1 { if tagIndex == -1 {

View File

@ -18,12 +18,13 @@ package ui
import ( import (
"fmt" "fmt"
"strconv"
"strings"
"maunium.net/go/gomuks/matrix/rooms" "maunium.net/go/gomuks/matrix/rooms"
"maunium.net/go/gomuks/ui/widget" "maunium.net/go/gomuks/ui/widget"
"maunium.net/go/tcell" "maunium.net/go/tcell"
"maunium.net/go/tview" "maunium.net/go/tview"
"strconv"
"strings"
) )
type OrderedRoom struct { type OrderedRoom struct {

View File

@ -196,6 +196,8 @@ func (view *MainView) KeyEventHandler(roomView *RoomView, key *tcell.EventKey) *
searchModal := NewFuzzySearchModal(view, 42, 12) searchModal := NewFuzzySearchModal(view, 42, 12)
view.parent.views.AddPage("fuzzy-search-modal", searchModal, true, true) view.parent.views.AddPage("fuzzy-search-modal", searchModal, true, true)
view.parent.app.SetFocus(searchModal) view.parent.app.SetFocus(searchModal)
case c == 'a':
view.SwitchRoom(view.roomList.NextWithActivity())
case c == 'l': case c == 'l':
view.ShowBare(roomView) view.ShowBare(roomView)
default: default: