Commit Graph

461 Commits (815ff98acc73201bfbd079414104169162a0fa0d)

Author SHA1 Message Date
Manos Pitsidianakis bb486ca9d8
melib: Remove quotes from addresses in email/parser.rs 2019-11-28 22:15:32 +02:00
Manos Pitsidianakis 3dfb2f4f2c
melib: fix out-of-bounds parser bug 2019-11-28 18:52:12 +02:00
Manos Pitsidianakis 58209d6f6b
Replace some panics with errors 2019-11-27 17:42:11 +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 4677f9c6bb
melib/imap: initialise uid_store folders in folders() 2019-11-27 17:42:11 +02:00
Manos Pitsidianakis afff63c781
ui: load vcards to addressbook with vcard_folder account setting 2019-11-27 17:42:11 +02:00
Manos Pitsidianakis 689327651f
melib/vcard: add parser for vcard files 2019-11-27 01:46:23 +02:00
Manos Pitsidianakis 3dc0cb1963
imap: send 'finished' signal when watch thread dies 2019-11-25 12:04:27 +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 eecec551c1
Display watch thread errors to user
Show a proper notification with the error message to the user instead of
just logging it on debug-tracing.
2019-11-23 19:34:16 +02:00
Manos Pitsidianakis b8e4a35963
melib/imap: add default capabilities to SUPPORTED_CAPABILITIES 2019-11-23 19:34:16 +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 424b244bb7
fixup some TODO and FIXMEs 2019-11-22 13:59:00 +02:00
Manos Pitsidianakis 05d9ca6e0d
small fixes 2019-11-21 15:44:18 +02:00
Manos Pitsidianakis ce646abc7a
ui: add send confirmation dialog in compose tab
Confirm before sending mail
2019-11-19 23:28:08 +02:00
Manos Pitsidianakis 51628ac9d2
ui: move list_management mod to melib
list_management module includes some small functions to handle mailing
list metadata (List-* headers)
2019-11-18 20:37:48 +02:00
Manos Pitsidianakis 449a24d075
ui: ListActions changes
- Parse List-Post value like List-Unsubscribe: comma separated angle bracket limited list of <mailto:> or <url> values
- Check if List-Archive value is angle bracket delimited
2019-11-18 14:55:48 +02:00
Manos Pitsidianakis fc2d9a684d
melib/imap: set has_attachments based on BODYSTRUCTURE
fetch BODYSTRUCTURE along with ENVELOPE from server and set
has_attachments based on the MIME structure of the envelope.

Notes: BODYSTRUCTURE returns the MIME structure of the envelope without
the data, so if it includes a multipart/mixed it *should* have
attachments.
ENVELOPE returns basic headers of the message like Sender, Subject, Date
etc.
2019-11-18 13:00:43 +02:00
Manos Pitsidianakis b2cd4f4b7a
melib/imap: put imap folders in RwLock instead of Mutex
This should prevent lockups if the IMAP conn thread gets blocked
2019-11-18 12:59:04 +02:00
Manos Pitsidianakis 953c3aa9d0
melib: Add parameters field in ContentType::Text
Intending to add the option to set the parameter format=flowed in the
next commits
2019-11-17 13:24:19 +02:00
Manos Pitsidianakis f8a1a6caa5
melib: replace find_thread_group with find_root_hash
thread_group property of ThreadNode doesn't yet reflect the actual root
ThreadNode (the root of the thread, that is). So find the root manually
instead.
2019-11-17 12:05:52 +02:00
Manos Pitsidianakis dfa83e486c
melib: add into_iter() for &StackVec<T> 2019-11-16 20:21:47 +02:00
Manos Pitsidianakis 04e1137b36
melib: add "On ${date} ${author} wrote" heading in replies 2019-11-16 19:59:47 +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 7463248da8
melib: change BackendOp::set_flag() signature 2019-11-15 21:32:55 +02:00
Manos Pitsidianakis ede512200b
conf: move FolderConf to melib
This will be needed to add notmuch-specific configuration settings in
the FolderConf struct in the next commit
2019-11-15 19:52:39 +02:00
Manos Pitsidianakis 8f36678abf
melib: make Backendfolder::children return slice 2019-11-14 17:55:24 +02:00
Manos Pitsidianakis 56cda63c83
Fix some warnings 2019-11-14 17:55:24 +02:00
Manos Pitsidianakis f83db67a38
melib/imap: don't stop IDLE session
Previous behaviour: connection with IDLE was stopped every 5 minutes to
poll the other threads. As a result messages received within that time
window when there was no IDLING were never received.
Current behaviour: polling is done in the main connection.
2019-11-12 22:18:00 +02:00
Manos Pitsidianakis dce1c39b48
ui: add mailcap support 2019-11-11 22:20:16 +02:00
Manos Pitsidianakis 5761f854e2
melib: Add FolderPermissions
permissions() method on BackendFolder and SetPermissions in
FolderOperation enum.
2019-11-11 00:47:23 +02:00
Manos Pitsidianakis c1902f96b5
imap: add UIDVALIDITY check
On UIDVALIDITY change, discard cache and force rescan.
2019-11-10 23:02:23 +02:00
Manos Pitsidianakis 06d99c7f92
ui: Add save attachment command
use as `save-attachment ATTACHMENT_INDEX PATH`
2019-11-10 13:33:22 +02:00
Manos Pitsidianakis 580f0be8a4
imap: fix cases that would block connection
Fix blocking if TLS negotiation can't start

