Commit Graph

1190 Commits (86e25bc017df714910798a811fb108bb7aa840af)

Author SHA1 Message Date
Manos Pitsidianakis 86e25bc017
sqlite: fix database reset sequence
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
2 months ago
Manos Pitsidianakis 604ae11128
Impl From<&[u8]> for u64-based hash newtypes
`<_>::from_bytes(bytes: &[u8]) -> Self` already exists, so add
`From<&[u8]>` also.

Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
2 months ago
Manos Pitsidianakis a7c73fc8cf
gpgme: refactor Rust interface, add tests
- Refactor gpgme wrapper interface to use more robust reference counting
  for the gpgme context object
- Add SAFETY comments to unsafe {} blocks
- Add tests

Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
2 months ago
Manos Pitsidianakis 87d2cec9d9
Add sealed_test dependency
Some tests needs a standalone environment because they mess with
variables that other tests need too. sealed_test runs the tests in a
forked process so that there are no issues with that.

Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
2 months ago
Manos Pitsidianakis 4707ec9f2a
text/line_break: fix ReflowState::{No,All} break
It could split text on non-char boundaries. Check before return.

Closes #476

Resolves: https://git.meli-email.org/meli/meli/issues/476
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
2 months ago
Manos Pitsidianakis 32e3be8b10
sqlite3: add optional directory field in DatabaseDescription
Databases described by `DatabaseDescription` are created in XDG Data
directories by default. Add an optional explicit directory field so that
tests and other API consumers can override that location.

Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
2 months ago
Manos Pitsidianakis 26d33ce523
address: add `separator` argument to display_slice()
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
2 months ago
Manos Pitsidianakis 394236ba8a
email/address: Refactor References struct
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
2 months ago
Manos Pitsidianakis 11798be804
Replace Envelope::message_id_display() with Display impls
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
2 months ago
Manos Pitsidianakis 6fbf569fe0
search: add Message-ID, and other header search support
Add support for searching by Message-ID, In-Reply-To, References, or any
header with the following keywords:

- "message-id:term", "msg-id:term"
- "in-reply-to:term"
- "references:term"
- "header:title,value"

Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
2 months ago
Manos Pitsidianakis 191725b5c2
Fix some borrow checker error/warnings from upcoming 2024 edition
Mostly unsafe_op_in_unsafe_fn lint, but also std::env functions becoming
unsafe.

Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
2 months ago
Manos Pitsidianakis f06a9072d6
jmap: fetch mailbox with receivedAt descending sort
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
2 months ago
Manos Pitsidianakis 4bbf446bc1
utils: add unix file locks module
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
2 months ago
Manos Pitsidianakis 1cfb0b1538
Update nix dependency to 0.29.0
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
2 months ago
Manos Pitsidianakis bf3a4c5dc1
error: add ErrorChainDisplay struct for better output
Add an ErrorChainDisplay struct that borrows an error and prints the
list of chained errors one by one, showing relationships and metadata
for each error.

Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
2 months ago
Manos Pitsidianakis 8d45ecc15d
melib/error: add related_path field
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
2 months ago
Manos Pitsidianakis de72bc6ac7
melib/error.rs: move network stuff to submodule
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
2 months ago
Manos Pitsidianakis 0bed37b5a7
melib: use IndexMap in conf fields
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
2 months ago
Manos Pitsidianakis 2084ce9375
Fix invalid cfg feature combinations for macos
NOTMUCH_ERROR_DETAILS was defined twice for macos from "unix"
target_family and target_os = "macos".

Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
2 months ago
Manos Pitsidianakis eda6620cb4
jmap: detect supported Auth schemes on connect
When 401 is returned by an HTTP server, the WWW-Authenticate header must
be present. The values represent the supported Authentication schemes of
the server.

This commit detects them and reports the appropriate error to the user.

Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
2 months ago
Manos Pitsidianakis 6ee148c041
Fix 1.80.0 clippy lints
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
3 months ago
Manos Pitsidianakis f7ec6d6bc5
melib/jmap: implement mailbox rename
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
3 months ago
Manos Pitsidianakis 8481294147
melib/jmap: do not serialize server-set fields in Set create
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
3 months ago
Manos Pitsidianakis e6877e89c2
melib/jmap: refactor some parser imports
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
3 months ago
Manos Pitsidianakis 2b3828d8d2
Update futures dependency to 0.3.30
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
3 months ago
Manos Pitsidianakis 7be8912c14
Cargo.tomls: make formatting more consistent
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
3 months ago
Manos Pitsidianakis 9e9c04a3f6
Update indexmap dep to 2.3.0
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
3 months ago
Manos Pitsidianakis a8dad31776
melib/imap: renamed cache module to sync
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
3 months ago
Manos Pitsidianakis 6513c18810
melib/imap: on sync only update exists/unseen if loaded
When resyncing with resync_basic and resync_condstore, we would update
the unseen and exists counts for the mailbox without inspecting if the
mailbox was loaded or not. Since a previous commit reset total not yet
seen to 0 when inserting new entries to mail totals, this would lead in
unloaded mailboxes go from having their original unseen counts to having
only the new envelopes in the total.

Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
3 months ago
Manos Pitsidianakis 14f2d91193
melib/backends: change RefreshEvent field decl order
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
3 months ago
Manos Pitsidianakis 3216324ccc
melib/mbox: impl FromStr for MboxFormat
Add a FromStr implementation so that we can parse a string into a format
value from other places in the code.

Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
3 months ago
Manos Pitsidianakis 33836a3263
melib/error: add WrapResultIntoError helper trait
Add a new WrapResultIntoError trait with method wrap_err() so we can
wrap a result and set its error as a source for a new error and
description, this allows for more descriptive error messages like:

