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 {
52  uint32_t m_id;
53  #define MR_MSG_ID_MARKER1 1
54  #define MR_MSG_ID_DAYMARKER 9
55  #define MR_MSG_ID_LAST_SPECIAL 9
56 
57 
62  uint32_t m_from_id;
63 
64 
69  uint32_t m_to_id;
70 
71 
76  uint32_t m_chat_id;
77 
78 
82  time_t m_timestamp;
83 
84 
88  int m_type;
89  #define MR_MSG_UNDEFINED 0
90  #define MR_MSG_TEXT 10
91  #define MR_MSG_IMAGE 20 /* m_param may contain MRP_FILE, MRP_WIDTH, MRP_HEIGHT */
92  #define MR_MSG_GIF 21 /* - " - */
93  #define MR_MSG_AUDIO 40 /* m_param may contain MRP_FILE, MRP_DURATION */
94  #define MR_MSG_VOICE 41 /* - " - */
95  #define MR_MSG_VIDEO 50 /* m_param may contain MRP_FILE, MRP_WIDTH, MRP_HEIGHT, MRP_DURATION */
96  #define MR_MSG_FILE 60 /* m_param may contain MRP_FILE */
97 
98 
102  int m_state;
103  #define MR_STATE_UNDEFINED 0
104  #define MR_STATE_IN_FRESH 10
105  #define MR_STATE_IN_NOTICED 13
106  #define MR_STATE_IN_SEEN 16
107  #define MR_STATE_OUT_PENDING 20
108  #define MR_STATE_OUT_ERROR 24
109  #define MR_STATE_OUT_DELIVERED 26
110  #define MR_STATE_OUT_MDN_RCVD 28
111 
116  char* m_text;
117 
119  int m_starred;
124  mrmailbox_t* m_mailbox;
125  char* m_rfc724_mid;
126  char* m_server_folder;
127  uint32_t m_server_uid;
128 } mrmsg_t;
129 
130 
131 mrmsg_t* mrmsg_new ();
132 void mrmsg_unref (mrmsg_t*);
133 void mrmsg_empty (mrmsg_t*);
134 
135 void mrmsg_set_type (mrmsg_t*, int type);
136 void mrmsg_set_text (mrmsg_t*, const char* text);
137 void mrmsg_set_file (mrmsg_t*, const char* file);
138 
139 int mrmsg_get_type (mrmsg_t*);
140 int mrmsg_get_state (mrmsg_t*);
141 char* mrmsg_get_text (mrmsg_t*);
142 char* mrmsg_get_file (mrmsg_t*);
143 char* mrmsg_get_filename (mrmsg_t*);
147 char* mrmsg_get_summarytext (mrmsg_t*, int approx_characters);
148 
151 
152 
153 /* library-private */
154 #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 "
155 int mrmsg_set_from_stmt__ (mrmsg_t*, sqlite3_stmt* row, int row_offset); /* row order is MR_MSG_FIELDS */
156 int mrmsg_load_from_db__ (mrmsg_t*, mrmailbox_t*, uint32_t id);
157 int mrmsg_is_increation__ (const mrmsg_t*);
158 char* mrmsg_get_summarytext_by_raw (int type, const char* text, mrparam_t*, int approx_bytes); /* the returned value must be free()'d */
159 void mrmsg_save_param_to_disk__ (mrmsg_t*);
160 void mrmsg_guess_msgtype_from_suffix (const char* pathNfilename, int* ret_msgtype, char** ret_mime);
161 void mrmsg_get_authorNtitle_from_filename (const char* pathNfilename, char** ret_author, char** ret_title);
162 
163 #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)
164 #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. */
165 #define MR_MSG_MAKE_SUFFIX_SEARCHABLE(a) ((a)==MR_MSG_IMAGE || (a)==MR_MSG_GIF || (a)==MR_MSG_VOICE)
166 
167 #define APPROX_SUBJECT_CHARS 32 /* as we do not cut inside words, this results in about 32-42 characters.
168  Do not use too long subjects - we add a tag after the subject which gets truncated by the clients otherwise.
169  It should also be very clear, the subject is _not_ the whole message.
170  The value is also used for CC:-summaries */
171 
172 
173 #ifdef __cplusplus
174 } /* /extern "C" */
175 #endif
176 #endif /* __MRMSG_H__ */
int m_is_msgrmsg
Set to 1 if the message was sent by another messenger.
Definition: mrmsg.h:120
An object representing a single mailbox.
Definition: mrmailbox.h:184
int mrmsg_get_type(mrmsg_t *msg)
Get the type of the message.
Definition: mrmsg.c:202
int m_type
Message type.
Definition: mrmsg.h:88
char * mrmsg_get_summarytext(mrmsg_t *msg, int approx_characters)
Get a message summary as a single line of text.
Definition: mrmsg.c:459
uint32_t m_chat_id
Chat ID the message belongs to.
Definition: mrmsg.h:76
int mrmsg_get_state(mrmsg_t *msg)
Get the state of a message.
Definition: mrmsg.c:238
mrmsg_t * mrmsg_new()
Create new message object.
Definition: mrmsg.c:41
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:417
void mrmsg_set_file(mrmsg_t *msg, const char *file)
Set the file belonging to a message.
Definition: mrmsg.c:177
mrpoortext_t * mrmsg_get_mediainfo(mrmsg_t *msg)
Get real author and title.
Definition: mrmsg.c:335
An object representing a single message in memory.
Definition: mrmsg.h:40
uint32_t m_to_id
Contact ID of the recipient.
Definition: mrmsg.h:69
uint32_t m_from_id
Contact ID of the sender.
Definition: mrmsg.h:62
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:274
int m_starred
Starred-state of the message.
Definition: mrmsg.h:119
void mrmsg_set_text(mrmsg_t *msg, const char *text)
Set the text of a message object.
Definition: mrmsg.c:153
An object for handling key=value parameter lists.
Definition: mrparam.h:44
int mrmsg_is_increation(mrmsg_t *msg)
Check if a message is still in creation.
Definition: mrmsg.c:697
mrparam_t * m_param
Additional paramter for the message.
Definition: mrmsg.h:118
char * m_text
Message text.
Definition: mrmsg.h:116
void mrmsg_unref(mrmsg_t *msg)
Free an mrmsg_t object created eg.
Definition: mrmsg.c:68
void mrmsg_set_type(mrmsg_t *msg, int type)
Set the type of a message.
Definition: mrmsg.c:126
uint32_t m_id
Message ID.
Definition: mrmsg.h:52
int m_state
Message state.
Definition: mrmsg.h:102
int mrmsg_get_showpadlock(mrmsg_t *msg)
Check if a padlock should be shown beside the message.
Definition: mrmsg.c:389
void mrmsg_save_param_to_disk(mrmsg_t *msg)
can be used to add some additional, persistent information to a messages record.
Definition: mrmsg.c:732
void mrmsg_empty(mrmsg_t *msg)
Empty a message object.
Definition: mrmsg.c:89
char * mrmsg_get_text(mrmsg_t *msg)
Get the text of the message.
Definition: mrmsg.c:256
time_t m_timestamp
Unix time the message was sended or received.
Definition: mrmsg.h:82
An object representing a single chat in memory.
Definition: mrchat.h:39