Fix blocking if IDLE connection dies.
2019-11-10 13:32:31 +02:00
Manos Pitsidianakis a907b9c21d
Fix melib test errors 2019-11-09 18:10:22 +02:00
Manos Pitsidianakis 8b781cbbe0
melib: StackVec bounds fix 2019-11-09 17:46:07 +02:00
Manos Pitsidianakis e600b0252f
text_processing: add line_break method
In preparation for format=flowed support, add a line_break method in the
text_processing Trait, now renamed from Graphemes to TextProcessing.
2019-11-09 17:44:22 +02:00
Manos Pitsidianakis 098982015b
ui/conversations: show all participating addresses in entry
Show all unique From: values of addresses in thread entries in
Conversations
2019-11-09 13:58:16 +02:00
Manos Pitsidianakis 229e879c26
ui/imap: select user given folder before search
IMAP search() didn't select a folder before searching, thus searching
the mailbox the previous user of self.connection had selected.
2019-11-08 17:50:55 +02:00
Manos Pitsidianakis 99697a8fd5
ui: Add search for IMAP
Add basic search utilising the default SEARCH capability.
2019-11-08 15:13:42 +02:00
Manos Pitsidianakis 7936aef476
Fix infinite watch threads spawning
Watch threads were launched every time the account's online status was
checked, added a check to only do it when it was previously offline.
2019-11-08 15:13:42 +02:00
Manos Pitsidianakis 749d453f00
ui: add query parsers 2019-11-08 15:13:42 +02:00
Manos Pitsidianakis 61fa6d3d4b
ui: show supported IMAP CAPABILITIES list in Status
In status page for IMAP accounts, show a list of CAPABILITIES and
whether meli supports them
2019-11-08 15:13:42 +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 78eecbb104
melib: Hide Envelope behind RwLock
Envelope can now only be accessed from within a RwLock. Two new structs
are introduced: EnvelopeRef and EnvelopeRefMut. These hold a reference
to an Envelope and the mutex guard that keeps them alive.

