comparison libpurple/prpl.c @ 29712:d5fe33c3a765

propagate from branch 'im.pidgin.pidgin' (head 42a8485e73af5f2091d307b51c09dded94eceb24) to branch 'im.pidgin.pidgin.next.minor' (head 4edcf8da14be654127117da5af0cbdd7a0616439)
author John Bailey <rekkanoryo@rekkanoryo.org>
date Tue, 17 Nov 2009 07:33:47 +0000
parents 7b1cfd48beab
children 31a34388fb1d
comparison
equal deleted inserted replaced
28963:546e870dc506 29712:d5fe33c3a765
286 286
287 g_slist_free(list); 287 g_slist_free(list);
288 288
289 /* The buddy is no longer online, they are therefore by definition not 289 /* The buddy is no longer online, they are therefore by definition not
290 * still typing to us. */ 290 * still typing to us. */
291 if (!purple_status_is_online(status)) 291 if (!purple_status_is_online(status)) {
292 serv_got_typing_stopped(purple_account_get_connection(account), name); 292 serv_got_typing_stopped(purple_account_get_connection(account), name);
293 purple_prpl_got_media_caps(account, name);
294 }
293 } 295 }
294 296
295 void purple_prpl_got_user_status_deactive(PurpleAccount *account, const char *name, 297 void purple_prpl_got_user_status_deactive(PurpleAccount *account, const char *name,
296 const char *status_id) 298 const char *status_id)
297 { 299 {
403 } 405 }
404 406
405 statuses = g_list_reverse(statuses); 407 statuses = g_list_reverse(statuses);
406 408
407 return statuses; 409 return statuses;
410 }
411
412 static void
413 purple_prpl_attention(PurpleConversation *conv, const char *who,
414 guint type, PurpleMessageFlags flags, time_t mtime)
415 {
416 PurpleAccount *account = purple_conversation_get_account(conv);
417 purple_signal_emit(purple_conversations_get_handle(),
418 flags == PURPLE_MESSAGE_SEND ? "sent-attention" : "got-attention",
419 account, who, conv, type);
408 } 420 }
409 421
410 void 422 void
411 purple_prpl_send_attention(PurpleConnection *gc, const char *who, guint type_code) 423 purple_prpl_send_attention(PurpleConnection *gc, const char *who, guint type_code)
412 { 424 {
450 if (!send_attention(gc, who, type_code)) 462 if (!send_attention(gc, who, type_code))
451 return; 463 return;
452 464
453 conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, gc->account, who); 465 conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, gc->account, who);
454 purple_conv_im_write(PURPLE_CONV_IM(conv), NULL, description, flags, mtime); 466 purple_conv_im_write(PURPLE_CONV_IM(conv), NULL, description, flags, mtime);
467 purple_prpl_attention(conv, who, type_code, PURPLE_MESSAGE_SEND, time(NULL));
455 468
456 g_free(description); 469 g_free(description);
457 } 470 }
458 471
459 static void 472 static void
501 } 514 }
502 515
503 void 516 void
504 purple_prpl_got_attention(PurpleConnection *gc, const char *who, guint type_code) 517 purple_prpl_got_attention(PurpleConnection *gc, const char *who, guint type_code)
505 { 518 {
519 PurpleConversation *conv = NULL;
520 PurpleAccount *account = purple_connection_get_account(gc);
521
506 got_attention(gc, -1, who, type_code); 522 got_attention(gc, -1, who, type_code);
523 conv =
524 purple_find_conversation_with_account(PURPLE_CONV_TYPE_ANY, who, account);
525 if (conv)
526 purple_prpl_attention(conv, who, type_code, PURPLE_MESSAGE_RECV,
527 time(NULL));
507 } 528 }
508 529
509 void 530 void
510 purple_prpl_got_attention_in_chat(PurpleConnection *gc, int id, const char *who, guint type_code) 531 purple_prpl_got_attention_in_chat(PurpleConnection *gc, int id, const char *who, guint type_code)
511 { 532 {
558 } 579 }
559 #endif 580 #endif
560 return PURPLE_MEDIA_CAPS_NONE; 581 return PURPLE_MEDIA_CAPS_NONE;
561 } 582 }
562 583
584 void
585 purple_prpl_got_media_caps(PurpleAccount *account, const char *name)
586 {
587 #ifdef USE_VV
588 GSList *list;
589
590 g_return_if_fail(account != NULL);
591 g_return_if_fail(name != NULL);
592
593 if ((list = purple_find_buddies(account, name)) == NULL)
594 return;
595
596 while (list) {
597 PurpleBuddy *buddy = list->data;
598 PurpleMediaCaps oldcaps = buddy->media_caps;
599 const gchar *bname = purple_buddy_get_name(buddy);
600 list = g_slist_delete_link(list, list);
601 buddy->media_caps = purple_prpl_get_media_caps(account, bname);
602
603 if (oldcaps == buddy->media_caps)
604 continue;
605
606 purple_signal_emit(purple_blist_get_handle(),
607 "buddy-caps-changed", buddy,
608 buddy->media_caps, oldcaps);
609 }
610 #endif
611 }
612
563 /************************************************************************** 613 /**************************************************************************
564 * Protocol Plugin Subsystem API 614 * Protocol Plugin Subsystem API
565 **************************************************************************/ 615 **************************************************************************/
566 616
567 PurplePlugin * 617 PurplePlugin *