1
0
Fork 0
mirror of https://github.com/deltachat/deltachat-core.git synced 2025-10-06 03:50:08 +02:00

separate system messages from the 'centered status text'; the one may exist without the other

This commit is contained in:
B. Petersen 2018-04-01 17:28:48 +02:00
parent 076f2abe2c
commit 2ef6067461
11 changed files with 71 additions and 70 deletions

View file

@ -37,7 +37,7 @@ extern "C" {
typedef struct _mrcontact mrcontact_t; typedef struct _mrcontact mrcontact_t;
#define MR_CONTACT_ID_SELF 1 #define MR_CONTACT_ID_SELF 1
#define MR_CONTACT_ID_SYSTEM 2 #define MR_CONTACT_ID_DEVICE 2
#define MR_CONTACT_ID_LAST_SPECIAL 9 #define MR_CONTACT_ID_LAST_SPECIAL 9

View file

@ -157,7 +157,7 @@ void mrmailbox_free_ongoing (mrmailbox_t*);
int mrmailbox_oob_is_handshake_message__ (mrmailbox_t*, mrmimeparser_t*); /* must be called from lock */ int mrmailbox_oob_is_handshake_message__ (mrmailbox_t*, mrmimeparser_t*); /* must be called from lock */
void mrmailbox_oob_handle_handshake_message(mrmailbox_t*, mrmimeparser_t*, uint32_t chat_id); /* must not be called from lock */ void mrmailbox_oob_handle_handshake_message(mrmailbox_t*, mrmimeparser_t*, uint32_t chat_id); /* must not be called from lock */
uint32_t mrmailbox_add_system_msg (mrmailbox_t*, uint32_t chat_id, const char* text); uint32_t mrmailbox_add_device_msg (mrmailbox_t*, uint32_t chat_id, const char* text);
#ifdef __cplusplus #ifdef __cplusplus

View file

@ -2189,7 +2189,7 @@ void mrmailbox_send_msg_to_smtp(mrmailbox_t* mailbox, mrjob_t* job)
if( (mailbox->m_imap->m_server_flags&MR_NO_EXTRA_IMAP_UPLOAD)==0 if( (mailbox->m_imap->m_server_flags&MR_NO_EXTRA_IMAP_UPLOAD)==0
&& mrparam_get(mimefactory.m_chat->m_param, MRP_SELFTALK, 0)==0 && mrparam_get(mimefactory.m_chat->m_param, MRP_SELFTALK, 0)==0
&& mrparam_get_int(mimefactory.m_msg->m_param, MRP_SYSTEM_CMD, 0)!=MR_SYSTEM_OOB_VERIFY_MESSAGE ) { && mrparam_get_int(mimefactory.m_msg->m_param, MRP_CMD, 0)!=MR_CMD_OOB_VERIFY_MESSAGE ) {
mrjob_add__(mailbox, MRJ_SEND_MSG_TO_IMAP, mimefactory.m_msg->m_id, NULL); /* send message to IMAP in another job */ mrjob_add__(mailbox, MRJ_SEND_MSG_TO_IMAP, mimefactory.m_msg->m_id, NULL); /* send message to IMAP in another job */
} }
@ -2267,8 +2267,8 @@ static uint32_t mrmailbox_send_msg_i__(mrmailbox_t* mailbox, mrchat_t* chat, con
/* check if we can guarantee E2EE for this message. If we can, we won't send the message without E2EE later (because of a reset, changed settings etc. - messages may be delayed significally if there is no network present) */ /* check if we can guarantee E2EE for this message. If we can, we won't send the message without E2EE later (because of a reset, changed settings etc. - messages may be delayed significally if there is no network present) */
int do_guarantee_e2ee = 0; int do_guarantee_e2ee = 0;
int system_command = mrparam_get_int(msg->m_param, MRP_SYSTEM_CMD, 0); int command = mrparam_get_int(msg->m_param, MRP_CMD, 0);
if( mailbox->m_e2ee_enabled && system_command!=MR_SYSTEM_AUTOCRYPT_SETUP_MESSAGE ) if( mailbox->m_e2ee_enabled && command!=MR_CMD_AUTOCRYPT_SETUP_MESSAGE )
{ {
int can_encrypt = 1, all_mutual = 1; /* be optimistic */ int can_encrypt = 1, all_mutual = 1; /* be optimistic */
sqlite3_stmt* stmt = mrsqlite3_predefine__(mailbox->m_sql, SELECT_p_FROM_chats_contacs_JOIN_contacts_peerstates_WHERE_cc, sqlite3_stmt* stmt = mrsqlite3_predefine__(mailbox->m_sql, SELECT_p_FROM_chats_contacs_JOIN_contacts_peerstates_WHERE_cc,
@ -2818,11 +2818,11 @@ cleanup:
/* /*
* Log a system message. * Log a device message.
* Such a message is typically shown in the "middle" of the chat. * Such a message is typically shown in the "middle" of the chat, the user can check this using mrmsg_is_systemmsg().
* Texts are typically "Alice has added Bob to the group" or "Alice fingerprint verified." * Texts are typically "Alice has added Bob to the group" or "Alice fingerprint verified."
*/ */
uint32_t mrmailbox_add_system_msg(mrmailbox_t* mailbox, uint32_t chat_id, const char* text) uint32_t mrmailbox_add_device_msg(mrmailbox_t* mailbox, uint32_t chat_id, const char* text)
{ {
uint32_t msg_id = 0; uint32_t msg_id = 0;
int locked = 0; int locked = 0;
@ -2838,14 +2838,14 @@ uint32_t mrmailbox_add_system_msg(mrmailbox_t* mailbox, uint32_t chat_id, const
stmt = mrsqlite3_predefine__(mailbox->m_sql, INSERT_INTO_msgs_cftttst, stmt = mrsqlite3_predefine__(mailbox->m_sql, INSERT_INTO_msgs_cftttst,
"INSERT INTO msgs (chat_id,from_id,to_id, timestamp,type,state, txt) VALUES (?,?,?, ?,?,?, ?);"); "INSERT INTO msgs (chat_id,from_id,to_id, timestamp,type,state, txt) VALUES (?,?,?, ?,?,?, ?);");
sqlite3_bind_int (stmt, 1, chat_id); sqlite3_bind_int (stmt, 1, chat_id);
sqlite3_bind_int (stmt, 2, MR_CONTACT_ID_SYSTEM); sqlite3_bind_int (stmt, 2, MR_CONTACT_ID_DEVICE);
sqlite3_bind_int (stmt, 3, MR_CONTACT_ID_SYSTEM); sqlite3_bind_int (stmt, 3, MR_CONTACT_ID_DEVICE);
sqlite3_bind_int64(stmt, 4, mr_create_smeared_timestamp__()); sqlite3_bind_int64(stmt, 4, mr_create_smeared_timestamp__());
sqlite3_bind_int (stmt, 5, MR_MSG_TEXT); sqlite3_bind_int (stmt, 5, MR_MSG_TEXT);
sqlite3_bind_int (stmt, 6, MR_STATE_IN_NOTICED); sqlite3_bind_int (stmt, 6, MR_STATE_IN_NOTICED);
sqlite3_bind_text (stmt, 7, text, -1, SQLITE_STATIC); sqlite3_bind_text (stmt, 7, text, -1, SQLITE_STATIC);
if( sqlite3_step(stmt) != SQLITE_DONE ) { if( sqlite3_step(stmt) != SQLITE_DONE ) {
mrmailbox_log_error(mailbox, 0, "Cannot add system message to database."); mrmailbox_log_error(mailbox, 0, "Cannot add device message to database.");
goto cleanup; goto cleanup;
} }
@ -3058,7 +3058,7 @@ int mrmailbox_set_chat_name(mrmailbox_t* mailbox, uint32_t chat_id, const char*
{ {
msg->m_type = MR_MSG_TEXT; msg->m_type = MR_MSG_TEXT;
msg->m_text = mrstock_str_repl_string2(MR_STR_MSGGRPNAME, chat->m_name, new_name); msg->m_text = mrstock_str_repl_string2(MR_STR_MSGGRPNAME, chat->m_name, new_name);
mrparam_set_int(msg->m_param, MRP_SYSTEM_CMD, MR_SYSTEM_GROUPNAME_CHANGED); mrparam_set_int(msg->m_param, MRP_CMD, MR_CMD_GROUPNAME_CHANGED);
msg->m_id = mrmailbox_send_msg_object(mailbox, chat_id, msg); msg->m_id = mrmailbox_send_msg_object(mailbox, chat_id, msg);
mailbox->m_cb(mailbox, MR_EVENT_MSGS_CHANGED, chat_id, msg->m_id); mailbox->m_cb(mailbox, MR_EVENT_MSGS_CHANGED, chat_id, msg->m_id);
} }
@ -3130,8 +3130,8 @@ int mrmailbox_set_chat_profile_image(mrmailbox_t* mailbox, uint32_t chat_id, con
/* send a status mail to all group members, also needed for outself to allow multi-client */ /* send a status mail to all group members, also needed for outself to allow multi-client */
if( DO_SEND_STATUS_MAILS ) if( DO_SEND_STATUS_MAILS )
{ {
mrparam_set_int(msg->m_param, MRP_SYSTEM_CMD, MR_SYSTEM_GROUPIMAGE_CHANGED); mrparam_set_int(msg->m_param, MRP_CMD, MR_CMD_GROUPIMAGE_CHANGED);
mrparam_set (msg->m_param, MRP_SYSTEM_CMD_PARAM, new_image); mrparam_set (msg->m_param, MRP_CMD_PARAM, new_image);
msg->m_type = MR_MSG_TEXT; msg->m_type = MR_MSG_TEXT;
msg->m_text = mrstock_str(new_image? MR_STR_MSGGRPIMGCHANGED : MR_STR_MSGGRPIMGDELETED); msg->m_text = mrstock_str(new_image? MR_STR_MSGGRPIMGCHANGED : MR_STR_MSGGRPIMGDELETED);
msg->m_id = mrmailbox_send_msg_object(mailbox, chat_id, msg); msg->m_id = mrmailbox_send_msg_object(mailbox, chat_id, msg);
@ -3271,8 +3271,8 @@ int mrmailbox_add_contact_to_chat(mrmailbox_t* mailbox, uint32_t chat_id, uint32
{ {
msg->m_type = MR_MSG_TEXT; msg->m_type = MR_MSG_TEXT;
msg->m_text = mrstock_str_repl_string(MR_STR_MSGADDMEMBER, (contact->m_authname&&contact->m_authname[0])? contact->m_authname : contact->m_addr); msg->m_text = mrstock_str_repl_string(MR_STR_MSGADDMEMBER, (contact->m_authname&&contact->m_authname[0])? contact->m_authname : contact->m_addr);
mrparam_set_int(msg->m_param, MRP_SYSTEM_CMD, MR_SYSTEM_MEMBER_ADDED_TO_GROUP); mrparam_set_int(msg->m_param, MRP_CMD, MR_CMD_MEMBER_ADDED_TO_GROUP);
mrparam_set (msg->m_param, MRP_SYSTEM_CMD_PARAM, contact->m_addr); mrparam_set (msg->m_param, MRP_CMD_PARAM, contact->m_addr);
msg->m_id = mrmailbox_send_msg_object(mailbox, chat_id, msg); msg->m_id = mrmailbox_send_msg_object(mailbox, chat_id, msg);
mailbox->m_cb(mailbox, MR_EVENT_MSGS_CHANGED, chat_id, msg->m_id); mailbox->m_cb(mailbox, MR_EVENT_MSGS_CHANGED, chat_id, msg->m_id);
} }
@ -3350,8 +3350,8 @@ int mrmailbox_remove_contact_from_chat(mrmailbox_t* mailbox, uint32_t chat_id, u
else { else {
msg->m_text = mrstock_str_repl_string(MR_STR_MSGDELMEMBER, (contact->m_authname&&contact->m_authname[0])? contact->m_authname : contact->m_addr); msg->m_text = mrstock_str_repl_string(MR_STR_MSGDELMEMBER, (contact->m_authname&&contact->m_authname[0])? contact->m_authname : contact->m_addr);
} }
mrparam_set_int(msg->m_param, MRP_SYSTEM_CMD, MR_SYSTEM_MEMBER_REMOVED_FROM_GROUP); mrparam_set_int(msg->m_param, MRP_CMD, MR_CMD_MEMBER_REMOVED_FROM_GROUP);
mrparam_set (msg->m_param, MRP_SYSTEM_CMD_PARAM, contact->m_addr); mrparam_set (msg->m_param, MRP_CMD_PARAM, contact->m_addr);
msg->m_id = mrmailbox_send_msg_object(mailbox, chat_id, msg); msg->m_id = mrmailbox_send_msg_object(mailbox, chat_id, msg);
mailbox->m_cb(mailbox, MR_EVENT_MSGS_CHANGED, chat_id, msg->m_id); mailbox->m_cb(mailbox, MR_EVENT_MSGS_CHANGED, chat_id, msg->m_id);
} }
@ -4493,7 +4493,7 @@ char* mrmailbox_get_msg_info(mrmailbox_t* mailbox, uint32_t msg_id)
mrstrbuilder_cat(&ret, "\n"); mrstrbuilder_cat(&ret, "\n");
} }
if( msg->m_from_id == MR_CONTACT_ID_SYSTEM || msg->m_to_id == MR_CONTACT_ID_SYSTEM ) { // do not use mrmsg_is_systemcmd() as this would als catch system messages sent as real messages by others if( msg->m_from_id == MR_CONTACT_ID_DEVICE || msg->m_to_id == MR_CONTACT_ID_DEVICE ) { // do not use mrmsg_is_systemcmd() as this would als catch system messages sent as real messages by others
goto cleanup; // internal message, no further details needed goto cleanup; // internal message, no further details needed
} }

View file

@ -510,7 +510,7 @@ char* mrmailbox_initiate_key_transfer(mrmailbox_t* mailbox)
msg->m_type = MR_MSG_FILE; msg->m_type = MR_MSG_FILE;
mrparam_set (msg->m_param, MRP_FILE, setup_file_name); mrparam_set (msg->m_param, MRP_FILE, setup_file_name);
mrparam_set (msg->m_param, MRP_MIMETYPE, "application/autocrypt-setup"); mrparam_set (msg->m_param, MRP_MIMETYPE, "application/autocrypt-setup");
mrparam_set_int(msg->m_param, MRP_SYSTEM_CMD, MR_SYSTEM_AUTOCRYPT_SETUP_MESSAGE); mrparam_set_int(msg->m_param, MRP_CMD, MR_CMD_AUTOCRYPT_SETUP_MESSAGE);
CHECK_EXIT CHECK_EXIT

View file

@ -423,15 +423,15 @@ static void send_handshake_msg(mrmailbox_t* mailbox, uint32_t chat_id, const cha
msg->m_type = MR_MSG_TEXT; msg->m_type = MR_MSG_TEXT;
msg->m_text = mr_mprintf("Secure-Join: %s", step); msg->m_text = mr_mprintf("Secure-Join: %s", step);
msg->m_hidden = 1; msg->m_hidden = 1;
mrparam_set_int(msg->m_param, MRP_SYSTEM_CMD, MR_SYSTEM_OOB_VERIFY_MESSAGE); mrparam_set_int(msg->m_param, MRP_CMD, MR_CMD_OOB_VERIFY_MESSAGE);
mrparam_set (msg->m_param, MRP_SYSTEM_CMD_PARAM, step); mrparam_set (msg->m_param, MRP_CMD_PARAM, step);
if( random ) { if( random ) {
mrparam_set(msg->m_param, MRP_SYSTEM_CMD_PARAM2, random); mrparam_set(msg->m_param, MRP_CMD_PARAM2, random);
} }
if( fingerprint ) { if( fingerprint ) {
mrparam_set(msg->m_param, MRP_SYSTEM_CMD_PARAM3, fingerprint); mrparam_set(msg->m_param, MRP_CMD_PARAM3, fingerprint);
} }
if( strcmp(step, "request") != 0 ) { if( strcmp(step, "request") != 0 ) {
@ -782,7 +782,7 @@ void mrmailbox_oob_handle_handshake_message(mrmailbox_t* mailbox, mrmimeparser_t
mrmailbox_log_info(mailbox, 0, "Random secret validated."); mrmailbox_log_info(mailbox, 0, "Random secret validated.");
mrmailbox_add_system_msg(mailbox, chat_id, "Secure-join connection established."); mrmailbox_add_device_msg(mailbox, chat_id, "Secure-join connection established.");
send_handshake_msg(mailbox, chat_id, "broadcast", NULL, NULL); // Alice -> Bob and all other group members send_handshake_msg(mailbox, chat_id, "broadcast", NULL, NULL); // Alice -> Bob and all other group members
} }
@ -810,7 +810,7 @@ void mrmailbox_oob_handle_handshake_message(mrmailbox_t* mailbox, mrmimeparser_t
mrsqlite3_unlock(mailbox->m_sql); mrsqlite3_unlock(mailbox->m_sql);
locked = 0; locked = 0;
mrmailbox_add_system_msg(mailbox, chat_id, "Secure-join connection established."); mrmailbox_add_device_msg(mailbox, chat_id, "Secure-join connection established.");
s_bob_expects = 0; s_bob_expects = 0;
end_bobs_joining(mailbox, BOB_SUCCESS); end_bobs_joining(mailbox, BOB_SUCCESS);

View file

@ -661,19 +661,19 @@ static void create_or_lookup_group__(mrmailbox_t* mailbox, mrmimeparser_t* mime_
if( (optional_field=mrmimeparser_lookup_optional_field2(mime_parser, "Chat-Group-Member-Removed", "X-MrRemoveFromGrp"))!=NULL ) { if( (optional_field=mrmimeparser_lookup_optional_field2(mime_parser, "Chat-Group-Member-Removed", "X-MrRemoveFromGrp"))!=NULL ) {
X_MrRemoveFromGrp = optional_field->fld_value; X_MrRemoveFromGrp = optional_field->fld_value;
mime_parser->m_is_system_message = MR_SYSTEM_MEMBER_REMOVED_FROM_GROUP; mime_parser->m_is_system_message = MR_CMD_MEMBER_REMOVED_FROM_GROUP;
} }
else if( (optional_field=mrmimeparser_lookup_optional_field2(mime_parser, "Chat-Group-Member-Added", "X-MrAddToGrp"))!=NULL ) { else if( (optional_field=mrmimeparser_lookup_optional_field2(mime_parser, "Chat-Group-Member-Added", "X-MrAddToGrp"))!=NULL ) {
X_MrAddToGrp = optional_field->fld_value; X_MrAddToGrp = optional_field->fld_value;
mime_parser->m_is_system_message = MR_SYSTEM_MEMBER_ADDED_TO_GROUP; mime_parser->m_is_system_message = MR_CMD_MEMBER_ADDED_TO_GROUP;
} }
else if( (optional_field=mrmimeparser_lookup_optional_field2(mime_parser, "Chat-Group-Name-Changed", "X-MrGrpNameChanged"))!=NULL ) { else if( (optional_field=mrmimeparser_lookup_optional_field2(mime_parser, "Chat-Group-Name-Changed", "X-MrGrpNameChanged"))!=NULL ) {
X_MrGrpNameChanged = 1; X_MrGrpNameChanged = 1;
mime_parser->m_is_system_message = MR_SYSTEM_GROUPNAME_CHANGED; mime_parser->m_is_system_message = MR_CMD_GROUPNAME_CHANGED;
} }
else if( (optional_field=mrmimeparser_lookup_optional_field(mime_parser, "Chat-Group-Image"))!=NULL ) { else if( (optional_field=mrmimeparser_lookup_optional_field(mime_parser, "Chat-Group-Image"))!=NULL ) {
X_MrGrpImageChanged = 1; X_MrGrpImageChanged = 1;
mime_parser->m_is_system_message = MR_SYSTEM_GROUPIMAGE_CHANGED; mime_parser->m_is_system_message = MR_CMD_GROUPIMAGE_CHANGED;
} }
} }
@ -1202,7 +1202,7 @@ void mrmailbox_receive_imf(mrmailbox_t* mailbox, const char* imf_raw_not_termina
} }
if( mime_parser->m_is_system_message ) { if( mime_parser->m_is_system_message ) {
mrparam_set_int(part->m_param, MRP_SYSTEM_CMD, mime_parser->m_is_system_message); mrparam_set_int(part->m_param, MRP_CMD, mime_parser->m_is_system_message);
} }
stmt = mrsqlite3_predefine__(mailbox->m_sql, INSERT_INTO_msgs_msscftttsmttpb, stmt = mrsqlite3_predefine__(mailbox->m_sql, INSERT_INTO_msgs_msscftttsmttpb,

View file

@ -148,9 +148,9 @@ int mrmimefactory_load_msg(mrmimefactory_t* factory, uint32_t msg_id)
} }
} }
int system_command = mrparam_get_int(factory->m_msg->m_param, MRP_SYSTEM_CMD, 0); int command = mrparam_get_int(factory->m_msg->m_param, MRP_CMD, 0);
if( system_command==MR_SYSTEM_MEMBER_REMOVED_FROM_GROUP /* for added members, the list is just fine */) { if( command==MR_CMD_MEMBER_REMOVED_FROM_GROUP /* for added members, the list is just fine */) {
char* email_to_remove = mrparam_get(factory->m_msg->m_param, MRP_SYSTEM_CMD_PARAM, NULL); char* email_to_remove = mrparam_get(factory->m_msg->m_param, MRP_CMD_PARAM, NULL);
char* self_addr = mrsqlite3_get_config__(mailbox->m_sql, "configured_addr", ""); char* self_addr = mrsqlite3_get_config__(mailbox->m_sql, "configured_addr", "");
if( email_to_remove && strcasecmp(email_to_remove, self_addr)!=0 ) if( email_to_remove && strcasecmp(email_to_remove, self_addr)!=0 )
{ {
@ -163,8 +163,8 @@ int mrmimefactory_load_msg(mrmimefactory_t* factory, uint32_t msg_id)
free(self_addr); free(self_addr);
} }
if( system_command!=MR_SYSTEM_AUTOCRYPT_SETUP_MESSAGE if( command!=MR_CMD_AUTOCRYPT_SETUP_MESSAGE
&& system_command!=MR_SYSTEM_OOB_VERIFY_MESSAGE && command!=MR_CMD_OOB_VERIFY_MESSAGE
&& mrsqlite3_get_config_int__(mailbox->m_sql, "mdns_enabled", MR_MDNS_DEFAULT_ENABLED) ) { && mrsqlite3_get_config_int__(mailbox->m_sql, "mdns_enabled", MR_MDNS_DEFAULT_ENABLED) ) {
factory->m_req_mdn = 1; factory->m_req_mdn = 1;
} }
@ -414,7 +414,7 @@ static char* get_subject(const mrchat_t* chat, const mrmsg_t* msg, int afwd_emai
char *ret, *raw_subject = mrmsg_get_summarytext_by_raw(msg->m_type, msg->m_text, msg->m_param, APPROX_SUBJECT_CHARS); char *ret, *raw_subject = mrmsg_get_summarytext_by_raw(msg->m_type, msg->m_text, msg->m_param, APPROX_SUBJECT_CHARS);
const char* fwd = afwd_email? "Fwd: " : ""; const char* fwd = afwd_email? "Fwd: " : "";
if( mrparam_get_int(msg->m_param, MRP_SYSTEM_CMD, 0) == MR_SYSTEM_AUTOCRYPT_SETUP_MESSAGE ) if( mrparam_get_int(msg->m_param, MRP_CMD, 0) == MR_CMD_AUTOCRYPT_SETUP_MESSAGE )
{ {
ret = mrstock_str(MR_STR_AC_SETUP_MSG_SUBJECT); /* do not add the "Chat:" prefix for setup messages */ ret = mrstock_str(MR_STR_AC_SETUP_MSG_SUBJECT); /* do not add the "Chat:" prefix for setup messages */
} }
@ -519,54 +519,54 @@ int mrmimefactory_render(mrmimefactory_t* factory, int encrypt_to_self)
char* placeholdertext = NULL; char* placeholdertext = NULL;
/* build header etc. */ /* build header etc. */
int system_command = mrparam_get_int(msg->m_param, MRP_SYSTEM_CMD, 0); int command = mrparam_get_int(msg->m_param, MRP_CMD, 0);
if( chat->m_type==MR_CHAT_TYPE_GROUP ) if( chat->m_type==MR_CHAT_TYPE_GROUP )
{ {
mailimf_fields_add(imf_fields, mailimf_field_new_custom(strdup("Chat-Group-ID"), safe_strdup(chat->m_grpid))); mailimf_fields_add(imf_fields, mailimf_field_new_custom(strdup("Chat-Group-ID"), safe_strdup(chat->m_grpid)));
mailimf_fields_add(imf_fields, mailimf_field_new_custom(strdup("Chat-Group-Name"), mr_encode_header_string(chat->m_name))); mailimf_fields_add(imf_fields, mailimf_field_new_custom(strdup("Chat-Group-Name"), mr_encode_header_string(chat->m_name)));
if( system_command == MR_SYSTEM_MEMBER_REMOVED_FROM_GROUP ) { if( command == MR_CMD_MEMBER_REMOVED_FROM_GROUP ) {
char* email_to_remove = mrparam_get(msg->m_param, MRP_SYSTEM_CMD_PARAM, NULL); char* email_to_remove = mrparam_get(msg->m_param, MRP_CMD_PARAM, NULL);
if( email_to_remove ) { if( email_to_remove ) {
mailimf_fields_add(imf_fields, mailimf_field_new_custom(strdup("Chat-Group-Member-Removed"), email_to_remove)); mailimf_fields_add(imf_fields, mailimf_field_new_custom(strdup("Chat-Group-Member-Removed"), email_to_remove));
} }
} }
else if( system_command == MR_SYSTEM_MEMBER_ADDED_TO_GROUP ) { else if( command == MR_CMD_MEMBER_ADDED_TO_GROUP ) {
char* email_to_add = mrparam_get(msg->m_param, MRP_SYSTEM_CMD_PARAM, NULL); char* email_to_add = mrparam_get(msg->m_param, MRP_CMD_PARAM, NULL);
if( email_to_add ) { if( email_to_add ) {
mailimf_fields_add(imf_fields, mailimf_field_new_custom(strdup("Chat-Group-Member-Added"), email_to_add)); mailimf_fields_add(imf_fields, mailimf_field_new_custom(strdup("Chat-Group-Member-Added"), email_to_add));
grpimage = mrparam_get(chat->m_param, MRP_PROFILE_IMAGE, NULL); grpimage = mrparam_get(chat->m_param, MRP_PROFILE_IMAGE, NULL);
} }
} }
else if( system_command == MR_SYSTEM_GROUPNAME_CHANGED ) { else if( command == MR_CMD_GROUPNAME_CHANGED ) {
mailimf_fields_add(imf_fields, mailimf_field_new_custom(strdup("Chat-Group-Name-Changed"), strdup("1"))); mailimf_fields_add(imf_fields, mailimf_field_new_custom(strdup("Chat-Group-Name-Changed"), strdup("1")));
} }
else if( system_command == MR_SYSTEM_GROUPIMAGE_CHANGED ) { else if( command == MR_CMD_GROUPIMAGE_CHANGED ) {
grpimage = mrparam_get(msg->m_param, MRP_SYSTEM_CMD_PARAM, NULL); grpimage = mrparam_get(msg->m_param, MRP_CMD_PARAM, NULL);
if( grpimage==NULL ) { if( grpimage==NULL ) {
mailimf_fields_add(imf_fields, mailimf_field_new_custom(strdup("Chat-Group-Image"), safe_strdup("0"))); mailimf_fields_add(imf_fields, mailimf_field_new_custom(strdup("Chat-Group-Image"), safe_strdup("0")));
} }
} }
} }
if( system_command == MR_SYSTEM_AUTOCRYPT_SETUP_MESSAGE ) { if( command == MR_CMD_AUTOCRYPT_SETUP_MESSAGE ) {
mailimf_fields_add(imf_fields, mailimf_field_new_custom(strdup("Autocrypt-Setup-Message"), strdup("v1"))); mailimf_fields_add(imf_fields, mailimf_field_new_custom(strdup("Autocrypt-Setup-Message"), strdup("v1")));
placeholdertext = mrstock_str(MR_STR_AC_SETUP_MSG_BODY); placeholdertext = mrstock_str(MR_STR_AC_SETUP_MSG_BODY);
force_unencrypted = 1; force_unencrypted = 1;
} }
if( system_command == MR_SYSTEM_OOB_VERIFY_MESSAGE ) { if( command == MR_CMD_OOB_VERIFY_MESSAGE ) {
char* step = mrparam_get(msg->m_param, MRP_SYSTEM_CMD_PARAM, NULL); char* step = mrparam_get(msg->m_param, MRP_CMD_PARAM, NULL);
if( step ) { if( step ) {
mrmailbox_log_info(msg->m_mailbox, 0, "sending secure-join message '%s' >>>>>>>>>>>>>>>>>>>>>>>>>", step); mrmailbox_log_info(msg->m_mailbox, 0, "sending secure-join message '%s' >>>>>>>>>>>>>>>>>>>>>>>>>", step);
mailimf_fields_add(imf_fields, mailimf_field_new_custom(strdup("Secure-Join"), step/*mailimf takes ownership of string*/)); mailimf_fields_add(imf_fields, mailimf_field_new_custom(strdup("Secure-Join"), step/*mailimf takes ownership of string*/));
char* random_secret = mrparam_get(msg->m_param, MRP_SYSTEM_CMD_PARAM2, NULL); char* random_secret = mrparam_get(msg->m_param, MRP_CMD_PARAM2, NULL);
if( random_secret ) { if( random_secret ) {
mailimf_fields_add(imf_fields, mailimf_field_new_custom(strcmp(step, "request")==0? strdup("Secure-Join-Random-Public"):strdup("Secure-Join-Random-Secret"), random_secret/*mailimf takes ownership of string*/)); mailimf_fields_add(imf_fields, mailimf_field_new_custom(strcmp(step, "request")==0? strdup("Secure-Join-Random-Public"):strdup("Secure-Join-Random-Secret"), random_secret/*mailimf takes ownership of string*/));
} }
char* fingerprint = mrparam_get(msg->m_param, MRP_SYSTEM_CMD_PARAM3, NULL); char* fingerprint = mrparam_get(msg->m_param, MRP_CMD_PARAM3, NULL);
if( fingerprint ) { if( fingerprint ) {
mailimf_fields_add(imf_fields, mailimf_field_new_custom(strdup("Secure-Join-Fingerprint"), fingerprint/*mailimf takes ownership of string*/)); mailimf_fields_add(imf_fields, mailimf_field_new_custom(strdup("Secure-Join-Fingerprint"), fingerprint/*mailimf takes ownership of string*/));
} }

View file

@ -34,12 +34,12 @@ typedef struct _mrchat mrchat_t;
typedef struct _mrmailbox mrmailbox_t; typedef struct _mrmailbox mrmailbox_t;
#define MR_SYSTEM_GROUPNAME_CHANGED 2 #define MR_CMD_GROUPNAME_CHANGED 2
#define MR_SYSTEM_GROUPIMAGE_CHANGED 3 #define MR_CMD_GROUPIMAGE_CHANGED 3
#define MR_SYSTEM_MEMBER_ADDED_TO_GROUP 4 #define MR_CMD_MEMBER_ADDED_TO_GROUP 4
#define MR_SYSTEM_MEMBER_REMOVED_FROM_GROUP 5 #define MR_CMD_MEMBER_REMOVED_FROM_GROUP 5
#define MR_SYSTEM_AUTOCRYPT_SETUP_MESSAGE 6 #define MR_CMD_AUTOCRYPT_SETUP_MESSAGE 6
#define MR_SYSTEM_OOB_VERIFY_MESSAGE 7 #define MR_CMD_OOB_VERIFY_MESSAGE 7
typedef enum { typedef enum {

View file

@ -1467,7 +1467,7 @@ void mrmimeparser_parse(mrmimeparser_t* ths, const char* body_not_terminated, si
} }
if( has_setup_file ) { if( has_setup_file ) {
/* delete all parts but the application/autocrypt-setup part */ /* delete all parts but the application/autocrypt-setup part */
ths->m_is_system_message = MR_SYSTEM_AUTOCRYPT_SETUP_MESSAGE; ths->m_is_system_message = MR_CMD_AUTOCRYPT_SETUP_MESSAGE;
for( i = 0; i < carray_count(ths->m_parts); i++ ) { for( i = 0; i < carray_count(ths->m_parts); i++ ) {
mrmimepart_t* part = (mrmimepart_t*)carray_get(ths->m_parts, i); mrmimepart_t* part = (mrmimepart_t*)carray_get(ths->m_parts, i);
if( part->m_int_mimetype!=MR_MIMETYPE_AC_SETUP_FILE ) { if( part->m_int_mimetype!=MR_MIMETYPE_AC_SETUP_FILE ) {
@ -1560,7 +1560,7 @@ void mrmimeparser_parse(mrmimeparser_t* ths, const char* body_not_terminated, si
&& carray_count(ths->m_parts)>=1 ) { && carray_count(ths->m_parts)>=1 ) {
mrmimepart_t* textpart = (mrmimepart_t*)carray_get(ths->m_parts, 0); mrmimepart_t* textpart = (mrmimepart_t*)carray_get(ths->m_parts, 0);
if( textpart->m_type == MR_MSG_TEXT ) { if( textpart->m_type == MR_MSG_TEXT ) {
mrparam_set_int(textpart->m_param, MRP_SYSTEM_CMD, MR_SYSTEM_GROUPIMAGE_CHANGED); mrparam_set_int(textpart->m_param, MRP_CMD, MR_CMD_GROUPIMAGE_CHANGED);
if( carray_count(ths->m_parts)>=2 ) { if( carray_count(ths->m_parts)>=2 ) {
mrmimepart_t* imgpart = (mrmimepart_t*)carray_get(ths->m_parts, 1); mrmimepart_t* imgpart = (mrmimepart_t*)carray_get(ths->m_parts, 1);
if( imgpart->m_type == MR_MSG_IMAGE ) { if( imgpart->m_type == MR_MSG_IMAGE ) {

View file

@ -753,7 +753,7 @@ int mrmsg_is_forwarded(const mrmsg_t* msg)
* mrmsg_get_text() returns a descriptive text about what is going on. * mrmsg_get_text() returns a descriptive text about what is going on.
* *
* There is no need to perfrom any action when seeing such a message - this is already done by the core. * There is no need to perfrom any action when seeing such a message - this is already done by the core.
* Typically, this text is displayed in another color or in another font than normal user messages. * Typically, these messages are displayed in the center of the chat.
* *
* @memberof mrmsg_t * @memberof mrmsg_t
* *
@ -767,9 +767,11 @@ int mrmsg_is_systemcmd(const mrmsg_t* msg)
return 0; return 0;
} }
if( msg->m_from_id == MR_CONTACT_ID_SYSTEM int cmd = mrparam_get_int(msg->m_param, MRP_CMD, 0);
|| msg->m_to_id == MR_CONTACT_ID_SYSTEM
|| mrparam_get_int(msg->m_param, MRP_SYSTEM_CMD, 0) ) { if( msg->m_from_id == MR_CONTACT_ID_DEVICE
|| msg->m_to_id == MR_CONTACT_ID_DEVICE
|| (cmd && cmd != MR_CMD_AUTOCRYPT_SETUP_MESSAGE) ) {
return 1; return 1;
} }
@ -791,8 +793,7 @@ int mrmsg_is_systemcmd(const mrmsg_t* msg)
* @param msg The message object. * @param msg The message object.
* *
* @return 1=message is a setup message, 0=no setup message. * @return 1=message is a setup message, 0=no setup message.
* For setup messages, mrmsg_is_systemcmd() returns 1 and * For setup messages, mrmsg_get_type() returns MR_MSG_FILE.
* mrmsg_get_type() returns MR_MSG_FILE.
*/ */
int mrmsg_is_setupmessage(const mrmsg_t* msg) int mrmsg_is_setupmessage(const mrmsg_t* msg)
{ {
@ -800,7 +801,7 @@ int mrmsg_is_setupmessage(const mrmsg_t* msg)
return 0; return 0;
} }
return mrparam_get_int(msg->m_param, MRP_SYSTEM_CMD, 0)==MR_SYSTEM_AUTOCRYPT_SETUP_MESSAGE? 1 : 0; return mrparam_get_int(msg->m_param, MRP_CMD, 0)==MR_CMD_AUTOCRYPT_SETUP_MESSAGE? 1 : 0;
} }
@ -1039,7 +1040,7 @@ char* mrmsg_get_summarytext_by_raw(int type, const char* text, mrparam_t* param,
break; break;
case MR_MSG_FILE: case MR_MSG_FILE:
if( mrparam_get_int(param, MRP_SYSTEM_CMD, 0)==MR_SYSTEM_AUTOCRYPT_SETUP_MESSAGE ) { if( mrparam_get_int(param, MRP_CMD, 0)==MR_CMD_AUTOCRYPT_SETUP_MESSAGE ) {
ret = mrstock_str(MR_STR_AC_SETUP_MSG_SUBJECT); ret = mrstock_str(MR_STR_AC_SETUP_MSG_SUBJECT);
} }
else { else {

View file

@ -54,10 +54,10 @@ typedef struct mrparam_t
#define MRP_ERRONEOUS_E2EE 'e' /* for msgs: decrypted with validation errors or without mutual set, if neither 'c' nor 'e' are preset, the messages is only transport encrypted */ #define MRP_ERRONEOUS_E2EE 'e' /* for msgs: decrypted with validation errors or without mutual set, if neither 'c' nor 'e' are preset, the messages is only transport encrypted */
#define MRP_WANTS_MDN 'r' /* for msgs: an incoming message which requestes a MDN (aka read receipt) */ #define MRP_WANTS_MDN 'r' /* for msgs: an incoming message which requestes a MDN (aka read receipt) */
#define MRP_FORWARDED 'a' /* for msgs */ #define MRP_FORWARDED 'a' /* for msgs */
#define MRP_SYSTEM_CMD 'S' /* for msgs */ #define MRP_CMD 'S' /* for msgs */
#define MRP_SYSTEM_CMD_PARAM 'E' /* for msgs */ #define MRP_CMD_PARAM 'E' /* for msgs */
#define MRP_SYSTEM_CMD_PARAM2 'F' /* for msgs */ #define MRP_CMD_PARAM2 'F' /* for msgs */
#define MRP_SYSTEM_CMD_PARAM3 'G' /* for msgs */ #define MRP_CMD_PARAM3 'G' /* for msgs */
#define MRP_SERVER_FOLDER 'Z' /* for jobs */ #define MRP_SERVER_FOLDER 'Z' /* for jobs */
#define MRP_SERVER_UID 'z' /* for jobs */ #define MRP_SERVER_UID 'z' /* for jobs */