This change allows sharing of the envelopes hash map amongst threads.
2019-11-08 15:13:41 +02:00
Manos Pitsidianakis d1184d4ea5
ui/search: add sorting in search 2019-11-08 15:13:41 +02:00
Manos Pitsidianakis 3af6f338ce
add sqlite3 feature WIP 2019-11-08 15:13:41 +02:00
Manos Pitsidianakis 0566937a76
imap: reconnect if connection timed out 2019-11-02 12:25:18 +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 1a02491f04
ui/compose: add modification detection
Detect if modifications were done to the draft in the compose tab so
that we can ask for confirmation if user wants to quit an unsaved draft.
2019-10-20 11:35:41 +03:00
Manos Pitsidianakis 5beed91df2
contacts: add support for externally managed contacts
Adds support for contacts (Cards) marked as `external_resource` which
prevents modifications from happening. No way to import external
contacts is added yet.
2019-10-20 11:32:31 +03:00
Manos Pitsidianakis dc525b9ddd
contacts: make CardId an enum
CardId is the "Primary Key" of the contact type, Card. Meli-created
contacts had UUIDs for their CardId. In order to import external
contacts and ensure their primary key is the same each time, CardId is
made into an enum to add hashing as a choice.
2019-10-20 11:25:57 +03:00
Manos Pitsidianakis f3e08c17aa
Update uuid dependency to 0.7.4 2019-10-20 11:25:57 +03:00
Manos Pitsidianakis cfe6138c44
melib: add VCard parsing for contacts
Add rough VCard conversion for melib::Card, to use eventually with
contacts.
2019-10-16 14:57:48 +03:00
Manos Pitsidianakis 52a89ddf94
Add license comment to melib/src/structs.rs 2019-10-15 23:47:37 +03:00
Manos Pitsidianakis d32f0982a9
melib: StackVec fixups
Fix bound checks and add clear() method
2019-10-07 16:46:32 +03:00
Matthias Beyer a0602274f8
Run cargo fmt 2019-10-04 20:47:25 +03:00
Manos Pitsidianakis b7edec0274
Bump version to 0.3.2 2019-09-28 12:25:44 +03:00
Manos Pitsidianakis 47d60f480a
Add path shell expansion to logging and attachments 2019-09-28 12:19:22 +03:00
Manos Pitsidianakis e35a93336a
Add GPG signing and sig verifying 2019-09-28 12:19:22 +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 250129665b
Pass attachment names through decoding
Attachment names in Content-Type parameters can be encoded (eg
=?UTF-8...), so try decoding with phrase() first
2019-09-27 22:21:35 +03:00
Manos Pitsidianakis 68c40a2920
melib: return Result with error when an IO operation fails
Don't unwrap anything because this might be temporary, for example a
short IMAP disconnection.
2019-09-27 13:40:02 +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 0ece51612f
update bincode to 1.2.0 2019-09-26 18:25:30 +03:00
Manos Pitsidianakis fa121820f7
Bump version to 0.3.1 2019-09-26 14:11:24 +03:00
Manos Pitsidianakis c44056a9ff
melib: fix bug in parser::parts
At a certain point when expecting a line terminator parts() checks for
'\n' but not '\r\n'. This resulted in all multipart attachments coming
from b"\r\n" sources like IMAP having only one part when parsed.
2019-09-26 13:11:54 +03:00
Manos Pitsidianakis 91ae539de1
Small fixes 2019-09-26 13:11:49 +03:00
Manos Pitsidianakis f27b815aa7
Add verification of GPG signed messages 2019-09-26 13:11:08 +03:00
Manos Pitsidianakis 9305e543cf
melib: add a `body` field to Attachment
Attachment needs to know the range of bytes where the body part of the
attachment is located. The Attachment.raw field contains the entire
attachment, headers and body. The new Attachment.body fields contains a
`StrBuilder` which contains the offset and length of the body part inside
`raw`.
2019-09-26 13:10:06 +03:00
Manos Pitsidianakis 5a53020f3d
Add debug-tracing feature to all crates
The feature needs to be defined in all manifests in order to be enabled
in all crates.
2019-09-23 09:36:46 +03:00
Manos Pitsidianakis ee82ae175a
imap: add support for imaps connections
Take port value and a `use_starttls` flag from the configuration file.
2019-09-21 21:29:33 +03:00
Manos Pitsidianakis 9563007069
Turn off debug tracing prints in stderr by default 2019-09-21 21:29:33 +03:00
Manos Pitsidianakis 6e75160b70
melib: turn unicode algos and backends into features 2019-09-21 21:29:33 +03:00
Manos Pitsidianakis f066f35410
melib: add get_tags to support subaddressing 2019-09-20 21:35:45 +03:00
Manos Pitsidianakis bee1502499
melib: make References public 2019-09-20 10:47:51 +03:00
Manos Pitsidianakis 32fe8a8b9b
melib: move email.rs back 2019-09-20 10:39:24 +03:00
Manos Pitsidianakis 7accae1774
melib: split address.rs from email.rs 2019-09-20 10:38:29 +03:00
Manos Pitsidianakis b08001ca5d
melib: create address.rs from email.rs 2019-09-20 10:37:51 +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 fb7b038ee1
ui: add set_seen shortcut in {Compact,Conversation}
Shortcut sets an entire thread as seen.
2019-09-20 10:26:08 +03:00
Manos Pitsidianakis 7dc3efaedd
imap: allow conn to be offline and retry on demand
Split the TlsStream of the live IMAP connection to an enum to allow both
offline and online states. The connection is restarted if offline when
requested.
2019-09-20 09:07:55 +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 79212621af
Bump version to 0.3.0 2019-09-16 16:44:04 +03:00
Manos Pitsidianakis 8795c2da4f
ui: small configuration fixes
- unused options were removed,
- renamed `index` conf option to `index_style`
2019-09-16 16:41:22 +03:00
Manos Pitsidianakis 080b8ae775
imap: add log entry on connection retry & failure 2019-09-15 23:44:42 +03:00
Manos Pitsidianakis 9e2bfa22b1
melib: add logging module 2019-09-15 23:38:32 +03:00
Manos Pitsidianakis 817c338a13
melib: fix metadata updates in Envelope updates 2019-09-15 23:38:31 +03:00
Manos Pitsidianakis 059d86de93
map: restart connection on failure in read_lines 2019-09-15 23:38:31 +03:00
Manos Pitsidianakis bfc36f63de
imap: add byte cache for Envelopes in IMAP backend 2019-09-15 23:38:31 +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 d1d11356db
imap: get() ENVELOPE instead of RFC822.HEADER; it's faster 2019-09-15 13:21:14 +03:00
Manos Pitsidianakis 335a1011de
imap: add watch 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 64dc44f18f
imap: replace unwraps with checks 2019-09-15 13:21:14 +03:00
Manos Pitsidianakis 525bd16493
imap: add folder operations in backend 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 c561814cd6
imap: add `danger_accept_invalid_certs` option 2019-09-15 13:21:13 +03:00
Manos Pitsidianakis c2c5f2db69
melib: add Failure to RefreshEventKind 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 3f7d962abd
melib: remove ThreadTree, use ThreadNodes for root_set
Remove ThreadTree index in Threads {} struct. Keep a Vec<ThreadHash> for
root_set state of mailbox instead of rebuilding ThreadTrees every
time.
2019-09-08 11:49:23 +03:00
Manos Pitsidianakis dc2184a9de
melib: add Folder operations in mail backends
Add following operations in mail backend:
- Create,
- Delete,
- Subscribe,
- Unsubscribe,
- Rename
2019-09-08 11:15:57 +03:00
Manos Pitsidianakis 1328f994f3
Make config objects Serializable with serde 2019-08-25 21:44:19 +03:00
Manos Pitsidianakis b474b44b10
Add special use semantics for mailboxes 2019-08-25 10:48:01 +03:00
Manos Pitsidianakis 76909a1959
add folder subscriptions 2019-08-25 10:48:01 +03:00
Manos Pitsidianakis 84a042411d
melib: remove unnecessary unsafe impls 2019-08-15 11:30:25 +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 fed13816dd
Bump version to all workspace crates 2019-08-03 23:59:49 +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 bc7da4610e
Send MailboxUpdate events when threads are updated
Depending on the insertion order of folders which is non-deterministic
because it relies on the kernel's scheduling of parsing threads, the
listing the user sees might not be up-to-date because later thread
updates are never broadcast. This results in inconsistencies between
threads and mail listings when a thread's root envelope was part of a
not broadcast update leading to `key not found` panics in a listing's
hashmaps.
2019-08-02 15:17:23 +03:00
Matthias Beyer 79becdcc42
Fix: This comment is not a proper rustdoc comment and probably should not be one anyways
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2019-08-02 01:00:54 +03:00
Matthias Beyer fb36dc58c8
Remove unused variable
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2019-08-02 01:00:53 +03:00
Manos Pitsidianakis 2492bc91b2
melib: add attachment_from_file() 2019-08-02 01:00:52 +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 c87ed5012d
melib: add attachment support in email/compose.rs 2019-08-02 00:24:35 +03:00
Manos Pitsidianakis 391e5b5d13
melib: tighten bounds check in email/parser.rs 2019-08-02 00:22:27 +03:00
Manos Pitsidianakis d73069bc80
melib: add Other and OctetStream content types 2019-08-02 00:22:20 +03:00
Manos Pitsidianakis c17bb24f0d
melib: refactor attachments and attachment_types interfaces 2019-07-30 21:33:15 +03:00
Manos Pitsidianakis 7592e66d6a
maildir: drop mutexes before calling add_path_to_index 2019-07-30 19:24:35 +03:00
Manos Pitsidianakis 572944e917
melib: add version from Cargo manifest to User-Agent field 2019-07-30 19:23:55 +03:00
Manos Pitsidianakis 38da6c83b9
melib: add read-only support for mbox 2019-07-28 20:20:14 +03:00
Manos Pitsidianakis 8a0e702127
melib,ui: add MailboxEntry enum
Use an enum to describe a mailbox's state in ui::conf::Account instead
of Result.
2019-07-28 20:15:41 +03:00
Manos Pitsidianakis d84ceca88e
create text_processing crate 2019-07-27 01:41:04 +03:00
Manos Pitsidianakis a00e3fcbde
melib: fix bounds checking for StackVec 2019-07-22 14:57:54 +03:00
Manos Pitsidianakis a62f1d6c01
add read-only option in accounts 2019-07-18 20:16:51 +03:00
Manos Pitsidianakis 14f1527e61
melib: remove BackendOpGenerator 2019-07-18 20:14:14 +03:00
Manos Pitsidianakis cfb6fd3fde
melib: return raw body instead of headers in MaildirOp::fetch_body 2019-07-18 18:47:27 +03:00
Manos Pitsidianakis 85a70d656b
melib: restore stringified variable print 2019-07-15 00:12:08 +03:00
Manos Pitsidianakis 8ab79d5829
fix missing grapheme in mime encoded string 2019-07-11 17:52:51 +03:00
Manos Pitsidianakis 93f3d6e230
remove std::dbg uses 2019-07-09 13:05:11 +03:00
Manos Pitsidianakis 70e5949590
ui: add autocomplete for commands in execute bar 2019-07-06 20:44:51 +03:00
Manos Pitsidianakis a655a85b5f
ui: fix replies not being synced and inserted properly on RefreshEvents 2019-07-06 12:46:45 +03:00
Manos Pitsidianakis 6906142278
melib: don't exclude whitespaces in mime encoded words 2019-07-06 00:19:25 +03:00
Manos Pitsidianakis f33594fba8
melib: reply to In-Reply-To address if available 2019-06-25 10:37:19 +03:00
Manos Pitsidianakis f4f3b87f84
ui: add selections to CompactListing
Select multiple entries by pressing 'v'. Set read/unread and delete
actions are then performed on the selected entries.
2019-06-25 10:37:18 +03:00
Manos Pitsidianakis 8c97336307
ui: add set as read/unread, delete actions
Implemented only in compact listing for now.
2019-06-23 11:42:48 +03:00
Manos Pitsidianakis 2d7f9ca46f
melib: rename files after getting lock in maildir 2019-06-23 11:39:19 +03:00
Manos Pitsidianakis c34a55dcac
melib: Correctly use StackVec capacity, add test 2019-06-21 10:55:49 +03:00
Manos Pitsidianakis 04fc510ea8
meli: insert new standalone nodes in insert_reply 2019-06-19 19:40:15 +03:00
Manos Pitsidianakis ba1d0c42e0
melib: add struct and parser for mailto: links 2019-06-18 21:59:50 +03:00
Manos Pitsidianakis 43084eda01
melib: implement FromIterator, IntoIterator and Iterator for StackVec 2019-06-18 21:39:37 +03:00
Manos Pitsidianakis ee07aa8686
melib: add other_headers field in Envelope
Store headers with non-hardcoded names in a hash map.
2019-06-18 21:38:30 +03:00
Manos Pitsidianakis 24831b3c13
Fix warnings, lints, and 2018 errors 2019-06-18 21:14:14 +03:00
Manos Pitsidianakis f1c72588c3
Add authors to Cargo.toml of each package 2019-06-10 19:40:51 +03:00
Manos Pitsidianakis 5a9ee50bbc
don't add newlines in encoded words 2019-06-10 19:40:51 +03:00
Manos Pitsidianakis 9d7d7300c0
wcwidth: add emoji table 2019-06-10 19:40:51 +03:00
Manos Pitsidianakis f0bd999f8c
parser: fix empty header value when header is last or when prefixed with
'\n'

