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