diff options
Diffstat (limited to '')
-rw-r--r-- | ui/buffers.go | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/ui/buffers.go b/ui/buffers.go index 4cc0b45..4c40e19 100644 --- a/ui/buffers.go +++ b/ui/buffers.go @@ -182,6 +182,7 @@ type buffer struct { title string highlights int unread bool + read time.Time lines []Line topic string @@ -389,6 +390,39 @@ func (bs *BufferList) SetTopic(netID, title string, topic string) { b.topic = topic } +func (bs *BufferList) SetRead(netID, title string, timestamp time.Time) { + idx := bs.idx(netID, title) + if idx < 0 { + return + } + b := &bs.list[idx] + if len(b.lines) > 0 && !b.lines[len(b.lines)-1].At.After(timestamp) { + b.highlights = 0 + b.unread = false + } + if b.read.Before(timestamp) { + b.read = timestamp + } +} + +func (bs *BufferList) UpdateRead() (netID, title string, timestamp time.Time) { + b := &bs.list[bs.current] + var line *Line + y := 0 + for i := len(b.lines) - 1; 0 <= i; i-- { + line = &b.lines[i] + if y >= b.scrollAmt { + break + } + y += len(line.NewLines(bs.tlInnerWidth)) + 1 + } + if line != nil && line.At.After(b.read) { + b.read = line.At + return b.netID, b.title, b.read + } + return "", "", time.Time{} +} + func (bs *BufferList) Current() (netID, title string) { b := &bs.list[bs.current] return b.netID, b.title |