mirror of
https://github.com/chatmail/core.git
synced 2026-04-17 21:46:35 +03:00
Minor cleanup of Viewtype
Provide checking for attachment as a method and move it to the message module. The method is a lot easier to read and have correct expectations about.
This commit is contained in:
@@ -17,7 +17,7 @@ use deltachat::download::DownloadState;
|
|||||||
use deltachat::imex::*;
|
use deltachat::imex::*;
|
||||||
use deltachat::location;
|
use deltachat::location;
|
||||||
use deltachat::log::LogExt;
|
use deltachat::log::LogExt;
|
||||||
use deltachat::message::{self, Message, MessageState, MsgId};
|
use deltachat::message::{self, Message, MessageState, MsgId, Viewtype};
|
||||||
use deltachat::peerstate::*;
|
use deltachat::peerstate::*;
|
||||||
use deltachat::qr::*;
|
use deltachat::qr::*;
|
||||||
use deltachat::sql;
|
use deltachat::sql;
|
||||||
|
|||||||
@@ -19,13 +19,13 @@ use thiserror::Error;
|
|||||||
|
|
||||||
use crate::config::Config;
|
use crate::config::Config;
|
||||||
use crate::constants::{
|
use crate::constants::{
|
||||||
MediaQuality, Viewtype, BALANCED_AVATAR_SIZE, BALANCED_IMAGE_SIZE, WORSE_AVATAR_SIZE,
|
MediaQuality, BALANCED_AVATAR_SIZE, BALANCED_IMAGE_SIZE, WORSE_AVATAR_SIZE, WORSE_IMAGE_SIZE,
|
||||||
WORSE_IMAGE_SIZE,
|
|
||||||
};
|
};
|
||||||
use crate::context::Context;
|
use crate::context::Context;
|
||||||
use crate::events::EventType;
|
use crate::events::EventType;
|
||||||
use crate::log::LogExt;
|
use crate::log::LogExt;
|
||||||
use crate::message;
|
use crate::message;
|
||||||
|
use crate::message::Viewtype;
|
||||||
|
|
||||||
/// Represents a file in the blob directory.
|
/// Represents a file in the blob directory.
|
||||||
///
|
///
|
||||||
|
|||||||
27
src/chat.rs
27
src/chat.rs
@@ -15,10 +15,9 @@ use crate::blob::{BlobError, BlobObject};
|
|||||||
use crate::color::str_to_color;
|
use crate::color::str_to_color;
|
||||||
use crate::config::Config;
|
use crate::config::Config;
|
||||||
use crate::constants::{
|
use crate::constants::{
|
||||||
Blocked, Chattype, Viewtype, DC_CHAT_ID_ALLDONE_HINT, DC_CHAT_ID_ARCHIVED_LINK,
|
Blocked, Chattype, DC_CHAT_ID_ALLDONE_HINT, DC_CHAT_ID_ARCHIVED_LINK, DC_CHAT_ID_LAST_SPECIAL,
|
||||||
DC_CHAT_ID_LAST_SPECIAL, DC_CHAT_ID_TRASH, DC_CONTACT_ID_DEVICE, DC_CONTACT_ID_INFO,
|
DC_CHAT_ID_TRASH, DC_CONTACT_ID_DEVICE, DC_CONTACT_ID_INFO, DC_CONTACT_ID_LAST_SPECIAL,
|
||||||
DC_CONTACT_ID_LAST_SPECIAL, DC_CONTACT_ID_SELF, DC_GCM_ADDDAYMARKER, DC_GCM_INFO_ONLY,
|
DC_CONTACT_ID_SELF, DC_GCM_ADDDAYMARKER, DC_GCM_INFO_ONLY, DC_RESEND_USER_AVATAR_DAYS,
|
||||||
DC_RESEND_USER_AVATAR_DAYS,
|
|
||||||
};
|
};
|
||||||
use crate::contact::{addr_cmp, Contact, ContactId, Origin, VerifiedStatus};
|
use crate::contact::{addr_cmp, Contact, ContactId, Origin, VerifiedStatus};
|
||||||
use crate::context::Context;
|
use crate::context::Context;
|
||||||
@@ -33,7 +32,7 @@ use crate::events::EventType;
|
|||||||
use crate::html::new_html_mimepart;
|
use crate::html::new_html_mimepart;
|
||||||
use crate::job::{self, Action};
|
use crate::job::{self, Action};
|
||||||
use crate::location;
|
use crate::location;
|
||||||
use crate::message::{self, Message, MessageState, MsgId};
|
use crate::message::{self, Message, MessageState, MsgId, Viewtype};
|
||||||
use crate::mimefactory::MimeFactory;
|
use crate::mimefactory::MimeFactory;
|
||||||
use crate::mimeparser::SystemMessage;
|
use crate::mimeparser::SystemMessage;
|
||||||
use crate::param::{Param, Params};
|
use crate::param::{Param, Params};
|
||||||
@@ -1808,26 +1807,10 @@ pub async fn prepare_msg(context: &Context, chat_id: ChatId, msg: &mut Message)
|
|||||||
Ok(msg_id)
|
Ok(msg_id)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn msgtype_has_file(msgtype: Viewtype) -> bool {
|
|
||||||
match msgtype {
|
|
||||||
Viewtype::Unknown => false,
|
|
||||||
Viewtype::Text => false,
|
|
||||||
Viewtype::Image => true,
|
|
||||||
Viewtype::Gif => true,
|
|
||||||
Viewtype::Sticker => true,
|
|
||||||
Viewtype::Audio => true,
|
|
||||||
Viewtype::Voice => true,
|
|
||||||
Viewtype::Video => true,
|
|
||||||
Viewtype::File => true,
|
|
||||||
Viewtype::VideochatInvitation => false,
|
|
||||||
Viewtype::Webxdc => true,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn prepare_msg_blob(context: &Context, msg: &mut Message) -> Result<()> {
|
async fn prepare_msg_blob(context: &Context, msg: &mut Message) -> Result<()> {
|
||||||
if msg.viewtype == Viewtype::Text || msg.viewtype == Viewtype::VideochatInvitation {
|
if msg.viewtype == Viewtype::Text || msg.viewtype == Viewtype::VideochatInvitation {
|
||||||
// the caller should check if the message text is empty
|
// the caller should check if the message text is empty
|
||||||
} else if msgtype_has_file(msg.viewtype) {
|
} else if msg.viewtype.has_file() {
|
||||||
let blob = msg
|
let blob = msg
|
||||||
.param
|
.param
|
||||||
.get_blob(Param::File, context, !msg.is_increation())
|
.get_blob(Param::File, context, !msg.is_increation())
|
||||||
|
|||||||
@@ -375,8 +375,8 @@ mod tests {
|
|||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
use crate::chat::{create_group_chat, get_chat_contacts, ProtectionStatus};
|
use crate::chat::{create_group_chat, get_chat_contacts, ProtectionStatus};
|
||||||
use crate::constants::Viewtype;
|
|
||||||
use crate::dc_receive_imf::dc_receive_imf;
|
use crate::dc_receive_imf::dc_receive_imf;
|
||||||
|
use crate::message::Viewtype;
|
||||||
use crate::stock_str::StockMessage;
|
use crate::stock_str::StockMessage;
|
||||||
use crate::test_utils::TestContext;
|
use crate::test_utils::TestContext;
|
||||||
|
|
||||||
|
|||||||
@@ -11,21 +11,20 @@ use async_std::task;
|
|||||||
use job::Action;
|
use job::Action;
|
||||||
use percent_encoding::{utf8_percent_encode, NON_ALPHANUMERIC};
|
use percent_encoding::{utf8_percent_encode, NON_ALPHANUMERIC};
|
||||||
|
|
||||||
use crate::dc_tools::EmailAddress;
|
use crate::config::Config;
|
||||||
|
use crate::constants::{DC_LP_AUTH_FLAGS, DC_LP_AUTH_NORMAL, DC_LP_AUTH_OAUTH2};
|
||||||
|
use crate::context::Context;
|
||||||
|
use crate::dc_tools::{time, EmailAddress};
|
||||||
use crate::imap::Imap;
|
use crate::imap::Imap;
|
||||||
|
use crate::job;
|
||||||
use crate::login_param::{CertificateChecks, LoginParam, ServerLoginParam, Socks5Config};
|
use crate::login_param::{CertificateChecks, LoginParam, ServerLoginParam, Socks5Config};
|
||||||
use crate::message::Message;
|
use crate::message::{Message, Viewtype};
|
||||||
use crate::oauth2::dc_get_oauth2_addr;
|
use crate::oauth2::dc_get_oauth2_addr;
|
||||||
|
use crate::param::Params;
|
||||||
use crate::provider::{Protocol, Socket, UsernamePattern};
|
use crate::provider::{Protocol, Socket, UsernamePattern};
|
||||||
use crate::smtp::Smtp;
|
use crate::smtp::Smtp;
|
||||||
use crate::stock_str;
|
use crate::stock_str;
|
||||||
use crate::{chat, e2ee, provider};
|
use crate::{chat, e2ee, provider};
|
||||||
use crate::{config::Config, dc_tools::time};
|
|
||||||
use crate::{
|
|
||||||
constants::{Viewtype, DC_LP_AUTH_FLAGS, DC_LP_AUTH_NORMAL, DC_LP_AUTH_OAUTH2},
|
|
||||||
job,
|
|
||||||
};
|
|
||||||
use crate::{context::Context, param::Params};
|
|
||||||
|
|
||||||
use auto_mozilla::moz_autoconfigure;
|
use auto_mozilla::moz_autoconfigure;
|
||||||
use auto_outlook::outlk_autodiscover;
|
use auto_outlook::outlk_autodiscover;
|
||||||
|
|||||||
102
src/constants.rs
102
src/constants.rs
@@ -231,82 +231,6 @@ pub const DC_FOLDERS_CONFIGURED_VERSION: i32 = 3;
|
|||||||
// can be overwritten by the setting `max_smtp_rcpt_to` in provider-db.
|
// can be overwritten by the setting `max_smtp_rcpt_to` in provider-db.
|
||||||
pub const DEFAULT_MAX_SMTP_RCPT_TO: usize = 50;
|
pub const DEFAULT_MAX_SMTP_RCPT_TO: usize = 50;
|
||||||
|
|
||||||
#[derive(
|
|
||||||
Debug,
|
|
||||||
Display,
|
|
||||||
Clone,
|
|
||||||
Copy,
|
|
||||||
PartialEq,
|
|
||||||
Eq,
|
|
||||||
FromPrimitive,
|
|
||||||
ToPrimitive,
|
|
||||||
FromSql,
|
|
||||||
ToSql,
|
|
||||||
Serialize,
|
|
||||||
Deserialize,
|
|
||||||
)]
|
|
||||||
#[repr(u32)]
|
|
||||||
pub enum Viewtype {
|
|
||||||
Unknown = 0,
|
|
||||||
|
|
||||||
/// Text message.
|
|
||||||
/// The text of the message is set using dc_msg_set_text()
|
|
||||||
/// and retrieved with dc_msg_get_text().
|
|
||||||
Text = 10,
|
|
||||||
|
|
||||||
/// Image message.
|
|
||||||
/// If the image is an animated GIF, the type DC_MSG_GIF should be used.
|
|
||||||
/// File, width and height are set via dc_msg_set_file(), dc_msg_set_dimension
|
|
||||||
/// and retrieved via dc_msg_set_file(), dc_msg_set_dimension().
|
|
||||||
Image = 20,
|
|
||||||
|
|
||||||
/// Animated GIF message.
|
|
||||||
/// File, width and height are set via dc_msg_set_file(), dc_msg_set_dimension()
|
|
||||||
/// and retrieved via dc_msg_get_file(), dc_msg_get_width(), dc_msg_get_height().
|
|
||||||
Gif = 21,
|
|
||||||
|
|
||||||
/// Message containing a sticker, similar to image.
|
|
||||||
/// If possible, the ui should display the image without borders in a transparent way.
|
|
||||||
/// A click on a sticker will offer to install the sticker set in some future.
|
|
||||||
Sticker = 23,
|
|
||||||
|
|
||||||
/// Message containing an Audio file.
|
|
||||||
/// File and duration are set via dc_msg_set_file(), dc_msg_set_duration()
|
|
||||||
/// and retrieved via dc_msg_get_file(), dc_msg_get_duration().
|
|
||||||
Audio = 40,
|
|
||||||
|
|
||||||
/// A voice message that was directly recorded by the user.
|
|
||||||
/// For all other audio messages, the type #DC_MSG_AUDIO should be used.
|
|
||||||
/// File and duration are set via dc_msg_set_file(), dc_msg_set_duration()
|
|
||||||
/// and retrieved via dc_msg_get_file(), dc_msg_get_duration()
|
|
||||||
Voice = 41,
|
|
||||||
|
|
||||||
/// Video messages.
|
|
||||||
/// File, width, height and durarion
|
|
||||||
/// are set via dc_msg_set_file(), dc_msg_set_dimension(), dc_msg_set_duration()
|
|
||||||
/// and retrieved via
|
|
||||||
/// dc_msg_get_file(), dc_msg_get_width(),
|
|
||||||
/// dc_msg_get_height(), dc_msg_get_duration().
|
|
||||||
Video = 50,
|
|
||||||
|
|
||||||
/// Message containing any file, eg. a PDF.
|
|
||||||
/// The file is set via dc_msg_set_file()
|
|
||||||
/// and retrieved via dc_msg_get_file().
|
|
||||||
File = 60,
|
|
||||||
|
|
||||||
/// Message is an invitation to a videochat.
|
|
||||||
VideochatInvitation = 70,
|
|
||||||
|
|
||||||
/// Message is an webxdc instance.
|
|
||||||
Webxdc = 80,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Default for Viewtype {
|
|
||||||
fn default() -> Self {
|
|
||||||
Viewtype::Unknown
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub const DC_JOB_DELETE_MSG_ON_IMAP: i32 = 110;
|
pub const DC_JOB_DELETE_MSG_ON_IMAP: i32 = 110;
|
||||||
|
|
||||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, FromPrimitive, ToPrimitive)]
|
#[derive(Debug, Clone, Copy, PartialEq, Eq, FromPrimitive, ToPrimitive)]
|
||||||
@@ -318,33 +242,9 @@ pub enum KeyType {
|
|||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
|
||||||
use num_traits::FromPrimitive;
|
use num_traits::FromPrimitive;
|
||||||
|
|
||||||
#[test]
|
use super::*;
|
||||||
fn test_derive_display_works_as_expected() {
|
|
||||||
assert_eq!(format!("{}", Viewtype::Audio), "Audio");
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_viewtype_values() {
|
|
||||||
// values may be written to disk and must not change
|
|
||||||
assert_eq!(Viewtype::Unknown, Viewtype::default());
|
|
||||||
assert_eq!(Viewtype::Unknown, Viewtype::from_i32(0).unwrap());
|
|
||||||
assert_eq!(Viewtype::Text, Viewtype::from_i32(10).unwrap());
|
|
||||||
assert_eq!(Viewtype::Image, Viewtype::from_i32(20).unwrap());
|
|
||||||
assert_eq!(Viewtype::Gif, Viewtype::from_i32(21).unwrap());
|
|
||||||
assert_eq!(Viewtype::Sticker, Viewtype::from_i32(23).unwrap());
|
|
||||||
assert_eq!(Viewtype::Audio, Viewtype::from_i32(40).unwrap());
|
|
||||||
assert_eq!(Viewtype::Voice, Viewtype::from_i32(41).unwrap());
|
|
||||||
assert_eq!(Viewtype::Video, Viewtype::from_i32(50).unwrap());
|
|
||||||
assert_eq!(Viewtype::File, Viewtype::from_i32(60).unwrap());
|
|
||||||
assert_eq!(
|
|
||||||
Viewtype::VideochatInvitation,
|
|
||||||
Viewtype::from_i32(70).unwrap()
|
|
||||||
);
|
|
||||||
assert_eq!(Viewtype::Webxdc, Viewtype::from_i32(80).unwrap());
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_chattype_values() {
|
fn test_chattype_values() {
|
||||||
|
|||||||
@@ -670,10 +670,10 @@ mod tests {
|
|||||||
use crate::chat::{
|
use crate::chat::{
|
||||||
get_chat_contacts, get_chat_msgs, send_msg, set_muted, Chat, ChatId, MuteDuration,
|
get_chat_contacts, get_chat_msgs, send_msg, set_muted, Chat, ChatId, MuteDuration,
|
||||||
};
|
};
|
||||||
use crate::constants::{Viewtype, DC_CONTACT_ID_SELF};
|
use crate::constants::DC_CONTACT_ID_SELF;
|
||||||
use crate::dc_receive_imf::dc_receive_imf;
|
use crate::dc_receive_imf::dc_receive_imf;
|
||||||
use crate::dc_tools::dc_create_outgoing_rfc724_mid;
|
use crate::dc_tools::dc_create_outgoing_rfc724_mid;
|
||||||
use crate::message::Message;
|
use crate::message::{Message, Viewtype};
|
||||||
use crate::test_utils::TestContext;
|
use crate::test_utils::TestContext;
|
||||||
use anyhow::Context as _;
|
use anyhow::Context as _;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
|||||||
@@ -14,8 +14,7 @@ use sha2::{Digest, Sha256};
|
|||||||
use crate::chat::{self, Chat, ChatId, ChatIdBlocked, ProtectionStatus};
|
use crate::chat::{self, Chat, ChatId, ChatIdBlocked, ProtectionStatus};
|
||||||
use crate::config::Config;
|
use crate::config::Config;
|
||||||
use crate::constants::{
|
use crate::constants::{
|
||||||
Blocked, Chattype, ShowEmails, Viewtype, DC_CHAT_ID_TRASH, DC_CONTACT_ID_LAST_SPECIAL,
|
Blocked, Chattype, ShowEmails, DC_CHAT_ID_TRASH, DC_CONTACT_ID_LAST_SPECIAL, DC_CONTACT_ID_SELF,
|
||||||
DC_CONTACT_ID_SELF,
|
|
||||||
};
|
};
|
||||||
use crate::contact::{
|
use crate::contact::{
|
||||||
addr_cmp, may_be_valid_addr, normalize_name, Contact, ContactId, Origin, VerifiedStatus,
|
addr_cmp, may_be_valid_addr, normalize_name, Contact, ContactId, Origin, VerifiedStatus,
|
||||||
@@ -28,7 +27,9 @@ use crate::events::EventType;
|
|||||||
use crate::headerdef::{HeaderDef, HeaderDefMap};
|
use crate::headerdef::{HeaderDef, HeaderDefMap};
|
||||||
use crate::job::{self, Action};
|
use crate::job::{self, Action};
|
||||||
use crate::log::LogExt;
|
use crate::log::LogExt;
|
||||||
use crate::message::{self, rfc724_mid_exists, Message, MessageState, MessengerMessage, MsgId};
|
use crate::message::{
|
||||||
|
self, rfc724_mid_exists, Message, MessageState, MessengerMessage, MsgId, Viewtype,
|
||||||
|
};
|
||||||
use crate::mimeparser::{
|
use crate::mimeparser::{
|
||||||
parse_message_id, parse_message_ids, AvatarAction, MailinglistType, MimeMessage, SystemMessage,
|
parse_message_id, parse_message_ids, AvatarAction, MailinglistType, MimeMessage, SystemMessage,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -21,10 +21,10 @@ use mailparse::MailHeaderMap;
|
|||||||
use rand::{thread_rng, Rng};
|
use rand::{thread_rng, Rng};
|
||||||
|
|
||||||
use crate::chat::{add_device_msg, add_device_msg_with_importance};
|
use crate::chat::{add_device_msg, add_device_msg_with_importance};
|
||||||
use crate::constants::{Viewtype, DC_ELLIPSIS, DC_OUTDATED_WARNING_DAYS};
|
use crate::constants::{DC_ELLIPSIS, DC_OUTDATED_WARNING_DAYS};
|
||||||
use crate::context::Context;
|
use crate::context::Context;
|
||||||
use crate::events::EventType;
|
use crate::events::EventType;
|
||||||
use crate::message::Message;
|
use crate::message::{Message, Viewtype};
|
||||||
use crate::provider::get_provider_update_timestamp;
|
use crate::provider::get_provider_update_timestamp;
|
||||||
use crate::stock_str;
|
use crate::stock_str;
|
||||||
|
|
||||||
|
|||||||
@@ -6,12 +6,11 @@ use serde::{Deserialize, Serialize};
|
|||||||
use std::collections::BTreeMap;
|
use std::collections::BTreeMap;
|
||||||
|
|
||||||
use crate::config::Config;
|
use crate::config::Config;
|
||||||
use crate::constants::Viewtype;
|
|
||||||
use crate::context::Context;
|
use crate::context::Context;
|
||||||
use crate::dc_tools::time;
|
use crate::dc_tools::time;
|
||||||
use crate::imap::{Imap, ImapActionResult};
|
use crate::imap::{Imap, ImapActionResult};
|
||||||
use crate::job::{self, Action, Job, Status};
|
use crate::job::{self, Action, Job, Status};
|
||||||
use crate::message::{Message, MsgId};
|
use crate::message::{Message, MsgId, Viewtype};
|
||||||
use crate::mimeparser::{MimeMessage, Part};
|
use crate::mimeparser::{MimeMessage, Part};
|
||||||
use crate::param::Params;
|
use crate::param::Params;
|
||||||
use crate::{job_try, stock_str, EventType};
|
use crate::{job_try, stock_str, EventType};
|
||||||
@@ -255,13 +254,15 @@ impl MimeMessage {
|
|||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use num_traits::FromPrimitive;
|
||||||
|
|
||||||
use crate::chat::send_msg;
|
use crate::chat::send_msg;
|
||||||
use crate::constants::Viewtype;
|
|
||||||
use crate::dc_receive_imf::dc_receive_imf_inner;
|
use crate::dc_receive_imf::dc_receive_imf_inner;
|
||||||
use crate::ephemeral::Timer;
|
use crate::ephemeral::Timer;
|
||||||
|
use crate::message::Viewtype;
|
||||||
use crate::test_utils::TestContext;
|
use crate::test_utils::TestContext;
|
||||||
use num_traits::FromPrimitive;
|
|
||||||
|
use super::*;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_downloadstate_values() {
|
fn test_downloadstate_values() {
|
||||||
|
|||||||
@@ -400,15 +400,14 @@ pub async fn ensure_secret_key_exists(context: &Context) -> Result<String> {
|
|||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
|
||||||
|
|
||||||
use crate::chat;
|
use crate::chat;
|
||||||
use crate::constants::Viewtype;
|
use crate::message::{Message, Viewtype};
|
||||||
use crate::message::Message;
|
|
||||||
use crate::param::Param;
|
use crate::param::Param;
|
||||||
use crate::peerstate::ToSave;
|
use crate::peerstate::ToSave;
|
||||||
use crate::test_utils::{bob_keypair, TestContext};
|
use crate::test_utils::{bob_keypair, TestContext};
|
||||||
|
|
||||||
|
use super::*;
|
||||||
|
|
||||||
mod ensure_secret_key_exists {
|
mod ensure_secret_key_exists {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
|
|||||||
@@ -67,14 +67,14 @@ use serde::{Deserialize, Serialize};
|
|||||||
|
|
||||||
use crate::chat::{send_msg, ChatId};
|
use crate::chat::{send_msg, ChatId};
|
||||||
use crate::constants::{
|
use crate::constants::{
|
||||||
Viewtype, DC_CHAT_ID_LAST_SPECIAL, DC_CHAT_ID_TRASH, DC_CONTACT_ID_DEVICE, DC_CONTACT_ID_SELF,
|
DC_CHAT_ID_LAST_SPECIAL, DC_CHAT_ID_TRASH, DC_CONTACT_ID_DEVICE, DC_CONTACT_ID_SELF,
|
||||||
};
|
};
|
||||||
use crate::contact::ContactId;
|
use crate::contact::ContactId;
|
||||||
use crate::context::Context;
|
use crate::context::Context;
|
||||||
use crate::dc_tools::time;
|
use crate::dc_tools::time;
|
||||||
use crate::download::MIN_DELETE_SERVER_AFTER;
|
use crate::download::MIN_DELETE_SERVER_AFTER;
|
||||||
use crate::events::EventType;
|
use crate::events::EventType;
|
||||||
use crate::message::{Message, MessageState, MsgId};
|
use crate::message::{Message, MessageState, MsgId, Viewtype};
|
||||||
use crate::mimeparser::SystemMessage;
|
use crate::mimeparser::SystemMessage;
|
||||||
use crate::stock_str;
|
use crate::stock_str;
|
||||||
use std::cmp::max;
|
use std::cmp::max;
|
||||||
|
|||||||
@@ -279,9 +279,9 @@ mod tests {
|
|||||||
use crate::chat;
|
use crate::chat;
|
||||||
use crate::chat::forward_msgs;
|
use crate::chat::forward_msgs;
|
||||||
use crate::config::Config;
|
use crate::config::Config;
|
||||||
use crate::constants::{Viewtype, DC_CONTACT_ID_SELF};
|
use crate::constants::DC_CONTACT_ID_SELF;
|
||||||
use crate::dc_receive_imf::dc_receive_imf;
|
use crate::dc_receive_imf::dc_receive_imf;
|
||||||
use crate::message::MessengerMessage;
|
use crate::message::{MessengerMessage, Viewtype};
|
||||||
use crate::test_utils::TestContext;
|
use crate::test_utils::TestContext;
|
||||||
|
|
||||||
#[async_std::test]
|
#[async_std::test]
|
||||||
|
|||||||
16
src/imap.rs
16
src/imap.rs
@@ -17,11 +17,10 @@ use async_std::channel::Receiver;
|
|||||||
use async_std::prelude::*;
|
use async_std::prelude::*;
|
||||||
use num_traits::FromPrimitive;
|
use num_traits::FromPrimitive;
|
||||||
|
|
||||||
use crate::chat;
|
use crate::chat::{self, ChatId, ChatIdBlocked};
|
||||||
use crate::chat::ChatId;
|
use crate::config::Config;
|
||||||
use crate::chat::ChatIdBlocked;
|
|
||||||
use crate::constants::{
|
use crate::constants::{
|
||||||
Blocked, Chattype, ShowEmails, Viewtype, DC_CONTACT_ID_SELF, DC_FETCH_EXISTING_MSGS_COUNT,
|
Blocked, Chattype, ShowEmails, DC_CONTACT_ID_SELF, DC_FETCH_EXISTING_MSGS_COUNT,
|
||||||
DC_FOLDERS_CONFIGURED_VERSION, DC_LP_AUTH_OAUTH2,
|
DC_FOLDERS_CONFIGURED_VERSION, DC_LP_AUTH_OAUTH2,
|
||||||
};
|
};
|
||||||
use crate::context::Context;
|
use crate::context::Context;
|
||||||
@@ -32,16 +31,17 @@ use crate::dc_tools::dc_create_id;
|
|||||||
use crate::events::EventType;
|
use crate::events::EventType;
|
||||||
use crate::headerdef::{HeaderDef, HeaderDefMap};
|
use crate::headerdef::{HeaderDef, HeaderDefMap};
|
||||||
use crate::job::{self, Action};
|
use crate::job::{self, Action};
|
||||||
use crate::login_param::{CertificateChecks, LoginParam, ServerLoginParam};
|
use crate::login_param::{
|
||||||
use crate::login_param::{ServerAddress, Socks5Config};
|
CertificateChecks, LoginParam, ServerAddress, ServerLoginParam, Socks5Config,
|
||||||
use crate::message::{self, Message, MessageState, MessengerMessage, MsgId};
|
};
|
||||||
|
use crate::message::{self, Message, MessageState, MessengerMessage, MsgId, Viewtype};
|
||||||
use crate::mimeparser;
|
use crate::mimeparser;
|
||||||
use crate::oauth2::dc_get_oauth2_access_token;
|
use crate::oauth2::dc_get_oauth2_access_token;
|
||||||
use crate::param::Params;
|
use crate::param::Params;
|
||||||
use crate::provider::Socket;
|
use crate::provider::Socket;
|
||||||
|
use crate::scheduler::connectivity::ConnectivityStore;
|
||||||
use crate::scheduler::InterruptInfo;
|
use crate::scheduler::InterruptInfo;
|
||||||
use crate::stock_str;
|
use crate::stock_str;
|
||||||
use crate::{config::Config, scheduler::connectivity::ConnectivityStore};
|
|
||||||
|
|
||||||
mod client;
|
mod client;
|
||||||
mod idle;
|
mod idle;
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ use rand::{thread_rng, Rng};
|
|||||||
use crate::blob::BlobObject;
|
use crate::blob::BlobObject;
|
||||||
use crate::chat::{self, delete_and_reset_all_device_msgs, ChatId};
|
use crate::chat::{self, delete_and_reset_all_device_msgs, ChatId};
|
||||||
use crate::config::Config;
|
use crate::config::Config;
|
||||||
use crate::constants::{Viewtype, DC_CONTACT_ID_SELF};
|
use crate::constants::DC_CONTACT_ID_SELF;
|
||||||
use crate::context::Context;
|
use crate::context::Context;
|
||||||
use crate::dc_tools::{
|
use crate::dc_tools::{
|
||||||
dc_create_folder, dc_delete_file, dc_delete_files_in_dir, dc_get_filesuffix_lc,
|
dc_create_folder, dc_delete_file, dc_delete_files_in_dir, dc_get_filesuffix_lc,
|
||||||
@@ -26,7 +26,7 @@ use crate::e2ee;
|
|||||||
use crate::events::EventType;
|
use crate::events::EventType;
|
||||||
use crate::key::{self, DcKey, DcSecretKey, SignedPublicKey, SignedSecretKey};
|
use crate::key::{self, DcKey, DcSecretKey, SignedPublicKey, SignedSecretKey};
|
||||||
use crate::log::LogExt;
|
use crate::log::LogExt;
|
||||||
use crate::message::{Message, MsgId};
|
use crate::message::{Message, MsgId, Viewtype};
|
||||||
use crate::mimeparser::SystemMessage;
|
use crate::mimeparser::SystemMessage;
|
||||||
use crate::param::Param;
|
use crate::param::Param;
|
||||||
use crate::pgp;
|
use crate::pgp;
|
||||||
|
|||||||
@@ -7,13 +7,13 @@ use quick_xml::events::{BytesEnd, BytesStart, BytesText};
|
|||||||
|
|
||||||
use crate::chat::{self, ChatId};
|
use crate::chat::{self, ChatId};
|
||||||
use crate::config::Config;
|
use crate::config::Config;
|
||||||
use crate::constants::{Viewtype, DC_CONTACT_ID_SELF};
|
use crate::constants::DC_CONTACT_ID_SELF;
|
||||||
use crate::contact::ContactId;
|
use crate::contact::ContactId;
|
||||||
use crate::context::Context;
|
use crate::context::Context;
|
||||||
use crate::dc_tools::time;
|
use crate::dc_tools::time;
|
||||||
use crate::events::EventType;
|
use crate::events::EventType;
|
||||||
use crate::job::{self, Job};
|
use crate::job::{self, Job};
|
||||||
use crate::message::{Message, MsgId};
|
use crate::message::{Message, MsgId, Viewtype};
|
||||||
use crate::mimeparser::SystemMessage;
|
use crate::mimeparser::SystemMessage;
|
||||||
use crate::param::Params;
|
use crate::param::Params;
|
||||||
use crate::stock_str;
|
use crate::stock_str;
|
||||||
|
|||||||
134
src/message.rs
134
src/message.rs
@@ -10,8 +10,8 @@ use serde::{Deserialize, Serialize};
|
|||||||
|
|
||||||
use crate::chat::{self, Chat, ChatId};
|
use crate::chat::{self, Chat, ChatId};
|
||||||
use crate::constants::{
|
use crate::constants::{
|
||||||
Blocked, Chattype, VideochatType, Viewtype, DC_CHAT_ID_TRASH, DC_CONTACT_ID_INFO,
|
Blocked, Chattype, VideochatType, DC_CHAT_ID_TRASH, DC_CONTACT_ID_INFO, DC_CONTACT_ID_SELF,
|
||||||
DC_CONTACT_ID_SELF, DC_DESIRED_TEXT_LEN, DC_MSG_ID_LAST_SPECIAL,
|
DC_DESIRED_TEXT_LEN, DC_MSG_ID_LAST_SPECIAL,
|
||||||
};
|
};
|
||||||
use crate::contact::{Contact, ContactId, Origin};
|
use crate::contact::{Contact, ContactId, Origin};
|
||||||
use crate::context::Context;
|
use crate::context::Context;
|
||||||
@@ -386,7 +386,7 @@ impl Message {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn try_calc_and_set_dimensions(&mut self, context: &Context) -> Result<()> {
|
pub async fn try_calc_and_set_dimensions(&mut self, context: &Context) -> Result<()> {
|
||||||
if chat::msgtype_has_file(self.viewtype) {
|
if self.viewtype.has_file() {
|
||||||
let file_param = self.param.get_path(Param::File, context)?;
|
let file_param = self.param.get_path(Param::File, context)?;
|
||||||
if let Some(path_and_filename) = file_param {
|
if let Some(path_and_filename) = file_param {
|
||||||
if (self.viewtype == Viewtype::Image || self.viewtype == Viewtype::Gif)
|
if (self.viewtype == Viewtype::Image || self.viewtype == Viewtype::Gif)
|
||||||
@@ -619,7 +619,7 @@ impl Message {
|
|||||||
/// copied to the blobdir. Thus those attachments need to be
|
/// copied to the blobdir. Thus those attachments need to be
|
||||||
/// created immediately in the blobdir with a valid filename.
|
/// created immediately in the blobdir with a valid filename.
|
||||||
pub fn is_increation(&self) -> bool {
|
pub fn is_increation(&self) -> bool {
|
||||||
chat::msgtype_has_file(self.viewtype) && self.state == MessageState::OutPreparing
|
self.viewtype.has_file() && self.state == MessageState::OutPreparing
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn is_setupmessage(&self) -> bool {
|
pub fn is_setupmessage(&self) -> bool {
|
||||||
@@ -1700,9 +1700,106 @@ pub(crate) async fn rfc724_mid_exists(
|
|||||||
Ok(res)
|
Ok(res)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// How a message is primarily displayed.
|
||||||
|
#[derive(
|
||||||
|
Debug,
|
||||||
|
Display,
|
||||||
|
Clone,
|
||||||
|
Copy,
|
||||||
|
PartialEq,
|
||||||
|
Eq,
|
||||||
|
FromPrimitive,
|
||||||
|
ToPrimitive,
|
||||||
|
FromSql,
|
||||||
|
ToSql,
|
||||||
|
Serialize,
|
||||||
|
Deserialize,
|
||||||
|
)]
|
||||||
|
#[repr(u32)]
|
||||||
|
pub enum Viewtype {
|
||||||
|
Unknown = 0,
|
||||||
|
|
||||||
|
/// Text message.
|
||||||
|
/// The text of the message is set using dc_msg_set_text()
|
||||||
|
/// and retrieved with dc_msg_get_text().
|
||||||
|
Text = 10,
|
||||||
|
|
||||||
|
/// Image message.
|
||||||
|
/// If the image is an animated GIF, the type DC_MSG_GIF should be used.
|
||||||
|
/// File, width and height are set via dc_msg_set_file(), dc_msg_set_dimension
|
||||||
|
/// and retrieved via dc_msg_set_file(), dc_msg_set_dimension().
|
||||||
|
Image = 20,
|
||||||
|
|
||||||
|
/// Animated GIF message.
|
||||||
|
/// File, width and height are set via dc_msg_set_file(), dc_msg_set_dimension()
|
||||||
|
/// and retrieved via dc_msg_get_file(), dc_msg_get_width(), dc_msg_get_height().
|
||||||
|
Gif = 21,
|
||||||
|
|
||||||
|
/// Message containing a sticker, similar to image.
|
||||||
|
/// If possible, the ui should display the image without borders in a transparent way.
|
||||||
|
/// A click on a sticker will offer to install the sticker set in some future.
|
||||||
|
Sticker = 23,
|
||||||
|
|
||||||
|
/// Message containing an Audio file.
|
||||||
|
/// File and duration are set via dc_msg_set_file(), dc_msg_set_duration()
|
||||||
|
/// and retrieved via dc_msg_get_file(), dc_msg_get_duration().
|
||||||
|
Audio = 40,
|
||||||
|
|
||||||
|
/// A voice message that was directly recorded by the user.
|
||||||
|
/// For all other audio messages, the type #DC_MSG_AUDIO should be used.
|
||||||
|
/// File and duration are set via dc_msg_set_file(), dc_msg_set_duration()
|
||||||
|
/// and retrieved via dc_msg_get_file(), dc_msg_get_duration()
|
||||||
|
Voice = 41,
|
||||||
|
|
||||||
|
/// Video messages.
|
||||||
|
/// File, width, height and durarion
|
||||||
|
/// are set via dc_msg_set_file(), dc_msg_set_dimension(), dc_msg_set_duration()
|
||||||
|
/// and retrieved via
|
||||||
|
/// dc_msg_get_file(), dc_msg_get_width(),
|
||||||
|
/// dc_msg_get_height(), dc_msg_get_duration().
|
||||||
|
Video = 50,
|
||||||
|
|
||||||
|
/// Message containing any file, eg. a PDF.
|
||||||
|
/// The file is set via dc_msg_set_file()
|
||||||
|
/// and retrieved via dc_msg_get_file().
|
||||||
|
File = 60,
|
||||||
|
|
||||||
|
/// Message is an invitation to a videochat.
|
||||||
|
VideochatInvitation = 70,
|
||||||
|
|
||||||
|
/// Message is an webxdc instance.
|
||||||
|
Webxdc = 80,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Default for Viewtype {
|
||||||
|
fn default() -> Self {
|
||||||
|
Viewtype::Unknown
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Viewtype {
|
||||||
|
/// Whether a message with this [`Viewtype`] should have a file attachment.
|
||||||
|
pub fn has_file(&self) -> bool {
|
||||||
|
match self {
|
||||||
|
Viewtype::Unknown => false,
|
||||||
|
Viewtype::Text => false,
|
||||||
|
Viewtype::Image => true,
|
||||||
|
Viewtype::Gif => true,
|
||||||
|
Viewtype::Sticker => true,
|
||||||
|
Viewtype::Audio => true,
|
||||||
|
Viewtype::Voice => true,
|
||||||
|
Viewtype::Video => true,
|
||||||
|
Viewtype::File => true,
|
||||||
|
Viewtype::VideochatInvitation => false,
|
||||||
|
Viewtype::Webxdc => true,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use num_traits::FromPrimitive;
|
||||||
|
|
||||||
use crate::chat::{marknoticed_chat, ChatItem};
|
use crate::chat::{marknoticed_chat, ChatItem};
|
||||||
use crate::chatlist::Chatlist;
|
use crate::chatlist::Chatlist;
|
||||||
use crate::constants::DC_CONTACT_ID_DEVICE;
|
use crate::constants::DC_CONTACT_ID_DEVICE;
|
||||||
@@ -1710,6 +1807,8 @@ mod tests {
|
|||||||
use crate::test_utils as test;
|
use crate::test_utils as test;
|
||||||
use crate::test_utils::TestContext;
|
use crate::test_utils::TestContext;
|
||||||
|
|
||||||
|
use super::*;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_guess_msgtype_from_suffix() {
|
fn test_guess_msgtype_from_suffix() {
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
@@ -2154,4 +2253,29 @@ mod tests {
|
|||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_viewtype_derive_display_works_as_expected() {
|
||||||
|
assert_eq!(format!("{}", Viewtype::Audio), "Audio");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_viewtype_values() {
|
||||||
|
// values may be written to disk and must not change
|
||||||
|
assert_eq!(Viewtype::Unknown, Viewtype::default());
|
||||||
|
assert_eq!(Viewtype::Unknown, Viewtype::from_i32(0).unwrap());
|
||||||
|
assert_eq!(Viewtype::Text, Viewtype::from_i32(10).unwrap());
|
||||||
|
assert_eq!(Viewtype::Image, Viewtype::from_i32(20).unwrap());
|
||||||
|
assert_eq!(Viewtype::Gif, Viewtype::from_i32(21).unwrap());
|
||||||
|
assert_eq!(Viewtype::Sticker, Viewtype::from_i32(23).unwrap());
|
||||||
|
assert_eq!(Viewtype::Audio, Viewtype::from_i32(40).unwrap());
|
||||||
|
assert_eq!(Viewtype::Voice, Viewtype::from_i32(41).unwrap());
|
||||||
|
assert_eq!(Viewtype::Video, Viewtype::from_i32(50).unwrap());
|
||||||
|
assert_eq!(Viewtype::File, Viewtype::from_i32(60).unwrap());
|
||||||
|
assert_eq!(
|
||||||
|
Viewtype::VideochatInvitation,
|
||||||
|
Viewtype::from_i32(70).unwrap()
|
||||||
|
);
|
||||||
|
assert_eq!(Viewtype::Webxdc, Viewtype::from_i32(80).unwrap());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,9 +7,9 @@ use chrono::TimeZone;
|
|||||||
use lettre_email::{mime, Address, Header, MimeMultipartType, PartBuilder};
|
use lettre_email::{mime, Address, Header, MimeMultipartType, PartBuilder};
|
||||||
|
|
||||||
use crate::blob::BlobObject;
|
use crate::blob::BlobObject;
|
||||||
use crate::chat::{self, Chat};
|
use crate::chat::Chat;
|
||||||
use crate::config::Config;
|
use crate::config::Config;
|
||||||
use crate::constants::{Chattype, Viewtype, DC_FROM_HANDSHAKE};
|
use crate::constants::{Chattype, DC_FROM_HANDSHAKE};
|
||||||
use crate::contact::Contact;
|
use crate::contact::Contact;
|
||||||
use crate::context::{get_version_str, Context};
|
use crate::context::{get_version_str, Context};
|
||||||
use crate::dc_tools::IsNoneOrEmpty;
|
use crate::dc_tools::IsNoneOrEmpty;
|
||||||
@@ -22,7 +22,7 @@ use crate::ephemeral::Timer as EphemeralTimer;
|
|||||||
use crate::format_flowed::{format_flowed, format_flowed_quote};
|
use crate::format_flowed::{format_flowed, format_flowed_quote};
|
||||||
use crate::html::new_html_mimepart;
|
use crate::html::new_html_mimepart;
|
||||||
use crate::location;
|
use crate::location;
|
||||||
use crate::message::{self, Message, MsgId};
|
use crate::message::{self, Message, MsgId, Viewtype};
|
||||||
use crate::mimeparser::SystemMessage;
|
use crate::mimeparser::SystemMessage;
|
||||||
use crate::param::Param;
|
use crate::param::Param;
|
||||||
use crate::peerstate::{Peerstate, PeerstateVerifiedStatus};
|
use crate::peerstate::{Peerstate, PeerstateVerifiedStatus};
|
||||||
@@ -1140,7 +1140,7 @@ impl<'a> MimeFactory<'a> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// add attachment part
|
// add attachment part
|
||||||
if chat::msgtype_has_file(self.msg.viewtype) {
|
if self.msg.viewtype.has_file() {
|
||||||
if !is_file_size_okay(context, self.msg).await? {
|
if !is_file_size_okay(context, self.msg).await? {
|
||||||
bail!(
|
bail!(
|
||||||
"Message exceeds the recommended {} MB.",
|
"Message exceeds the recommended {} MB.",
|
||||||
@@ -1452,12 +1452,13 @@ fn maybe_encode_words(words: &str) -> String {
|
|||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use async_std::fs::File;
|
||||||
use async_std::prelude::*;
|
use async_std::prelude::*;
|
||||||
|
use mailparse::{addrparse_header, MailHeaderMap};
|
||||||
|
|
||||||
use crate::chat::ChatId;
|
use crate::chat::ChatId;
|
||||||
use crate::chat::{
|
use crate::chat::{
|
||||||
add_contact_to_chat, create_group_chat, remove_contact_from_chat, send_text_msg,
|
self, add_contact_to_chat, create_group_chat, remove_contact_from_chat, send_text_msg,
|
||||||
ProtectionStatus,
|
ProtectionStatus,
|
||||||
};
|
};
|
||||||
use crate::chatlist::Chatlist;
|
use crate::chatlist::Chatlist;
|
||||||
@@ -1466,9 +1467,7 @@ mod tests {
|
|||||||
use crate::mimeparser::MimeMessage;
|
use crate::mimeparser::MimeMessage;
|
||||||
use crate::test_utils::{get_chat_msg, TestContext};
|
use crate::test_utils::{get_chat_msg, TestContext};
|
||||||
|
|
||||||
use async_std::fs::File;
|
use super::*;
|
||||||
use mailparse::{addrparse_header, MailHeaderMap};
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_render_email_address() {
|
fn test_render_email_address() {
|
||||||
let display_name = "ä space";
|
let display_name = "ä space";
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ use once_cell::sync::Lazy;
|
|||||||
|
|
||||||
use crate::aheader::Aheader;
|
use crate::aheader::Aheader;
|
||||||
use crate::blob::BlobObject;
|
use crate::blob::BlobObject;
|
||||||
use crate::constants::{Viewtype, DC_DESIRED_TEXT_LEN, DC_ELLIPSIS};
|
use crate::constants::{DC_DESIRED_TEXT_LEN, DC_ELLIPSIS};
|
||||||
use crate::contact::{addr_normalize, ContactId};
|
use crate::contact::{addr_normalize, ContactId};
|
||||||
use crate::context::Context;
|
use crate::context::Context;
|
||||||
use crate::dc_tools::{dc_get_filemeta, dc_truncate, parse_receive_headers};
|
use crate::dc_tools::{dc_get_filemeta, dc_truncate, parse_receive_headers};
|
||||||
@@ -23,7 +23,7 @@ use crate::format_flowed::unformat_flowed;
|
|||||||
use crate::headerdef::{HeaderDef, HeaderDefMap};
|
use crate::headerdef::{HeaderDef, HeaderDefMap};
|
||||||
use crate::key::Fingerprint;
|
use crate::key::Fingerprint;
|
||||||
use crate::location;
|
use crate::location;
|
||||||
use crate::message;
|
use crate::message::{self, Viewtype};
|
||||||
use crate::param::{Param, Params};
|
use crate::param::{Param, Params};
|
||||||
use crate::peerstate::Peerstate;
|
use crate::peerstate::Peerstate;
|
||||||
use crate::simplify::simplify;
|
use crate::simplify::simplify;
|
||||||
|
|||||||
@@ -6,13 +6,12 @@ use std::collections::BTreeMap;
|
|||||||
|
|
||||||
use crate::chat::add_device_msg_with_importance;
|
use crate::chat::add_device_msg_with_importance;
|
||||||
use crate::config::Config;
|
use crate::config::Config;
|
||||||
use crate::constants::Viewtype;
|
|
||||||
use crate::context::Context;
|
use crate::context::Context;
|
||||||
use crate::dc_tools::time;
|
use crate::dc_tools::time;
|
||||||
use crate::imap::scan_folders::get_watched_folders;
|
use crate::imap::scan_folders::get_watched_folders;
|
||||||
use crate::imap::Imap;
|
use crate::imap::Imap;
|
||||||
use crate::job::{Action, Status};
|
use crate::job::{Action, Status};
|
||||||
use crate::message::Message;
|
use crate::message::{Message, Viewtype};
|
||||||
use crate::param::Params;
|
use crate::param::Params;
|
||||||
use crate::{job, stock_str, EventType};
|
use crate::{job, stock_str, EventType};
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ use percent_encoding::{utf8_percent_encode, AsciiSet, NON_ALPHANUMERIC};
|
|||||||
use crate::aheader::EncryptPreference;
|
use crate::aheader::EncryptPreference;
|
||||||
use crate::chat::{self, Chat, ChatId, ChatIdBlocked};
|
use crate::chat::{self, Chat, ChatId, ChatIdBlocked};
|
||||||
use crate::config::Config;
|
use crate::config::Config;
|
||||||
use crate::constants::{Blocked, Viewtype, DC_CONTACT_ID_LAST_SPECIAL};
|
use crate::constants::{Blocked, DC_CONTACT_ID_LAST_SPECIAL};
|
||||||
use crate::contact::{Contact, ContactId, Origin, VerifiedStatus};
|
use crate::contact::{Contact, ContactId, Origin, VerifiedStatus};
|
||||||
use crate::context::Context;
|
use crate::context::Context;
|
||||||
use crate::dc_tools::time;
|
use crate::dc_tools::time;
|
||||||
@@ -16,7 +16,7 @@ use crate::e2ee::ensure_secret_key_exists;
|
|||||||
use crate::events::EventType;
|
use crate::events::EventType;
|
||||||
use crate::headerdef::HeaderDef;
|
use crate::headerdef::HeaderDef;
|
||||||
use crate::key::{DcKey, Fingerprint, SignedPublicKey};
|
use crate::key::{DcKey, Fingerprint, SignedPublicKey};
|
||||||
use crate::message::Message;
|
use crate::message::{Message, Viewtype};
|
||||||
use crate::mimeparser::{MimeMessage, SystemMessage};
|
use crate::mimeparser::{MimeMessage, SystemMessage};
|
||||||
use crate::param::Param;
|
use crate::param::Param;
|
||||||
use crate::peerstate::{Peerstate, PeerstateKeyType, PeerstateVerifiedStatus, ToSave};
|
use crate::peerstate::{Peerstate, PeerstateKeyType, PeerstateVerifiedStatus, ToSave};
|
||||||
|
|||||||
@@ -11,13 +11,12 @@ use anyhow::{Error, Result};
|
|||||||
use rusqlite::Connection;
|
use rusqlite::Connection;
|
||||||
|
|
||||||
use crate::chat::{self, ChatId};
|
use crate::chat::{self, ChatId};
|
||||||
use crate::constants::Viewtype;
|
|
||||||
use crate::contact::{Contact, Origin};
|
use crate::contact::{Contact, Origin};
|
||||||
use crate::context::Context;
|
use crate::context::Context;
|
||||||
use crate::events::EventType;
|
use crate::events::EventType;
|
||||||
use crate::headerdef::HeaderDef;
|
use crate::headerdef::HeaderDef;
|
||||||
use crate::key::{DcKey, SignedPublicKey};
|
use crate::key::{DcKey, SignedPublicKey};
|
||||||
use crate::message::Message;
|
use crate::message::{Message, Viewtype};
|
||||||
use crate::mimeparser::{MimeMessage, SystemMessage};
|
use crate::mimeparser::{MimeMessage, SystemMessage};
|
||||||
use crate::param::Param;
|
use crate::param::Param;
|
||||||
use crate::sql::Sql;
|
use crate::sql::Sql;
|
||||||
|
|||||||
@@ -15,11 +15,11 @@ use rusqlite::{config::DbConfig, Connection, OpenFlags};
|
|||||||
use crate::blob::BlobObject;
|
use crate::blob::BlobObject;
|
||||||
use crate::chat::{add_device_msg, update_device_icon, update_saved_messages_icon};
|
use crate::chat::{add_device_msg, update_device_icon, update_saved_messages_icon};
|
||||||
use crate::config::Config;
|
use crate::config::Config;
|
||||||
use crate::constants::{Viewtype, DC_CHAT_ID_TRASH};
|
use crate::constants::DC_CHAT_ID_TRASH;
|
||||||
use crate::context::Context;
|
use crate::context::Context;
|
||||||
use crate::dc_tools::{dc_delete_file, time};
|
use crate::dc_tools::{dc_delete_file, time};
|
||||||
use crate::ephemeral::start_ephemeral_timers;
|
use crate::ephemeral::start_ephemeral_timers;
|
||||||
use crate::message::Message;
|
use crate::message::{Message, Viewtype};
|
||||||
use crate::param::{Param, Params};
|
use crate::param::{Param, Params};
|
||||||
use crate::peerstate::{deduplicate_peerstates, Peerstate};
|
use crate::peerstate::{deduplicate_peerstates, Peerstate};
|
||||||
use crate::stock_str;
|
use crate::stock_str;
|
||||||
|
|||||||
@@ -10,11 +10,11 @@ use strum_macros::EnumProperty;
|
|||||||
use crate::blob::BlobObject;
|
use crate::blob::BlobObject;
|
||||||
use crate::chat::{self, Chat, ChatId, ProtectionStatus};
|
use crate::chat::{self, Chat, ChatId, ProtectionStatus};
|
||||||
use crate::config::Config;
|
use crate::config::Config;
|
||||||
use crate::constants::{Viewtype, DC_CONTACT_ID_SELF};
|
use crate::constants::DC_CONTACT_ID_SELF;
|
||||||
use crate::contact::{Contact, ContactId, Origin};
|
use crate::contact::{Contact, ContactId, Origin};
|
||||||
use crate::context::Context;
|
use crate::context::Context;
|
||||||
use crate::dc_tools::dc_timestamp_to_str;
|
use crate::dc_tools::dc_timestamp_to_str;
|
||||||
use crate::message::Message;
|
use crate::message::{Message, Viewtype};
|
||||||
use crate::param::Param;
|
use crate::param::Param;
|
||||||
use humansize::{file_size_opts, FileSize};
|
use humansize::{file_size_opts, FileSize};
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
//! # Message summary for chatlist.
|
//! # Message summary for chatlist.
|
||||||
|
|
||||||
use crate::chat::Chat;
|
use crate::chat::Chat;
|
||||||
use crate::constants::{Chattype, Viewtype, DC_CONTACT_ID_SELF};
|
use crate::constants::{Chattype, DC_CONTACT_ID_SELF};
|
||||||
use crate::contact::Contact;
|
use crate::contact::Contact;
|
||||||
use crate::context::Context;
|
use crate::context::Context;
|
||||||
use crate::dc_tools::dc_truncate;
|
use crate::dc_tools::dc_truncate;
|
||||||
use crate::message::{Message, MessageState};
|
use crate::message::{Message, MessageState, Viewtype};
|
||||||
use crate::mimeparser::SystemMessage;
|
use crate::mimeparser::SystemMessage;
|
||||||
use crate::param::Param;
|
use crate::param::Param;
|
||||||
use crate::stock_str;
|
use crate::stock_str;
|
||||||
|
|||||||
@@ -2,10 +2,10 @@
|
|||||||
|
|
||||||
use crate::chat::{Chat, ChatId};
|
use crate::chat::{Chat, ChatId};
|
||||||
use crate::config::Config;
|
use crate::config::Config;
|
||||||
use crate::constants::{Blocked, Viewtype, DC_CONTACT_ID_SELF};
|
use crate::constants::{Blocked, DC_CONTACT_ID_SELF};
|
||||||
use crate::context::Context;
|
use crate::context::Context;
|
||||||
use crate::dc_tools::time;
|
use crate::dc_tools::time;
|
||||||
use crate::message::{Message, MsgId};
|
use crate::message::{Message, MsgId, Viewtype};
|
||||||
use crate::mimeparser::SystemMessage;
|
use crate::mimeparser::SystemMessage;
|
||||||
use crate::param::Param;
|
use crate::param::Param;
|
||||||
use crate::sync::SyncData::{AddQrToken, DeleteQrToken};
|
use crate::sync::SyncData::{AddQrToken, DeleteQrToken};
|
||||||
|
|||||||
@@ -22,14 +22,14 @@ use crate::chat::{self, Chat, ChatId};
|
|||||||
use crate::chatlist::Chatlist;
|
use crate::chatlist::Chatlist;
|
||||||
use crate::config::Config;
|
use crate::config::Config;
|
||||||
use crate::constants::Chattype;
|
use crate::constants::Chattype;
|
||||||
use crate::constants::{Viewtype, DC_CONTACT_ID_SELF, DC_MSG_ID_DAYMARKER, DC_MSG_ID_MARKER1};
|
use crate::constants::{DC_CONTACT_ID_SELF, DC_MSG_ID_DAYMARKER, DC_MSG_ID_MARKER1};
|
||||||
use crate::contact::{Contact, Modifier, Origin};
|
use crate::contact::{Contact, Modifier, Origin};
|
||||||
use crate::context::Context;
|
use crate::context::Context;
|
||||||
use crate::dc_receive_imf::dc_receive_imf;
|
use crate::dc_receive_imf::dc_receive_imf;
|
||||||
use crate::dc_tools::EmailAddress;
|
use crate::dc_tools::EmailAddress;
|
||||||
use crate::events::{Event, EventType};
|
use crate::events::{Event, EventType};
|
||||||
use crate::key::{self, DcKey, KeyPair, KeyPairUse};
|
use crate::key::{self, DcKey, KeyPair, KeyPairUse};
|
||||||
use crate::message::{update_msg_state, Message, MessageState, MsgId};
|
use crate::message::{update_msg_state, Message, MessageState, MsgId, Viewtype};
|
||||||
use crate::mimeparser::MimeMessage;
|
use crate::mimeparser::MimeMessage;
|
||||||
|
|
||||||
#[allow(non_upper_case_globals)]
|
#[allow(non_upper_case_globals)]
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
//! # Handle webxdc messages.
|
//! # Handle webxdc messages.
|
||||||
|
|
||||||
use crate::chat::Chat;
|
use crate::chat::Chat;
|
||||||
use crate::constants::Viewtype;
|
|
||||||
use crate::context::Context;
|
use crate::context::Context;
|
||||||
use crate::dc_tools::{dc_create_smeared_timestamp, dc_open_file_std};
|
use crate::dc_tools::{dc_create_smeared_timestamp, dc_open_file_std};
|
||||||
use crate::message::{Message, MessageState, MsgId};
|
use crate::message::{Message, MessageState, MsgId, Viewtype};
|
||||||
use crate::mimeparser::SystemMessage;
|
use crate::mimeparser::SystemMessage;
|
||||||
use crate::param::Param;
|
use crate::param::Param;
|
||||||
use crate::{chat, EventType};
|
use crate::{chat, EventType};
|
||||||
|
|||||||
Reference in New Issue
Block a user