Browse Source

Documentation touchups

jmap-status-and-connect-retry-wip
Manos Pitsidianakis 4 months ago
parent
commit
c3fdafde3b
  1. 57
      docs/meli.1
  2. 13
      melib/src/addressbook/vcard.rs
  3. 2
      melib/src/backends/imap/connection.rs
  4. 7
      melib/src/backends/maildir/backend.rs
  5. 13
      melib/src/backends/mbox.rs
  6. 7
      melib/src/backends/nntp.rs
  7. 91
      melib/src/backends/notmuch/bindings.rs
  8. 2
      melib/src/email.rs
  9. 4
      melib/src/email/parser.rs
  10. 4
      melib/src/smtp.rs
  11. 6
      src/mailcap.rs
  12. 18
      src/terminal/embed/grid.rs

57
docs/meli.1

@ -603,11 +603,64 @@ Mailcap entries are searched for in the following files, in this order:
.Xr xdg-open 1 ,
.Xr mailcap 5
.Sh CONFORMING TO
.Bl -bullet -compact
.It
XDG Standard
.Lk https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html Ns
, maildir
\&.
.It
mailcap file, RFC 1524: A User Agent Configuration Mechanism For Multimedia Mail Format Information
.It
RFC 5322: Internet Message Format
.It
RFC 6532: Internationalized Email Headers
.It
RFC 2047: MIME (Multipurpose Internet Mail Extensions) Part Three: Message Header Extensions for Non-ASCII Text
.It
RFC 3676: The Text/Plain Format and DelSp Parameters
.It
RFC 3156: MIME Security with OpenPGP
.It
RFC 2183: Communicating Presentation Information in Internet Messages: The Content-Disposition Header Field
.It
RFC 2369: The Use of URLs as Meta-Syntax for Core Mail List Commands and their Transport through Message Header Fields
.It
.Li maildir
.Lk https://cr.yp.to/proto/maildir.html Ns
, IMAPv4rev1 RFC3501, The JSON Meta Application Protocol (JMAP) RFC8620, The JSON Meta Application Protocol (JMAP) for Mail RFC8621.
\&.
.It
RFC 5321: Simple Mail Transfer Protocol
.It
RFC 3461: Simple Mail Transfer Protocol (SMTP) Service Extension for Delivery Status Notifications (DSNs)
.It
RFC 4954: SMTP Service Extension for Authentication
.It
RFC 6152: SMTP Service Extension for 8-bit MIME Transport
.It
RFC 4616: The PLAIN Simple Authentication and Security Layer (SASL) Mechanism
.It
RFC 3501: INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1
.It
RFC 3691: Internet Message Access Protocol (IMAP) UNSELECT command
.It
RFC 4549: Synch Ops for Disconnected IMAP4 Clients
.It
RFC 7162: IMAP Extensions: Quick Flag Changes Resynchronization (CONDSTORE) and Quick Mailbox Resynchronization (QRESYNC)
.It
RFC 8620: The JSON Meta Application Protocol (JMAP)
.It
RFC 8621: The JSON Meta Application Protocol (JMAP) for Mail
.It
RFC 3977: Network News Transfer Protocol (NNTP)
.It
RFC 6048: Network News Transfer Protocol (NNTP) Additions to LIST Command
.It
vCard Version 3, RFC 2426: vCard MIME Directory Profile
.It
vCard Version 4, RFC 6350: vCard Format Specification
.It
RFC 6868 Parameter Value Encoding in iCalendar and vCard
.El
.Sh AUTHORS
Copyright 2017-2022
.An Manos Pitsidianakis Mt manos@pitsidianak.is

13
melib/src/addressbook/vcard.rs

@ -19,7 +19,14 @@
* along with meli. If not, see <http://www.gnu.org/licenses/>.
*/
/// Convert VCard strings to meli Cards (contacts).
//! # vCard format
//!
//! This module implements the standards:
//!
//! - Version 3 (read-only) [RFC 2426: vCard MIME Directory Profile](https://datatracker.ietf.org/doc/2426)
//! - Version 4 [RFC 6350: vCard Format Specification](https://datatracker.ietf.org/doc/rfc6350/)
//! - Parameter escaping [RFC 6868 Parameter Value Encoding in iCalendar and vCard](https://datatracker.ietf.org/doc/rfc6868/)
use super::*;
use crate::error::{MeliError, Result};
use crate::parsec::{match_literal_anycase, one_or_more, peek, prefix, take_until, Parser};
@ -33,12 +40,12 @@ pub trait VCardVersion: core::fmt::Debug {}
pub struct VCardVersionUnknown;
impl VCardVersion for VCardVersionUnknown {}
/// https://tools.ietf.org/html/rfc6350
/// Version 4 <https://tools.ietf.org/html/rfc6350>
#[derive(Debug)]
pub struct VCardVersion4;
impl VCardVersion for VCardVersion4 {}
/// https://tools.ietf.org/html/rfc2426
/// <https://tools.ietf.org/html/rfc2426>
#[derive(Debug)]
pub struct VCardVersion3;
impl VCardVersion for VCardVersion3 {}

