comparison libpurple/prpl.c @ 29362:18773d906caf

propagate from branch 'im.pidgin.pidgin' (head 0f0a1bc362f71dfc0f4d78dd9a2056f4087c1025) to branch 'im.pidgin.pidgin.next.minor' (head 909d1883abe3a8b3e8b735bfdf8f3bac7e52e0f0)
author Paul Aurich <paul@darkrain42.org>
date Fri, 12 Feb 2010 21:09:34 +0000
parents 31a34388fb1d
children a8cc50c2279f
comparison
equal deleted inserted replaced
29036:08cc1cf27ac4 29362:18773d906caf
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 = purple_buddy_get_media_caps(buddy);
599 PurpleMediaCaps newcaps = 0;
600 const gchar *bname = purple_buddy_get_name(buddy);
601 list = g_slist_delete_link(list, list);
602
603
604 newcaps = purple_prpl_get_media_caps(account, bname);
605 purple_buddy_set_media_caps(buddy, newcaps);
606
607 if (oldcaps == newcaps)
608 continue;
609
610 purple_signal_emit(purple_blist_get_handle(),
611 "buddy-caps-changed", buddy,
612 newcaps, oldcaps);
613 }
614 #endif
615 }
616
563 /************************************************************************** 617 /**************************************************************************
564 * Protocol Plugin Subsystem API 618 * Protocol Plugin Subsystem API
565 **************************************************************************/ 619 **************************************************************************/
566 620
567 PurplePlugin * 621 PurplePlugin *