diff options
| author | Wilmer van der Gaast <wilmer@gaast.net> | 2010-04-01 23:25:41 -0400 | 
|---|---|---|
| committer | Wilmer van der Gaast <wilmer@gaast.net> | 2010-04-01 23:25:41 -0400 | 
| commit | f012a9f0bb363cfcbdb6f2d563254ffba26b9fc8 (patch) | |
| tree | e73e976243ac36a082f4e7f5cd354d8d1103f0e3 | |
| parent | 231b08b07a2807881da1327408e33855370b7b95 (diff) | |
Can receive messages again.
| -rw-r--r-- | irc_im.c | 31 | ||||
| -rw-r--r-- | protocols/bee.h | 1 | ||||
| -rw-r--r-- | protocols/bee_user.c | 95 | 
3 files changed, 45 insertions, 82 deletions
| @@ -62,6 +62,9 @@ static gboolean bee_irc_user_new( bee_t *bee, bee_user_t *bu )  		iu->user = g_strdup( bu->handle );  	} +	if( set_getbool( &bee->set, "private" ) ) +		iu->flags |= IRC_USER_PRIVATE; +	  	iu->f = &irc_user_im_funcs;  	//iu->last_typing_notice = 0; @@ -89,10 +92,38 @@ static gboolean bee_irc_user_status( bee_t *bee, bee_user_t *bu, bee_user_t *old  	return TRUE;  } +static gboolean bee_irc_user_msg( bee_t *bee, bee_user_t *bu, const char *msg, time_t sent_at ) +{ +	irc_t *irc = bee->ui_data; +	irc_channel_t *ic = irc->channels->data; +	irc_user_t *iu = (irc_user_t *) bu->ui_data; +	char *dst, *prefix = NULL; +	char *wrapped; +	 +	if( iu->flags & IRC_USER_PRIVATE ) +	{ +		dst = irc->user->nick; +	} +	else +	{ +		dst = ic->name; +		prefix = g_strdup_printf( "%s%s", irc->user->nick, set_getstr( &bee->set, "to_char" ) ); +	} +	 +	wrapped = word_wrap( msg, 425 ); +	irc_send_msg( iu, "PRIVMSG", dst, wrapped, prefix ); +	 +	g_free( wrapped ); +	g_free( prefix ); +	 +	return TRUE; +} +  const struct bee_ui_funcs irc_ui_funcs = {  	bee_irc_user_new,  	bee_irc_user_free,  	bee_irc_user_status, +	bee_irc_user_msg,  }; diff --git a/protocols/bee.h b/protocols/bee.h index 023c1644..62c73e94 100644 --- a/protocols/bee.h +++ b/protocols/bee.h @@ -68,6 +68,7 @@ typedef struct bee_ui_funcs  	gboolean (*user_new)( bee_t *bee, struct bee_user *bu );  	gboolean (*user_free)( bee_t *bee, struct bee_user *bu );  	gboolean (*user_status)( bee_t *bee, struct bee_user *bu, struct bee_user *old ); +	gboolean (*user_msg)( bee_t *bee, bee_user_t *bu, const char *msg, time_t sent_at );  } bee_ui_funcs_t; diff --git a/protocols/bee_user.c b/protocols/bee_user.c index cbcebe33..675d37c5 100644 --- a/protocols/bee_user.c +++ b/protocols/bee_user.c @@ -115,11 +115,11 @@ void imcb_buddy_status( struct im_connection *ic, const char *handle, int flags,  		}  		else  		{ -			if( set_getbool( &ic->bee->set, "debug" ) || g_strcasecmp( set_getstr( &ic->bee->set, "handle_unknown" ), "ignore" ) != 0 ) +			if( g_strcasecmp( set_getstr( &ic->bee->set, "handle_unknown" ), "ignore" ) != 0 )  			{ -				imcb_log( ic, "imcb_buddy_status() for unknown handle %s:", handle ); -				imcb_log( ic, "flags = %d, state = %s, message = %s", flags, -				          state ? state : "NULL", message ? message : "NULL" ); +				imcb_log( ic, "imcb_buddy_status() for unknown handle %s:\n" +				              "flags = %d, state = %s, message = %s", handle, flags, +				              state ? state : "NULL", message ? message : "NULL" );  			}  			return; @@ -141,54 +141,6 @@ void imcb_buddy_status( struct im_connection *ic, const char *handle, int flags,  	g_free( old->status );  	g_free( old );  #if 0	 -	oa = u->away != NULL; -	oo = u->online; -	 -	g_free( u->away ); -	g_free( u->status_msg ); -	u->away = u->status_msg = NULL; -	 -	if( ( flags & OPT_LOGGED_IN ) && !u->online ) -	{ -		irc_spawn( ic->irc, u ); -		u->online = 1; -	} -	else if( !( flags & OPT_LOGGED_IN ) && u->online ) -	{ -		struct groupchat *c; -		 -		irc_kill( ic->irc, u ); -		u->online = 0; -		 -		/* Remove him/her from the groupchats to prevent PART messages after he/she QUIT already */ -		for( c = ic->groupchats; c; c = c->next ) -			remove_chat_buddy_silent( c, handle ); -	} -	 -	if( flags & OPT_AWAY ) -	{ -		if( state && message ) -		{ -			u->away = g_strdup_printf( "%s (%s)", state, message ); -		} -		else if( state ) -		{ -			u->away = g_strdup( state ); -		} -		else if( message ) -		{ -			u->away = g_strdup( message ); -		} -		else -		{ -			u->away = g_strdup( "Away" ); -		} -	} -	else -	{ -		u->status_msg = g_strdup( message ); -	} -	  	/* LISPy... */  	if( ( set_getbool( &ic->bee->set, "away_devoice" ) ) &&		/* Don't do a thing when user doesn't want it */  	    ( u->online ) &&						/* Don't touch offline people */ @@ -215,53 +167,32 @@ void imcb_buddy_status( struct im_connection *ic, const char *handle, int flags,  void imcb_buddy_msg( struct im_connection *ic, const char *handle, char *msg, uint32_t flags, time_t sent_at )  { -#if 0  	bee_t *bee = ic->bee;  	char *wrapped; -	user_t *u; +	bee_user_t *bu; -	u = user_findhandle( ic, handle ); +	bu = bee_user_by_handle( bee, ic, handle ); -	if( !u ) +	if( !bu )  	{  		char *h = set_getstr( &bee->set, "handle_unknown" );  		if( g_strcasecmp( h, "ignore" ) == 0 )  		{ -			if( set_getbool( &bee->set, "debug" ) ) -				imcb_log( ic, "Ignoring message from unknown handle %s", handle ); -			  			return;  		}  		else if( g_strncasecmp( h, "add", 3 ) == 0 )  		{ -			int private = set_getbool( &bee->set, "private" ); -			 -			if( h[3] ) -			{ -				if( g_strcasecmp( h + 3, "_private" ) == 0 ) -					private = 1; -				else if( g_strcasecmp( h + 3, "_channel" ) == 0 ) -					private = 0; -			} -			 -			imcb_add_buddy( ic, handle, NULL ); -			u = user_findhandle( ic, handle ); -			u->is_private = private; -		} -		else -		{ -			imcb_log( ic, "Message from unknown handle %s:", handle ); -			u = user_find( irc, irc->mynick ); +			bu = bee_user_new( bee, ic, handle );  		}  	}  	if( ( g_strcasecmp( set_getstr( &ic->bee->set, "strip_html" ), "always" ) == 0 ) ||  	    ( ( ic->flags & OPT_DOES_HTML ) && set_getbool( &ic->bee->set, "strip_html" ) ) )  		strip_html( msg ); - -	wrapped = word_wrap( msg, 425 ); -	irc_msgfrom( irc, u->nick, wrapped ); -	g_free( wrapped ); -#endif +	 +	if( bee->ui->user_msg && bu ) +		bee->ui->user_msg( bee, bu, msg, sent_at ); +	else +		imcb_log( ic, "Message from unknown handle %s:\n%s", handle, msg );  } | 
