diff options
author | Koni Marti <koni.marti@gmail.com> | 2023-07-18 10:29:52 +0200 |
---|---|---|
committer | Robin Jarry <robin@jarry.cc> | 2024-06-25 15:28:11 +0200 |
commit | 7f66297c521fca8f9bc17280f0a96874598bde96 (patch) | |
tree | 643e1d5c6dbbf55814c689f2509f3eb9bd532fa2 /lib/threadbuilder.go | |
parent | 9cd806fa6e80829753ecd3356e19044d6e210826 (diff) | |
download | aerc-7f66297c521fca8f9bc17280f0a96874598bde96.tar.gz |
threadbuilder: show siblings even when no parent found
Show all threading associations even when not all nodes are present.
Indicate if a thread is incomplete, i.e. misses a direct parent node.
Use the `msglist_thread_orphan.fg=red` styleobject in your stylesheet to
indicate whether a messsage has a missing parent.
Also use a different thread prefix ("┬─" instead of "├─") not to confuse
them with regular threads that have a visible parent.
Signed-off-by: Koni Marti <koni.marti@gmail.com>
Signed-off-by: Robin Jarry <robin@jarry.cc>
Tested-by: Matěj Cepl <mcepl@cepl.eu>
Diffstat (limited to 'lib/threadbuilder.go')
-rw-r--r-- | lib/threadbuilder.go | 36 |
1 files changed, 25 insertions, 11 deletions
diff --git a/lib/threadbuilder.go b/lib/threadbuilder.go index c18ab3d0..b7dae431 100644 --- a/lib/threadbuilder.go +++ b/lib/threadbuilder.go @@ -165,23 +165,30 @@ func (builder *ThreadBuilder) buildTree(c jwz.Threadable, parent *types.Thread, return } for node := c; node != nil; node = node.GetNext() { - thread := parent - if !node.IsDummy() { - thread = builder.newThread(node, parent) - if rootLevel { - thread.NextSibling = parent.FirstChild - parent.FirstChild = thread - } else { - parent.InsertCmp(thread, bigger) - } + thread := builder.newThread(node, parent, node.IsDummy()) + if rootLevel { + thread.NextSibling = parent.FirstChild + parent.FirstChild = thread + } else { + parent.InsertCmp(thread, bigger) } builder.buildTree(node.GetChild(), thread, bigger, node.IsDummy()) } } -func (builder *ThreadBuilder) newThread(c jwz.Threadable, parent *types.Thread) *types.Thread { +func (builder *ThreadBuilder) newThread(c jwz.Threadable, parent *types.Thread, + hidden bool, +) *types.Thread { + hide := 0 + if hidden { + hide += 1 + } if threadable, ok := c.(*threadable); ok { - return &types.Thread{Uid: threadable.MsgInfo.Uid, Parent: parent} + return &types.Thread{ + Uid: threadable.UID(), + Parent: parent, + Hidden: hide, + } } return nil } @@ -297,6 +304,13 @@ func cleanRefs(m, irp string, refs []string) []string { return cleanRefs } +func (t *threadable) UID() uint32 { + if t.MsgInfo == nil { + return 0 + } + return t.MsgInfo.Uid +} + func (t *threadable) Subject() string { // deactivate threading by subject for now return "" |