mcabber/src/hooks.c
changeset 1290 e42f48103609
parent 1210 7c8672bbede5
child 1311 0dda8238af21
equal deleted inserted replaced
1289:57fe57474122 1290:e42f48103609
    47   int active_window = FALSE;
    47   int active_window = FALSE;
    48   int message_flags = 0;
    48   int message_flags = 0;
    49   guint rtype = ROSTER_TYPE_USER;
    49   guint rtype = ROSTER_TYPE_USER;
    50   char *wmsg = NULL, *bmsg = NULL, *mmsg = NULL;
    50   char *wmsg = NULL, *bmsg = NULL, *mmsg = NULL;
    51   GSList *roster_usr;
    51   GSList *roster_usr;
       
    52   unsigned mucnicklen = 0;
    52 
    53 
    53   if (encrypted)
    54   if (encrypted)
    54     message_flags |= HBB_PREFIX_PGPCRYPT;
    55     message_flags |= HBB_PREFIX_PGPCRYPT;
    55 
    56 
    56   if (type && !strcmp(type, "groupchat")) {
    57   if (type && !strcmp(type, "groupchat")) {
    61       message_flags = HBB_PREFIX_INFO | HBB_PREFIX_NOFLAG;
    62       message_flags = HBB_PREFIX_INFO | HBB_PREFIX_NOFLAG;
    62       resname = "";
    63       resname = "";
    63       wmsg = bmsg = g_strdup_printf("~ %s", msg);
    64       wmsg = bmsg = g_strdup_printf("~ %s", msg);
    64     } else {
    65     } else {
    65       wmsg = bmsg = g_strdup_printf("<%s> %s", resname, msg);
    66       wmsg = bmsg = g_strdup_printf("<%s> %s", resname, msg);
       
    67       mucnicklen = strlen(resname) + 2;
    66       if (!strncmp(msg, COMMAND_ME, strlen(COMMAND_ME)))
    68       if (!strncmp(msg, COMMAND_ME, strlen(COMMAND_ME)))
    67         wmsg = mmsg = g_strdup_printf("*%s %s", resname, msg+4);
    69         wmsg = mmsg = g_strdup_printf("*%s %s", resname, msg+4);
    68     }
    70     }
    69   } else {
    71   } else {
    70     bmsg = g_strdup(msg);
    72     bmsg = g_strdup(msg);
   155   }
   157   }
   156 
   158 
   157   // Note: the hlog_write should not be called first, because in some
   159   // Note: the hlog_write should not be called first, because in some
   158   // cases scr_WriteIncomingMessage() will load the history and we'd
   160   // cases scr_WriteIncomingMessage() will load the history and we'd
   159   // have the message twice...
   161   // have the message twice...
   160   scr_WriteIncomingMessage(bjid, wmsg, timestamp, message_flags);
   162   scr_WriteIncomingMessage(bjid, wmsg, timestamp, message_flags, mucnicklen);
   161 
   163 
   162   // We don't log the modified message, but the original one
   164   // We don't log the modified message, but the original one
   163   if (wmsg == mmsg)
   165   if (wmsg == mmsg)
   164     wmsg = bmsg;
   166     wmsg = bmsg;
   165 
   167 
   304     if (scr_BuddyBufferExists(bjid)) {
   306     if (scr_BuddyBufferExists(bjid)) {
   305       bn = g_strdup_printf("Buddy status has changed: [%c>%c] %s",
   307       bn = g_strdup_printf("Buddy status has changed: [%c>%c] %s",
   306                            imstatus2char[oldstat], imstatus2char[status],
   308                            imstatus2char[oldstat], imstatus2char[status],
   307                            ((status_msg) ? status_msg : ""));
   309                            ((status_msg) ? status_msg : ""));
   308       scr_WriteIncomingMessage(bjid, bn, timestamp,
   310       scr_WriteIncomingMessage(bjid, bn, timestamp,
   309                                HBB_PREFIX_INFO|HBB_PREFIX_NOFLAG);
   311                                HBB_PREFIX_INFO|HBB_PREFIX_NOFLAG, 0);
   310       g_free(bn);
   312       g_free(bn);
   311     }
   313     }
   312   }
   314   }
   313 
   315 
   314   roster_setstatus(bjid, rn, prio, status, status_msg, timestamp,
   316   roster_setstatus(bjid, rn, prio, status, status_msg, timestamp,