From ccd042889f6d8aa78b70c01395ef69aec48ac48c Mon Sep 17 00:00:00 2001 From: Tim Culverhouse Date: Tue, 5 Jul 2022 14:48:39 -0500 Subject: [PATCH] threading: add force-client-threads option This patch adds a config option to force the use of client side threads. This option will override a servers Thread capability, and only build threads on the client. It can be enabled contextually. For example: [ui] threading-enabled = true [ui:folder~^Archive] force-client-threads = true This config would enable threads for all views, and use client threads for folders that start with Archive. This can be advantageous if, for example, the folder is very large and the server has a slow response due to building threads for the entire mailbox Signed-off-by: Tim Culverhouse Acked-by: Robin Jarry --- config/aerc.conf | 5 +++++ config/config.go | 1 + doc/aerc-config.5.scd | 6 ++++++ lib/msgstore.go | 3 +-- widgets/account.go | 1 + 5 files changed, 14 insertions(+), 2 deletions(-) diff --git a/config/aerc.conf b/config/aerc.conf index 8e503f5..2906381 100644 --- a/config/aerc.conf +++ b/config/aerc.conf @@ -174,6 +174,11 @@ completion-popovers=true # Default: false #threading-enabled=false +# Force client-side thread building +# +# Default: false +#force-client-threads=false + [statusline] # Describes the format string for the statusline. # diff --git a/config/config.go b/config/config.go index 8a243c3..e0c8608 100644 --- a/config/config.go +++ b/config/config.go @@ -46,6 +46,7 @@ type UIConfig struct { EmptyDirlist string `ini:"empty-dirlist"` MouseEnabled bool `ini:"mouse-enabled"` ThreadingEnabled bool `ini:"threading-enabled"` + ForceClientThreads bool `ini:"force-client-threads"` FuzzyComplete bool `ini:"fuzzy-complete"` NewMessageBell bool `ini:"new-message-bell"` Spinner string `ini:"spinner"` diff --git a/doc/aerc-config.5.scd b/doc/aerc-config.5.scd index a9d0cd9..55bc7a8 100644 --- a/doc/aerc-config.5.scd +++ b/doc/aerc-config.5.scd @@ -300,6 +300,12 @@ These options are configured in the *[ui]* section of aerc.conf. Default: false +*force-client-threads* + Force threads to be built client-side. Backends that don't support threading + will always build threads client side. + + Default: false + ## Contextual UI Configuration diff --git a/lib/msgstore.go b/lib/msgstore.go index 0eb5682..99ae594 100644 --- a/lib/msgstore.go +++ b/lib/msgstore.go @@ -60,13 +60,12 @@ type MessageStore struct { func NewMessageStore(worker *types.Worker, dirInfo *models.DirectoryInfo, defaultSortCriteria []*types.SortCriterion, - thread bool, + thread bool, clientThreads bool, triggerNewEmail func(*models.MessageInfo), triggerDirectoryChange func()) *MessageStore { dirInfoUpdateDelay := 5 * time.Second - var clientThreads bool if !dirInfo.Caps.Thread { clientThreads = true } diff --git a/widgets/account.go b/widgets/account.go index 4fe6df7..6e03160 100644 --- a/widgets/account.go +++ b/widgets/account.go @@ -295,6 +295,7 @@ func (acct *AccountView) onMessage(msg types.WorkerMessage) { store = lib.NewMessageStore(acct.worker, msg.Info, acct.GetSortCriteria(), acct.UiConfig().ThreadingEnabled, + acct.UiConfig().ForceClientThreads, func(msg *models.MessageInfo) { acct.conf.Triggers.ExecNewEmail(acct.acct, acct.conf, msg)