diff options
author | Koni Marti <koni.marti@gmail.com> | 2022-10-20 16:43:44 +0200 |
---|---|---|
committer | Robin Jarry <robin@jarry.cc> | 2022-10-27 22:44:39 +0200 |
commit | 006e10357b0e89ba3a8216ff5a6435c5d8f77187 (patch) | |
tree | 62cd69a39c68948e0e36e03a7106fc80ccc35b6e /lib/threadbuilder.go | |
parent | 88afe7bb4a7425fbce767a64ed454151514fa4f2 (diff) | |
download | aerc-006e10357b0e89ba3a8216ff5a6435c5d8f77187.tar.gz |
threads: reverse thread ordering
Add reverse-thread-order option to the ui config to enable reverse
display of the mesage threads. Default order is the the intial message
is on the top with all the replies being displayed below. The reverse
options will put the initial message at the bottom with the replies on
top.
Signed-off-by: Koni Marti <koni.marti@gmail.com>
Acked-by: Robin Jarry <robin@jarry.cc>
Diffstat (limited to 'lib/threadbuilder.go')
-rw-r--r-- | lib/threadbuilder.go | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/lib/threadbuilder.go b/lib/threadbuilder.go index 75a80797..b1609257 100644 --- a/lib/threadbuilder.go +++ b/lib/threadbuilder.go @@ -55,7 +55,7 @@ func (builder *ThreadBuilder) Update(msg *models.MessageInfo) { } // Threads returns a slice of threads for the given list of uids -func (builder *ThreadBuilder) Threads(uids []uint32) []*types.Thread { +func (builder *ThreadBuilder) Threads(uids []uint32, inverse bool) []*types.Thread { builder.Lock() defer builder.Unlock() @@ -67,7 +67,7 @@ func (builder *ThreadBuilder) Threads(uids []uint32) []*types.Thread { builder.sortThreads(threads, uids) // rebuild uids from threads - builder.RebuildUids(threads) + builder.RebuildUids(threads, inverse) elapsed := time.Since(start) logging.Infof("%d threads created in %s", len(threads), elapsed) @@ -155,15 +155,23 @@ func (builder *ThreadBuilder) sortThreads(threads []*types.Thread, orderedUids [ } // RebuildUids rebuilds the uids from the given slice of threads -func (builder *ThreadBuilder) RebuildUids(threads []*types.Thread) { +func (builder *ThreadBuilder) RebuildUids(threads []*types.Thread, inverse bool) { uids := make([]uint32, 0, len(threads)) iterT := builder.iterFactory.NewIterator(threads) for iterT.Next() { + var threaduids []uint32 _ = iterT.Value().(*types.Thread).Walk( func(t *types.Thread, level int, currentErr error) error { - uids = append(uids, t.Uid) + threaduids = append(threaduids, t.Uid) return nil }) + if inverse { + for j := len(threaduids) - 1; j >= 0; j-- { + uids = append(uids, threaduids[j]) + } + } else { + uids = append(uids, threaduids...) + } } result := make([]uint32, 0, len(uids)) iterU := builder.iterFactory.NewIterator(uids) |