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_VERIFIED_ONLY: u32 = 0x01;
92pub const DC_GCL_ADD_SELF: u32 = 0x02;
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,
132
133 Group = 120,
135
136 Mailinglist = 140,
138
139 Broadcast = 160,
141}
142
143pub const DC_MSG_ID_DAYMARKER: u32 = 9;
144pub const DC_MSG_ID_LAST_SPECIAL: u32 = 9;
145
146pub(crate) const DC_ELLIPSIS: &str = "[...]";
148pub const DC_DESIRED_TEXT_LINES: usize = 38;
151pub const DC_DESIRED_TEXT_LINE_LEN: usize = 100;
153
154pub const DC_DESIRED_TEXT_LEN: usize = DC_DESIRED_TEXT_LINE_LEN * DC_DESIRED_TEXT_LINES;
163
164pub const DC_LP_AUTH_OAUTH2: i32 = 0x2;
175
176pub const DC_LP_AUTH_NORMAL: i32 = 0x4;
179
180pub const DC_LP_AUTH_FLAGS: i32 = DC_LP_AUTH_OAUTH2 | DC_LP_AUTH_NORMAL;
182
183pub const BALANCED_IMAGE_BYTES: usize = 500_000;
185pub const WORSE_IMAGE_BYTES: usize = 130_000;
186
187pub(crate) const BALANCED_AVATAR_SIZE: u32 = 512;
189pub(crate) const BALANCED_AVATAR_BYTES: usize = 60_000;
190pub(crate) const WORSE_AVATAR_SIZE: u32 = 128;
191pub(crate) const WORSE_AVATAR_BYTES: usize = 20_000; pub const BALANCED_IMAGE_SIZE: u32 = 1280;
195pub const WORSE_IMAGE_SIZE: u32 = 640;
196
197pub(crate) const DC_FOLDERS_CONFIGURED_KEY: &str = "folders_configured";
199pub(crate) const DC_FOLDERS_CONFIGURED_VERSION: i32 = 5;
201
202pub(crate) const DEFAULT_MAX_SMTP_RCPT_TO: usize = 50;
206
207pub(crate) const DC_BACKGROUND_FETCH_QUOTA_CHECK_RATELIMIT: u64 = 12 * 60 * 60; pub(crate) const TIMESTAMP_SENT_TOLERANCE: i64 = 60;
213
214pub(crate) const SECUREJOIN_WAIT_TIMEOUT: u64 = 15;
218
219pub(crate) const EDITED_PREFIX: &str = "✏️";
222
223pub(crate) const ASM_SUBJECT: &str = "Autocrypt Setup Message";
226pub(crate) const ASM_BODY: &str = "This is the Autocrypt Setup Message \
227 used to transfer your end-to-end setup between clients.
228
229 To decrypt and use your setup, \
230 open the message in an Autocrypt-compliant client \
231 and enter the setup code presented on the generating device.
232
233 If you see this message in a chatmail client (Delta Chat, Arcane Chat, Delta Touch ...), \
234 use \"Settings / Add Second Device\" instead.";
235
236#[cfg(test)]
237mod tests {
238 use num_traits::FromPrimitive;
239
240 use super::*;
241
242 #[test]
243 fn test_chattype_values() {
244 assert_eq!(Chattype::Single, Chattype::from_i32(100).unwrap());
246 assert_eq!(Chattype::Group, Chattype::from_i32(120).unwrap());
247 assert_eq!(Chattype::Mailinglist, Chattype::from_i32(140).unwrap());
248 assert_eq!(Chattype::Broadcast, Chattype::from_i32(160).unwrap());
249 }
250
251 #[test]
252 fn test_showemails_values() {
253 assert_eq!(ShowEmails::All, ShowEmails::default());
255 assert_eq!(ShowEmails::Off, ShowEmails::from_i32(0).unwrap());
256 assert_eq!(
257 ShowEmails::AcceptedContacts,
258 ShowEmails::from_i32(1).unwrap()
259 );
260 assert_eq!(ShowEmails::All, ShowEmails::from_i32(2).unwrap());
261 }
262
263 #[test]
264 fn test_blocked_values() {
265 assert_eq!(Blocked::Not, Blocked::default());
267 assert_eq!(Blocked::Not, Blocked::from_i32(0).unwrap());
268 assert_eq!(Blocked::Yes, Blocked::from_i32(1).unwrap());
269 assert_eq!(Blocked::Request, Blocked::from_i32(2).unwrap());
270 }
271
272 #[test]
273 fn test_mediaquality_values() {
274 assert_eq!(MediaQuality::Balanced, MediaQuality::default());
276 assert_eq!(MediaQuality::Balanced, MediaQuality::from_i32(0).unwrap());
277 assert_eq!(MediaQuality::Worse, MediaQuality::from_i32(1).unwrap());
278 }
279
280 #[test]
281 fn test_videochattype_values() {
282 assert_eq!(VideochatType::Unknown, VideochatType::default());
284 assert_eq!(VideochatType::Unknown, VideochatType::from_i32(0).unwrap());
285 assert_eq!(
286 VideochatType::BasicWebrtc,
287 VideochatType::from_i32(1).unwrap()
288 );
289 assert_eq!(VideochatType::Jitsi, VideochatType::from_i32(2).unwrap());
290 }
291}