X-Git-Url: http://git.giacomolli.uk/onechat/blobdiff_plain/baf7a940be8927278e3b4b87e7366cebfc16532f..ae8532ff0e9d3d676fec5f48780a62e58aa6882d:/view.go?ds=sidebyside diff --git a/view.go b/view.go index 9fcd7d8..2357198 100644 --- a/view.go +++ b/view.go @@ -168,6 +168,18 @@ func (v *View) Refresh(node Node) { } } +// Pending tells if a line of the view is not built yet. +func (v *View) Pending() bool { + for _, line := range v.lines { + _, built := v.nodes[line] + if !built { + return true + } + } + + return false +} + // 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 { @@ -185,7 +197,9 @@ func (v *View) LinesWithout(skip map[int]bool) []string { } var text strings.Builder + v.renderLine(&text, line) + lines = append(lines, text.String()) } @@ -197,7 +211,9 @@ func (v *View) LinesWithout(skip map[int]bool) []string { // sees a pending mark or a part of a message. func (v *View) Context(end int) string { var text strings.Builder + text.WriteString("\n") + for _, line := range v.lines { _, built := v.nodes[line] if !built || nodeEnd(line.level, line.index) > end { @@ -249,6 +265,7 @@ func (v *View) fit(tree ViewNodeReader) (bool, error) { size += v.lineSize(parent) - v.lineSize(left) - v.lineSize(right) delete(v.nodes, left) delete(v.nodes, right) + v.lines[best] = parent v.lines = append(v.lines[:best+1], v.lines[best+2:]...) merged = true @@ -304,7 +321,7 @@ func (v *View) mostDue(tree ViewNodeReader) (int, error) { built, err := tree.Built(left.level+1, left.index/2) if err != nil { - return -1, err + return -1, fmt.Errorf("check parent node: %w", err) } if built {