From 8f7695fde5cd84b7f6b8f3193270eda2fd62448c Mon Sep 17 00:00:00 2001 From: Koni Marti Date: Tue, 26 Jul 2022 11:30:26 +0200 Subject: msgstore: implement a uid-based architecture Change the message store architecture from an index-based to a uid-based one. Key advantage of this design approach is that no reselect mechanism is required anymore since it comes with the design for free. Fixes: https://todo.sr.ht/~rjarry/aerc/43 Signed-off-by: Koni Marti Tested-by: Tim Culverhouse Acked-by: Robin Jarry --- commands/account/clear.go | 2 -- commands/msg/delete.go | 4 ++-- commands/msg/toggle-threads.go | 1 - 3 files changed, 2 insertions(+), 5 deletions(-) (limited to 'commands') diff --git a/commands/account/clear.go b/commands/account/clear.go index 5bab710..af7da32 100644 --- a/commands/account/clear.go +++ b/commands/account/clear.go @@ -51,8 +51,6 @@ func (Clear) Execute(aerc *widgets.Aerc, args []string) error { if clearSelected { defer store.Select(0) - } else { - store.SetReselect(store.Selected()) } store.ApplyClear() acct.SetStatus(statusline.SearchFilterClear()) diff --git a/commands/msg/delete.go b/commands/msg/delete.go index 2d7ad0f..d144388 100644 --- a/commands/msg/delete.go +++ b/commands/msg/delete.go @@ -56,7 +56,7 @@ func (Delete) Execute(aerc *widgets.Aerc, args []string) error { // no more messages in the list if next == nil { aerc.RemoveTab(h.msgProvider) - store.Select(len(store.Uids())) + acct.Messages().Select(0) acct.Messages().Invalidate() return } @@ -74,7 +74,7 @@ func (Delete) Execute(aerc *widgets.Aerc, args []string) error { if next == nil { // We deleted the last message, select the new last message // instead of the first message - store.Select(len(store.Uids())) + acct.Messages().Select(0) } } acct.Messages().Invalidate() diff --git a/commands/msg/toggle-threads.go b/commands/msg/toggle-threads.go index 05c2c5e..af694bc 100644 --- a/commands/msg/toggle-threads.go +++ b/commands/msg/toggle-threads.go @@ -34,7 +34,6 @@ func (ToggleThreads) Execute(aerc *widgets.Aerc, args []string) error { if err != nil { return err } - store.SetReselect(store.Selected()) store.SetThreadedView(!store.ThreadedView()) acct.SetStatus(statusline.Threading(store.ThreadedView())) acct.Messages().Invalidate() -- cgit v1.2.3