1#![allow(missing_docs)]
4
5use std::sync::LazyLock;
6
7use deltachat_derive::{FromSql, ToSql};
8use percent_encoding::{AsciiSet, NON_ALPHANUMERIC};
9use serde::{Deserialize, Serialize};
10
11use crate::chat::ChatId;
12
13pub static DC_VERSION_STR: LazyLock<String> =
14 LazyLock::new(|| env!("CARGO_PKG_VERSION").to_string());
15
16pub(crate) const NON_ALPHANUMERIC_WITHOUT_DOT: &AsciiSet = &NON_ALPHANUMERIC.remove(b'.');
18
19#[derive(
20 Debug,
21 Default,
22 Display,
23 Clone,
24 Copy,
25 PartialEq,
26 Eq,
27 FromPrimitive,
28 ToPrimitive,
29 FromSql,
30 ToSql,
31 Serialize,
32 Deserialize,
33)]
34#[repr(i8)]
35pub enum Blocked {
36 #[default]
37 Not = 0,
38 Yes = 1,
39 Request = 2,
40}
41
42#[derive(
43 Debug, Default, Display, Clone, Copy, PartialEq, Eq, FromPrimitive, ToPrimitive, FromSql, ToSql,
44)]
45#[repr(u8)]
46pub enum ShowEmails {
47 Off = 0,
48 AcceptedContacts = 1,
49 #[default] All = 2,
51}
52
53#[derive(
54 Debug, Default, Display, Clone, Copy, PartialEq, Eq, FromPrimitive, ToPrimitive, FromSql, ToSql,
55)]
56#[repr(u8)]
57pub enum MediaQuality {
58 #[default] Balanced = 0,
60 Worse = 1,
61}
62
63#[derive(
65 Debug, Default, Display, Clone, Copy, PartialEq, Eq, FromPrimitive, ToPrimitive, FromSql, ToSql,
66)]
67#[repr(i8)]
68pub enum VideochatType {
69 #[default]
71 Unknown = 0,
72
73 BasicWebrtc = 1,
75
76 Jitsi = 2,
78}
79
80pub const DC_HANDSHAKE_CONTINUE_NORMAL_PROCESSING: i32 = 0x01;
81pub const DC_HANDSHAKE_STOP_NORMAL_PROCESSING: i32 = 0x02;
82pub const DC_HANDSHAKE_ADD_DELETE_JOB: i32 = 0x04;
83
84pub(crate) const DC_FROM_HANDSHAKE: i32 = 0x01;
85
86pub const DC_GCL_ARCHIVED_ONLY: usize = 0x01;
87pub const DC_GCL_NO_SPECIALS: usize = 0x02;
88pub const DC_GCL_ADD_ALLDONE_HINT: usize = 0x04;
89pub const DC_GCL_FOR_FORWARDING: usize = 0x08;
90
91pub const DC_GCL_ADD_SELF: u32 = 0x02;
92pub const DC_GCL_ADDRESS: u32 = 0x04;
93
94pub(crate) const DC_RESEND_USER_AVATAR_DAYS: i64 = 14;
96
97pub(crate) const DC_OUTDATED_WARNING_DAYS: i64 = 365;
102
103pub const DC_CHAT_ID_TRASH: ChatId = ChatId::new(3);
105pub const DC_CHAT_ID_ARCHIVED_LINK: ChatId = ChatId::new(6);
107pub const DC_CHAT_ID_ALLDONE_HINT: ChatId = ChatId::new(7);
109pub const DC_CHAT_ID_LAST_SPECIAL: ChatId = ChatId::new(9);
111
112#[derive(
114 Debug,
115 Display,
116 Clone,
117 Copy,
118 PartialEq,
119 Eq,
120 FromPrimitive,
121 ToPrimitive,
122 FromSql,
123 ToSql,
124 IntoStaticStr,
125 Serialize,
126 Deserialize,
127)]
128#[repr(u32)]
129pub enum Chattype {
130 Single = 100,
134
135 Group = 120,
139
140 Mailinglist = 140,
143
144 OutBroadcast = 160,
156
157 InBroadcast = 165,
170}
171
172pub const DC_MSG_ID_DAYMARKER: u32 = 9;
173pub const DC_MSG_ID_LAST_SPECIAL: u32 = 9;
174
175pub(crate) const DC_ELLIPSIS: &str = "[...]";
177pub const DC_DESIRED_TEXT_LINES: usize = 38;
180pub const DC_DESIRED_TEXT_LINE_LEN: usize = 100;
182
183pub const DC_DESIRED_TEXT_LEN: usize = DC_DESIRED_TEXT_LINE_LEN * DC_DESIRED_TEXT_LINES;
192
193pub const DC_LP_AUTH_OAUTH2: i32 = 0x2;
204
205pub const DC_LP_AUTH_NORMAL: i32 = 0x4;
208
209pub const DC_LP_AUTH_FLAGS: i32 = DC_LP_AUTH_OAUTH2 | DC_LP_AUTH_NORMAL;
211
212pub const BALANCED_IMAGE_BYTES: usize = 500_000;
214pub const WORSE_IMAGE_BYTES: usize = 130_000;
215
216pub(crate) const BALANCED_AVATAR_SIZE: u32 = 512;
218pub(crate) const BALANCED_AVATAR_BYTES: usize = 60_000;
219pub(crate) const WORSE_AVATAR_SIZE: u32 = 128;
220pub(crate) const WORSE_AVATAR_BYTES: usize = 20_000; pub const BALANCED_IMAGE_SIZE: u32 = 1280;
224pub const WORSE_IMAGE_SIZE: u32 = 640;
225
226pub const MAX_RCVD_IMAGE_PIXELS: u32 = 50_000_000;
229
230pub(crate) const DC_FOLDERS_CONFIGURED_KEY: &str = "folders_configured";
232pub(crate) const DC_FOLDERS_CONFIGURED_VERSION: i32 = 5;
234
235pub(crate) const DEFAULT_MAX_SMTP_RCPT_TO: usize = 50;
239
240pub(crate) const DC_BACKGROUND_FETCH_QUOTA_CHECK_RATELIMIT: u64 = 12 * 60 * 60; pub(crate) const TIMESTAMP_SENT_TOLERANCE: i64 = 60;
246
247pub(crate) const EDITED_PREFIX: &str = "✏️";
250
251pub(crate) const ASM_SUBJECT: &str = "Autocrypt Setup Message";
254pub(crate) const ASM_BODY: &str = "This is the Autocrypt Setup Message \
255 used to transfer your end-to-end setup between clients.
256
257 To decrypt and use your setup, \
258 open the message in an Autocrypt-compliant client \
259 and enter the setup code presented on the generating device.
260
261 If you see this message in a chatmail client (Delta Chat, Arcane Chat, Delta Touch ...), \
262 use \"Settings / Add Second Device\" instead.";
263
264pub(crate) const HOUSEKEEPING_PERIOD: i64 = 24 * 60 * 60;
266
267#[cfg(test)]
268mod tests {
269 use num_traits::FromPrimitive;
270
271 use super::*;
272
273 #[test]
274 fn test_chattype_values() {
275 assert_eq!(Chattype::Single, Chattype::from_i32(100).unwrap());
277 assert_eq!(Chattype::Group, Chattype::from_i32(120).unwrap());
278 assert_eq!(Chattype::Mailinglist, Chattype::from_i32(140).unwrap());
279 assert_eq!(Chattype::OutBroadcast, Chattype::from_i32(160).unwrap());
280 }
281
282 #[test]
283 fn test_showemails_values() {
284 assert_eq!(ShowEmails::All, ShowEmails::default());
286 assert_eq!(ShowEmails::Off, ShowEmails::from_i32(0).unwrap());
287 assert_eq!(
288 ShowEmails::AcceptedContacts,
289 ShowEmails::from_i32(1).unwrap()
290 );
291 assert_eq!(ShowEmails::All, ShowEmails::from_i32(2).unwrap());
292 }
293
294 #[test]
295 fn test_blocked_values() {
296 assert_eq!(Blocked::Not, Blocked::default());
298 assert_eq!(Blocked::Not, Blocked::from_i32(0).unwrap());
299 assert_eq!(Blocked::Yes, Blocked::from_i32(1).unwrap());
300 assert_eq!(Blocked::Request, Blocked::from_i32(2).unwrap());
301 }
302
303 #[test]
304 fn test_mediaquality_values() {
305 assert_eq!(MediaQuality::Balanced, MediaQuality::default());
307 assert_eq!(MediaQuality::Balanced, MediaQuality::from_i32(0).unwrap());
308 assert_eq!(MediaQuality::Worse, MediaQuality::from_i32(1).unwrap());
309 }
310
311 #[test]
312 fn test_videochattype_values() {
313 assert_eq!(VideochatType::Unknown, VideochatType::default());
315 assert_eq!(VideochatType::Unknown, VideochatType::from_i32(0).unwrap());
316 assert_eq!(
317 VideochatType::BasicWebrtc,
318 VideochatType::from_i32(1).unwrap()
319 );
320 assert_eq!(VideochatType::Jitsi, VideochatType::from_i32(2).unwrap());
321 }
322}