diff options
| author | Wilmer van der Gaast <wilmer@gaast.net> | 2010-07-13 00:22:53 +0100 | 
|---|---|---|
| committer | Wilmer van der Gaast <wilmer@gaast.net> | 2010-07-13 00:22:53 +0100 | 
| commit | badd1484469ab6280de977eb179db00820868c03 (patch) | |
| tree | 6887227b5b1a273674b421cc61261aeddfbe68cc /irc_im.c | |
| parent | 09dfb686be1297e9ff0a9b434ef865b779a60bc3 (diff) | |
Reformat nicks whenever fullname/nick/group changes (but at least for now
still only for offline users).
Diffstat (limited to 'irc_im.c')
| -rw-r--r-- | irc_im.c | 70 | 
1 files changed, 23 insertions, 47 deletions
| @@ -241,7 +241,7 @@ static gboolean bee_irc_user_typing( bee_t *bee, bee_user_t *bu, uint32_t flags  	return TRUE;  } -static gboolean bee_irc_user_nick_hint( bee_t *bee, bee_user_t *bu, const char *hint ); +static gboolean bee_irc_user_nick_update( irc_user_t *iu );  static gboolean bee_irc_user_fullname( bee_t *bee, bee_user_t *bu )  { @@ -264,30 +264,33 @@ static gboolean bee_irc_user_fullname( bee_t *bee, bee_user_t *bu )  		irc_send_msg( iu, "NOTICE", irc->user->nick, msg, NULL );  	} -	s = set_getstr( &bu->ic->acc->set, "nick_source" ); -	if( strcmp( s, "handle" ) != 0 ) -	{ -		char *name = g_strdup( bu->fullname ); -		 -		if( strcmp( s, "first_name" ) == 0 ) -		{ -			int i; -			for( i = 0; name[i] && !isspace( name[i] ); i ++ ) {} -			name[i] = '\0'; -		} -		 -		bee_irc_user_nick_hint( bee, bu, name ); -		 -		g_free( name ); -	} +	bee_irc_user_nick_update( iu );  	return TRUE;  }  static gboolean bee_irc_user_nick_hint( bee_t *bee, bee_user_t *bu, const char *hint )  { -	irc_user_t *iu = bu->ui_data; -	char newnick[MAX_NICK_LENGTH+1], *translit; +	bee_irc_user_nick_update( (irc_user_t*) bu->ui_data ); +	 +	return TRUE; +} + +static gboolean bee_irc_user_group( bee_t *bee, bee_user_t *bu ) +{ +	irc_user_t *iu = (irc_user_t *) bu->ui_data; +	irc_t *irc = (irc_t *) bee->ui_data; +	 +	bee_irc_channel_update( irc, NULL, iu ); +	bee_irc_user_nick_update( iu ); +	 +	return TRUE; +} + +static gboolean bee_irc_user_nick_update( irc_user_t *iu ) +{ +	bee_user_t *bu = iu->bu; +	char *newnick;  	if( bu->flags & BEE_USER_ONLINE )  		/* Ignore if the user is visible already. */ @@ -297,27 +300,10 @@ static gboolean bee_irc_user_nick_hint( bee_t *bee, bee_user_t *bu, const char *  		/* The user already assigned a nickname to this person. */  		return TRUE; -	/* Credits to Josay_ in #bitlbee for this idea. //TRANSLIT should -	   do lossy/approximate conversions, so letters with accents don't -	   just get stripped. Note that it depends on LC_CTYPE being set to -	   something other than C/POSIX. */ -	translit = g_convert( hint, -1, "ASCII//TRANSLIT//IGNORE", "UTF-8", -	                      NULL, NULL, NULL ); -	 -	strncpy( newnick, translit ? : hint, MAX_NICK_LENGTH ); -	newnick[MAX_NICK_LENGTH] = 0; -	g_free( translit ); -	 -	/* Some processing to make sure this string is a valid IRC nickname. */ -	nick_strip( newnick ); -	if( set_getbool( &bee->set, "lcnicks" ) ) -		nick_lc( newnick ); +	newnick = nick_get( bu );  	if( strcmp( iu->nick, newnick ) != 0 )  	{ -		/* Only do this if newnick is different from the current one. -		   If rejoining a channel, maybe we got this nick already -		   (and dedupe would only add an underscore. */  		nick_dedupe( bu, newnick );  		irc_user_set_nick( iu, newnick );  	} @@ -325,16 +311,6 @@ static gboolean bee_irc_user_nick_hint( bee_t *bee, bee_user_t *bu, const char *  	return TRUE;  } -static gboolean bee_irc_user_group( bee_t *bee, bee_user_t *bu ) -{ -	irc_user_t *iu = (irc_user_t *) bu->ui_data; -	irc_t *irc = (irc_t *) bee->ui_data; -	 -	bee_irc_channel_update( irc, NULL, iu ); -	 -	return TRUE; -} -  /* IRC->IM calls */  static gboolean bee_irc_user_privmsg_cb( gpointer data, gint fd, b_input_condition cond ); | 
