Add a default mailbox setting:
> The mailbox that is the default to open / view for this account. Must be
> a valid mailbox name.
>
> If not specified, the default is [`Self::root_mailbox`].
Closes: #350
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
In the next commits we will add a `default_mailbox` field. Instead of
poluting the `Account` struct with more setting fields, consolidate them
on its `settings`.
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
accounts.rs is getting rather long (almost 3K lines) so split standalone
stuff in submodules.
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
Prevent accessing a ThreadView if it has not been initialized by making
an uninitialized ThreadView impossible.
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
An error was returned from the db_path function, preventing the issuing
of the reindex command in the background.
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
General refactoring to make blocking operations use special blocking
thread workers, SQL operations to use transactions, and setting up WAL
journal mode mode to minimize locking.
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
set_err_kind() is a method of the IntoError trait, not an Error method;
it is meant to be used for any error type that can be converted into
Error. Since melib::Error implements Into<melib::Error> tautologically,
this was not a compilation error. Nevertheless, the correct thing to do
is use the type method directly to set ErrorKind.
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
AccountSettings extra keys like `vcard_folder` were not taken into
account when validating a config.
This commit introduces an AccountSettings::validate_config() method that
checks for the presence and validity of this key value.
Fixes#349https://git.meli-email.org/meli/meli/issues/349
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
Commit (a37d5fc1 conf/shortcuts: implement
a key to command mapping) introduced shortcuts that expand to user
defined commands. To allow already existing shortcuts to take
precedence, the check for the user-defined shortcuts should be the last
one in the evaluation order.
Example problem scenario:
- Press new_mail shortcut (e.g. `m`)
- Code in listing.rs searches if it matches any of the commands, and
regardless if it matches or not, stops the evaluation and returns.
- New mail composer never shows up.
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
Commit 61a0c3c27f ("listing: do not clear
selection after action") broke select/jump modifiers (e.g. prefixing a
jump with a number).
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
Clear selection only when Escape is pressed, not after action is
completed. The user might want to perform further actions on the
selection.
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
If there are row_updates, it means we need to redraw. But in the draw()
call, we check is_dirty() to decide whether to proceed drawing. Add
row_updates not being empty into the dirty conditions.
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
The functions in terminal::position were pretty much obsolete after
commit
0e3a0c4b70 Add safe UI widget area drawing API
So this commit does a little cleanup and removes the module.
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
Cargo bug: https://github.com/rust-lang/cargo/issues/10788
Caused meli to not be able to be installed with 1.70.0 cargo.
This commit expresses the static dependencies differently to allow both
1.70.0 and later versions understand the optional dependency feature
activation.
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
Due to changes in how decoded email body is stored in `ViewFilter`s,
the previous way of accessing URL values (by using the `start` and `end`
offset in the e-mail body) meant the offset values might not be correct.
Store the value right away to prevent this from happening.
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
Modularize an envelope view by introducing a stack of "view filters".
Example uses:
- html email can have a view on top of it that is plain text conversion
- selecting and viewing text/* attachments is just appending a new filter at
the stack
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
Introduce new DisplayMessageBox struct that handles the rendering of
notifications/notices on the overlay screen.
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
Make Screen generic over its display kind: Screen<Tty> and
Screen<Virtual>. The latter is for "cached" renderings we want to keep
and copy to the actual screen when the Component::draw() method is
called. Only Screen<Tty> can write to stdout and it needs an stdout
handle.
Add a generation integer field to Screen, that changes each time it is
resized. This way, we can track if "stale" areas are used and panic on
runtime (in debug mode).
Introduce a new type, Area, that keeps metadata about a subsection of a
Screen, and the generation it came from. New areas can only be created
from a Screen and by operating on an Area to create subsections of it.
This way, it's impossible to make an area refer to (x, y) cells outside
the screen generation of its provenance. If stabilised this API should
eliminate all out of bounds accesses in CellBuffers.
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
On a previous commit email flag modification logic was changed, but
threads cache was not updated, leading to threads unread count being
stale.
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
Flag and tag modifications are now somewhat typed better, and the
frontend applies them on its own on success. This means that if you set
an unseen mail as seen but it was already seen in the backend, you will
see the change locally. Previously it would remain unseen.
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
This binary was included in the meli crate distribution which wasn't
intended. It's for development purposes only.
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
This dependency is necessary, though for some reason the build doesn't
always fail if it's not specified.
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
In some situations, we're not compatible with the terminal. Show an
error with details when the terminal size request happens.
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
Submitting to NNTP/Usenet servers requires you to specify which news
groups the post/article is going to. This commit places all
extra_submission_headers from a backend (in this case only NNTP
implements this) in the composing form fields.
Fixes#267
nntp should add Newsgroups header if missing
<https://git.meli.delivery/meli/meli/issues/267>
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>