X-Git-Url: https://git.giacomolli.uk/onechat/blobdiff_plain/feda522eba3e2a27c91741c77d0d01f1840c0004..5da3ea038d1e9f9a2634d5ab137aef6989a3a789:/view.go diff --git a/view.go b/view.go index 3ccf87e..8e71eec 100644 --- a/view.go +++ b/view.go @@ -41,8 +41,8 @@ type nodeReader interface { // For the sibling pair (l, i) and (l, i+1), due is (T - last) / 2^l, with T the // number of messages and last the ID of the last message of the pair. That is // how long ago the pair ended, measured in its own line size. With a budget of -// the length of Taelin's rollback push list, this order makes the same merges -// as the push. The oldest pair wins a tie. +// the length of the rollback push list of the reference design, this order +// makes the same merges as the push. The oldest pair wins a tie. type View struct { high int low int @@ -280,9 +280,19 @@ func (v *View) lineSize(line nodeKey) int { // Render returns the view as the model reads it: one line "id+n|text" for each // node inside tags, with the newlines of the text as spaces. func (v *View) Render() string { + return v.RenderWithout(nil) +} + +// RenderWithout returns the view as Render does, without the leaf lines of the +// messages in skip. A line that merges such a message with others stays. +func (v *View) RenderWithout(skip map[int]bool) string { var text strings.Builder text.WriteString("\n") for _, line := range v.lines { + if line.level == 0 && skip[line.index] { + continue + } + v.renderLine(&text, line) }