Only fetch the directory contents when we are switching directories
Previously, sending a DirectoryInfo assumed that a directory change happened. However we don't want that if we only want to update the unread message count.
This commit is contained in:
parent
30c0a9fba4
commit
bd4df53009
|
@ -31,8 +31,6 @@ type MessageStore struct {
|
||||||
resultIndex int
|
resultIndex int
|
||||||
filter bool
|
filter bool
|
||||||
|
|
||||||
defaultSortCriteria []*types.SortCriterion
|
|
||||||
|
|
||||||
// Map of uids we've asked the worker to fetch
|
// Map of uids we've asked the worker to fetch
|
||||||
onUpdate func(store *MessageStore) // TODO: multiple onUpdate handlers
|
onUpdate func(store *MessageStore) // TODO: multiple onUpdate handlers
|
||||||
onUpdateDirs func()
|
onUpdateDirs func()
|
||||||
|
@ -46,7 +44,6 @@ type MessageStore struct {
|
||||||
|
|
||||||
func NewMessageStore(worker *types.Worker,
|
func NewMessageStore(worker *types.Worker,
|
||||||
dirInfo *models.DirectoryInfo,
|
dirInfo *models.DirectoryInfo,
|
||||||
defaultSortCriteria []*types.SortCriterion,
|
|
||||||
triggerNewEmail func(*models.MessageInfo),
|
triggerNewEmail func(*models.MessageInfo),
|
||||||
triggerDirectoryChange func()) *MessageStore {
|
triggerDirectoryChange func()) *MessageStore {
|
||||||
|
|
||||||
|
@ -60,8 +57,6 @@ func NewMessageStore(worker *types.Worker,
|
||||||
bodyCallbacks: make(map[uint32][]func(io.Reader)),
|
bodyCallbacks: make(map[uint32][]func(io.Reader)),
|
||||||
headerCallbacks: make(map[uint32][]func(*types.MessageInfo)),
|
headerCallbacks: make(map[uint32][]func(*types.MessageInfo)),
|
||||||
|
|
||||||
defaultSortCriteria: defaultSortCriteria,
|
|
||||||
|
|
||||||
pendingBodies: make(map[uint32]interface{}),
|
pendingBodies: make(map[uint32]interface{}),
|
||||||
pendingHeaders: make(map[uint32]interface{}),
|
pendingHeaders: make(map[uint32]interface{}),
|
||||||
worker: worker,
|
worker: worker,
|
||||||
|
@ -176,9 +171,6 @@ func (store *MessageStore) Update(msg types.WorkerMessage) {
|
||||||
switch msg := msg.(type) {
|
switch msg := msg.(type) {
|
||||||
case *types.DirectoryInfo:
|
case *types.DirectoryInfo:
|
||||||
store.DirInfo = *msg.Info
|
store.DirInfo = *msg.Info
|
||||||
store.worker.PostAction(&types.FetchDirectoryContents{
|
|
||||||
SortCriteria: store.defaultSortCriteria,
|
|
||||||
}, nil)
|
|
||||||
update = true
|
update = true
|
||||||
case *types.DirectoryContents:
|
case *types.DirectoryContents:
|
||||||
newMap := make(map[uint32]*models.MessageInfo)
|
newMap := make(map[uint32]*models.MessageInfo)
|
||||||
|
|
|
@ -242,7 +242,6 @@ func (acct *AccountView) onMessage(msg types.WorkerMessage) {
|
||||||
store.Update(msg)
|
store.Update(msg)
|
||||||
} else {
|
} else {
|
||||||
store = lib.NewMessageStore(acct.worker, msg.Info,
|
store = lib.NewMessageStore(acct.worker, msg.Info,
|
||||||
acct.getSortCriteria(),
|
|
||||||
func(msg *models.MessageInfo) {
|
func(msg *models.MessageInfo) {
|
||||||
acct.conf.Triggers.ExecNewEmail(acct.acct,
|
acct.conf.Triggers.ExecNewEmail(acct.acct,
|
||||||
acct.conf, msg)
|
acct.conf, msg)
|
||||||
|
@ -257,6 +256,7 @@ func (acct *AccountView) onMessage(msg types.WorkerMessage) {
|
||||||
acct.msglist.SetStore(store)
|
acct.msglist.SetStore(store)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
acct.dirlist.Invalidate()
|
||||||
case *types.DirectoryContents:
|
case *types.DirectoryContents:
|
||||||
if store, ok := acct.dirlist.SelectedMsgStore(); ok {
|
if store, ok := acct.dirlist.SelectedMsgStore(); ok {
|
||||||
store.Update(msg)
|
store.Update(msg)
|
||||||
|
|
|
@ -11,6 +11,7 @@ import (
|
||||||
|
|
||||||
"git.sr.ht/~sircmpwn/aerc/config"
|
"git.sr.ht/~sircmpwn/aerc/config"
|
||||||
"git.sr.ht/~sircmpwn/aerc/lib"
|
"git.sr.ht/~sircmpwn/aerc/lib"
|
||||||
|
libsort "git.sr.ht/~sircmpwn/aerc/lib/sort"
|
||||||
"git.sr.ht/~sircmpwn/aerc/lib/ui"
|
"git.sr.ht/~sircmpwn/aerc/lib/ui"
|
||||||
"git.sr.ht/~sircmpwn/aerc/models"
|
"git.sr.ht/~sircmpwn/aerc/models"
|
||||||
"git.sr.ht/~sircmpwn/aerc/worker/types"
|
"git.sr.ht/~sircmpwn/aerc/worker/types"
|
||||||
|
@ -104,6 +105,10 @@ func (dirlist *DirectoryList) Select(name string) {
|
||||||
}
|
}
|
||||||
sort.Strings(dirlist.dirs)
|
sort.Strings(dirlist.dirs)
|
||||||
dirlist.sortDirsByFoldersSortConfig()
|
dirlist.sortDirsByFoldersSortConfig()
|
||||||
|
// once opened, we need to enumerate the contents
|
||||||
|
dirlist.worker.PostAction(&types.FetchDirectoryContents{
|
||||||
|
SortCriteria: dirlist.getSortCriteria(),
|
||||||
|
}, nil)
|
||||||
}
|
}
|
||||||
dirlist.Invalidate()
|
dirlist.Invalidate()
|
||||||
})
|
})
|
||||||
|
@ -378,3 +383,15 @@ func findString(slice []string, str string) int {
|
||||||
}
|
}
|
||||||
return -1
|
return -1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (dirlist *DirectoryList) getSortCriteria() []*types.SortCriterion {
|
||||||
|
if len(dirlist.UiConfig().Sort) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
criteria, err := libsort.GetSortCriteria(dirlist.UiConfig().Sort)
|
||||||
|
if err != nil {
|
||||||
|
dirlist.logger.Printf("getSortCriteria failed: %v", err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return criteria
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue