]> git.giacomolli.uk - onechat/blobdiff - view.go
Revert compaction view block messages
[onechat] / view.go
diff --git a/view.go b/view.go
index 9fcd7d8bf91eff927daa49aa94a2b7d93168339f..235719877517ad1cbce460dfa18ccb3c07af5366 100644 (file)
--- 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 <chat> 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("<chat>\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 {