when an empty header is last, the rest of the body keeps getting parsed
as headers. when header starts with '\n' because the value is long, the
value gets parsed as a name and the header parser fails.

closes #100

closes #101

closes #122
2019-06-10 19:40:51 +03:00
Manos Pitsidianakis 8a07087393
add testing crate with emailparse bin 2019-06-10 19:40:51 +03:00
Manos Pitsidianakis d772d10d66
merge FirstName/LastName fields in Contacts
First names and Last names are an anglocentric concept and do not apply
cleanly to the rest of the world's cultures.
2019-06-10 19:40:51 +03:00
Manos Pitsidianakis d0039740b0
melib: add has_attachments property to Envelope
Check subattachments in has_attachments check.

Instead of getting a flattened attachment view of multipart/mixed (eg
[multipart/mixed, text/plain, text/plain]) get only the subattachments
(eg [text/plain, text/plain]). Don't count text-only multipart/mixed as attachments
2019-06-10 19:40:50 +03:00
Manos Pitsidianakis 03317d74ca
melib: correct out of bounds access 2019-06-10 19:40:50 +03:00
Manos Pitsidianakis c6674a294d
melib: unwrap mailbox module 2019-06-10 19:40:50 +03:00
Manos Pitsidianakis 6f7b3f20de
move StackVec to melib
closes #120
2019-06-10 19:40:50 +03:00
Manos Pitsidianakis 42654410e3
ui: move Collection to Account
Each account had one mailbox per folder, which had one associated
collection. Now each Account has one Collection for all folders and each
Mailbox object holds only the hashes of each message.

