Delta Chat Core C-API
mrmsg.h
1 /*******************************************************************************
2  *
3  * Delta Chat Core
4  * Copyright (C) 2017 Björn Petersen
5  * Contact: r10s@b44t.com, http://b44t.com
6  *
7  * This program is free software: you can redistribute it and/or modify it under
8  * the terms of the GNU General Public License as published by the Free Software
9  * Foundation, either version 3 of the License, or (at your option) any later
10  * version.
11  *
12  * This program is distributed in the hope that it will be useful, but WITHOUT
13  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14  * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
15  * details.
16  *
17  * You should have received a copy of the GNU General Public License along with
18  * this program. If not, see http://www.gnu.org/licenses/ .
19  *
20  ******************************************************************************/
21 
22 
23 #ifndef __MRMSG_H__
24 #define __MRMSG_H__
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
28 
29 
30 typedef struct mrmailbox_t mrmailbox_t;
31 typedef struct mrparam_t mrparam_t;
32 typedef struct sqlite3_stmt sqlite3_stmt;
33 
34 
40 typedef struct mrmsg_t
41 {
42  uint32_t m_magic;
47  uint32_t m_id;
48  #define MR_MSG_ID_MARKER1 1
49  #define MR_MSG_ID_DAYMARKER 9
50  #define MR_MSG_ID_LAST_SPECIAL 9
51 
52 
57  uint32_t m_from_id;
58 
59 
64  uint32_t m_to_id;
65 
66 
71  uint32_t m_chat_id;
72 
73 
74  /*
75  * The mailbox object the chat belongs to. Never NULL.
76  */
77  //mrmailbox_t* m_mailbox;
78 
79 
82  int m_type;
83  #define MR_MSG_UNDEFINED 0
84  #define MR_MSG_TEXT 10
85  #define MR_MSG_IMAGE 20 /* m_param may contain MRP_FILE, MRP_WIDTH, MRP_HEIGHT */
86  #define MR_MSG_GIF 21 /* - " - */
87  #define MR_MSG_AUDIO 40 /* m_param may contain MRP_FILE, MRP_DURATION */
88  #define MR_MSG_VOICE 41 /* - " - */
89  #define MR_MSG_VIDEO 50 /* m_param may contain MRP_FILE, MRP_WIDTH, MRP_HEIGHT, MRP_DURATION */
90  #define MR_MSG_FILE 60 /* m_param may contain MRP_FILE */
91 
92  int m_state;
93  #define MR_STATE_UNDEFINED 0
94  #define MR_STATE_IN_FRESH 10
95  #define MR_STATE_IN_NOTICED 13
96  #define MR_STATE_IN_SEEN 16
97  #define MR_STATE_OUT_PENDING 20
98  #define MR_STATE_OUT_ERROR 24
99  #define MR_STATE_OUT_DELIVERED 26 /* to check if a mail was sent, use mrmsg_is_sent() */
100  #define MR_STATE_OUT_MDN_RCVD 28
101 
102  time_t m_timestamp;
103  char* m_text;
105  mrmailbox_t* m_mailbox;
106  char* m_rfc724_mid;
107  char* m_server_folder;
108  uint32_t m_server_uid;
109  int m_is_msgrmsg;
110  int m_starred;
111  mrparam_t* m_param;
112 } mrmsg_t;
113 
114 
115 mrmsg_t* mrmsg_new ();
116 void mrmsg_unref (mrmsg_t*);
117 void mrmsg_empty (mrmsg_t*);
118 
119 int mrmsg_get_type (mrmsg_t*);
120 int mrmsg_get_state (mrmsg_t*);
121 time_t mrmsg_get_timestamp (mrmsg_t*);
122 char* mrmsg_get_text (mrmsg_t*);
123 char* mrmsg_get_file (mrmsg_t*);
124 char* mrmsg_get_filename (mrmsg_t*);
125 char* mrmsg_get_filemime (mrmsg_t*);
126 uint64_t mrmsg_get_filebytes (mrmsg_t*);
128 int mrmsg_get_width (mrmsg_t*);
133 char* mrmsg_get_summarytext (mrmsg_t*, int approx_characters);
134 int mrmsg_is_sent (mrmsg_t*);
139 
142 
143 void mrmsg_latefiling_mediasize (mrmsg_t*, int width, int height, int duration);
144 
145 
146 /* library-private */
147 #define MR_MSG_FIELDS " m.id,rfc724_mid,m.server_folder,m.server_uid,m.chat_id, m.from_id,m.to_id,m.timestamp, m.type,m.state,m.msgrmsg,m.txt, m.param,m.starred "
148 int mrmsg_set_from_stmt__ (mrmsg_t*, sqlite3_stmt* row, int row_offset); /* row order is MR_MSG_FIELDS */
149 int mrmsg_load_from_db__ (mrmsg_t*, mrmailbox_t*, uint32_t id);
150 int mrmsg_is_increation__ (const mrmsg_t*);
151 char* mrmsg_get_summarytext_by_raw (int type, const char* text, mrparam_t*, int approx_bytes); /* the returned value must be free()'d */
152 void mrmsg_save_param_to_disk__ (mrmsg_t*);
153 void mrmsg_guess_msgtype_from_suffix (const char* pathNfilename, int* ret_msgtype, char** ret_mime);
154 void mrmsg_get_authorNtitle_from_filename (const char* pathNfilename, char** ret_author, char** ret_title);
155 
156 #define MR_MSG_NEEDS_ATTACHMENT(a) ((a)==MR_MSG_IMAGE || (a)==MR_MSG_GIF || (a)==MR_MSG_AUDIO || (a)==MR_MSG_VOICE || (a)==MR_MSG_VIDEO || (a)==MR_MSG_FILE)
157 #define MR_MSG_MAKE_FILENAME_SEARCHABLE(a) ((a)==MR_MSG_AUDIO || (a)==MR_MSG_FILE || (a)==MR_MSG_VIDEO ) /* add filename.ext (without path) to m_text? this is needed for the fulltext search. The extension is useful to get all PDF, all MP3 etc. */
158 #define MR_MSG_MAKE_SUFFIX_SEARCHABLE(a) ((a)==MR_MSG_IMAGE || (a)==MR_MSG_GIF || (a)==MR_MSG_VOICE)
159 
160 #define APPROX_SUBJECT_CHARS 32 /* as we do not cut inside words, this results in about 32-42 characters.
161  Do not use too long subjects - we add a tag after the subject which gets truncated by the clients otherwise.
162  It should also be very clear, the subject is _not_ the whole message.
163  The value is also used for CC:-summaries */
164 
165 
166 #ifdef __cplusplus
167 } /* /extern "C" */
168 #endif
169 #endif /* __MRMSG_H__ */
char * mrmsg_get_setupcodebegin(mrmsg_t *msg)
Get the first characters of the setup code.
Definition: mrmsg.c:736
An object representing a single mailbox.
Definition: mrmailbox.h:194
int mrmsg_is_systemcmd(mrmsg_t *msg)
Check if the message is a system command.
Definition: mrmsg.c:684
int mrmsg_get_type(mrmsg_t *msg)
Get the type of the message.
Definition: mrmsg.c:127
char * mrmsg_get_summarytext(mrmsg_t *msg, int approx_characters)
Get a message summary as a single line of text.
Definition: mrmsg.c:584
uint64_t mrmsg_get_filebytes(mrmsg_t *msg)
Get the size of the file.
Definition: mrmsg.c:328
uint32_t m_chat_id
Chat ID the message belongs to.
Definition: mrmsg.h:71
int mrmsg_is_setupmessage(mrmsg_t *msg)
Check if the message is an Autocrypt Setup Message.
Definition: mrmsg.c:710
int mrmsg_get_state(mrmsg_t *msg)
Get the state of a message.
Definition: mrmsg.c:165
mrlot_t * mrmsg_get_mediainfo(mrmsg_t *msg)
Get real author and title.
Definition: mrmsg.c:370
An object representing a single message in memory.
Definition: mrmsg.h:40
void mrmsg_latefiling_mediasize(mrmsg_t *msg, int width, int height, int duration)
Late filing information to a message.
Definition: mrmsg.c:1036
int mrmsg_is_sent(mrmsg_t *msg)
Check if a message was sent successfully.
Definition: mrmsg.c:606
mrlot_t * mrmsg_get_summary(mrmsg_t *msg, mrchat_t *chat)
Get a summary for a message.
Definition: mrmsg.c:542
uint32_t m_to_id
Contact ID of the recipient.
Definition: mrmsg.h:64
An object containing a set of values.
Definition: mrlot.h:36
uint32_t m_from_id
Contact ID of the sender.
Definition: mrmsg.h:57
int mrmsg_get_duration(mrmsg_t *msg)
Get duration of audio or video.
Definition: mrmsg.c:478
int mrmsg_is_starred(mrmsg_t *msg)
Check if a message is starred.
Definition: mrmsg.c:629
char * mrmsg_get_file(mrmsg_t *msg)
Find out full path, file name and extension of the file associated with a message.
Definition: mrmsg.c:228
int mrmsg_is_increation(mrmsg_t *msg)
Check if a message is still in creation.
Definition: mrmsg.c:978
void mrmsg_unref(mrmsg_t *msg)
Free a message object.
Definition: mrmsg.c:69
uint32_t m_id
Message ID.
Definition: mrmsg.h:47
char * mrmsg_get_filemime(mrmsg_t *msg)
Get mime type of the file.
Definition: mrmsg.c:287
int mrmsg_get_width(mrmsg_t *msg)
Get width of image or video.
Definition: mrmsg.c:431
time_t mrmsg_get_timestamp(mrmsg_t *msg)
Get message time.
Definition: mrmsg.c:183
int mrmsg_get_showpadlock(mrmsg_t *msg)
Check if a padlock should be shown beside the message.
Definition: mrmsg.c:496
char * mrmsg_get_filename(mrmsg_t *msg)
Get base file name without path.
Definition: mrmsg.c:255
char * mrmsg_get_text(mrmsg_t *msg)
Get the text of the message.
Definition: mrmsg.c:203
int mrmsg_is_forwarded(mrmsg_t *msg)
Check if the message is a forwarded message.
Definition: mrmsg.c:657
int mrmsg_get_height(mrmsg_t *msg)
Get height of image or video.
Definition: mrmsg.c:456
An object representing a single chat in memory.
Definition: mrchat.h:39