Struct deltachat::chat::Chat

source ·
pub struct Chat {
    pub id: ChatId,
    pub typ: Chattype,
    pub name: String,
    pub visibility: ChatVisibility,
    pub grpid: String,
    pub blocked: Blocked,
    pub param: Params,
    is_sending_locations: bool,
    pub mute_duration: MuteDuration,
    pub(crate) protected: ProtectionStatus,
}
Expand description

An object representing a single chat in memory. Chat objects are created using eg. Chat::load_from_db and are not updated on database changes; if you want an update, you have to recreate the object.

Fields§

§id: ChatId

Database ID.

§typ: Chattype

Chat type, e.g. 1:1 chat, group chat, mailing list.

§name: String

Chat name.

§visibility: ChatVisibility

Whether the chat is archived or pinned.

§grpid: String

Group ID. For Chattype::Mailinglist – mailing list address. Empty for 1:1 chats and ad-hoc groups.

§blocked: Blocked

Whether the chat is blocked, unblocked or a contact request.

§param: Params

Additional chat parameters stored in the database.

§is_sending_locations: bool

If location streaming is enabled in the chat.

§mute_duration: MuteDuration

Duration of the chat being muted.

§protected: ProtectionStatus

If the chat is protected (verified).

Implementations§

source§

impl Chat

source

pub async fn load_from_db(context: &Context, chat_id: ChatId) -> Result<Self>

Loads chat from the database by its ID.

source

pub fn is_self_talk(&self) -> bool

Returns whether this is the saved messages chat

source

pub fn is_device_talk(&self) -> bool

Returns true if chat is a device chat.

source

pub fn is_mailing_list(&self) -> bool

Returns true if chat is a mailing list.

source

pub(crate) async fn why_cant_send( &self, context: &Context ) -> Result<Option<CantSendReason>>

Returns None if user can send messages to this chat.

Otherwise returns a reason useful for logging.

source

pub async fn can_send(&self, context: &Context) -> Result<bool>

Returns true if can send to the chat.

This function can be used by the UI to decide whether to display the input box.

source

pub(crate) async fn check_securejoin_wait( &self, context: &Context, timeout: u64 ) -> Result<u64>

Returns the remaining timeout for the 1:1 chat in-progress SecureJoin.

If the timeout has expired, notifies the user that sending messages is possible. See also CantSendReason::SecurejoinWait.

source

pub(crate) async fn is_self_in_chat(&self, context: &Context) -> Result<bool>

Checks if the user is part of a chat and has basically the permissions to edit the chat therefore. The function does not check if the chat type allows editing of concrete elements.

source

pub(crate) async fn update_param(&mut self, context: &Context) -> Result<()>

source

pub fn get_id(&self) -> ChatId

Returns chat ID.

source

pub fn get_type(&self) -> Chattype

Returns chat type.

source

pub fn get_name(&self) -> &str

Returns chat name.

source

pub fn get_mailinglist_addr(&self) -> Option<&str>

Returns mailing list address where messages are sent to.

source

pub async fn get_profile_image( &self, context: &Context ) -> Result<Option<PathBuf>>

Returns profile image path for the chat.

source

pub async fn get_color(&self, context: &Context) -> Result<u32>

Returns chat avatar color.

For 1:1 chats, the color is calculated from the contact’s address. For group chats the color is calculated from the chat name.

source

pub async fn get_info(&self, context: &Context) -> Result<ChatInfo>

Returns a struct describing the current state of the chat.

This is somewhat experimental, even more so than the rest of deltachat, and the data returned is still subject to change.

source

pub fn get_visibility(&self) -> ChatVisibility

Returns chat visibilitiy, e.g. whether it is archived or pinned.

source

pub fn is_contact_request(&self) -> bool

Returns true if chat is a contact request.

Messages cannot be sent to such chat and read receipts are not sent until the chat is manually unblocked.

source

pub fn is_unpromoted(&self) -> bool

Returns true if the chat is not promoted.

source

pub fn is_promoted(&self) -> bool

Returns true if the chat is promoted. This means a message has been sent to it and it not only exists on the users device.

source

pub fn is_protected(&self) -> bool

Returns true if chat protection is enabled.

UI should display a green checkmark in the chat title, in the chat profile title and in the chatlist item if chat protection is enabled. UI should also display a green checkmark in the contact profile if 1:1 chat with this contact exists and is protected.

source

pub fn is_protection_broken(&self) -> bool

Returns true if the chat was protected, and then an incoming message broke this protection.

This function is only useful if the UI enabled the verified_one_on_one_chats feature flag, otherwise it will return false for all chats.

1:1 chats are automatically set as protected when a contact is verified. When a message comes in that is not encrypted / signed correctly, the chat is automatically set as unprotected again. is_protection_broken() will return true until chat_id.accept() is called.

The UI should let the user confirm that this is OK with a message like Bob sent a message from another device. Tap to learn more and then call chat_id.accept().

source

pub fn is_sending_locations(&self) -> bool

Returns true if location streaming is enabled in the chat.

source

pub fn is_muted(&self) -> bool

Returns true if the chat is currently muted.

source

async fn prepare_msg_raw( &mut self, context: &Context, msg: &mut Message, update_msg_id: Option<MsgId>, timestamp: i64 ) -> Result<MsgId>

Adds missing values to the msg object, writes the record to the database and returns its msg_id.

If update_msg_id is set, that record is reused; if update_msg_id is None, a new record is created.

source

pub(crate) async fn sync_contacts(&self, context: &Context) -> Result<()>

Sends a SyncAction synchronising chat contacts to other devices.

source

async fn get_sync_id(&self, context: &Context) -> Result<Option<SyncId>>

Returns chat id for the purpose of synchronisation across devices.

source

pub(crate) async fn sync( &self, context: &Context, action: SyncAction ) -> Result<()>

Synchronises a chat action to other devices.

source§

impl Chat

source

pub async fn get_last_reaction_if_newer_than( &self, context: &Context, timestamp: i64 ) -> Result<Option<(Message, ContactId, String)>>

Check if there is a reaction newer than the given timestamp.

If so, reaction details are returned and can be used to create a summary string.

Trait Implementations§

source§

impl Clone for Chat

source§

fn clone(&self) -> Chat

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Chat

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Chat

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Serialize for Chat

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

§

impl Freeze for Chat

§

impl RefUnwindSafe for Chat

§

impl Send for Chat

§

impl Sync for Chat

§

impl Unpin for Chat

§

impl UnwindSafe for Chat

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

§

fn implicit( self, class: Class, constructed: bool, tag: u32 ) -> TaggedParser<'a, Implicit, Self, E>

§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

§

fn implicit( self, class: Class, constructed: bool, tag: u32 ) -> TaggedParser<'a, Implicit, Self, E>

source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> FromRef<T> for T
where T: Clone,

§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> Pipe for T
where T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
source§

impl<T> Same for T

§

type Output = T

Should always be Self
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

§

impl<A, B, T> HttpServerConnExec<A, B> for T
where B: Body,

§

impl<T> RpcMessage for T
where T: Debug + Serialize + DeserializeOwned + Send + Sync + Unpin + 'static,