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 {
45  uint32_t m_id;
46  #define MR_MSG_ID_MARKER1 1
47  #define MR_MSG_ID_DAYMARKER 9
48  #define MR_MSG_ID_LAST_SPECIAL 9
49 
50 
55  uint32_t m_from_id;
56 
57 
62  uint32_t m_to_id;
63 
64 
69  uint32_t m_chat_id;
70 
71 
72  /*
73  * The mailbox object the chat belongs to. Never NULL.
74  */
75  //mrmailbox_t* m_mailbox;
76 
77 
80  int m_type;
81  #define MR_MSG_UNDEFINED 0
82  #define MR_MSG_TEXT 10
83  #define MR_MSG_IMAGE 20 /* m_param may contain MRP_FILE, MRP_WIDTH, MRP_HEIGHT */
84  #define MR_MSG_GIF 21 /* - " - */
85  #define MR_MSG_AUDIO 40 /* m_param may contain MRP_FILE, MRP_DURATION */
86  #define MR_MSG_VOICE 41 /* - " - */
87  #define MR_MSG_VIDEO 50 /* m_param may contain MRP_FILE, MRP_WIDTH, MRP_HEIGHT, MRP_DURATION */
88  #define MR_MSG_FILE 60 /* m_param may contain MRP_FILE */
89 
90  int m_state;
91  #define MR_STATE_UNDEFINED 0
92  #define MR_STATE_IN_FRESH 10
93  #define MR_STATE_IN_NOTICED 13
94  #define MR_STATE_IN_SEEN 16
95  #define MR_STATE_OUT_PENDING 20
96  #define MR_STATE_OUT_ERROR 24
97  #define MR_STATE_OUT_DELIVERED 26
98  #define MR_STATE_OUT_MDN_RCVD 28
99 
100  time_t m_timestamp;
101  char* m_text;
103  mrmailbox_t* m_mailbox;
104  char* m_rfc724_mid;
105  char* m_server_folder;
106  uint32_t m_server_uid;
107  int m_is_msgrmsg;
108  int m_starred;
109  mrparam_t* m_param;
110 } mrmsg_t;
111 
112 
113 mrmsg_t* mrmsg_new ();
114 void mrmsg_unref (mrmsg_t*);
115 void mrmsg_empty (mrmsg_t*);
116 
117 int mrmsg_get_type (mrmsg_t*);
118 int mrmsg_get_state (mrmsg_t*);
119 time_t mrmsg_get_timestamp (mrmsg_t*);
120 char* mrmsg_get_text (mrmsg_t*);
121 char* mrmsg_get_file (mrmsg_t*);
122 char* mrmsg_get_filename (mrmsg_t*);
123 char* mrmsg_get_filemime (mrmsg_t*);
124 uint64_t mrmsg_get_filebytes (mrmsg_t*);
126 int mrmsg_get_width (mrmsg_t*);
131 char* mrmsg_get_summarytext (mrmsg_t*, int approx_characters);
136 
137 void mrmsg_latefiling_mediasize (mrmsg_t*, int width, int height, int duration);
138 
139 
140 /* library-private */
141 #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 "
142 int mrmsg_set_from_stmt__ (mrmsg_t*, sqlite3_stmt* row, int row_offset); /* row order is MR_MSG_FIELDS */
143 int mrmsg_load_from_db__ (mrmsg_t*, mrmailbox_t*, uint32_t id);
144 int mrmsg_is_increation__ (const mrmsg_t*);
145 char* mrmsg_get_summarytext_by_raw (int type, const char* text, mrparam_t*, int approx_bytes); /* the returned value must be free()'d */
146 void mrmsg_save_param_to_disk__ (mrmsg_t*);
147 void mrmsg_guess_msgtype_from_suffix (const char* pathNfilename, int* ret_msgtype, char** ret_mime);
148 void mrmsg_get_authorNtitle_from_filename (const char* pathNfilename, char** ret_author, char** ret_title);
149 
150 #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)
151 #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. */
152 #define MR_MSG_MAKE_SUFFIX_SEARCHABLE(a) ((a)==MR_MSG_IMAGE || (a)==MR_MSG_GIF || (a)==MR_MSG_VOICE)
153 
154 #define APPROX_SUBJECT_CHARS 32 /* as we do not cut inside words, this results in about 32-42 characters.
155  Do not use too long subjects - we add a tag after the subject which gets truncated by the clients otherwise.
156  It should also be very clear, the subject is _not_ the whole message.
157  The value is also used for CC:-summaries */
158 
159 
160 #ifdef __cplusplus
161 } /* /extern "C" */
162 #endif
163 #endif /* __MRMSG_H__ */
An object representing a single mailbox.
Definition: mrmailbox.h:184
int mrmsg_is_systemcmd(mrmsg_t *msg)
Check if the message is a system command.
Definition: mrmsg.c:627
int mrmsg_get_type(mrmsg_t *msg)
Get the type of the message.
Definition: mrmsg.c:124
char * mrmsg_get_summarytext(mrmsg_t *msg, int approx_characters)
Get a message summary as a single line of text.
Definition: mrmsg.c:548
uint64_t mrmsg_get_filebytes(mrmsg_t *msg)
Get the size of the file.
Definition: mrmsg.c:319
uint32_t m_chat_id
Chat ID the message belongs to.
Definition: mrmsg.h:69
int mrmsg_get_state(mrmsg_t *msg)
Get the state of a message.
Definition: mrmsg.c:160
An object representing text with some attributes.
Definition: mrpoortext.h:35
mrpoortext_t * mrmsg_get_summary(mrmsg_t *msg, mrchat_t *chat)
Get a summary for a message.
Definition: mrmsg.c:506
mrpoortext_t * mrmsg_get_mediainfo(mrmsg_t *msg)
Get real author and title.
Definition: mrmsg.c:352
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:921
uint32_t m_to_id
Contact ID of the recipient.
Definition: mrmsg.h:62
uint32_t m_from_id
Contact ID of the sender.
Definition: mrmsg.h:55
int mrmsg_get_duration(mrmsg_t *msg)
Get duration of audio or video.
Definition: mrmsg.c:460
int mrmsg_is_starred(mrmsg_t *msg)
Check if a message is starred.
Definition: mrmsg.c:572
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:219
int mrmsg_is_increation(mrmsg_t *msg)
Check if a message is still in creation.
Definition: mrmsg.c:867
void mrmsg_unref(mrmsg_t *msg)
Free a message object.
Definition: mrmsg.c:66
uint32_t m_id
Message ID.
Definition: mrmsg.h:45
char * mrmsg_get_filemime(mrmsg_t *msg)
Get mime type of the file.
Definition: mrmsg.c:278
int mrmsg_get_width(mrmsg_t *msg)
Get width of image or video.
Definition: mrmsg.c:413
time_t mrmsg_get_timestamp(mrmsg_t *msg)
Get message time.
Definition: mrmsg.c:178
int mrmsg_get_showpadlock(mrmsg_t *msg)
Check if a padlock should be shown beside the message.
Definition: mrmsg.c:478
char * mrmsg_get_filename(mrmsg_t *msg)
Get base file name without path.
Definition: mrmsg.c:246
char * mrmsg_get_text(mrmsg_t *msg)
Get the text of the message.
Definition: mrmsg.c:198
int mrmsg_is_forwarded(mrmsg_t *msg)
Check if the message is a forwarded message.
Definition: mrmsg.c:600
int mrmsg_get_height(mrmsg_t *msg)
Get height of image or video.
Definition: mrmsg.c:438
An object representing a single chat in memory.
Definition: mrchat.h:39