aboutsummaryrefslogtreecommitdiffstats
path: root/protocols/nogaim.c
diff options
context:
space:
mode:
authorWilmer van der Gaast <wilmer@gaast.net>2007-04-15 21:01:13 -0700
committerWilmer van der Gaast <wilmer@gaast.net>2007-04-15 21:01:13 -0700
commit6bbb939e953bbe1ca9ed3101a1569abe4521f543 (patch)
tree66ad8cc5189d69c57733a12c6d64c50a86a7ff1d /protocols/nogaim.c
parent84b045d409f1e8da6d8bf379c6fef7236dcd9bcd (diff)
Split serv_got_update() into imcb_buddy_(status|times). (Well, the second
one isn't implemented yet, but I'll do that later.) At last I got rid of the hack called get_status_string(). And now Yahoo seems to mess up away messages...
Diffstat (limited to 'protocols/nogaim.c')
-rw-r--r--protocols/nogaim.c57
1 files changed, 33 insertions, 24 deletions
diff --git a/protocols/nogaim.c b/protocols/nogaim.c
index 6121d398..ef30f749 100644
--- a/protocols/nogaim.c
+++ b/protocols/nogaim.c
@@ -186,7 +186,7 @@ static void serv_got_crap( struct im_connection *ic, char *format, ... )
va_end( params );
if( ( g_strcasecmp( set_getstr( &ic->irc->set, "strip_html" ), "always" ) == 0 ) ||
- ( ( ic->flags & OPT_CONN_HTML ) && set_getbool( &ic->irc->set, "strip_html" ) ) )
+ ( ( ic->flags & OPT_DOES_HTML ) && set_getbool( &ic->irc->set, "strip_html" ) ) )
strip_html( text );
/* Try to find a different connection on the same protocol. */
@@ -493,32 +493,31 @@ void imcb_ask_add( struct im_connection *ic, char *handle, const char *realname
/* server.c */
-void serv_got_update( struct im_connection *ic, char *handle, int loggedin, int evil, time_t signon, time_t idle, int type, guint caps )
+void imcb_buddy_status( struct im_connection *ic, const char *handle, int flags, const char *state, const char *message )
{
user_t *u;
int oa, oo;
- u = user_findhandle( ic, handle );
+ u = user_findhandle( ic, (char*) handle );
if( !u )
{
if( g_strcasecmp( set_getstr( &ic->irc->set, "handle_unknown" ), "add" ) == 0 )
{
- add_buddy( ic, NULL, handle, NULL );
- u = user_findhandle( ic, handle );
+ add_buddy( ic, NULL, (char*) handle, NULL );
+ u = user_findhandle( ic, (char*) handle );
}
else
{
if( set_getbool( &ic->irc->set, "debug" ) || g_strcasecmp( set_getstr( &ic->irc->set, "handle_unknown" ), "ignore" ) != 0 )
{
- imcb_log( ic, "serv_got_update() for handle %s:", handle );
- imcb_log( ic, "loggedin = %d, type = %d", loggedin, type );
+ 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" );
}
return;
}
- /* Why did we have this here....
- return; */
}
oa = u->away != NULL;
@@ -530,12 +529,12 @@ void serv_got_update( struct im_connection *ic, char *handle, int loggedin, int
u->away = NULL;
}
- if( loggedin && !u->online )
+ if( ( flags & OPT_LOGGED_IN ) && !u->online )
{
irc_spawn( ic->irc, u );
u->online = 1;
}
- else if( !loggedin && u->online )
+ else if( !( flags & OPT_LOGGED_IN ) && u->online )
{
struct groupchat *c;
@@ -544,19 +543,29 @@ void serv_got_update( struct im_connection *ic, char *handle, int loggedin, int
/* Remove him/her from the conversations to prevent PART messages after he/she QUIT already */
for( c = ic->conversations; c; c = c->next )
- remove_chat_buddy_silent( c, handle );
+ remove_chat_buddy_silent( c, (char*) handle );
}
- if( ( type & UC_UNAVAILABLE ) && ( strcmp( ic->acc->prpl->name, "oscar" ) == 0 || strcmp( ic->acc->prpl->name, "icq" ) == 0 ) )
- {
- u->away = g_strdup( "Away" );
- }
- else if( ( type & UC_UNAVAILABLE ) && ic->acc->prpl->get_status_string )
+ if( flags & OPT_AWAY )
{
- u->away = g_strdup( ic->acc->prpl->get_status_string( ic, type ) );
+ 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->away = NULL;
+ /* else waste_any_state_information_for_now(); */
/* LISPy... */
if( ( set_getbool( &ic->irc->set, "away_devoice" ) ) && /* Don't do a thing when user doesn't want it */
@@ -611,7 +620,7 @@ void serv_got_im( struct im_connection *ic, char *handle, char *msg, guint32 fla
}
if( ( g_strcasecmp( set_getstr( &ic->irc->set, "strip_html" ), "always" ) == 0 ) ||
- ( ( ic->flags & OPT_CONN_HTML ) && set_getbool( &ic->irc->set, "strip_html" ) ) )
+ ( ( ic->flags & OPT_DOES_HTML ) && set_getbool( &ic->irc->set, "strip_html" ) ) )
strip_html( msg );
while( strlen( msg ) > 425 )
@@ -717,7 +726,7 @@ void serv_got_chat_in( struct groupchat *c, char *who, int whisper, char *msg, t
u = user_findhandle( ic, who );
if( ( g_strcasecmp( set_getstr( &ic->irc->set, "strip_html" ), "always" ) == 0 ) ||
- ( ( ic->flags & OPT_CONN_HTML ) && set_getbool( &ic->irc->set, "strip_html" ) ) )
+ ( ( ic->flags & OPT_DOES_HTML ) && set_getbool( &ic->irc->set, "strip_html" ) ) )
strip_html( msg );
if( c && u )
@@ -924,7 +933,7 @@ int imc_buddy_msg( struct im_connection *ic, char *handle, char *msg, int flags
char *buf = NULL;
int st;
- if( ( ic->flags & OPT_CONN_HTML ) && ( g_strncasecmp( msg, "<html>", 6 ) != 0 ) )
+ if( ( ic->flags & OPT_DOES_HTML ) && ( g_strncasecmp( msg, "<html>", 6 ) != 0 ) )
{
buf = escape_html( msg );
msg = buf;
@@ -940,7 +949,7 @@ int imc_chat_msg( struct groupchat *c, char *msg, int flags )
{
char *buf = NULL;
- if( ( c->ic->flags & OPT_CONN_HTML ) && ( g_strncasecmp( msg, "<html>", 6 ) != 0 ) )
+ if( ( c->ic->flags & OPT_DOES_HTML ) && ( g_strncasecmp( msg, "<html>", 6 ) != 0 ) )
{
buf = escape_html( msg );
msg = buf;