Manos Pitsidianakis
ee10cdbcd5
Make get_async() return a Stream
2020-07-06 15:12:11 +03:00
Manos Pitsidianakis
a38764f490
Add somewhat-working async IMAP backend
2020-07-06 15:12:05 +03:00
Manos Pitsidianakis
b72a1ca6d8
WIP maildir async
2020-07-06 15:08:32 +03:00
Manos Pitsidianakis
efb06be09b
melib: return Result<_> from operation()
...
Envelope might have been deleted before main thread requests an
operation, which is a race condition.
2020-06-23 20:10:54 +03:00
Manos Pitsidianakis
f3d5edfe14
Add copy/move to other account operations
2020-06-08 22:11:43 +03:00
Manos Pitsidianakis
e4a1ab8a09
Fix rustfmt suggestions
2020-05-29 20:43:39 +03:00
Manos Pitsidianakis
bea0ca61f5
maildir: conditionally accept invalid subdirs
...
If directory is invalid (i.e. has no {cur,new,tmp} subfolders), accept
it ONLY if it contains subdirs of any depth that are valid maildir
paths.
For example, this change will accept the following directory tree:
```
invalid_maildir
└── valid_maildir
├── cur
├── new
└── tmp
```
2020-05-28 21:02:49 +03:00
Manos Pitsidianakis
8648b229ad
Add AccountHash to RefreshEvent
...
Different accounts might have same inboxes with same MailboxHashes. Use
the hash of the account's name to differentiate.
2020-05-10 22:10:17 +03:00
Manos Pitsidianakis
eb701695f7
Remove fnv crate
2020-05-10 21:18:56 +03:00
Manos Pitsidianakis
330134af5a
maildir: update mailbox unread count on file rename event
2020-05-06 17:38:29 +03:00
Manos Pitsidianakis
61be6e4c96
notmuch: fix wrong mailbox path in save()
...
mailbox path was passed to save_to_mailbox() with a cur/ tail and
save_to_mailbox() added an extra cur/ tail
2020-03-18 19:22:17 +02:00
Manos Pitsidianakis
4ac52d9d5b
Replace every use of Folder with Mailbox
...
Use Mailbox for consistency.
2020-02-26 10:54:10 +02:00
Manos Pitsidianakis
499fd59c6e
melib/imap: implement refresh()
2020-02-25 22:15:13 +02:00
Manos Pitsidianakis
f38d03e43a
melib: {create,delete}_folder returns updated folders
...
Potential parent folders will have their children fields updated, so
just return all folders.
2020-02-25 22:15:13 +02:00
Manos Pitsidianakis
9616fbb544
melib/maildir: fix wrong subscription status in folders
...
MaildirFolder::new() was checking for subscribed status though that is
supposed to be done in MaildirType::new()
2020-02-08 23:55:47 +02:00
Manos Pitsidianakis
f208948651
melib: add mailbox delete/create to IMAP
2020-02-08 23:54:14 +02:00
Manos Pitsidianakis
21526b5faf
melib: make Work use FnOnce closures
...
There was no need to use Fn() instead of FnOnce()
2019-12-20 00:53:43 +02:00
Manos Pitsidianakis
2b6f6ab42c
melib: Add BackendFolder methods, move special usage logic to backend
...
- add count() method to return (unseen, total) counts
- add is_subscribed()
- add set_special_usage() and set_is_subscribed()
concerns #8
2019-12-18 08:58:49 +02:00
Manos Pitsidianakis
0201241786
melib/backends: MailBackend::refresh() returns Result
...
Handle cases were refresh() would fail properly. Fixes a crash reported in #13
2019-12-15 08:55:08 +02:00
Manos Pitsidianakis
65efb23f14
melib/MailBackend: add refresh() method
...
Initiate refresh manually.
2019-12-14 18:58:59 +02:00
Manos Pitsidianakis
2e38ea11e2
melib: make MailBackend::is_online() return Result<()>
...
Return Result<()> instead of bool to indicate connection status in order
to be able to show errors to user.
2019-12-14 18:57:52 +02:00
Manos Pitsidianakis
ba52c59859
bin: add backend specific validation functions for --test-config flag
2019-11-27 17:42:11 +02:00
Manos Pitsidianakis
af365fa8d4
Set 600 perm mode to all created files
...
When creating a data file, set permissions to read/write for the user.
2019-11-24 17:00:55 +02:00
Manos Pitsidianakis
41a678c6ef
melib: make MailBackend::folders return Result
...
Change folders() signature:
- fn folders(&self) -> FnvHashMap<FolderHash, Folder>;
+ fn folders(&self) -> Result<FnvHashMap<FolderHash, Folder>>;
Imap may not be online, therefore we need the ability to return an
error.
2019-11-23 17:47:24 +02:00
Manos Pitsidianakis
321be8555f
Cleanup startup error exit paths
...
Make startup methods return Results so that the main binary can exit
cleanly instead of using std::process::exit from arbitrary positions,
which exits the process immediately and doesn't run destructors.
2019-11-16 00:33:22 +02:00
Manos Pitsidianakis
77936e0cd5
melib: add notmuch backend
...
Missing:
- Watching for updates functionality
- Using tags
- Search
2019-11-15 22:56:45 +02:00
Manos Pitsidianakis
f56b89dde3
melib: add as_any() method to MailBackend trait
...
Cast the trait object into an &Any object. Then we can downcast it to
its actual type with downcast_ref().
2019-11-08 15:13:42 +02:00
Manos Pitsidianakis
d926cadc4d
melib: remove argument from MailBackend operation()
...
The operation() method on the MailBackend trait returns a trait object
that can read or modify an Envelope directly from the backend. This is
used to get eg the envelope's text, or set flags. It has two arguments,
envelope hash and folder hash.
Only the Maildir backend needed the latter argument, and it can be replaced with a dictionary to match envelope hashes to folder hashes within the Maildir backend.
2019-11-08 15:13:41 +02:00
Manos Pitsidianakis
e5b6faf6bd
Add account online status
...
Add a boolean field to accounts that states if the account can be
accessed. Local backends (Maildir/mbox) return true every time, but
remote backends (IMAP) may not. Accounts start as offline and then get
initialised when their status goes to online. Right now if an IMAP
account startup but later get offline, there are crashes. With this
change the account can be switched back to offline when that happens.
2019-10-24 20:30:17 +03:00
Manos Pitsidianakis
5a262f3ffc
maildir: check for moved mail before moving
...
When moving mail from new/ to cur/ in a Maildir folder, don't panic if
it fails; someone else must have moved it.
2019-09-27 22:38:10 +03:00
Manos Pitsidianakis
9d69a06807
melib: add ShellExpandTrait
...
Add trait to expand "~" and environment variables in paths.
2019-09-26 18:27:13 +03:00
Manos Pitsidianakis
91ae539de1
Small fixes
2019-09-26 13:11:49 +03:00
Manos Pitsidianakis
93de60b6d1
maildir: allow Maildir stores as root_folder
...
Allow top level directories that are not valid maildir folders but
include maildir folders as root_folder of an account.
2019-09-20 10:26:08 +03:00
Manos Pitsidianakis
b98ce8828c
melib: fix wrong validation in Maildir save()
...
Path of folder was compared to folder names and saving to eg
'INBOX/Sent' would not result into mail being saved to Folder { name:
'Sent', path: 'INBOX/Sent' }
2019-09-17 17:25:45 +03:00
Manos Pitsidianakis
f394fde143
add priority and info to jobs and workers
...
jobs now have a priority given to them, in order to parse some mailboxes
(eg INBOX, Sent) first.
worker threads now can set their names and status
2019-09-15 13:21:14 +03:00
Manos Pitsidianakis
81a55abc7c
Update crossbeam to 0.7.2 and remove chan
2019-09-15 13:21:14 +03:00
Manos Pitsidianakis
ecb3fd7f3d
Add dyn keyword to Trait objects
...
And fix some unused var warnings as well
2019-09-15 13:21:14 +03:00
Manos Pitsidianakis
c3e3c98fb0
melib: filter subscribed folders in MailBackend::new()
2019-09-15 13:21:14 +03:00
Manos Pitsidianakis
c9f7b41e47
imap: continuous payload delivery in async workers
2019-09-15 13:21:13 +03:00
Manos Pitsidianakis
0812242f60
Add IMAP backend
...
TODOs: new message events (untagged responses)
2019-09-15 13:21:13 +03:00
Manos Pitsidianakis
76909a1959
add folder subscriptions
2019-08-25 10:48:01 +03:00
Manos Pitsidianakis
89b1e381dc
melib: recreate removed email if it comes back
...
If an email is removed by an outside actor, it is marked as removed.
Renaming files first send a Remove event and then a Rename one. So if a
removed email turns out to have been renamed by someone else, issue a
Create event to get it back.
2019-08-04 00:47:03 +03:00
Manos Pitsidianakis
22f11445e2
Print error and exit if Maildir path config is wrong
2019-08-03 23:55:32 +03:00
Manos Pitsidianakis
ac04195007
maildir: mark removed paths
...
Remove events almost always come immediately before Rename events,
showing that the previous name of a file is removed and then renamed.
Keep proper tabs by marking removed paths instead of actually removing them.
2019-08-02 01:00:37 +03:00
Manos Pitsidianakis
7592e66d6a
maildir: drop mutexes before calling add_path_to_index
2019-07-30 19:24:35 +03:00
Manos Pitsidianakis
93f3d6e230
remove std::dbg uses
2019-07-09 13:05:11 +03:00
Manos Pitsidianakis
24831b3c13
Fix warnings, lints, and 2018 errors
2019-06-18 21:14:14 +03:00
Manos Pitsidianakis
c6674a294d
melib: unwrap mailbox module
2019-06-10 19:40:50 +03:00