aboutsummaryrefslogtreecommitdiffstats
path: root/lib/msgstore.go
Commit message (Collapse)AuthorAgeFilesLines
* extract search criteria parsing into the backendsReto Brunner2019-08-291-4/+2
|
* Fix out-of-order messages by sorting as we displayStephen Brennan2019-08-291-1/+1
| | | | | | | | | | Sometimes I observe out-of-order messages when using a maildir inbox. It appears that the UIDs for these messages are returned out of order by the MessageStore. In order for a maildir MessageStore to return messages in most recently received order, it must have already opened all messages and parsed the date to use as a sort key. Rather than implement that, simply sort messages by time as we display. This fix shows my emails in order.
* Implement next-folder using NextPrev with amountJelle Besseling2019-08-071-3/+3
| | | | | | This fixes ~sircmpwn/aerc2#182 https://todo.sr.ht/~sircmpwn/aerc2/182
* Ring bell when new messages arrive0.2.0Ben Burwell2019-07-291-3/+12
| | | | | | | | 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.
* lib/msgstore: Fix Select, Next, Prev with filterKevin Kuehler2019-07-291-8/+10
| | | | | | | | When filter is active we want to use store.results instead of store.uids, since we are dealing with a subset of the uids. Otherwise any methods involving len will have undefined behavior. Signed-off-by: Kevin Kuehler <keur@ocf.berkeley.edu>
* Add new-email triggerJeffas2019-07-261-1/+18
| | | | | | | | | | | | | | | | | This patch sets up the trigger config section of aerc.conf. Each trigger has its own function which is called from the place where it is triggered. Currently only the new-email trigger is implemented. The triggers make use of format strings. For instance, in the new-email trigger this allows the user to select the trigger command and also the information extracted from the command and placed into their command. To actually execute the trigger commands the keypresses are simulated. Further triggers can be implemented in the future. Formatting of the command is moved to a new package.
* Make :next-result :prev-result relative to cursorKevin Kuehler2019-07-251-0/+9
| | | | Signed-off-by: Kevin Kuehler <keur@ocf.berkeley.edu>
* Implement :filter, :clearKevin Kuehler2019-07-191-14/+33
| | | | Signed-off-by: Kevin Kuehler <keur@ocf.berkeley.edu>
* #190 Handle gmail duplicate folderDaniel Bridges2019-07-111-0/+2
|
* Fix re-opening of expired pipe tabsDrew DeVault2019-07-081-1/+13
|
* Use []uint32 instead of imap.SeqSetBen Burwell2019-07-081-25/+11
| | | | | | | | A sequence-set is an IMAP-specific implementation detail. Throughout the UI, aerc simply operates using lists of opaque identifiers. In order to loosen the coupling between the UI and IMAP in particular, replace most usages of imap.SeqSet with []uint32, leaving the translation to a SeqSet to the IMAP backend as needed.
* Factor UI models out of the worker message packageBen Burwell2019-07-081-18/+19
| | | | | | | | Before, the information needed to display different parts of the UI was tightly coupled to the specific messages being sent back and forth to the backend worker. Separating out a models package allows us to be more specific about exactly what a backend is able to and required to provide for the UI.
* panic: runtime error: index out of range in handleFetchMessages (#127)Zach Sisco2019-06-291-3/+1
|
* Implement :search, :next-result, :prev-resultDrew DeVault2019-06-261-1/+49
|
* Move select functionality from msglist to msgstoreKevin Kuehler2019-06-111-0/+41
| | | | | | Remove msglist Next and Prev commands Signed-off-by: Kevin Kuehler <kkuehler@brave.com>
* Add :read and :unread commandsDrew DeVault2019-06-091-0/+14
|
* Update our message flags when server updates themDrew DeVault2019-06-091-3/+1
|
* Add archive commandRobert Günzler2019-06-091-2/+15
| | | | | | | | | | | | | | | Adds an archive command that moves the current message into the folder specified in the account config entry. Supports three layouts at this point: - flat: puts all messages next to each other - year: creates a folder per year - month: same as above, plus folders per month This also adds a "-p" argument to "cp" and "mv" that works like "--parents" on mkdir(1). We use this to auto-create the directories for the archive layout.
* Flesh out multipart switcherDrew DeVault2019-05-201-1/+1
|
* Update internal state and draw from the same goroutineSimon Ser2019-05-191-19/+0
| | | | | | | | | | | | | | | | | | | | | | | | | This commit introduces a new Aerc.Tick function that should be called to refresh the internal state. This in turn makes each AccountView process worker events. The UI goroutine repeatedly refreshes the internal state before drawing a new frame. The reason for this is that many worker messages may need to be processed for a single frame, and drawing the UI is far slower than refreshing the internal state. This has been confirmed in my testing (calling Aerc.Tick only once per frame results in a slower display). Many synchronization code has been removed. We can now write widgets without having to care so much about races. The remaining sync users are: - widgets/spinner: the spinner value is updated from inside an internal goroutine - lib/ui/invalidatable: Invalidate may be called from any goroutine - lib/ui/grid: same - lib/ui/ui: an internal goroutine needs read access to UI.exit - worker/types/worker: Worker.callbacks is used for both worker and UI callbacks The exact goroutine requirements for Drawable have been documented.
* s/aerc2/aerc/gDrew DeVault2019-05-171-1/+1
|
* Fix issues with OOB uidsDrew DeVault2019-05-161-3/+3
|
* Implement move, mv commandsDrew DeVault2019-05-141-0/+27
|
* Implement :copy (aka :cp)Drew DeVault2019-05-141-2/+16
|
* Remove leftover debug loggingDrew DeVault2019-05-131-3/+0
|
* Handle incoming emails gracefullyDrew DeVault2019-05-131-0/+6
|
* lib/msgstore: protect with a mutexSimon Ser2019-04-291-3/+22
| | | | | | MessageStore has a lot of exported fields that can be read from the outside. Each read must be protected, because a call from Update could happen at any time.
* Make message viewer real, part twoDrew DeVault2019-03-311-1/+1
|
* Rename FetchMessageBodies to FetchFullMessagesDrew DeVault2019-03-311-2/+2
|
* Make the message viewer real, part oneDrew DeVault2019-03-311-1/+15
|
* Don't parse mail in worker; send a reader insteadDrew DeVault2019-03-311-7/+6
|
* Pull BodyStructure up from IMAP workerDrew DeVault2019-03-311-1/+15
|
* Show deleted emails pending server ack in greyDrew DeVault2019-03-301-2/+15
| | | | TODO: Don't let the user select or interact with deleted messages
* Add body fetching support codeDrew DeVault2019-03-291-6/+71
|
* Remove unused import from msgstore.goDrew DeVault2019-03-211-2/+0
|
* Implement :delete-messageDrew DeVault2019-03-201-3/+26
|
* Add TODO to msgstore.goDrew DeVault2019-03-151-1/+1
|
* Move MessageStore into its own fileDrew DeVault2019-03-151-0/+86