diff options
author | Tim Culverhouse <tim@timculverhouse.com> | 2022-07-05 14:48:39 -0500 |
---|---|---|
committer | Robin Jarry <robin@jarry.cc> | 2022-07-10 21:15:12 +0200 |
commit | ccd042889f6d8aa78b70c01395ef69aec48ac48c (patch) | |
tree | 90e0f46b846f11ae2e0f498e4035f357938206fe | |
parent | 3a614e45fce9b505bb7e17a31eabffcc5e2d9022 (diff) | |
download | aerc-ccd042889f6d8aa78b70c01395ef69aec48ac48c.zip |
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 <tim@timculverhouse.com>
Acked-by: Robin Jarry <robin@jarry.cc>
-rw-r--r-- | config/aerc.conf | 5 | ||||
-rw-r--r-- | config/config.go | 1 | ||||
-rw-r--r-- | doc/aerc-config.5.scd | 6 | ||||
-rw-r--r-- | lib/msgstore.go | 3 | ||||
-rw-r--r-- | 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) |