Delta Chat Core C-API
mrmailbox.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 __MRMAILBOX_H__
24 #define __MRMAILBOX_H__
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
28 
29 
30 #define MR_VERSION_MAJOR 0
31 #define MR_VERSION_MINOR 9
32 #define MR_VERSION_REVISION 10
33 
34 
140 #include <pthread.h>
141 #include <libetpan/libetpan.h> /* defines uint16_t */
142 #include "mrarray.h"
143 #include "mrchatlist.h"
144 #include "mrchat.h"
145 #include "mrmsg.h"
146 #include "mrcontact.h"
147 #include "mrpoortext.h"
148 #include "mrparam.h"
149 #include "mrevent.h"
150 
151 typedef struct mrmailbox_t mrmailbox_t;
152 typedef struct mrimap_t mrimap_t;
153 typedef struct mrsmtp_t mrsmtp_t;
154 typedef struct mrsqlite3_t mrsqlite3_t;
155 typedef struct mrjob_t mrjob_t;
156 typedef struct mrmimeparser_t mrmimeparser_t;
157 
158 
174 typedef uintptr_t (*mrmailboxcb_t) (mrmailbox_t*, int event, uintptr_t data1, uintptr_t data2);
175 
176 
184 typedef struct mrmailbox_t
185 {
186  void* m_userdata;
187  char* m_dbfile;
188  char* m_blobdir;
191  mrsqlite3_t* m_sql;
192  mrimap_t* m_imap;
193  mrsmtp_t* m_smtp;
195  pthread_t m_job_thread;
196  pthread_cond_t m_job_cond;
197  pthread_mutex_t m_job_condmutex;
198  int m_job_condflag;
199  int m_job_do_exit;
201  mrmailboxcb_t m_cb;
203  char* m_os_name;
205  uint32_t m_cmdline_sel_chat_id;
207  int m_wake_lock;
208  pthread_mutex_t m_wake_lock_critical;
210  int m_e2ee_enabled;
212  #define MR_LOG_RINGBUF_SIZE 200
213  pthread_mutex_t m_log_ringbuf_critical;
214  char* m_log_ringbuf[MR_LOG_RINGBUF_SIZE];
216  time_t m_log_ringbuf_times[MR_LOG_RINGBUF_SIZE];
218  int m_log_ringbuf_pos;
220 } mrmailbox_t;
221 
222 
223 /* create/open/connect */
224 mrmailbox_t* mrmailbox_new (mrmailboxcb_t, void* userdata, const char* os_name);
225 void mrmailbox_unref (mrmailbox_t*);
226 
227 int mrmailbox_open (mrmailbox_t*, const char* dbfile, const char* blobdir);
228 void mrmailbox_close (mrmailbox_t*);
229 int mrmailbox_is_open (const mrmailbox_t*);
230 
231 int mrmailbox_set_config (mrmailbox_t*, const char* key, const char* value);
232 char* mrmailbox_get_config (mrmailbox_t*, const char* key, const char* def);
233 int mrmailbox_set_config_int (mrmailbox_t*, const char* key, int32_t value);
234 int32_t mrmailbox_get_config_int (mrmailbox_t*, const char* key, int32_t def);
235 char* mrmailbox_get_version_str (void);
236 
237 int mrmailbox_configure_and_connect(mrmailbox_t*);
238 void mrmailbox_configure_cancel (mrmailbox_t*);
239 int mrmailbox_is_configured (mrmailbox_t*);
240 
241 void mrmailbox_connect (mrmailbox_t*);
242 void mrmailbox_disconnect (mrmailbox_t*);
243 
244 char* mrmailbox_get_info (mrmailbox_t*);
245 
246 
247 /* Handle chatlists */
248 #define MR_GCL_ARCHIVED_ONLY 0x01
249 #define MR_GCL_NO_SPECIALS 0x02
250 mrchatlist_t* mrmailbox_get_chatlist (mrmailbox_t*, int flags, const char* query);
251 
252 
253 /* Handle chats */
254 uint32_t mrmailbox_create_chat_by_contact_id (mrmailbox_t*, uint32_t contact_id);
255 uint32_t mrmailbox_get_chat_id_by_contact_id (mrmailbox_t*, uint32_t contact_id);
256 
257 uint32_t mrmailbox_send_text_msg (mrmailbox_t*, uint32_t chat_id, const char* text_to_send);
258 uint32_t mrmailbox_send_image_msg (mrmailbox_t*, uint32_t chat_id, const char* file, const char* filemime, int width, int height);
259 uint32_t mrmailbox_send_video_msg (mrmailbox_t*, uint32_t chat_id, const char* file, const char* filemime, int width, int height, int duration);
260 uint32_t mrmailbox_send_voice_msg (mrmailbox_t*, uint32_t chat_id, const char* file, const char* filemime, int duration);
261 uint32_t mrmailbox_send_audio_msg (mrmailbox_t*, uint32_t chat_id, const char* file, const char* filemime, int duration, const char* author, const char* trackname);
262 uint32_t mrmailbox_send_file_msg (mrmailbox_t*, uint32_t chat_id, const char* file, const char* filemime);
263 uint32_t mrmailbox_send_vcard_msg (mrmailbox_t*, uint32_t chat_id, uint32_t contact_id);
264 void mrmailbox_set_draft (mrmailbox_t*, uint32_t chat_id, const char*);
265 
266 #define MR_GCM_ADDDAYMARKER 0x01
267 mrarray_t* mrmailbox_get_chat_msgs (mrmailbox_t*, uint32_t chat_id, uint32_t flags, uint32_t marker1before);
268 int mrmailbox_get_total_msg_count (mrmailbox_t*, uint32_t chat_id);
269 int mrmailbox_get_fresh_msg_count (mrmailbox_t*, uint32_t chat_id);
270 mrarray_t* mrmailbox_get_fresh_msgs (mrmailbox_t*);
271 void mrmailbox_marknoticed_chat (mrmailbox_t*, uint32_t chat_id);
272 mrarray_t* mrmailbox_get_chat_media (mrmailbox_t*, uint32_t chat_id, int msg_type, int or_msg_type);
273 uint32_t mrmailbox_get_next_media (mrmailbox_t*, uint32_t curr_msg_id, int dir);
274 
275 void mrmailbox_archive_chat (mrmailbox_t*, uint32_t chat_id, int archive);
276 void mrmailbox_delete_chat (mrmailbox_t*, uint32_t chat_id);
277 
278 mrarray_t* mrmailbox_get_chat_contacts (mrmailbox_t*, uint32_t chat_id);
279 mrarray_t* mrmailbox_search_msgs (mrmailbox_t*, uint32_t chat_id, const char* query);
280 
281 mrchat_t* mrmailbox_get_chat (mrmailbox_t*, uint32_t chat_id);
282 
283 
284 /* Handle group chats */
285 uint32_t mrmailbox_create_group_chat (mrmailbox_t*, const char* name);
286 int mrmailbox_is_contact_in_chat (mrmailbox_t*, uint32_t chat_id, uint32_t contact_id);
287 int mrmailbox_add_contact_to_chat (mrmailbox_t*, uint32_t chat_id, uint32_t contact_id);
288 int mrmailbox_remove_contact_from_chat (mrmailbox_t*, uint32_t chat_id, uint32_t contact_id);
289 int mrmailbox_set_chat_name (mrmailbox_t*, uint32_t chat_id, const char* name);
290 int mrmailbox_set_chat_profile_image (mrmailbox_t*, uint32_t chat_id, const char* image);
291 
292 
293 /* Handle messages */
294 char* mrmailbox_get_msg_info (mrmailbox_t*, uint32_t msg_id);
295 void mrmailbox_delete_msgs (mrmailbox_t*, const uint32_t* msg_ids, int msg_cnt);
296 void mrmailbox_forward_msgs (mrmailbox_t*, const uint32_t* msg_ids, int msg_cnt, uint32_t chat_id);
297 void mrmailbox_marknoticed_contact (mrmailbox_t*, uint32_t contact_id);
298 void mrmailbox_markseen_msgs (mrmailbox_t*, const uint32_t* msg_ids, int msg_cnt);
299 void mrmailbox_star_msgs (mrmailbox_t*, const uint32_t* msg_ids, int msg_cnt, int star);
300 mrmsg_t* mrmailbox_get_msg (mrmailbox_t*, uint32_t msg_id);
301 
302 
303 /* Handle contacts */
304 uint32_t mrmailbox_create_contact (mrmailbox_t*, const char* name, const char* addr);
305 int mrmailbox_add_address_book (mrmailbox_t*, const char*);
306 mrarray_t* mrmailbox_get_known_contacts (mrmailbox_t*, const char* query);
307 int mrmailbox_get_blocked_count (mrmailbox_t*);
309 void mrmailbox_block_contact (mrmailbox_t*, uint32_t contact_id, int block);
310 char* mrmailbox_get_contact_encrinfo (mrmailbox_t*, uint32_t contact_id);
311 int mrmailbox_delete_contact (mrmailbox_t*, uint32_t contact_id);
312 mrcontact_t* mrmailbox_get_contact (mrmailbox_t*, uint32_t contact_id);
313 
314 
315 /* Import/export and Tools */
316 #define MR_IMEX_CANCEL 0
317 #define MR_IMEX_EXPORT_SELF_KEYS 1 /* param1 is a directory where the keys are written to */
318 #define MR_IMEX_IMPORT_SELF_KEYS 2 /* param1 is a directory where the keys are searched in and read from */
319 #define MR_IMEX_EXPORT_BACKUP 11 /* param1 is a directory where the backup is written to */
320 #define MR_IMEX_IMPORT_BACKUP 12 /* param1 is the file with the backup to import */
321 #define MR_IMEX_EXPORT_SETUP_MESSAGE 20 /* param1 is a directory where the setup file is written to */
322 #define MR_BAK_PREFIX "delta-chat"
323 #define MR_BAK_SUFFIX "bak"
324 void mrmailbox_imex (mrmailbox_t*, int what, const char* param1, const char* setup_code);
325 char* mrmailbox_imex_has_backup (mrmailbox_t*, const char* dir);
326 int mrmailbox_check_password (mrmailbox_t*, const char* pw);
327 char* mrmailbox_create_setup_code (mrmailbox_t*);
328 void mrmailbox_heartbeat (mrmailbox_t*);
329 
330 
331 /* logging */
332 void mrmailbox_log_error (mrmailbox_t*, int code, const char* msg, ...);
333 void mrmailbox_log_error_if (int* condition, mrmailbox_t*, int code, const char* msg, ...);
334 void mrmailbox_log_warning (mrmailbox_t*, int code, const char* msg, ...);
335 void mrmailbox_log_info (mrmailbox_t*, int code, const char* msg, ...);
336 void mrmailbox_log_vprintf (mrmailbox_t*, int event, int code, const char* msg, va_list);
337 int mrmailbox_get_thread_index (void);
338 
339 
340 /* error codes */
341 #define MR_ERR_SELF_NOT_IN_GROUP 1
342 #define MR_ERR_NONETWORK 2
343 
344 
345 /* deprecated functions */
346 int mrchat_set_draft (mrchat_t*, const char* msg); /* deprecated - use mrmailbox_set_draft() instead */
347 
348 
349 /* library-internal */
350 uint32_t mrmailbox_send_msg_object (mrmailbox_t*, uint32_t chat_id, mrmsg_t*);
351 void mrmailbox_connect_to_imap (mrmailbox_t*, mrjob_t*);
352 void mrmailbox_wake_lock (mrmailbox_t*);
353 void mrmailbox_wake_unlock (mrmailbox_t*);
354 int mrmailbox_poke_eml_file (mrmailbox_t*, const char* file);
355 int mrmailbox_is_reply_to_known_message__ (mrmailbox_t*, mrmimeparser_t*);
356 int mrmailbox_is_reply_to_messenger_message__ (mrmailbox_t*, mrmimeparser_t*);
357 time_t mrmailbox_correct_bad_timestamp__ (mrmailbox_t* ths, uint32_t chat_id, uint32_t from_id, time_t desired_timestamp, int is_fresh_msg);
358 void mrmailbox_add_or_lookup_contacts_by_mailbox_list__(mrmailbox_t* ths, struct mailimf_mailbox_list* mb_list, int origin, mrarray_t* ids, int* check_self);
359 void mrmailbox_add_or_lookup_contacts_by_address_list__(mrmailbox_t* ths, struct mailimf_address_list* adr_list, int origin, mrarray_t* ids, int* check_self);
360 int mrmailbox_get_archived_count__ (mrmailbox_t*);
361 int mrmailbox_reset_tables (mrmailbox_t*, int bits); /* reset tables but leaves server configuration, 1=jobs, 2=e2ee, 8=rest but server config */
362 size_t mrmailbox_get_real_contact_cnt__ (mrmailbox_t*);
363 uint32_t mrmailbox_add_or_lookup_contact__ (mrmailbox_t*, const char* display_name /*can be NULL*/, const char* addr_spec, int origin, int* sth_modified);
364 int mrmailbox_get_contact_origin__ (mrmailbox_t*, uint32_t id, int* ret_blocked);
365 int mrmailbox_is_contact_blocked__ (mrmailbox_t*, uint32_t id);
366 int mrmailbox_real_contact_exists__ (mrmailbox_t*, uint32_t id);
367 int mrmailbox_contact_addr_equals__ (mrmailbox_t*, uint32_t contact_id, const char* other_addr);
368 void mrmailbox_scaleup_contact_origin__ (mrmailbox_t*, uint32_t contact_id, int origin);
369 void mrmailbox_unarchive_chat__ (mrmailbox_t*, uint32_t chat_id);
370 size_t mrmailbox_get_chat_cnt__ (mrmailbox_t*);
371 uint32_t mrmailbox_create_or_lookup_nchat_by_contact_id__ (mrmailbox_t*, uint32_t contact_id);
372 uint32_t mrmailbox_lookup_real_nchat_by_contact_id__ (mrmailbox_t*, uint32_t contact_id);
373 int mrmailbox_get_total_msg_count__ (mrmailbox_t*, uint32_t chat_id);
374 int mrmailbox_get_fresh_msg_count__ (mrmailbox_t*, uint32_t chat_id);
375 uint32_t mrmailbox_get_last_deaddrop_fresh_msg__ (mrmailbox_t*);
376 void mrmailbox_send_msg_to_smtp (mrmailbox_t*, mrjob_t*);
377 void mrmailbox_send_msg_to_imap (mrmailbox_t*, mrjob_t*);
378 int mrmailbox_add_contact_to_chat__ (mrmailbox_t*, uint32_t chat_id, uint32_t contact_id);
379 int mrmailbox_is_contact_in_chat__ (mrmailbox_t*, uint32_t chat_id, uint32_t contact_id);
380 int mrmailbox_get_chat_contact_count__ (mrmailbox_t*, uint32_t chat_id);
381 int mrmailbox_group_explicitly_left__ (mrmailbox_t*, const char* grpid);
382 void mrmailbox_set_group_explicitly_left__ (mrmailbox_t*, const char* grpid);
383 size_t mrmailbox_get_real_msg_cnt__ (mrmailbox_t*); /* the number of messages assigned to real chat (!=deaddrop, !=trash) */
384 size_t mrmailbox_get_deaddrop_msg_cnt__ (mrmailbox_t*);
385 int mrmailbox_rfc724_mid_cnt__ (mrmailbox_t*, const char* rfc724_mid);
386 int mrmailbox_rfc724_mid_exists__ (mrmailbox_t*, const char* rfc724_mid, char** ret_server_folder, uint32_t* ret_server_uid);
387 void mrmailbox_update_server_uid__ (mrmailbox_t*, const char* rfc724_mid, const char* server_folder, uint32_t server_uid);
388 void mrmailbox_update_msg_chat_id__ (mrmailbox_t*, uint32_t msg_id, uint32_t chat_id);
389 void mrmailbox_update_msg_state__ (mrmailbox_t*, uint32_t msg_id, int state);
390 void mrmailbox_delete_msg_on_imap (mrmailbox_t* mailbox, mrjob_t* job);
391 int mrmailbox_mdn_from_ext__ (mrmailbox_t*, uint32_t from_id, const char* rfc724_mid, uint32_t* ret_chat_id, uint32_t* ret_msg_id); /* returns 1 if an event should be send */
392 void mrmailbox_send_mdn (mrmailbox_t*, mrjob_t* job);
393 void mrmailbox_markseen_msg_on_imap (mrmailbox_t* mailbox, mrjob_t* job);
394 void mrmailbox_markseen_mdn_on_imap (mrmailbox_t* mailbox, mrjob_t* job);
395 
396 
397 /* library private: end-to-end-encryption */
398 #define MR_E2EE_DEFAULT_ENABLED 1
399 #define MR_MDNS_DEFAULT_ENABLED 1
400 
401 typedef struct mrmailbox_e2ee_helper_t {
402  int m_encryption_successfull;
403  void* m_cdata_to_free;
404 } mrmailbox_e2ee_helper_t;
405 
406 void mrmailbox_e2ee_encrypt (mrmailbox_t*, const clist* recipients_addr, int e2ee_guaranteed, int encrypt_to_self, struct mailmime* in_out_message, mrmailbox_e2ee_helper_t*);
407 int mrmailbox_e2ee_decrypt (mrmailbox_t*, struct mailmime* in_out_message, int* ret_validation_errors); /* returns 1 if sth. was decrypted, 0 in other cases */
408 void mrmailbox_e2ee_thanks (mrmailbox_e2ee_helper_t*); /* frees data referenced by "mailmime" but not freed by mailmime_free(). After calling mre2ee_unhelp(), in_out_message cannot be used any longer! */
409 int mrmailbox_ensure_secret_key_exists (mrmailbox_t*); /* makes sure, the private key exists, needed only for exporting keys and the case no message was sent before */
410 
411 
412 #ifdef __cplusplus
413 } /* /extern "C" */
414 #endif
415 #endif /* __MRMAILBOX_H__ */
int mrmailbox_add_address_book(mrmailbox_t *mailbox, const char *adr_book)
Add a number of contacts.
Definition: mrmailbox.c:4337
uint32_t mrmailbox_create_group_chat(mrmailbox_t *mailbox, const char *chat_name)
Create a new group chat.
Definition: mrmailbox.c:3625
uint32_t mrmailbox_create_contact(mrmailbox_t *mailbox, const char *name, const char *addr)
Add a single contact.
Definition: mrmailbox.c:4294
uint32_t mrmailbox_send_text_msg(mrmailbox_t *mailbox, uint32_t chat_id, const char *text_to_send)
Send a simple text message a given chat.
Definition: mrmailbox.c:3247
void mrmailbox_close(mrmailbox_t *mailbox)
Close mailbox database.
Definition: mrmailbox.c:1081
mrmailbox_t * mrmailbox_new(mrmailboxcb_t cb, void *userdata, const char *os_name)
Create a new mailbox object.
Definition: mrmailbox.c:898
int mrmailbox_is_contact_in_chat(mrmailbox_t *mailbox, uint32_t chat_id, uint32_t contact_id)
Check if a given contact ID is a member of a group chat.
Definition: mrmailbox.c:3863
The following constants are used as events reported to the callback given to mrmailbox_new().
mrchat_t * mrmailbox_get_chat(mrmailbox_t *mailbox, uint32_t chat_id)
Get chat object by a chat ID.
Definition: mrmailbox.c:1697
int mrmailbox_remove_contact_from_chat(mrmailbox_t *mailbox, uint32_t chat_id, uint32_t contact_id)
Remove a member from a group.
Definition: mrmailbox.c:3980
int mrmailbox_open(mrmailbox_t *mailbox, const char *dbfile, const char *blobdir)
Open mailbox database.
Definition: mrmailbox.c:1016
An object representing a single contact in memory.
Definition: mrcontact.h:38
An object representing a simple array.
Definition: mrarray.h:39
mrarray_t * mrmailbox_get_chat_msgs(mrmailbox_t *mailbox, uint32_t chat_id, uint32_t flags, uint32_t marker1before)
Get all message IDs belonging to a chat.
Definition: mrmailbox.c:2109
uint32_t mrmailbox_send_file_msg(mrmailbox_t *mailbox, uint32_t chat_id, const char *file, const char *filemime)
Send a document to a chat.
Definition: mrmailbox.c:3462
int mrmailbox_delete_contact(mrmailbox_t *mailbox, uint32_t contact_id)
Delete a contact.
Definition: mrmailbox.c:4825
An object representing a single chatlist in memory.
Definition: mrchatlist.h:43
void mrmailbox_heartbeat(mrmailbox_t *ths)
Stay alive.
Definition: mrmailbox.c:1621
void mrmailbox_star_msgs(mrmailbox_t *mailbox, const uint32_t *msg_ids, int msg_cnt, int star)
Star/unstar messages by setting the last parameter to 0 (unstar) or 1(star).
Definition: mrmailbox.c:5270
int mrmailbox_set_config(mrmailbox_t *ths, const char *key, const char *value)
Configure the mailbox.
Definition: mrmailbox.c:1182
char * m_dbfile
The database file.
Definition: mrmailbox.h:187
An object representing a single mailbox.
Definition: mrmailbox.h:184
void mrmailbox_delete_msgs(mrmailbox_t *mailbox, const uint32_t *msg_ids, int msg_cnt)
Delete messages.
Definition: mrmailbox.c:5412
uint32_t mrmailbox_send_video_msg(mrmailbox_t *mailbox, uint32_t chat_id, const char *file, const char *filemime, int width, int height, int duration)
Send an video to a chat.
Definition: mrmailbox.c:3333
int mrmailbox_is_open(const mrmailbox_t *mailbox)
Check if the mailbox database is open.
Definition: mrmailbox.c:1115
void mrmailbox_archive_chat(mrmailbox_t *mailbox, uint32_t chat_id, int archive)
Archive or unarchive a chat.
Definition: mrmailbox.c:2647
char * mrmailbox_get_info(mrmailbox_t *mailbox)
Get information about the mailbox.
Definition: mrmailbox.c:1283
mrarray_t * mrmailbox_get_blocked_contacts(mrmailbox_t *mailbox)
Get blocked contacts.
Definition: mrmailbox.c:4456
mrarray_t * mrmailbox_get_known_contacts(mrmailbox_t *mailbox, const char *query)
Returns known and unblocked contacts.
Definition: mrmailbox.c:4392
int mrmailbox_add_contact_to_chat(mrmailbox_t *mailbox, uint32_t chat_id, uint32_t contact_id)
Add a member to a group.
Definition: mrmailbox.c:3895
uint32_t mrmailbox_get_next_media(mrmailbox_t *mailbox, uint32_t curr_msg_id, int dir)
Get next/previous message of the same type.
Definition: mrmailbox.c:1916
char * mrmailbox_get_version_str(void)
Find out the version of the Delta Chat core library.
Definition: mrmailbox.c:1481
void mrmailbox_disconnect(mrmailbox_t *mailbox)
Disonnect the mailbox from the server.
Definition: mrmailbox.c:1596
uint32_t mrmailbox_send_voice_msg(mrmailbox_t *mailbox, uint32_t chat_id, const char *file, const char *filemime, int duration)
Send a voice message to a chat.
Definition: mrmailbox.c:3377
char * m_blobdir
Full path of the blob directory.
Definition: mrmailbox.h:188
void mrmailbox_connect(mrmailbox_t *mailbox)
Connect to the mailbox using the configured settings.
Definition: mrmailbox.c:1569
int mrmailbox_get_total_msg_count(mrmailbox_t *mailbox, uint32_t chat_id)
Get the total number of messages in a chat.
Definition: mrmailbox.c:2579
uint32_t mrmailbox_send_vcard_msg(mrmailbox_t *mailbox, uint32_t chat_id, uint32_t contact_id)
Send foreign contact data to a chat.
Definition: mrmailbox.c:3510
void mrmailbox_unref(mrmailbox_t *mailbox)
Free a mailbox object.
Definition: mrmailbox.c:955
void mrmailbox_block_contact(mrmailbox_t *mailbox, uint32_t contact_id, int new_blocking)
Block or unblock a contact.
Definition: mrmailbox.c:4606
uintptr_t(* mrmailboxcb_t)(mrmailbox_t *, int event, uintptr_t data1, uintptr_t data2)
Callback function that should be given to mrmailbox_new().
Definition: mrmailbox.h:174
int mrmailbox_configure_and_connect(mrmailbox_t *mailbox)
Configure and connect a mailbox.
Definition: mrmailbox_configure.c:397
mrchatlist_t * mrmailbox_get_chatlist(mrmailbox_t *mailbox, int listflags, const char *query)
Get a list of chats.
Definition: mrmailbox.c:1653
An object representing a single message in memory.
Definition: mrmsg.h:40
uint32_t mrmailbox_get_chat_id_by_contact_id(mrmailbox_t *mailbox, uint32_t contact_id)
Check, if there is a normal chat with a given contact.
Definition: mrmailbox.c:1777
int mrmailbox_get_fresh_msg_count(mrmailbox_t *mailbox, uint32_t chat_id)
Get the number of fresh messages in a chat.
Definition: mrmailbox.c:2607
void mrmailbox_delete_chat(mrmailbox_t *mailbox, uint32_t chat_id)
Delete a chat.
Definition: mrmailbox.c:2768
void mrmailbox_set_draft(mrmailbox_t *mailbox, uint32_t chat_id, const char *msg)
Save a draft for a chat.
Definition: mrmailbox.c:2362
int mrmailbox_get_blocked_count(mrmailbox_t *mailbox)
Get the number of blocked contacts.
Definition: mrmailbox.c:4490
mrarray_t * mrmailbox_search_msgs(mrmailbox_t *mailbox, uint32_t chat_id, const char *query)
Search messages containing the given query string.
Definition: mrmailbox.c:2213
uint32_t mrmailbox_send_image_msg(mrmailbox_t *mailbox, uint32_t chat_id, const char *file, const char *filemime, int width, int height)
Send an image to a chat.
Definition: mrmailbox.c:3288
mrmsg_t * mrmailbox_get_msg(mrmailbox_t *mailbox, uint32_t msg_id)
Get a single message object of the type mrmsg_t.
Definition: mrmailbox.c:5017
void * m_userdata
Use data, may be used for any purpose.
Definition: mrmailbox.h:186
int mrmailbox_is_configured(mrmailbox_t *mailbox)
Check if the mailbox is already configured.
Definition: mrmailbox_configure.c:751
int mrmailbox_set_chat_profile_image(mrmailbox_t *mailbox, uint32_t chat_id, const char *new_image)
Set group profile image.
Definition: mrmailbox.c:3774
uint32_t mrmailbox_create_chat_by_contact_id(mrmailbox_t *mailbox, uint32_t contact_id)
Create a normal chat with a single user.
Definition: mrmailbox.c:1804
void mrmailbox_forward_msgs(mrmailbox_t *mailbox, const uint32_t *msg_ids, int msg_cnt, uint32_t chat_id)
Forward messages to another chat.
Definition: mrmailbox.c:5184
void mrmailbox_markseen_msgs(mrmailbox_t *mailbox, const uint32_t *msg_ids, int msg_cnt)
Mark a message as seen, updates the IMAP state and sends MDNs.
Definition: mrmailbox.c:5553
mrarray_t * mrmailbox_get_chat_contacts(mrmailbox_t *mailbox, uint32_t chat_id)
Get contact IDs belonging to a chat.
Definition: mrmailbox.c:1992
void mrmailbox_marknoticed_chat(mrmailbox_t *mailbox, uint32_t chat_id)
Mark all message in a chat as noticed.
Definition: mrmailbox.c:1743
char * mrmailbox_imex_has_backup(mrmailbox_t *mailbox, const char *dir_name)
Check if there is a backup file.
Definition: mrmailbox_imex.c:697
void mrmailbox_configure_cancel(mrmailbox_t *mailbox)
Signal the configure-process to stop.
Definition: mrmailbox_configure.c:720
mrarray_t * mrmailbox_get_fresh_msgs(mrmailbox_t *mailbox)
Returns the message IDs of all fresh messages of any chat.
Definition: mrmailbox.c:2041
mrcontact_t * mrmailbox_get_contact(mrmailbox_t *mailbox, uint32_t contact_id)
Get a single contact object.
Definition: mrmailbox.c:4532
int mrmailbox_check_password(mrmailbox_t *mailbox, const char *test_pw)
Check if the user is authorized by the given password in some way.
Definition: mrmailbox_imex.c:1051
void mrmailbox_marknoticed_contact(mrmailbox_t *mailbox, uint32_t contact_id)
Mark all messages send by the given contact as noticed.
Definition: mrmailbox.c:4580
int mrmailbox_set_config_int(mrmailbox_t *ths, const char *key, int32_t value)
Configure the mailbox.
Definition: mrmailbox.c:1235
int32_t mrmailbox_get_config_int(mrmailbox_t *ths, const char *key, int32_t def)
Get a configuration option.
Definition: mrmailbox.c:1257
int mrmailbox_set_chat_name(mrmailbox_t *mailbox, uint32_t chat_id, const char *new_name)
Set group name.
Definition: mrmailbox.c:3693
char * mrmailbox_create_setup_code(mrmailbox_t *mailbox)
Create random setup code.
Definition: mrmailbox_imex.c:1108
char * mrmailbox_get_contact_encrinfo(mrmailbox_t *mailbox, uint32_t contact_id)
Get encryption info for a contact.
Definition: mrmailbox.c:4697
mrarray_t * mrmailbox_get_chat_media(mrmailbox_t *mailbox, uint32_t chat_id, int msg_type, int or_msg_type)
Returns all message IDs of the given types in a chat.
Definition: mrmailbox.c:1884
uint32_t mrmailbox_send_audio_msg(mrmailbox_t *mailbox, uint32_t chat_id, const char *file, const char *filemime, int duration, const char *author, const char *trackname)
Send an audio file to a chat.
Definition: mrmailbox.c:3420
void mrmailbox_imex(mrmailbox_t *mailbox, int what, const char *param1, const char *setup_code)
Import/export things.
Definition: mrmailbox_imex.c:998
char * mrmailbox_get_config(mrmailbox_t *ths, const char *key, const char *def)
Get a configuration option.
Definition: mrmailbox.c:1213
char * mrmailbox_get_msg_info(mrmailbox_t *mailbox, uint32_t msg_id)
Get an informational text for a single message.
Definition: mrmailbox.c:5059
An object representing a single chat in memory.
Definition: mrchat.h:39