Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • irc_im.c

    r03df717 r24de9fa  
    8484        }
    8585
    86         /* Sanitize */
    87         str_reject_chars(iu->user, " ", '_');
    88         str_reject_chars(iu->host, " ", '_');
     86        while ((s = strchr(iu->user, ' '))) {
     87                *s = '_';
     88        }
    8989
    9090        if (bu->flags & BEE_USER_LOCAL) {
     
    118118        if (bu->flags & BEE_USER_AWAY || !(bu->flags & BEE_USER_ONLINE)) {
    119119                iu->flags |= IRC_USER_AWAY;
    120         }
    121 
    122         if ((irc->caps & CAP_AWAY_NOTIFY) &&
    123             ((bu->flags & BEE_USER_AWAY) != (old->flags & BEE_USER_AWAY) ||
    124              (bu->flags & BEE_USER_ONLINE) != (old->flags & BEE_USER_ONLINE))) {
    125                 irc_send_away_notify(iu);
    126120        }
    127121
     
    207201}
    208202
    209 static gboolean bee_irc_user_msg(bee_t *bee, bee_user_t *bu, const char *msg_, guint32 flags, time_t sent_at)
     203static gboolean bee_irc_user_msg(bee_t *bee, bee_user_t *bu, const char *msg_, time_t sent_at)
    210204{
    211205        irc_t *irc = bee->ui_data;
    212206        irc_user_t *iu = (irc_user_t *) bu->ui_data;
    213         irc_user_t *src_iu = iu;
    214         irc_user_t *dst_iu = irc->user;
    215207        const char *dst;
    216208        char *prefix = NULL;
    217209        char *wrapped, *ts = NULL;
    218210        char *msg = g_strdup(msg_);
    219         char *message_type = "PRIVMSG";
    220211        GSList *l;
    221212
     
    225216
    226217        dst = irc_user_msgdest(iu);
    227 
    228         if (flags & OPT_SELFMESSAGE) {
    229                 char *setting = set_getstr(&irc->b->set, "self_messages");
    230 
    231                 if (is_bool(setting)) {
    232                         if (bool2int(setting)) {
    233                                 /* set to true, send it with src/dst flipped */
    234                                
    235                                 dst_iu = iu;
    236                                 src_iu = irc->user;
    237 
    238                                 if (dst == irc->user->nick) {
    239                                         dst = dst_iu->nick;
    240                                 }
    241                         } else {
    242                                 /* set to false, skip the message completely */
    243                                 goto cleanup;
    244                         }
    245                 } else if (g_strncasecmp(setting, "prefix", 6) == 0) {
    246                         /* third state, prefix, loosely imitates the znc privmsg_prefix module */
    247 
    248                         g_free(msg);
    249                         if (g_strncasecmp(msg_, "/me ", 4) == 0) {
    250                                 msg = g_strdup_printf("/me -> %s", msg_ + 4);
    251                         } else {
    252                                 msg = g_strdup_printf("-> %s", msg_);
    253                         }
    254 
    255                         if (g_strcasecmp(setting, "prefix_notice") == 0) {
    256                                 message_type = "NOTICE";
    257                         }
    258                 }
    259 
    260         }
    261 
    262         if (dst != dst_iu->nick) {
    263                 /* if not messaging directly (control channel), call user by name */
    264                 prefix = g_strdup_printf("%s%s%s", dst_iu->nick, set_getstr(&bee->set, "to_char"), ts ? : "");
     218        if (dst != irc->user->nick) {
     219                /* if not messaging directly, call user by name */
     220                prefix = g_strdup_printf("%s%s%s", irc->user->nick, set_getstr(&bee->set, "to_char"), ts ? : "");
    265221        } else {
    266222                prefix = ts;
     
    293249
    294250        wrapped = word_wrap(msg, 425);
    295         irc_send_msg(src_iu, message_type, dst, wrapped, prefix);
     251        irc_send_msg(iu, "PRIVMSG", dst, wrapped, prefix);
    296252        g_free(wrapped);
    297253
     
    304260}
    305261
    306 static gboolean bee_irc_user_typing(bee_t *bee, bee_user_t *bu, guint32 flags)
     262static gboolean bee_irc_user_typing(bee_t *bee, bee_user_t *bu, uint32_t flags)
    307263{
    308264        irc_t *irc = (irc_t *) bee->ui_data;
     
    661617}
    662618
    663 static gboolean bee_irc_chat_msg(bee_t *bee, struct groupchat *c, bee_user_t *bu, const char *msg, guint32 flags, time_t sent_at)
     619static gboolean bee_irc_chat_msg(bee_t *bee, struct groupchat *c, bee_user_t *bu, const char *msg, time_t sent_at)
    664620{
    665621        irc_t *irc = bee->ui_data;
    666         irc_user_t *iu = flags & OPT_SELFMESSAGE ? irc->user : bu->ui_data;
     622        irc_user_t *iu = bu->ui_data;
    667623        irc_channel_t *ic = c->ui_data;
    668624        char *wrapped, *ts = NULL;
     
    698654}
    699655
    700 static gboolean bee_irc_chat_remove_user(bee_t *bee, struct groupchat *c, bee_user_t *bu, const char *reason)
     656static gboolean bee_irc_chat_remove_user(bee_t *bee, struct groupchat *c, bee_user_t *bu)
    701657{
    702658        irc_t *irc = bee->ui_data;
     
    710666           using imcb_chat_free() and the channel was IRC_CHANNEL_TEMP, we get into
    711667           a broken state around here. */
    712         irc_channel_del_user(ic, bu == bee->user ? irc->user : bu->ui_data, IRC_CDU_PART, reason);
     668        irc_channel_del_user(ic, bu == bee->user ? irc->user : bu->ui_data, IRC_CDU_PART, NULL);
    713669
    714670        return TRUE;
     
    883839            acc->prpl->chat_join) {
    884840                char *nick;
    885                 struct groupchat *gc;
    886841
    887842                if (!(nick = set_getstr(&ic->set, "nick"))) {
     
    890845
    891846                ic->flags |= IRC_CHANNEL_CHAT_PICKME;
    892                 gc = acc->prpl->chat_join(acc->ic, room, nick, NULL, &ic->set);
     847                acc->prpl->chat_join(acc->ic, room, nick, NULL, &ic->set);
    893848                ic->flags &= ~IRC_CHANNEL_CHAT_PICKME;
    894 
    895                 if (!gc) {
    896                         irc_send_num(ic->irc, 403, "%s :Error joining channel (check control channel?)", ic->name);
    897                 }
    898849
    899850                return FALSE;
     
    912863        }
    913864
    914         if (!(ic->flags & IRC_CHANNEL_TEMP)) {
    915                 /* Remove the reference.
    916                  * We only need it for temp channels that are being freed */
    917                 ic->data = NULL;
    918         }
     865        /* Remove the reference. We don't need it anymore. */
     866        ic->data = NULL;
    919867
    920868        return TRUE;
     
    11071055                df->proto_finished = TRUE;
    11081056        }
    1109 }
    1110 
    1111 static void bee_irc_log(bee_t *bee, const char *tag, const char *msg)
    1112 {
    1113         irc_t *irc = (irc_t *) bee->ui_data;
    1114 
    1115         irc_rootmsg(irc, "%s - %s", tag, msg);
    11161057}
    11171058
     
    11441085        bee_irc_ft_close,
    11451086        bee_irc_ft_finished,
    1146 
    1147         bee_irc_log,
    11481087};
Note: See TracChangeset for help on using the changeset viewer.