diff options
| author | Wilmer van der Gaast <wilmer@gaast.net> | 2009-10-06 22:49:42 +0100 | 
|---|---|---|
| committer | Wilmer van der Gaast <wilmer@gaast.net> | 2009-10-06 22:49:42 +0100 | 
| commit | 7da726b12a546a5022d8f91fa3a34764335ba037 (patch) | |
| tree | d62c303d15faf2abb03616924e6829283c94bace | |
| parent | 860ba6aaeabb25cd27ec70fb4a37d910dd5b3746 (diff) | |
Getting a contact list and online status now. Time to handle messages.
| -rw-r--r-- | protocols/purple/purple.c | 51 | 
1 files changed, 49 insertions, 2 deletions
| diff --git a/protocols/purple/purple.c b/protocols/purple/purple.c index 5817373b..5807d01a 100644 --- a/protocols/purple/purple.c +++ b/protocols/purple/purple.c @@ -46,9 +46,8 @@ typedef struct _PurpleGLibIOClosure {  	gpointer data;  } PurpleGLibIOClosure; -static struct im_connection *purple_ic_by_gc( PurpleConnection *gc ) +static struct im_connection *purple_ic_by_pa( PurpleAccount *pa )  { -	PurpleAccount *pa = purple_connection_get_account( gc );  	GSList *i;  	for( i = purple_connections; i; i = i->next ) @@ -58,6 +57,11 @@ static struct im_connection *purple_ic_by_gc( PurpleConnection *gc )  	return NULL;  } +static struct im_connection *purple_ic_by_gc( PurpleConnection *gc ) +{ +	return purple_ic_by_pa( purple_connection_get_account( gc ) ); +} +  static void purple_glib_io_destroy(gpointer data)  {  	g_free(data); @@ -237,6 +241,48 @@ static PurpleConnectionUiOps bee_conn_uiops =  	prplcb_conn_report_disconnect_reason,  }; +static void prplcb_blist_new( PurpleBlistNode *node ) +{ +	PurpleBuddy *bud = (PurpleBuddy*) node; +	struct im_connection *ic = purple_ic_by_pa( bud->account ); +	 +	if( node->type == PURPLE_BLIST_BUDDY_NODE ) +	{ +		imcb_add_buddy( ic, bud->name, NULL ); +		if( bud->server_alias ) +			imcb_buddy_nick_hint( ic, bud->name, bud->server_alias ); +	} +} + +static void prplcb_blist_update( PurpleBuddyList *list, PurpleBlistNode *node ) +{ +	PurpleBuddy *bud = (PurpleBuddy*) node; +	 +	if( node->type == PURPLE_BLIST_BUDDY_NODE ) +	{ +		imcb_buddy_status( purple_ic_by_pa( bud->account ), bud->name, +		                   purple_presence_is_online( bud->presence ) ? OPT_LOGGED_IN : 0, +		                   NULL, NULL ); +	} +} + +static void prplcb_blist_remove( PurpleBuddyList *list, PurpleBlistNode *node ) +{ +	PurpleBuddy *bud = (PurpleBuddy*) node; +	 +	if( node->type == PURPLE_BLIST_BUDDY_NODE ) +		imcb_remove_buddy( purple_ic_by_pa( bud->account ), bud->name, NULL ); +} + +static PurpleBlistUiOps bee_blist_uiops = +{ +	NULL, +	prplcb_blist_new, +	NULL, +	prplcb_blist_update, +	prplcb_blist_remove, +}; +  static PurpleConversationUiOps bee_conv_uiops =   {  	NULL,                      /* create_conversation  */ @@ -262,6 +308,7 @@ static PurpleConversationUiOps bee_conv_uiops =  static void purple_ui_init()  { +	purple_blist_set_ui_ops( &bee_blist_uiops );  	purple_connections_set_ui_ops( &bee_conn_uiops );  	purple_conversations_set_ui_ops( &bee_conv_uiops );  } | 
