diff options
-rw-r--r-- | protocols/nogaim.c | 6 | ||||
-rw-r--r-- | protocols/nogaim.h | 1 | ||||
-rw-r--r-- | protocols/purple/purple.c | 58 |
3 files changed, 51 insertions, 14 deletions
diff --git a/protocols/nogaim.c b/protocols/nogaim.c index 7380c575..e628126f 100644 --- a/protocols/nogaim.c +++ b/protocols/nogaim.c @@ -382,6 +382,12 @@ void imcb_ask( struct im_connection *ic, char *msg, void *data, query_add( (irc_t *) ic->bee->ui_data, ic, msg, doit, dont, g_free, data ); } +void imcb_ask_with_free( struct im_connection *ic, char *msg, void *data, + query_callback doit, query_callback dont, query_callback myfree ) +{ + query_add( (irc_t *) ic->bee->ui_data, ic, msg, doit, dont, myfree, data ); +} + void imcb_add_buddy( struct im_connection *ic, const char *handle, const char *group ) { bee_user_t *bu; diff --git a/protocols/nogaim.h b/protocols/nogaim.h index 5ce62742..e2933e4a 100644 --- a/protocols/nogaim.h +++ b/protocols/nogaim.h @@ -268,6 +268,7 @@ G_MODULE_EXPORT void imcb_error( struct im_connection *ic, char *format, ... ) G * - 'doit' or 'dont' will be called depending of the answer of the user. */ G_MODULE_EXPORT void imcb_ask( struct im_connection *ic, char *msg, void *data, query_callback doit, query_callback dont ); +G_MODULE_EXPORT void imcb_ask_with_free( struct im_connection *ic, char *msg, void *data, query_callback doit, query_callback dont, query_callback myfree ); /* Two common questions you may want to ask: * - X added you to his contact list, allow? diff --git a/protocols/purple/purple.c b/protocols/purple/purple.c index 2935609b..4729794d 100644 --- a/protocols/purple/purple.c +++ b/protocols/purple/purple.c @@ -883,20 +883,22 @@ static void *prplcb_request_action( const char *title, const char *primary, cons return pqad; } +/* static void prplcb_request_test() { fprintf( stderr, "bla\n" ); } +*/ static PurpleRequestUiOps bee_request_uiops = { - prplcb_request_test, - prplcb_request_test, + NULL, + NULL, prplcb_request_action, - prplcb_request_test, - prplcb_request_test, - prplcb_request_test, - prplcb_request_test, + NULL, + NULL, + NULL, + NULL, }; static void prplcb_privacy_permit_added( PurpleAccount *account, const char *name ) @@ -1047,17 +1049,45 @@ static PurpleNotifyUiOps bee_notify_uiops = prplcb_notify_userinfo, }; +static void *prplcb_account_request_authorize( PurpleAccount *account, const char *remote_user, + const char *id, const char *alias, const char *message, gboolean on_list, + PurpleAccountRequestAuthorizationCb authorize_cb, PurpleAccountRequestAuthorizationCb deny_cb, void *user_data ) +{ + struct im_connection *ic = purple_ic_by_pa( account ); + char *q; + + if( alias ) + q = g_strdup_printf( "%s (%s) wants to add you to his/her contact " + "list. (%s)", alias, remote_user, message ); + else + q = g_strdup_printf( "%s wants to add you to his/her contact " + "list. (%s)", remote_user, message ); + + imcb_ask_with_free( ic, q, user_data, authorize_cb, deny_cb, NULL ); + g_free( q ); +} + +static PurpleAccountUiOps bee_account_uiops = +{ + NULL, + NULL, + NULL, + prplcb_account_request_authorize, + NULL, +}; + extern PurpleXferUiOps bee_xfer_uiops; static void purple_ui_init() { - purple_blist_set_ui_ops( &bee_blist_uiops ); purple_connections_set_ui_ops( &bee_conn_uiops ); + purple_blist_set_ui_ops( &bee_blist_uiops ); purple_conversations_set_ui_ops( &bee_conv_uiops ); purple_request_set_ui_ops( &bee_request_uiops ); + purple_privacy_set_ui_ops( &bee_privacy_uiops ); purple_notify_set_ui_ops( &bee_notify_uiops ); + purple_accounts_set_ui_ops( &bee_account_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 ); @@ -1076,10 +1106,10 @@ void purple_initmodule() exit( 1 ); } - purple_util_set_user_dir("/tmp"); - purple_debug_set_enabled(FALSE); - purple_core_set_ui_ops(&bee_core_uiops); - purple_eventloop_set_ui_ops(&glib_eventloops); + purple_util_set_user_dir( "/tmp" ); + purple_debug_set_enabled( FALSE ); + purple_core_set_ui_ops( &bee_core_uiops ); + purple_eventloop_set_ui_ops( &glib_eventloops ); if( !purple_core_init( "BitlBee") ) { /* Initializing the core failed. Terminate. */ @@ -1088,7 +1118,7 @@ void purple_initmodule() } /* This seems like stateful shit we don't want... */ - purple_set_blist(purple_blist_new()); + purple_set_blist( purple_blist_new() ); purple_blist_load(); /* Meh? */ @@ -1119,7 +1149,7 @@ void purple_initmodule() funcs.chat_join = purple_chat_join; funcs.transfer_request = purple_transfer_request; - help = g_string_new("BitlBee libpurple module supports the following IM protocols:\n"); + help = g_string_new( "BitlBee libpurple module supports the following IM protocols:\n" ); /* Add a protocol entry to BitlBee's structures for every protocol supported by this libpurple instance. */ |