Commit Graph

26 Commits (af365fa8d441e428f98ae8978a1482d298cdba85)

Author SHA1 Message Date
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