Commit Graph

434 Commits (06d99c7f92a97a90cac602207d12133ea5fdbf3e)

Author SHA1 Message Date
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 1bd343988e
ui: add horizontal scrolling in pager
It only took what, 3 years?
2019-11-09 17:45:23 +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 74672f0807
ui: Add CacheType option in configuration
CacheType's value dictates which cache backend to use: none, or sqlite3
2019-11-08 17:51:01 +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 27edd96493
Cache and Sqlite3 cleanups 2019-11-08 15:13:42 +02:00
Manos Pitsidianakis e396b2f72b
ui: add query translation to SQL SELECTs 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 8488ce21bf
ui: move is_online() check to Context
Context needs to know when an account gets online in order to get the
mailbox hashes and launch the watcher threads for this account. Instead
of assuming all accounts are online when launching meli, move the
initialisation logic to an is_online() method on Context to do it on
demand.

The is_online() method is then called by ui::components::mail::Listing
everytime it's drawn to check for status changes.
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 d780d81891
Add account statuses in Status tab
List accounts and information about them in Status tab
2019-11-08 15:13:42 +02:00
Manos Pitsidianakis 8ba9500de6
sqlite3: small refactors and fixes 2019-11-08 15:13:42 +02:00
Manos Pitsidianakis f718510eeb
ui/listings: split events according to length
Some events are invalid when there are no messages shown in the listing.
Instead of checking for self.length > 0 in each of these events, put
them together in an if block.
2019-11-08 15:13:41 +02:00
Manos Pitsidianakis 498f8e8e21
ui/listings: Show errors when filtering
Errors were not shown properly because the data_columns grids were being
overwritten by redraw_list(). Call redraw_list() only if filtering was
succesful.
2019-11-08 15:13:41 +02:00
Manos Pitsidianakis 78955e3199
sqlite3: rename index db to index.db 2019-11-08 15:13:41 +02:00
Manos Pitsidianakis d0c9774fe2
imap: disable sqlite3 full text search
Disable temporarily until server-side search is implemented.
2019-11-08 15:13:41 +02:00
Manos Pitsidianakis 70fb34a2e4
ui/sqlite3: add env body in sqlite3 fts table
Add the envelope body in the full text search table inside the sqlite3
db. Now search returns results matching the e-mail content as well.
2019-11-08 15:13:41 +02:00
Manos Pitsidianakis 3b5dc33d3e
ui/Account: store backend behind an Arc<RwLock<_>>
The backend object stores the state of the backend associated with an
account.

Hide the backend object between a mutex, in order to be able to share it
with threads in the next commit.
2019-11-08 15:13:41 +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 0a606a71d1
Add reindex command 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 e9d17f6897
add cache struct in Account 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 1b0b699527
ui/listing: mail filter refactoring
- show result count and 'Press ESC to go back' message
- search successfully even if currently viewing search results
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 6b5ed25289
Add history browse option in execute bar
Press Ctrl-P and Ctrl-N to get previous and next command in history.
2019-11-08 15:09:25 +02:00
Manos Pitsidianakis 599bda9f28
ui: option to embed editor in composing tab
Add configuration option to embed editor in the composing tab instead of
executing and waiting for it.

Set embed = true in Composing section of your configuration to activate.
2019-11-05 08:37:58 +02:00
Manos Pitsidianakis 99da9a35b6
Add embed pty support
Emulate a terminal within meli. In the next commit it will be used to
embed an editor in the composing tab.

This is a non-complete xterm emulation that has some bugs.
2019-11-05 08:37:27 +02:00
Manos Pitsidianakis a9425be61e
ui/contacts: add side-menu, remove accounts tab
- Rename accounts tab to status tab
- add side menu to contacts tab to switch between accounts
2019-10-26 15:58:56 +03:00
Manos Pitsidianakis c64ce58653
ui/accounts: show totals in account tab 2019-10-24 20:36:20 +03:00
Manos Pitsidianakis ab531f0294
Fix unused variable warnings 2019-10-24 20:35:30 +03: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 9ef9293a45
ui/conf: use custom deserializer for extra settings
If the user gives a configuration value in an `[account]` sections that
 isn't hard-coded, it gets filed up under the
 `extra: HashMap<String, String>` field of `FileAccount`. If the setting
 is something that isn't a string like key = true, the parsing will fail
 since it expects string values. We want to accept key = true as well as
 key = "true".
2019-10-24 18:16:41 +03:00
Manos Pitsidianakis 63b984d854
Remove std feature that got introduced in 1.36.0
std::convert::From<&std::string::String> for String was introduced in
1.36.0 and version below that version fail. Use `to_string()` instead to
make it build again.
2019-10-24 12:29:08 +03:00
Manos Pitsidianakis 72e301887f
ui/compose: clear empty space area properly 2019-10-23 13:58:04 +03:00
Manos Pitsidianakis 3a86a7ca16
ui: harden bounds check in inspect_bounds macro 2019-10-20 11:35:43 +03:00
Manos Pitsidianakis 565b11634a
ui: add two readline shortcuts in text fields 2019-10-20 11:35:43 +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 9de15284d8
ui: initialise cursor in fields at the end
By convention and usability reasons, the cursor in a text field should
be initialised at the end of the string.
2019-10-20 11:25:57 +03:00
Manos Pitsidianakis fa3e3791e9
Fix test compilation error 2019-10-16 14:57:48 +03:00
Manos Pitsidianakis 271cae025b
ui/listing: add search shortcut 2019-10-15 23:47:37 +03:00
Manos Pitsidianakis b075501ef7
ui/listing: tidy mail listing shortcuts
- move set_seen to Listing component (instead of having it in Listing's
child Component)
- add default values to shortcut definition macro `shortcut_key_values`
- do not redefine default values in each `shortcuts` method after
getting all valid shortcuts from `context.settings.shortcuts.*.key_values()`
2019-10-15 23:47:37 +03:00
Manos Pitsidianakis 9c3284d3fe
ui/listings: add set_movement method to ListingComponent
Page movements is an enum that describes the movements of the keyboard
keys "Home, End, PageUp, PageDown". Some mail listing Components
interpret these keys as changes to their cursors.
2019-10-15 23:47:37 +03:00
Manos Pitsidianakis 205ebe2f1c
ui: add window title config option
Use xterm window title escape sequences to set window title when
launched and restoring the previous one when exiting. If option is
blank, no title setting occurs.
2019-10-15 23:47:37 +03:00