Before:

let mbox_format = parse(some_string)?; <- error msg is "invalid mbox
format value, expected blah blah"

After:

let mbox_format = parse(some_string).wrap_err(|| "Could parse
configuration of account {}", account_name)?; <- error msg is "Could not
parse configuration of account myaccount, Caused by: invalid mbox format
value, expected blah blah"

Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
3 months ago
Manos Pitsidianakis 20d7329263
melib: replace async-stream dep with async-fn-stream
Replace proc-macro stream impl with a non-macro one for better
compilation times

Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
3 months ago
Manos Pitsidianakis 8e300c4661
melib/jmap: call req text(). asap
Call text() on a RequestBody as soon as it is returned, to avoid
exceeding timeout values, according to isahc documentation.

Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
3 months ago
Manos Pitsidianakis 6ae2cf0b6b
Bump version to 0.8.7
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
3 months ago
Manos Pitsidianakis e329097d0b
melib/jmap: fix EmailBodyPart schema mismatch
EmailBodyPart required partId and blobId to be non-null, which is
invalid. Make them Option<_>s instead.

Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
3 months ago
Manos Pitsidianakis f2e9cac38e
melib/jmap: use suggested minimum for maxObjectsInGet
Instead of using the actual maxObjectsInGet batch size when fetching
email, use min(maxObjectsInGet, 500). This makes things not time-out
this easily when the maxObjectsInGet is large (e.g. 4096)

Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
3 months ago
Manos Pitsidianakis 41d07fbcef
melib/jmap: newState in EmailImportResponse cannot be null
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
3 months ago
Manos Pitsidianakis 52c75e92b5
melib/jmap/email.rs: use HeaderName constants
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
3 months ago
Manos Pitsidianakis 8b568f6e3b
melib/jmap: add if_in_state argument in Set::new()
JMAP code should be using if_in_state wherever possible, to detect
mismatch between current server state and current client state.

Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
3 months ago
Manos Pitsidianakis 46df4b573b
melib/attachments: remove unused function stub
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
3 months ago
Manos Pitsidianakis 85a55ed633
melib/backends: add some missing ErrorKinds to errors
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
3 months ago
Manos Pitsidianakis 824de287b4
melib/jmap: fix make_address! use
make_address! macro was called with a .take() expression, which was
substituted in the macro more than once hence take() would be called
more than once.

Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
3 months ago
Manos Pitsidianakis 197132cca0
melib/imap: support fetching with BODY[] for buggy servers
It appears icloud IMAP servers do not support fetching RFC822 items with
the FETCH command. They reply to the fetch successfully but with the
item missing. To support this clearly non-standard and buggy behavior,
retry one more time by fetching with BODY[] instead if the RFC822 is
missing.

Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
3 months ago
Manos Pitsidianakis 97af00cd83
melib/jmap: respect timeout value from user configuration
While the timeout value was parsed, it was only used for mutex lock
timeouts and not the http connection.

This commit sets the isahc HTTP connections timeouts using the value, if
provided.

Fixes #422

Resolves: https://git.meli-email.org/meli/meli/issues/422
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
3 months ago
Manos Pitsidianakis 15eeac5191
melib/jmap: enable dns_cache, tcp_keepalive & tcp_nodelay
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
3 months ago
Manos Pitsidianakis afccebf331
melib/imap: add AUTH=PLAIN support
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
3 months ago
Manos Pitsidianakis f5f1e06878
melib/imap: add UIDPLUS support
Add UIDPLUS extension support (Only UID EXPUNGE)

Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
3 months ago
Manos Pitsidianakis 06437e607c
melib/LazyCountSet: set not_yet_seen to 0 when inserting existing
Not yet seen behavior is unreliable and leads to false unread counts.
Set it to 0 instead when inserting an existing count.

Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
3 months ago
Manos Pitsidianakis 96cc02a000
melib/imap/error: do not use ErrorKind::Configuration
Do not use ErrorKind::Configuration for ValidationError

Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
3 months ago