about summary refs log tree commit diff stats
path: root/lib/msgstore.go
diff options
context:
space:
mode:
authorBen Burwell <ben@benburwell.com>2019-07-29 10:50:02 -0400
committerDrew DeVault <sir@cmpwn.com>2019-07-29 15:01:49 -0400
commit152f8c9519ac1b7b35c3789b03f3d1cc3b1e8881 (patch)
tree0c8693aa2651955d0e12f090f5469c7183e190d3 /lib/msgstore.go
parent2804f000017c0ef6bcaf8d571627fa08784f48ac (diff)
downloadaerc-152f8c9519ac1b7b35c3789b03f3d1cc3b1e8881.tar.gz
Ring bell when new messages arrive 0.2.0
Add a "new-message-bell" option to the UI section of aerc.conf. A new
hook into the message store allows the msglist widget to detect new
messages being added to the displayed list. When new messages are
delivered, and the new-message-bell option is enabled (as it is by
default), the terminal will beep.
Diffstat (limited to 'lib/msgstore.go')
-rw-r--r--lib/msgstore.go15
1 files changed, 12 insertions, 3 deletions
diff --git a/lib/msgstore.go b/lib/msgstore.go
index 48a105e..b346129 100644
--- a/lib/msgstore.go
+++ b/lib/msgstore.go
@@ -33,12 +33,14 @@ type MessageStore struct {
 	pendingHeaders map[uint32]interface{}
 	worker         *types.Worker
 
-	triggerNewEmail func(*models.MessageInfo)
+	triggerNewEmail        func(*models.MessageInfo)
+	triggerDirectoryChange func()
 }
 
 func NewMessageStore(worker *types.Worker,
 	dirInfo *models.DirectoryInfo,
-	triggerNewEmail func(*models.MessageInfo)) *MessageStore {
+	triggerNewEmail func(*models.MessageInfo),
+	triggerDirectoryChange func()) *MessageStore {
 
 	return &MessageStore{
 		Deleted: make(map[uint32]interface{}),
@@ -52,7 +54,8 @@ func NewMessageStore(worker *types.Worker,
 		pendingHeaders: make(map[uint32]interface{}),
 		worker:         worker,
 
-		triggerNewEmail: triggerNewEmail,
+		triggerNewEmail:        triggerNewEmail,
+		triggerDirectoryChange: triggerDirectoryChange,
 	}
 }
 
@@ -147,6 +150,7 @@ func merge(to *models.MessageInfo, from *models.MessageInfo) {
 
 func (store *MessageStore) Update(msg types.WorkerMessage) {
 	update := false
+	directoryChange := false
 	switch msg := msg.(type) {
 	case *types.DirectoryInfo:
 		store.DirInfo = *msg.Info
@@ -159,6 +163,7 @@ func (store *MessageStore) Update(msg types.WorkerMessage) {
 				newMap[uid] = msg
 			} else {
 				newMap[uid] = nil
+				directoryChange = true
 			}
 		}
 		store.Messages = newMap
@@ -225,6 +230,10 @@ func (store *MessageStore) Update(msg types.WorkerMessage) {
 	if update {
 		store.update()
 	}
+
+	if directoryChange && store.triggerDirectoryChange != nil {
+		store.triggerDirectoryChange()
+	}
 }
 
 func (store *MessageStore) OnUpdate(fn func(store *MessageStore)) {