Collection also gets Threads for each folder in order to mix messages
(ie from/to Sent folder).

Insert Sent emails in chronological order

if inserted unsorted, mails a, b with a happened-before b, might never
  get added.

Fix multiple insertions in ThreadTree upon insert_reply

insert_reply was creating multiple copies in threading
2019-06-10 19:40:50 +03:00
Manos Pitsidianakis eff1c1641c
melib: track modified paths in maildir
Keep modified path status in maildir to prevent not-found panics
2019-06-10 19:40:50 +03:00
Manos Pitsidianakis d3208f6a3d
End of line in grapheme_clusters? 2019-06-10 19:40:49 +03:00
Manos Pitsidianakis f51ea93351
move grapheme stuff to melib 2019-06-10 19:40:49 +03:00
Manos Pitsidianakis 6504a141f3
melib: dont allocate new string 2019-06-10 19:40:49 +03:00
Manos Pitsidianakis 3c575c823d
ui: toggle thread snooze flag
snooze field translated to whether the user wants to be notified of new
email in the thread or not. This is toggled with an (temp) EX cmd: `toggle_thread_snooze`

closes #112
2019-06-10 19:40:49 +03:00
Manos Pitsidianakis 22d868f499
save Account to disk
closes #114
2019-06-10 19:40:49 +03:00
Manos Pitsidianakis 4582bcd5ae
fix warnings and lints 2019-06-10 19:40:49 +03:00
Manos Pitsidianakis 3bc22abdff
ui: draw thread arrows correctly in other sortings
thread arrows in ThreadListing weren't drawn correctly when subsorting
was changed (eg date -> subject)

