summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
Diffstat (limited to 'client')
-rw-r--r--client/application.go7
-rw-r--r--client/channel_list.go9
-rw-r--r--client/channel_window.go20
-rw-r--r--client/ui.go7
4 files changed, 33 insertions, 10 deletions
diff --git a/client/application.go b/client/application.go
index 7e46199..6f7e599 100644
--- a/client/application.go
+++ b/client/application.go
@@ -103,12 +103,7 @@ func (a *application) OnEvent(cmd proto.Command) {
}
})
case "unread":
- switch cl := a.currentWindow.(type) {
- case channelLocation:
- if cl.id != cmd.Target {
- a.channelList.setUnread(channelLocation {id: cmd.Target}, true)
- }
- }
+ a.channelList.setUnread(channelLocation {id: cmd.Target}, true)
case "read":
a.channelList.setUnread(channelLocation {id: cmd.Target}, false)
}
diff --git a/client/channel_list.go b/client/channel_list.go
index 24c5230..b8bf962 100644
--- a/client/channel_list.go
+++ b/client/channel_list.go
@@ -58,6 +58,15 @@ func (cl *channelList) setUnread(location channelLocation, unread bool) {
}
}
+func (cl *channelList) getUnread(location channelLocation) bool {
+ for i := 0; i < len(*cl); i++ {
+ if (*cl)[i].location == location {
+ return (*cl)[i].unread
+ }
+ }
+ return false
+}
+
func (cl *channelList) findName(name string) channelLocation {
for i := 0; i < len(*cl); i++ {
if validate.Fold((*cl)[i].name) == validate.Fold(name) {
diff --git a/client/channel_window.go b/client/channel_window.go
index dbeeb3c..97e86e8 100644
--- a/client/channel_window.go
+++ b/client/channel_window.go
@@ -142,13 +142,25 @@ func (cw *channelWindow) Send(text string) {
if cw.location.jumpTo == "" {
cw.Buf.ScrollBottom()
}
+ cw.markRead()
// twofold: push to front of history, navigate back to non-history view
globalApp.goTo(channelLocation {id: cw.location.id})
}
-func (cw *channelWindow) setRead() {
- globalApp.Request(proto.NewCmd("read", cw.location.id), nil)
- globalApp.channelList.setUnread(cw.location, false)
+func (cw *channelWindow) markRead() {
+ globalApp.Request(proto.NewCmd("read", cw.location.id),
+ func(response proto.Command) {
+ if response.Kind == "ok" {
+ globalApp.channelList.setUnread(cw.location, false)
+ }
+ },
+ )
+}
+
+func (cw *channelWindow) fingersPresent() {
+ if globalApp.channelList.getUnread(cw.location) && cw.Buf.AtBottom() {
+ cw.markRead()
+ }
}
func (cw *channelWindow) replyTo(id string) {
@@ -398,7 +410,7 @@ func (cw *channelWindow) OnNavigate() {
if cw.jumpedTo != nil {
cw.Buf.ScrollTo(cw.jumpedTo.Id())
}
- cw.setRead()
+ cw.markRead()
}
func (cw *channelWindow) goToMessage(id string) {
diff --git a/client/ui.go b/client/ui.go
index 3cba7e2..8331799 100644
--- a/client/ui.go
+++ b/client/ui.go
@@ -57,6 +57,13 @@ func (a *application) onInput(ev tui.Event) {
}
}
+ if ev.Key != 0 {
+ switch cl := a.currentWindow.(type) {
+ case channelLocation:
+ a.windowCache.Get(cl).(*channelWindow).fingersPresent()
+ }
+ }
+
buf := win.Buffer()
scroll := tui.Size().Height - 5
switch ev.Key {