Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • irc_im.c

    r30093fa r03df717  
    120120        }
    121121
     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);
     126        }
     127
    122128        if ((bu->flags & BEE_USER_ONLINE) != (old->flags & BEE_USER_ONLINE)) {
    123129                if (bu->flags & BEE_USER_ONLINE) {
     
    147153
    148154        bee_irc_channel_update(irc, NULL, iu);
    149 
    150         /* If away-notify enabled, send status updates when:
    151          * Away or Online state changes
    152          * Status changes (e.g. "Away" to "Mobile")
    153          * Status message changes
    154          */
    155         if ((irc->caps & CAP_AWAY_NOTIFY) &&
    156             ((bu->flags & BEE_USER_AWAY) != (old->flags & BEE_USER_AWAY) ||
    157              (bu->flags & BEE_USER_ONLINE) != (old->flags & BEE_USER_ONLINE) ||
    158              (g_strcmp0(bu->status, old->status) != 0) ||
    159              (g_strcmp0(bu->status_msg, old->status_msg) != 0))) {
    160                 irc_send_away_notify(iu);
    161         }
    162155
    163156        return TRUE;
     
    299292        }
    300293
    301         wrapped = word_wrap(msg, IRC_WORD_WRAP);
     294        wrapped = word_wrap(msg, 425);
    302295        irc_send_msg(src_iu, message_type, dst, wrapped, prefix);
    303296        g_free(wrapped);
     
    349342}
    350343
    351 static gboolean bee_irc_user_nick_update(irc_user_t *iu, gboolean offline_only);
     344static gboolean bee_irc_user_nick_update(irc_user_t *iu);
    352345
    353346static gboolean bee_irc_user_fullname(bee_t *bee, bee_user_t *bu)
     
    377370        }
    378371
    379         bee_irc_user_nick_update(iu, TRUE);
     372        bee_irc_user_nick_update(iu);
    380373
    381374        return TRUE;
     
    384377static gboolean bee_irc_user_nick_hint(bee_t *bee, bee_user_t *bu, const char *hint)
    385378{
    386         bee_irc_user_nick_update((irc_user_t *) bu->ui_data, TRUE);
    387 
    388         return TRUE;
    389 }
    390 
    391 static gboolean bee_irc_user_nick_change(bee_t *bee, bee_user_t *bu, const char *nick)
    392 {
    393         bee_irc_user_nick_update((irc_user_t *) bu->ui_data, FALSE);
     379        bee_irc_user_nick_update((irc_user_t *) bu->ui_data);
    394380
    395381        return TRUE;
     
    400386        irc_user_t *iu = (irc_user_t *) bu->ui_data;
    401387        irc_t *irc = (irc_t *) bee->ui_data;
     388        bee_user_flags_t online;
     389
     390        /* Take the user offline temporarily so we can change the nick (if necessary). */
     391        if ((online = bu->flags & BEE_USER_ONLINE)) {
     392                bu->flags &= ~BEE_USER_ONLINE;
     393        }
    402394
    403395        bee_irc_channel_update(irc, NULL, iu);
    404         bee_irc_user_nick_update(iu, FALSE);
    405 
    406         return TRUE;
    407 }
    408 
    409 static gboolean bee_irc_user_nick_update(irc_user_t *iu, gboolean offline_only)
     396        bee_irc_user_nick_update(iu);
     397
     398        if (online) {
     399                bu->flags |= online;
     400                bee_irc_channel_update(irc, NULL, iu);
     401        }
     402
     403        return TRUE;
     404}
     405
     406static gboolean bee_irc_user_nick_update(irc_user_t *iu)
    410407{
    411408        bee_user_t *bu = iu->bu;
    412409        char *newnick;
    413410
    414         if (offline_only && bu->flags & BEE_USER_ONLINE) {
     411        if (bu->flags & BEE_USER_ONLINE) {
    415412                /* Ignore if the user is visible already. */
    416413                return TRUE;
     
    435432{
    436433        bee_user_t *bu = iu->bu;
     434        bee_user_flags_t online;
    437435
    438436        if (bu == FALSE) {
     
    440438        }
    441439
     440        /* In this case, pretend the user is offline. */
     441        if ((online = bu->flags & BEE_USER_ONLINE)) {
     442                bu->flags &= ~BEE_USER_ONLINE;
     443        }
     444
    442445        nick_del(bu);
    443         bee_irc_user_nick_update(iu, FALSE);
    444 
     446        bee_irc_user_nick_update(iu);
     447
     448        bu->flags |= online;
    445449}
    446450
     
    457461        }
    458462
    459         if (iu->last_channel == NULL &&
    460             (away = irc_user_get_away(iu)) &&
     463        if ((away = irc_user_get_away(iu)) &&
    461464            time(NULL) >= iu->away_reply_timeout) {
    462465                irc_send_num(iu->irc, 301, "%s :%s", iu->nick, away);
     
    673676        }
    674677
    675         wrapped = word_wrap(msg, IRC_WORD_WRAP);
     678        wrapped = word_wrap(msg, 425);
    676679        irc_send_msg(iu, "PRIVMSG", ic->name, wrapped, ts);
    677680        g_free(ts);
     
    11431146
    11441147        bee_irc_log,
    1145         bee_irc_user_nick_change,
    11461148};
Note: See TracChangeset for help on using the changeset viewer.