has_sibling was delegated to ThreadsIterator.
2019-06-10 19:40:49 +03:00
Manos Pitsidianakis 1e7e99f499
melib: return $val in debug! 2019-06-10 19:40:48 +03:00
Manos Pitsidianakis a0b1a079b8
ui: add "application/pgp-signature" content type 2019-06-10 19:40:48 +03:00
Manos Pitsidianakis b943941e60
melib: format maildir/backend.rs 2019-06-10 19:40:48 +03:00
Manos Pitsidianakis 13fba8d35b
melib: drop MutexGuard before calling add_path_to_index
In some cases add_path_to_index was called with the mutex already held,
and a deadlock occurred.
2019-06-10 19:40:48 +03:00
Manos Pitsidianakis dad7c09158
melib: detect plain text in multipart/alternative 2019-06-10 19:40:48 +03:00
Manos Pitsidianakis 355fb63b16
melib: link threads with empty intermediates
A thread's chain link would get broken when empty intermediate
ThreadNodes exist. The pruning of the empty node did not properly chain
the empty node's parent with the empty node's children.

Old behaviour:

- [A]
/* [B] is missing */
- [C]
/* [D] is missing */
- [E]

New behaviour (`x` represents deleted links)

- [A]
  |
  |xxx> [empty node of B]
  |        x
  |        x
  |        \/
  |_______>[C]
	    |
	    |xxx> [empty node of D]
	    |        x
	    |        x
	    |        \/
	    |_______>[E]
