diff options
Diffstat (limited to 'protocols/purple/purple.c')
| -rw-r--r-- | protocols/purple/purple.c | 75 | 
1 files changed, 75 insertions, 0 deletions
| diff --git a/protocols/purple/purple.c b/protocols/purple/purple.c index 7b020cf7..c9588d7a 100644 --- a/protocols/purple/purple.c +++ b/protocols/purple/purple.c @@ -358,6 +358,34 @@ static void purple_remove_buddy( struct im_connection *ic, char *who, char *grou  	}  } +static void purple_add_permit( struct im_connection *ic, char *who ) +{ +	PurpleAccount *pa = ic->proto_data; +	 +	purple_privacy_permit_add( pa, who, FALSE ); +} + +static void purple_add_deny( struct im_connection *ic, char *who ) +{ +	PurpleAccount *pa = ic->proto_data; +	 +	purple_privacy_deny_add( pa, who, FALSE ); +} + +static void purple_rem_permit( struct im_connection *ic, char *who ) +{ +	PurpleAccount *pa = ic->proto_data; +	 +	purple_privacy_permit_remove( pa, who, FALSE ); +} + +static void purple_rem_deny( struct im_connection *ic, char *who ) +{ +	PurpleAccount *pa = ic->proto_data; +	 +	purple_privacy_deny_remove( pa, who, FALSE ); +} +  static void purple_get_info( struct im_connection *ic, char *who )  {  	serv_get_info( purple_account_get_connection( ic->proto_data ), who ); @@ -800,6 +828,48 @@ static PurpleRequestUiOps bee_request_uiops =  	NULL,  }; +static void prplcb_privacy_permit_added( PurpleAccount *account, const char *name ) +{ +	struct im_connection *ic = purple_ic_by_pa( account ); +	 +	if( !g_slist_find_custom( ic->permit, name, (GCompareFunc) ic->acc->prpl->handle_cmp ) ) +		ic->permit = g_slist_prepend( ic->permit, g_strdup( name ) ); +} + +static void prplcb_privacy_permit_removed( PurpleAccount *account, const char *name ) +{ +	struct im_connection *ic = purple_ic_by_pa( account ); +	void *n; +	 +	n = g_slist_find_custom( ic->permit, name, (GCompareFunc) ic->acc->prpl->handle_cmp ); +	ic->permit = g_slist_remove( ic->permit, n ); +} + +static void prplcb_privacy_deny_added( PurpleAccount *account, const char *name ) +{ +	struct im_connection *ic = purple_ic_by_pa( account ); +	 +	if( !g_slist_find_custom( ic->deny, name, (GCompareFunc) ic->acc->prpl->handle_cmp ) ) +		ic->deny = g_slist_prepend( ic->deny, g_strdup( name ) ); +} + +static void prplcb_privacy_deny_removed( PurpleAccount *account, const char *name ) +{ +	struct im_connection *ic = purple_ic_by_pa( account ); +	void *n; +	 +	n = g_slist_find_custom( ic->deny, name, (GCompareFunc) ic->acc->prpl->handle_cmp ); +	ic->deny = g_slist_remove( ic->deny, n ); +} + +static PurplePrivacyUiOps bee_privacy_uiops = +{ +	prplcb_privacy_permit_added, +	prplcb_privacy_permit_removed, +	prplcb_privacy_deny_added, +	prplcb_privacy_deny_removed, +}; +  static void prplcb_debug_print( PurpleDebugLevel level, const char *category, const char *arg_s )  {  	fprintf( stderr, "DEBUG %s: %s", category, arg_s ); @@ -916,6 +986,7 @@ static void purple_ui_init()  	purple_request_set_ui_ops( &bee_request_uiops );  	purple_notify_set_ui_ops( &bee_notify_uiops );  	purple_xfers_set_ui_ops( &bee_xfer_uiops ); +	purple_privacy_set_ui_ops( &bee_privacy_uiops );  	if( getenv( "BITLBEE_DEBUG" ) )  		purple_debug_set_ui_ops( &bee_debug_uiops ); @@ -961,6 +1032,10 @@ void purple_initmodule()  	funcs.set_away = purple_set_away;  	funcs.add_buddy = purple_add_buddy;  	funcs.remove_buddy = purple_remove_buddy; +	funcs.add_permit = purple_add_permit; +	funcs.add_deny = purple_add_deny; +	funcs.rem_permit = purple_rem_permit; +	funcs.rem_deny = purple_rem_deny;  	funcs.get_info = purple_get_info;  	funcs.keepalive = purple_keepalive;  	funcs.send_typing = purple_send_typing; | 
