- Timestamp:
- 2010-05-02T15:53:18Z (15 years ago)
- Branches:
- master
- Children:
- 15794dc
- Parents:
- a348d00
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
protocols/purple/purple.c
ra348d00 r8ad5c34 51 51 { 52 52 return purple_ic_by_pa( purple_connection_get_account( gc ) ); 53 } 54 55 static gboolean purple_menu_cmp( const char *a, const char *b ) 56 { 57 while( *a && *b ) 58 { 59 while( *a == '_' ) a ++; 60 while( *b == '_' ) b ++; 61 if( tolower( *a ) != tolower( *b ) ) 62 return FALSE; 63 64 a ++; 65 b ++; 66 } 67 68 return ( *a == '\0' && *b == '\0' ); 53 69 } 54 70 … … 372 388 } 373 389 390 struct groupchat *purple_chat_with( struct im_connection *ic, char *who ) 391 { 392 /* No, "of course" this won't work this way. Or in fact, it almost 393 does, but it only lets you send msgs to it, you won't receive 394 any. Instead, we have to click the virtual menu item. 395 PurpleAccount *pa = ic->proto_data; 396 PurpleConversation *pc; 397 PurpleConvChat *pcc; 398 struct groupchat *gc; 399 400 gc = imcb_chat_new( ic, "BitlBee-libpurple groupchat" ); 401 gc->data = pc = purple_conversation_new( PURPLE_CONV_TYPE_CHAT, pa, "BitlBee-libpurple groupchat" ); 402 pc->ui_data = gc; 403 404 pcc = PURPLE_CONV_CHAT( pc ); 405 purple_conv_chat_add_user( pcc, ic->acc->user, "", 0, TRUE ); 406 purple_conv_chat_invite_user( pcc, who, "Please join my chat", FALSE ); 407 //purple_conv_chat_add_user( pcc, who, "", 0, TRUE ); 408 */ 409 410 /* There went my nice afternoon. :-( */ 411 412 PurpleAccount *pa = ic->proto_data; 413 PurplePlugin *prpl = purple_plugins_find_with_id( pa->protocol_id ); 414 PurplePluginProtocolInfo *pi = prpl->info->extra_info; 415 PurpleBuddy *pb = purple_find_buddy( (PurpleAccount*) ic->proto_data, who ); 416 PurpleMenuAction *mi; 417 GList *menu; 418 void (*callback)(PurpleBlistNode *, gpointer); /* FFFFFFFFFFFFFUUUUUUUUUUUUUU */ 419 420 if( !pb || !pi || !pi->blist_node_menu ) 421 return NULL; 422 423 menu = pi->blist_node_menu( &pb->node ); 424 while( menu ) 425 { 426 mi = menu->data; 427 if( purple_menu_cmp( mi->label, "initiate chat" ) || 428 purple_menu_cmp( mi->label, "initiate conference" ) ) 429 break; 430 menu = menu->next; 431 } 432 433 if( menu == NULL ) 434 return NULL; 435 436 /* Call the fucker. */ 437 callback = (void*) mi->callback; 438 callback( &pb->node, menu->data ); 439 440 return NULL; 441 } 442 443 void purple_chat_invite( struct groupchat *gc, char *who, char *message ) 444 { 445 PurpleConversation *pc = gc->data; 446 PurpleConvChat *pcc = PURPLE_CONV_CHAT( pc ); 447 448 purple_conv_chat_invite_user( pcc, who, message && *message ? message : "Please join my chat", FALSE ); 449 } 450 374 451 void purple_transfer_request( struct im_connection *ic, file_transfer_t *ft, char *handle ); 375 452 … … 537 614 struct groupchat *gc = conv->ui_data; 538 615 GList *b; 616 617 if( !gc->joined && strcmp( conv->account->protocol_id, "prpl-msn" ) == 0 ) 618 { 619 /* Work around the broken MSN module which fucks up the user's 620 handle completely when informing him/her that he just 621 successfully joined the room s/he just created (v2.6.6). */ 622 imcb_chat_add_buddy( gc, gc->ic->acc->user ); 623 } 539 624 540 625 for( b = cbuddies; b; b = b->next ) … … 985 1070 /* TODO(wilmer): Set these only for protocols that support them? */ 986 1071 funcs.chat_msg = purple_chat_msg; 1072 funcs.chat_with = purple_chat_with; 1073 funcs.chat_invite = purple_chat_invite; 987 1074 funcs.transfer_request = purple_transfer_request; 988 1075
Note: See TracChangeset
for help on using the changeset viewer.