2019-06-10 19:40:47 +03:00
Manos Pitsidianakis 0e3b8f54d9
melib: fix address_spec parse without displayname
addresses like "<user@domain.tld>" were parsed as "ser@domain.tld". Fix
this by checking for displayname length.
2019-06-10 19:40:47 +03:00
Manos Pitsidianakis 9afeb648f7
melib: keep old_hash in Collection temporarily
When renaming envelopes, keep old_hash in collection until we receive an
EnvelopeRename event in ui
2019-06-10 19:40:47 +03:00
Manos Pitsidianakis 325bb5bff2
add literal print to debug! 2019-06-10 19:40:47 +03:00
Manos Pitsidianakis 59135be983
melib: fix typo and unused val 2019-06-10 19:40:46 +03:00
Manos Pitsidianakis 1f2c0b4fa7
melib: multipart/mixed with html messages not displayed as html 2019-06-10 19:40:46 +03:00
Manos Pitsidianakis 8ef470fb15
add name in single var print in debug! 2019-06-10 19:40:46 +03:00
Manos Pitsidianakis fb406667ab
add debug! macro to replace eprintlns 2019-06-10 19:40:46 +03:00
Manos Pitsidianakis a03bd80199
ui: watch root_folder instead of every folder 2019-06-10 19:40:45 +03:00
Manos Pitsidianakis 3790f68e3f
ui: file_name() does not return full file_name
move_to_cur doesn't retain the full envelope name when moving
2019-06-10 19:40:45 +03:00
Manos Pitsidianakis 1e44089d84
ui: Refer to child/parents with FolderHash in BackendFolder
- use a stack to build folder order list in conf/accounts.rs
- update side menu print
2019-06-10 19:40:45 +03:00
Manos Pitsidianakis 596194fa47
melib: fix debug prints not debug-build only 2019-06-10 19:40:45 +03:00
Manos Pitsidianakis 499113acd2
melib: encode header values
closes #102
2019-06-10 19:40:45 +03:00
Manos Pitsidianakis f348cc9a55
melib: add fqdn to MID 2019-06-10 19:40:45 +03:00
Manos Pitsidianakis 87adc6dd19
melib/ui: refer to Folders by FolderHash 2019-06-10 19:40:44 +03:00
Manos Pitsidianakis 04eb8d926f
ui: remove debug_log feature, add log positions 2019-06-10 19:40:44 +03:00
Manos Pitsidianakis a29e39f5ef
ui: fix `editing messages duplicates headers`
closes #94
2019-06-10 19:40:43 +03:00
Manos Pitsidianakis d9a3b03e2b
melib: create new threadnode if it's missing inside rebuild_thread 2019-06-10 19:40:43 +03:00
Manos Pitsidianakis 4bf1f6b9c9
ui: make Composer account specific 2019-06-10 19:40:43 +03:00
Manos Pitsidianakis cfb7dcec64
ui: make html filter optional in config
closes #92
2019-06-10 19:40:43 +03:00
Manos Pitsidianakis 067a8e5c81
Run clippy for 2018 edition 2019-06-10 19:40:43 +03:00
Manos Pitsidianakis ee4462881e
run cargo fmt 2019-06-10 19:40:42 +03:00
Manos Pitsidianakis 1c7aa0ec9c
update to 2018 edition 2019-06-10 19:40:42 +03:00
Manos Pitsidianakis ac0e2cbe44
melib: fix invalid folder hierarchy in Backend::folders() 2019-06-10 19:40:42 +03:00
Manos Pitsidianakis 43f89ef680
melib: fix crash in node_build( 2019-06-10 19:40:42 +03:00
Manos Pitsidianakis ba6c259820
melib: fix duplication of thread nodes in update envelope event 2019-06-10 19:40:42 +03:00
Manos Pitsidianakis 11b2abd1d1
ui: fix seen property of threads on open, add env rename events 2019-06-10 19:40:41 +03:00
Manos Pitsidianakis 5d9af8e32b
ui: improve contact additions from mail view 2019-06-10 19:40:41 +03:00
Manos Pitsidianakis 551db51b00
ui: avoid full renders when worker threads return StartupChecks
Now listings only re-render when their folder gets a StartupCheck event,
account menu always re-renders to update new mail counts

closes #76
2019-06-10 19:40:41 +03:00