Changeset df701918 for irc_im.c


Ignore:
Timestamp:
2015-12-08T22:31:05Z (8 years ago)
Author:
dequis <dx@…>
Parents:
459dec8
Message:

Add imcb_buddy_nick_change(), like nick_hint but stronger

nick_hint only works when creating new users, it's a no-op after the
user is online. This new function takes care of nick changes after that.

It also helps clean up couple of hacks in irc_im.c \o/

File:
1 edited

Legend:

Unmodified
Added
Removed
  • irc_im.c

    r459dec8 rdf701918  
    342342}
    343343
    344 static gboolean bee_irc_user_nick_update(irc_user_t *iu);
     344static gboolean bee_irc_user_nick_update(irc_user_t *iu, gboolean offline_only);
    345345
    346346static gboolean bee_irc_user_fullname(bee_t *bee, bee_user_t *bu)
     
    370370        }
    371371
    372         bee_irc_user_nick_update(iu);
     372        bee_irc_user_nick_update(iu, TRUE);
    373373
    374374        return TRUE;
     
    377377static gboolean bee_irc_user_nick_hint(bee_t *bee, bee_user_t *bu, const char *hint)
    378378{
    379         bee_irc_user_nick_update((irc_user_t *) bu->ui_data);
     379        bee_irc_user_nick_update((irc_user_t *) bu->ui_data, TRUE);
     380
     381        return TRUE;
     382}
     383
     384static gboolean bee_irc_user_nick_change(bee_t *bee, bee_user_t *bu, const char *nick)
     385{
     386        bee_irc_user_nick_update((irc_user_t *) bu->ui_data, FALSE);
    380387
    381388        return TRUE;
     
    388395        bee_user_flags_t online;
    389396
    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         }
    394 
    395397        bee_irc_channel_update(irc, NULL, iu);
    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 
    406 static gboolean bee_irc_user_nick_update(irc_user_t *iu)
     398        bee_irc_user_nick_update(iu, FALSE);
     399
     400        return TRUE;
     401}
     402
     403static gboolean bee_irc_user_nick_update(irc_user_t *iu, gboolean offline_only)
    407404{
    408405        bee_user_t *bu = iu->bu;
    409406        char *newnick;
    410407
    411         if (bu->flags & BEE_USER_ONLINE) {
     408        if (offline_only && bu->flags & BEE_USER_ONLINE) {
    412409                /* Ignore if the user is visible already. */
    413410                return TRUE;
     
    432429{
    433430        bee_user_t *bu = iu->bu;
    434         bee_user_flags_t online;
    435431
    436432        if (bu == FALSE) {
     
    438434        }
    439435
    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 
    445436        nick_del(bu);
    446         bee_irc_user_nick_update(iu);
    447 
    448         bu->flags |= online;
     437        bee_irc_user_nick_update(iu, FALSE);
     438
    449439}
    450440
     
    11461136
    11471137        bee_irc_log,
     1138        bee_irc_user_nick_change,
    11481139};
Note: See TracChangeset for help on using the changeset viewer.