comparison mcabber/mcabber/hooks.c @ 2190:ee3a40ffcd8b

New option: 'clear_unread_on_carbon' If the new 'clear_unread_on_carbon' option is set to 1, clear the unread message flag for a contact whenever an outgoing carbon copy of a message sent to that contact is received from another client. --- mcabber/mcabber/commands.c | 2 +- mcabber/mcabber/hbuf.h | 1 + mcabber/mcabber/hooks.c | 17 ++++++++++++----- mcabber/mcabber/hooks.h | 2 +- mcabber/mcabber/screen.c | 18 ++++++++++++++---- mcabber/mcabber/xmpp.c | 2 +- mcabber/mcabberrc.example | 5 +++++ 7 files changed, 35 insertions(+), 12 deletions(-)
author Holger Weiß <holger@zedat.fu-berlin.de>
date Thu, 23 Jul 2015 23:44:45 +0200
parents 038c4d601011
children 18fa5ecb1ef4
comparison
equal deleted inserted replaced
2189:3b91f6a100f5 2190:ee3a40ffcd8b
209 209
210 if (encrypted == ENCRYPTED_PGP) 210 if (encrypted == ENCRYPTED_PGP)
211 message_flags |= HBB_PREFIX_PGPCRYPT; 211 message_flags |= HBB_PREFIX_PGPCRYPT;
212 else if (encrypted == ENCRYPTED_OTR) 212 else if (encrypted == ENCRYPTED_OTR)
213 message_flags |= HBB_PREFIX_OTRCRYPT; 213 message_flags |= HBB_PREFIX_OTRCRYPT;
214
215 if (carbon)
216 message_flags |= HBB_PREFIX_CARBON;
214 217
215 if (type == LM_MESSAGE_SUB_TYPE_GROUPCHAT) { 218 if (type == LM_MESSAGE_SUB_TYPE_GROUPCHAT) {
216 rtype = ROSTER_TYPE_ROOM; 219 rtype = ROSTER_TYPE_ROOM;
217 is_groupchat = TRUE; 220 is_groupchat = TRUE;
218 log_muc_conf = settings_opt_get_int("log_muc_conf"); 221 log_muc_conf = settings_opt_get_int("log_muc_conf");
445 // hk_message_out() 448 // hk_message_out()
446 // nick should be set for private messages in a chat room, and null for 449 // nick should be set for private messages in a chat room, and null for
447 // normal messages. 450 // normal messages.
448 void hk_message_out(const char *bjid, const char *nick, 451 void hk_message_out(const char *bjid, const char *nick,
449 time_t timestamp, const char *msg, 452 time_t timestamp, const char *msg,
450 guint encrypted, gpointer xep184) 453 guint encrypted, gboolean carbon, gpointer xep184)
451 { 454 {
452 char *wmsg = NULL, *bmsg = NULL, *mmsg = NULL; 455 char *wmsg = NULL, *bmsg = NULL, *mmsg = NULL;
453 guint cryptflag = 0; 456 guint message_flags = 0;
454 457
455 if (nick) { 458 if (nick) {
456 wmsg = bmsg = g_strdup_printf("PRIV#<%s> %s", nick, msg); 459 wmsg = bmsg = g_strdup_printf("PRIV#<%s> %s", nick, msg);
457 if (!strncmp(msg, COMMAND_ME, strlen(COMMAND_ME))) { 460 if (!strncmp(msg, COMMAND_ME, strlen(COMMAND_ME))) {
458 const char *mynick = roster_getnickname(bjid); 461 const char *mynick = roster_getnickname(bjid);
472 475
473 // Note: the hlog_write should not be called first, because in some 476 // Note: the hlog_write should not be called first, because in some
474 // cases scr_write_outgoing_message() will load the history and we'd 477 // cases scr_write_outgoing_message() will load the history and we'd
475 // have the message twice... 478 // have the message twice...
476 if (encrypted == ENCRYPTED_PGP) 479 if (encrypted == ENCRYPTED_PGP)
477 cryptflag = HBB_PREFIX_PGPCRYPT; 480 message_flags |= HBB_PREFIX_PGPCRYPT;
478 else if (encrypted == ENCRYPTED_OTR) 481 else if (encrypted == ENCRYPTED_OTR)
479 cryptflag = HBB_PREFIX_OTRCRYPT; 482 message_flags |= HBB_PREFIX_OTRCRYPT;
480 scr_write_outgoing_message(bjid, wmsg, cryptflag, xep184); 483
484 if (carbon)
485 message_flags |= HBB_PREFIX_CARBON;
486
487 scr_write_outgoing_message(bjid, wmsg, message_flags, xep184);
481 488
482 // We don't log private messages 489 // We don't log private messages
483 if (!nick) 490 if (!nick)
484 hlog_write_message(bjid, timestamp, 1, msg); 491 hlog_write_message(bjid, timestamp, 1, msg);
485 492