Mercurial > pidgin
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 * |