mirror of
https://github.com/chatmail/core.git
synced 2026-04-22 07:56:29 +03:00
IMAP capabilities and selected folder are IMAP session, not IMAP client property. Moving most operations into IMAP session structure removes the need to constantly check whether IMAP session exists and reduces number of invalid states, e.g. when a folder is selected but there is no connection. Capabilities are determined immediately after logging in, so there is no need for `capabilities_determined` flag anymore. Capabilities of the server are always known if there is a session. `should_reconnect` flag and `disconnect()` function are removed: we drop the session on error. Even though RFC 3501 says that a client SHOULD NOT close the connection without a LOGOUT, it is more reliable to always just drop the connection, especially after an error.
27 lines
839 B
Rust
27 lines
839 B
Rust
//! # IMAP capabilities
|
|
//!
|
|
//! IMAP server capabilities are determined with a `CAPABILITY` command.
|
|
use std::collections::HashMap;
|
|
|
|
#[derive(Debug)]
|
|
pub(crate) struct Capabilities {
|
|
/// True if the server has IDLE capability as defined in
|
|
/// <https://tools.ietf.org/html/rfc2177>
|
|
pub can_idle: bool,
|
|
|
|
/// True if the server has MOVE capability as defined in
|
|
/// <https://tools.ietf.org/html/rfc6851>
|
|
pub can_move: bool,
|
|
|
|
/// True if the server has QUOTA capability as defined in
|
|
/// <https://tools.ietf.org/html/rfc2087>
|
|
pub can_check_quota: bool,
|
|
|
|
/// True if the server has CONDSTORE capability as defined in
|
|
/// <https://tools.ietf.org/html/rfc7162>
|
|
pub can_condstore: bool,
|
|
|
|
/// Server ID if the server supports ID capability.
|
|
pub server_id: Option<HashMap<String, String>>,
|
|
}
|