summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Culverhouse <tim@timculverhouse.com>2022-07-05 14:48:39 -0500
committerRobin Jarry <robin@jarry.cc>2022-07-10 21:15:12 +0200
commitccd042889f6d8aa78b70c01395ef69aec48ac48c (patch)
tree90e0f46b846f11ae2e0f498e4035f357938206fe
parent3a614e45fce9b505bb7e17a31eabffcc5e2d9022 (diff)
downloadaerc-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.conf5
-rw-r--r--config/config.go1
-rw-r--r--doc/aerc-config.5.scd6
-rw-r--r--lib/msgstore.go3
-rw-r--r--widgets/account.go1
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)