2
melib/src/backends/imap/connection.rs

@ -44,7 +44,7 @@ use super::{Capabilities, ImapServerConf, UIDStore};
#[derive(Debug, Clone, Copy)]
pub enum SyncPolicy {
None,
///rfc4549 `Synch Ops for Disconnected IMAP4 Clients` https://tools.ietf.org/html/rfc4549
///rfc4549 `Synch Ops for Disconnected IMAP4 Clients` <https://tools.ietf.org/html/rfc4549>
Basic,
///rfc7162 `IMAP Extensions: Quick Flag Changes Resynchronization (CONDSTORE) and Quick Mailbox Resynchronization (QRESYNC)`
Condstore,

7
melib/src/backends/maildir/backend.rs

@ -19,6 +19,11 @@
* along with meli. If not, see <http://www.gnu.org/licenses/>.
*/
//! # Maildir Backend
//!
//! This module implements a maildir backend according to the maildir specification.
//! <https://cr.yp.to/proto/maildir.html>
use super::{MaildirMailbox, MaildirOp, MaildirPathTrait};
use crate::backends::{RefreshEventKind::*, *};
use crate::conf::AccountSettings;
@ -102,7 +107,7 @@ impl DerefMut for HashIndex {
pub type HashIndexes = Arc<Mutex<HashMap<MailboxHash, HashIndex>>>;
/// Maildir backend https://cr.yp.to/proto/maildir.html
/// The maildir backend instance type.
#[derive(Debug)]
pub struct MaildirType {
name: String,

13
melib/src/backends/mbox.rs

@ -23,16 +23,17 @@
//!
//! ## Resources
//!
//! - [0] <https://web.archive.org/web/20160812091518/https://jdebp.eu./FGA/mail-mbox-formats.html>
//! - [1] <https://wiki2.dovecot.org/MailboxFormat/mbox>
//! - [2] <https://manpages.debian.org/buster/mutt/mbox.5.en.html>
//! [^0]: <https://web.archive.org/web/20160812091518/https://jdebp.eu./FGA/mail-mbox-formats.html>
//! [^1]: <https://wiki2.dovecot.org/MailboxFormat/mbox>
//! [^2]: <https://manpages.debian.org/buster/mutt/mbox.5.en.html>
//!
//! ## `mbox` format
//!
//! `mbox` describes a family of incompatible legacy formats.
//!
//! "All of the 'mbox' formats store all of the messages in the mailbox in a single file. Delivery appends new messages to the end of the file." [0]
//! "All of the 'mbox' formats store all of the messages in the mailbox in a single file. Delivery appends new messages to the end of the file." [^0]
//!
//! "Each message is preceded by a From_ line and followed by a blank line. A From_ line is a line that begins with the five characters 'F', 'r', 'o', 'm', and ' '." [0]
//! "Each message is preceded by a From_ line and followed by a blank line. A From_ line is a line that begins with the five characters 'F', 'r', 'o', 'm', and ' '." [^0]
//!
//! ## `From ` / postmark line
//!
@ -59,7 +60,7 @@
//!
//! "In order to avoid misinterpretation of lines in message bodies which begin with the four
//! characters 'From', followed by a space character, the mail delivery agent must quote
//! any occurrence of 'From ' at the start of a body line." [2]
//! any occurrence of 'From ' at the start of a body line." [^2]
//!
//! ## Metadata
//!

7
melib/src/backends/nntp.rs

@ -19,6 +19,13 @@
* along with meli. If not, see <http://www.gnu.org/licenses/>.
*/
//! # NNTP backend / client
//!
//! Implements an NNTP client as specified by [RFC 3977: Network News Transfer Protocol
//! (NNTP)](https://datatracker.ietf.org/doc/html/rfc3977). Also implements [RFC 6048: Network News
//! Transfer Protocol (NNTP) Additions to LIST
//! Command](https://datatracker.ietf.org/doc/html/rfc6048).
use crate::get_conf_val;
use crate::get_path_hash;
use smallvec::SmallVec;

91
melib/src/backends/notmuch/bindings.rs

@ -16,9 +16,11 @@ pub const _notmuch_status_NOTMUCH_STATUS_OUT_OF_MEMORY: _notmuch_status = 1;
pub const _notmuch_status_NOTMUCH_STATUS_READ_ONLY_DATABASE: _notmuch_status = 2;
/// A Xapian exception occurred.
///
/// ```text
/// @todo We don't really want to expose this lame XAPIAN_EXCEPTION
/// value. Instead we should map to things like DATABASE_LOCKED or
/// whatever.
/// ```
pub const _notmuch_status_NOTMUCH_STATUS_XAPIAN_EXCEPTION: _notmuch_status = 3;
/// An error occurred trying to read or write to a file (this could
/// be file not found, permission denied, etc.)
@ -466,6 +468,7 @@ pub type notmuch_database_get_directory = unsafe extern "C" fn(
///
/// Return value:
///
/// ```text
/// NOTMUCH_STATUS_SUCCESS: Message successfully added to database.
///
/// NOTMUCH_STATUS_XAPIAN_EXCEPTION: A Xapian exception occurred,
@ -490,6 +493,7 @@ pub type notmuch_database_get_directory = unsafe extern "C" fn(
/// database to use this function.
///
/// @since libnotmuch 5.1 (notmuch 0.26)
/// ```
pub type notmuch_database_index_file = unsafe extern "C" fn(
database: *mut notmuch_database_t,
filename: *const ::std::os::raw::c_char,
@ -501,8 +505,10 @@ extern "C" {
/// Deprecated alias for notmuch_database_index_file called with
/// NULL indexopts.
///
/// ```text
/// @deprecated Deprecated as of libnotmuch 5.1 (notmuch 0.26). Please
/// use notmuch_database_index_file instead.
/// ```
///
pub fn notmuch_database_add_message(
database: *mut notmuch_database_t,
@ -616,7 +622,7 @@ pub type notmuch_database_get_all_tags =
/// completely in the future, but it's likely to be a specialized
/// version of the general Xapian query syntax:
///
/// https://xapian.org/docs/queryparser.html
/// <https://xapian.org/docs/queryparser.html>
///
/// As a special case, passing either a length-zero string, (that is ""),
/// or a string consisting of a single asterisk (that is "*"), will
@ -703,7 +709,9 @@ pub type notmuch_query_get_sort =
/// This exclusion will be ignored if this tag appears explicitly in
/// the query.
///
/// ```text
/// @returns
/// ```
///
/// NOTMUCH_STATUS_SUCCESS: excluded was added successfully.
///
@ -757,7 +765,9 @@ pub type notmuch_query_add_tag_exclude = unsafe extern "C" fn(
/// notmuch_threads_destroy function, but there's no good reason
/// to call it if the query is about to be destroyed).
///
/// ```text
/// @since libnotmuch 5.0 (notmuch 0.25)
/// ```
pub type notmuch_query_search_threads = unsafe extern "C" fn(
query: *mut notmuch_query_t,
out: *mut *mut notmuch_threads_t,
@ -765,7 +775,9 @@ pub type notmuch_query_search_threads = unsafe extern "C" fn(
/// Deprecated alias for notmuch_query_search_threads.
///
/// ```text
/// @deprecated Deprecated as of libnotmuch 5 (notmuch 0.25). Please
/// ```
/// use notmuch_query_search_threads instead.
///
pub type notmuch_query_search_threads_st = unsafe extern "C" fn(
@ -813,7 +825,9 @@ pub type notmuch_query_search_threads_st = unsafe extern "C" fn(
///
/// If a Xapian exception occurs this function will return NULL.
///
/// ```text
/// @since libnotmuch 5 (notmuch 0.25)
/// ```
pub type notmuch_query_search_messages = unsafe extern "C" fn(
query: *mut notmuch_query_t,
out: *mut *mut notmuch_messages_t,
@ -821,7 +835,9 @@ pub type notmuch_query_search_messages = unsafe extern "C" fn(
/// Deprecated alias for notmuch_query_search_messages
///
/// ```text
/// @deprecated Deprecated as of libnotmuch 5 (notmuch 0.25). Please use
/// ```
/// notmuch_query_search_messages instead.
///
pub type notmuch_query_search_messages_st = unsafe extern "C" fn(
@ -887,6 +903,7 @@ pub type notmuch_threads_destroy = unsafe extern "C" fn(threads: *mut notmuch_th
/// This function performs a search and returns the number of matching
/// messages.
///
/// ```text
/// @returns
///
/// NOTMUCH_STATUS_SUCCESS: query completed successfully.
@ -895,6 +912,7 @@ pub type notmuch_threads_destroy = unsafe extern "C" fn(threads: *mut notmuch_th
/// value of *count is not defined.
///
/// @since libnotmuch 5 (notmuch 0.25)
/// ```
pub type notmuch_query_count_messages = unsafe extern "C" fn(
query: *mut notmuch_query_t,
count: *mut ::std::os::raw::c_uint,
@ -902,9 +920,10 @@ pub type notmuch_query_count_messages = unsafe extern "C" fn(
/// Deprecated alias for notmuch_query_count_messages
///
///
/// ```text
/// @deprecated Deprecated since libnotmuch 5.0 (notmuch 0.25). Please
/// use notmuch_query_count_messages instead.
/// ```
pub type notmuch_query_count_messages_st = unsafe extern "C" fn(
query: *mut notmuch_query_t,
count: *mut ::std::os::raw::c_uint,
@ -919,6 +938,7 @@ pub type notmuch_query_count_messages_st = unsafe extern "C" fn(
/// Note that this is a significantly heavier operation than
/// notmuch_query_count_messages{_st}().
///
/// ```text
/// @returns
///
/// NOTMUCH_STATUS_OUT_OF_MEMORY: Memory allocation failed. The value
@ -930,6 +950,7 @@ pub type notmuch_query_count_messages_st = unsafe extern "C" fn(
/// value of *count is not defined.
///
/// @since libnotmuch 5 (notmuch 0.25)
/// ```
pub type notmuch_query_count_threads = unsafe extern "C" fn(
query: *mut notmuch_query_t,
count: *mut ::std::os::raw::c_uint,
@ -937,8 +958,10 @@ pub type notmuch_query_count_threads = unsafe extern "C" fn(
/// Deprecated alias for notmuch_query_count_threads
///
/// ```text
/// @deprecated Deprecated as of libnotmuch 5.0 (notmuch 0.25). Please
/// use notmuch_query_count_threads_st instead.
/// ```
pub type notmuch_query_count_threads_st = unsafe extern "C" fn(
query: *mut notmuch_query_t,
count: *mut ::std::os::raw::c_uint,
@ -964,8 +987,10 @@ pub type notmuch_thread_get_total_messages =
///
/// This sums notmuch_message_count_files over all messages in the
/// thread
/// ```text
/// @returns Non-negative integer
/// @since libnotmuch 5.0 (notmuch 0.25)
/// ```
pub type notmuch_thread_get_total_files =
unsafe extern "C" fn(thread: *mut notmuch_thread_t) -> ::std::os::raw::c_int;
@ -1136,7 +1161,9 @@ pub type notmuch_messages_collect_tags =
/// Get the database associated with this message.
///
/// ```text
/// @since libnotmuch 5.2 (notmuch 0.27)
/// ```
pub type notmuch_message_get_database =
unsafe extern "C" fn(message: *const notmuch_message_t) -> *mut notmuch_database_t;
@ -1188,8 +1215,10 @@ pub type notmuch_message_get_replies =
unsafe extern "C" fn(message: *mut notmuch_message_t) -> *mut notmuch_messages_t;
/// Get the total number of files associated with a message.
/// ```text
/// @returns Non-negative integer
/// @since libnotmuch 5.0 (notmuch 0.25)
/// ```
pub type notmuch_message_count_files =
unsafe extern "C" fn(message: *mut notmuch_message_t) -> ::std::os::raw::c_int;
@ -1450,6 +1479,7 @@ pub type notmuch_message_tags_to_maildir_flags =
/// change tag values. For example, explicitly setting a message to
/// have a given set of tags might look like this:
///
/// ```c
/// notmuch_message_freeze (message);
///
/// notmuch_message_remove_all_tags (message);
@ -1458,6 +1488,7 @@ pub type notmuch_message_tags_to_maildir_flags =
/// notmuch_message_add_tag (message, tags[i]);
///
/// notmuch_message_thaw (message);
/// ```
///
/// With freeze/thaw used like this, the message in the database is
/// guaranteed to have either the full set of original tag values, or
@ -1508,7 +1539,9 @@ pub type notmuch_message_thaw =
/// the messages get reclaimed when the containing query is destroyed.)
pub type notmuch_message_destroy = unsafe extern "C" fn(message: *mut notmuch_message_t);
/// ```text
/// @name Message Properties
/// ```
///
/// This interface provides the ability to attach arbitrary (key,value)
/// string pairs to a message, to remove such pairs, and to iterate
@ -1525,10 +1558,12 @@ pub type notmuch_message_destroy = unsafe extern "C" fn(message: *mut notmuch_me
/// no such key. In the case of multiple values for the given key, the
/// first one is retrieved.
///
/// ```text
/// @returns
/// - NOTMUCH_STATUS_NULL_POINTER: *value* may not be NULL.
/// - NOTMUCH_STATUS_SUCCESS: No error occurred.
/// @since libnotmuch 4.4 (notmuch 0.23)
/// ```
pub type notmuch_message_get_property = unsafe extern "C" fn(
message: *mut notmuch_message_t,
key: *const ::std::os::raw::c_char,
@ -1537,11 +1572,13 @@ pub type notmuch_message_get_property = unsafe extern "C" fn(
/// Add a (key,value) pair to a message
///
/// ```text
/// @returns
/// - NOTMUCH_STATUS_ILLEGAL_ARGUMENT: *key* may not contain an '=' character.
/// - NOTMUCH_STATUS_NULL_POINTER: Neither *key* nor *value* may be NULL.
/// - NOTMUCH_STATUS_SUCCESS: No error occurred.
/// @since libnotmuch 4.4 (notmuch 0.23)
/// ```
pub type notmuch_message_add_property = unsafe extern "C" fn(
message: *mut notmuch_message_t,
key: *const ::std::os::raw::c_char,
@ -1552,11 +1589,13 @@ pub type notmuch_message_add_property = unsafe extern "C" fn(
///
/// It is not an error to remove a non-existant (key,value) pair
///
/// ```text
/// @returns
/// - NOTMUCH_STATUS_ILLEGAL_ARGUMENT: *key* may not contain an '=' character.
/// - NOTMUCH_STATUS_NULL_POINTER: Neither *key* nor *value* may be NULL.
/// - NOTMUCH_STATUS_SUCCESS: No error occurred.
/// @since libnotmuch 4.4 (notmuch 0.23)
/// ```
pub type notmuch_message_remove_property = unsafe extern "C" fn(
message: *mut notmuch_message_t,
key: *const ::std::os::raw::c_char,
@ -1565,6 +1604,7 @@ pub type notmuch_message_remove_property = unsafe extern "C" fn(
/// Remove all (key,value) pairs from the given message.
///
/// ```text
/// @param[in,out] message message to operate on.
/// @param[in] key key to delete properties for. If NULL, delete
/// properties for all keys
@ -1574,6 +1614,7 @@ pub type notmuch_message_remove_property = unsafe extern "C" fn(
/// - NOTMUCH_STATUS_SUCCESS: No error occurred.
///
/// @since libnotmuch 4.4 (notmuch 0.23)
/// ```
pub type notmuch_message_remove_all_properties = unsafe extern "C" fn(
message: *mut notmuch_message_t,
key: *const ::std::os::raw::c_char,
@ -1581,6 +1622,7 @@ pub type notmuch_message_remove_all_properties = unsafe extern "C" fn(
/// Remove all (prefix*,value) pairs from the given message
///
/// ```text
/// @param[in,out] message message to operate on.
/// @param[in] prefix delete properties with keys that start with prefix.
/// If NULL, delete all properties
@ -1590,6 +1632,7 @@ pub type notmuch_message_remove_all_properties = unsafe extern "C" fn(
/// - NOTMUCH_STATUS_SUCCESS: No error occurred.
///
/// @since libnotmuch 5.1 (notmuch 0.26)
/// ```
pub type notmuch_message_remove_all_properties_with_prefix =
unsafe extern "C" fn(
message: *mut notmuch_message_t,
@ -1612,10 +1655,12 @@ extern "C" {
/// as such, will only be valid for as long as the message is valid,
/// (which is until the query from which it derived is destroyed).
///
/// ```text
/// @param[in] message The message to examine
/// @param[in] key key or key prefix
/// @param[in] exact if TRUE, require exact match with key. Otherwise
/// treat as prefix.
/// ```
///
/// Typical usage might be:
///
@ -1635,7 +1680,9 @@ extern "C" {
/// provide a notmuch_message_properities_destroy function, but there's
/// no good reason to call it if the message is about to be destroyed).
///
/// ```text
/// @since libnotmuch 4.4 (notmuch 0.23)
/// ```
pub fn notmuch_message_get_properties(
message: *mut notmuch_message_t,
key: *const ::std::os::raw::c_char,
@ -1644,6 +1691,7 @@ extern "C" {
}
/// Return the number of properties named "key" belonging to the specific message.
///
/// ```text
/// @param[in] message The message to examine
/// @param[in] key key to count
/// @param[out] count The number of matching properties associated with this message.
@ -1653,6 +1701,7 @@ extern "C" {
/// NOTMUCH_STATUS_SUCCESS: successful count, possibly some other error.
///
/// @since libnotmuch 5.2 (notmuch 0.27)
/// ```
pub type notmuch_message_count_properties = unsafe extern "C" fn(
message: *mut notmuch_message_t,
key: *const ::std::os::raw::c_char,
@ -1672,7 +1721,9 @@ pub type notmuch_message_count_properties = unsafe extern "C" fn(
/// code showing how to iterate over a notmuch_message_properties_t
/// object.
///
/// ```text
/// @since libnotmuch 4.4 (notmuch 0.23)
/// ```
pub type notmuch_message_properties_valid =
unsafe extern "C" fn(properties: *mut notmuch_message_properties_t) -> notmuch_bool_t;
@ -1685,7 +1736,9 @@ pub type notmuch_message_properties_valid =
/// See the documentation of notmuch_message_get_properties for example
/// code showing how to iterate over a notmuch_message_properties_t object.
///
/// ```text
/// @since libnotmuch 4.4 (notmuch 0.23)
/// ```
pub type notmuch_message_properties_move_to_next =
unsafe extern "C" fn(properties: *mut notmuch_message_properties_t);
@ -1693,7 +1746,9 @@ pub type notmuch_message_properties_move_to_next =
///
/// this could be useful if iterating for a prefix
///
/// ```text
/// @since libnotmuch 4.4 (notmuch 0.23)
/// ```
pub type notmuch_message_properties_key = unsafe extern "C" fn(
properties: *mut notmuch_message_properties_t,
) -> *const ::std::os::raw::c_char;
@ -1702,7 +1757,9 @@ pub type notmuch_message_properties_key = unsafe extern "C" fn(
///
/// This could be useful if iterating for a prefix.
///
/// ```text
/// @since libnotmuch 4.4 (notmuch 0.23)
/// ```
pub type notmuch_message_properties_value = unsafe extern "C" fn(
properties: *mut notmuch_message_properties_t,
) -> *const ::std::os::raw::c_char;
@ -1713,7 +1770,9 @@ pub type notmuch_message_properties_value = unsafe extern "C" fn(
/// the notmuch_message_properties_t object will be reclaimed when the
/// containing message object is destroyed.
///
/// ```text
/// @since libnotmuch 4.4 (notmuch 0.23)
/// ```
pub type notmuch_message_properties_destroy =
unsafe extern "C" fn(properties: *mut notmuch_message_properties_t);
@ -1821,7 +1880,9 @@ pub type notmuch_directory_get_child_directories =
/// notmuch_directory_t object. Assumes any child directories and files
/// have been deleted by the caller.
///
/// ```text
/// @since libnotmuch 4.3 (notmuch 0.21)
/// ```
pub type notmuch_directory_delete =
unsafe extern "C" fn(directory: *mut notmuch_directory_t) -> notmuch_status_t;
@ -1872,7 +1933,9 @@ pub type notmuch_filenames_destroy = unsafe extern "C" fn(filenames: *mut notmuc
/// set config 'key' to 'value'
///
/// ```text
/// @since libnotmuch 4.4 (notmuch 0.23)
/// ```
pub type notmuch_database_set_config = unsafe extern "C" fn(
db: *mut notmuch_database_t,
key: *const ::std::os::raw::c_char,
@ -1887,7 +1950,9 @@ pub type notmuch_database_set_config = unsafe extern "C" fn(
/// return value is allocated by malloc and should be freed by the
/// caller.
///
/// ```text
/// @since libnotmuch 4.4 (notmuch 0.23)
/// ```
pub type notmuch_database_get_config = unsafe extern "C" fn(
db: *mut notmuch_database_t,
key: *const ::std::os::raw::c_char,
@ -1896,7 +1961,9 @@ pub type notmuch_database_get_config = unsafe extern "C" fn(
/// Create an iterator for all config items with keys matching a given prefix
///
/// ```text
/// @since libnotmuch 4.4 (notmuch 0.23)
/// ```
pub type notmuch_database_get_config_list = unsafe extern "C" fn(
db: *mut notmuch_database_t,
prefix: *const ::std::os::raw::c_char,
@ -1905,7 +1972,9 @@ pub type notmuch_database_get_config_list = unsafe extern "C" fn(
/// Is 'config_list' iterator valid (i.e. _key, _value, _move_to_next can be called).
///
/// ```text
/// @since libnotmuch 4.4 (notmuch 0.23)
/// ```
pub type notmuch_config_list_valid =
unsafe extern "C" fn(config_list: *mut notmuch_config_list_t) -> notmuch_bool_t;
@ -1914,7 +1983,9 @@ pub type notmuch_config_list_valid =
/// return value is owned by the iterator, and will be destroyed by the
/// next call to notmuch_config_list_key or notmuch_config_list_destroy.
///
/// ```text
/// @since libnotmuch 4.4 (notmuch 0.23)
/// ```
pub type notmuch_config_list_key =
unsafe extern "C" fn(config_list: *mut notmuch_config_list_t) -> *const ::std::os::raw::c_char;
@ -1923,19 +1994,25 @@ pub type notmuch_config_list_key =
/// return value is owned by the iterator, and will be destroyed by the
/// next call to notmuch_config_list_value or notmuch config_list_destroy
///
/// ```text
/// @since libnotmuch 4.4 (notmuch 0.23)
/// ```
pub type notmuch_config_list_value =
unsafe extern "C" fn(config_list: *mut notmuch_config_list_t) -> *const ::std::os::raw::c_char;
/// move 'config_list' iterator to the next pair
///
/// ```text
/// @since libnotmuch 4.4 (notmuch 0.23)
/// ```
pub type notmuch_config_list_move_to_next =
unsafe extern "C" fn(config_list: *mut notmuch_config_list_t);
/// free any resources held by 'config_list'
///
/// ```text
/// @since libnotmuch 4.4 (notmuch 0.23)
/// ```
pub type notmuch_config_list_destroy =
unsafe extern "C" fn(config_list: *mut notmuch_config_list_t);
@ -1948,7 +2025,9 @@ pub type notmuch_config_list_destroy =
/// This object represents a set of options on how a message can be
/// added to the index. At the moment it is a featureless stub.
///
/// ```text
/// @since libnotmuch 5.1 (notmuch 0.26)
/// ```
pub type notmuch_database_get_default_indexopts =
unsafe extern "C" fn(db: *mut notmuch_database_t) -> *mut notmuch_indexopts_t;
@ -1967,7 +2046,9 @@ pub type notmuch_decryption_policy_t = u32;
/// message index is adequately protected. DO NOT SET THIS FLAG TO TRUE
/// without considering the security of your index.
///
/// ```text
/// @since libnotmuch 5.1 (notmuch 0.26)
/// ```
pub type notmuch_indexopts_set_decrypt_policy = unsafe extern "C" fn(
indexopts: *mut notmuch_indexopts_t,
decrypt_policy: notmuch_decryption_policy_t,
@ -1976,17 +2057,23 @@ pub type notmuch_indexopts_set_decrypt_policy = unsafe extern "C" fn(
/// Return whether to decrypt encrypted parts while indexing.
/// see notmuch_indexopts_set_decrypt_policy.
///
/// ```text
/// @since libnotmuch 5.1 (notmuch 0.26)
/// ```
pub type notmuch_indexopts_get_decrypt_policy =
unsafe extern "C" fn(indexopts: *const notmuch_indexopts_t) -> notmuch_decryption_policy_t;
/// Destroy a notmuch_indexopts_t object.
///
/// ```text
/// @since libnotmuch 5.1 (notmuch 0.26)
/// ```
pub type notmuch_indexopts_destroy = unsafe extern "C" fn(options: *mut notmuch_indexopts_t);
/// interrogate the library for compile time features
///
/// ```text
/// @since libnotmuch 4.4 (notmuch 0.23)
/// ```
pub type notmuch_built_with =
unsafe extern "C" fn(name: *const ::std::os::raw::c_char) -> notmuch_bool_t;

2
melib/src/email.rs

@ -25,7 +25,7 @@
* # Parsing bytes into an `Envelope`
*
* An [`Envelope`](Envelope) represents the information you can get from an email's headers and body
* structure. Addresses in `To`, `From` fields etc are parsed into [`Address`](email::address::Address) types.
* structure. Addresses in `To`, `From` fields etc are parsed into [`Address`](crate::email::Address) types.
*
* ```
* use melib::{Attachment, Envelope};

4
melib/src/email/parser.rs

@ -444,6 +444,7 @@ pub mod dates {
}
///e.g Wed Sep 9 00:27:54 2020
///```text
///day-of-week month day time year
///date-time = [ day-of-week "," ] date time [CFWS]
///date = day month year
@ -452,6 +453,7 @@ pub mod dates {
///hour = 2DIGIT / obs-hour
///minute = 2DIGIT / obs-minute
///second = 2DIGIT / obs-second
///```
pub fn mbox_date_time(input: &[u8]) -> IResult<&[u8], UnixTimestamp> {
let orig_input = input;
let mut accum: SmallVec<[u8; 32]> = SmallVec::new();
@ -1227,7 +1229,7 @@ pub mod generic {
alt((atext_ascii, utf8_non_ascii))(input)
}
///dot-atom = [CFWS] dot-atom-text [CFWS]
///`dot-atom = [CFWS] dot-atom-text [CFWS]`
pub fn dot_atom(input: &[u8]) -> IResult<&[u8], Cow<'_, [u8]>> {
let (input, _) = opt(cfws)(input)?;
let (input, ret) = dot_atom_text(input)?;

4
melib/src/smtp.rs

@ -25,6 +25,9 @@
/*!
* SMTP client support
*
* This module implements a client for the SMTP protocol as specified by [RFC 5321 Simple Mail
* Transfer Protocol](https://www.rfc-editor.org/rfc/rfc5321).
*
* The connection and methods are `async` and uses the `smol` runtime.
*# Example
*
@ -195,6 +198,7 @@ pub struct SmtpExtensionSupport {
pipelining: bool,
#[serde(default = "crate::conf::true_val")]
chunking: bool,
/// [RFC 6152: SMTP Service Extension for 8-bit MIME Transport](https://www.rfc-editor.org/rfc/rfc6152)
#[serde(default = "crate::conf::true_val")]
_8bitmime: bool,
//Essentially, the PRDR extension to SMTP allows (but does not require) an SMTP server to

6
src/mailcap.rs

@ -19,8 +19,10 @@
* along with meli. If not, see <http://www.gnu.org/licenses/>.
*/
/*! Find mailcap entries to execute attachments.
*/
//! # mailcap file - Find mailcap entries to execute attachments.
//!
//! Implements [RFC 1524 A User Agent Configuration Mechanism For Multimedia Mail Format
//! Information](https://www.rfc-editor.org/rfc/inline-errata/rfc1524.html)
use crate::state::Context;
use crate::types::{create_temp_file, ForkType, UIEvent};
use melib::text_processing::GlobMatch;

18
src/terminal/embed/grid.rs

@ -25,15 +25,6 @@ use melib::error::{MeliError, Result};
use melib::text_processing::wcwidth;
use nix::sys::wait::WaitStatus;
use nix::sys::wait::{waitpid, WaitPidFlag};
/**
* `EmbedGrid` manages the terminal grid state of the embed process.
*
* The embed process sends bytes to the master end (see super mod) and interprets them in a state
* machine stored in `State`. Escape codes are translated as changes to the grid, eg changes in a
* cell's colors.
*
* The main process copies the grid whenever the actual terminal is redrawn.
**/
#[derive(Debug)]
enum ScreenBuffer {
@ -41,10 +32,17 @@ enum ScreenBuffer {
Alternate,
}
/// `EmbedGrid` manages the terminal grid state of the embed process.
///
/// The embed process sends bytes to the master end (see super mod) and interprets them in a state
/// machine stored in `State`. Escape codes are translated as changes to the grid, eg changes in a
/// cell's colors.
///
/// The main process copies the grid whenever the actual terminal is redrawn.
#[derive(Debug)]
pub struct EmbedGrid {
cursor: (usize, usize),
/// [top;bottom]
/// `[top;bottom]`
scroll_region: ScrollRegion,
pub alternate_screen: CellBuffer,
pub state: State,

Loading…
Cancel
Save