Mercurial > pidgin.yaz
comparison pidgin/gtkmedia.c @ 26464:f42892982e30
Display which type of media session is being requested.
author | Mike Ruprecht <maiku@soc.pidgin.im> |
---|---|
date | Mon, 30 Mar 2009 23:09:40 +0000 |
parents | b0a9c48b5f69 |
children | bea334b214fa |
comparison
equal
deleted
inserted
replaced
26463:6bcf5ad967ea | 26464:f42892982e30 |
---|---|
96 GtkWidget *send_widget; | 96 GtkWidget *send_widget; |
97 GtkWidget *recv_widget; | 97 GtkWidget *recv_widget; |
98 GtkWidget *local_video; | 98 GtkWidget *local_video; |
99 GtkWidget *remote_video; | 99 GtkWidget *remote_video; |
100 PurpleConnection *pc; | 100 PurpleConnection *pc; |
101 | |
102 guint timeout_id; | |
103 PurpleMediaSessionType request_type; | |
101 }; | 104 }; |
102 | 105 |
103 #define PIDGIN_MEDIA_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), PIDGIN_TYPE_MEDIA, PidginMediaPrivate)) | 106 #define PIDGIN_MEDIA_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), PIDGIN_TYPE_MEDIA, PidginMediaPrivate)) |
104 | 107 |
105 static void pidgin_media_class_init (PidginMediaClass *klass); | 108 static void pidgin_media_class_init (PidginMediaClass *klass); |
522 gtk_socket_add_id(GTK_SOCKET(widget), | 525 gtk_socket_add_id(GTK_SOCKET(widget), |
523 gtk_plug_get_id(GTK_PLUG(data))); | 526 gtk_plug_get_id(GTK_PLUG(data))); |
524 } | 527 } |
525 | 528 |
526 static void | 529 static void |
530 pidgin_media_accept_cb(PurpleMedia *media, int index) | |
531 { | |
532 purple_media_stream_info(media, PURPLE_MEDIA_INFO_ACCEPT, | |
533 NULL, NULL, TRUE); | |
534 } | |
535 | |
536 static void | |
537 pidgin_media_reject_cb(PurpleMedia *media, int index) | |
538 { | |
539 purple_media_stream_info(media, PURPLE_MEDIA_INFO_REJECT, | |
540 NULL, NULL, TRUE); | |
541 } | |
542 | |
543 static gboolean | |
544 pidgin_request_timeout_cb(PidginMedia *gtkmedia) | |
545 { | |
546 PurpleConnection *pc; | |
547 PurpleBuddy *buddy; | |
548 const gchar *alias; | |
549 PurpleMediaSessionType type; | |
550 gchar *message = NULL; | |
551 | |
552 pc = purple_media_get_connection(gtkmedia->priv->media); | |
553 buddy = purple_find_buddy(purple_connection_get_account(pc), | |
554 gtkmedia->priv->screenname); | |
555 alias = buddy ? purple_buddy_get_contact_alias(buddy) : | |
556 gtkmedia->priv->screenname; | |
557 type = gtkmedia->priv->request_type; | |
558 gtkmedia->priv->timeout_id = 0; | |
559 | |
560 if (type & PURPLE_MEDIA_AUDIO && type & PURPLE_MEDIA_VIDEO) { | |
561 message = g_strdup_printf(_("%s wishes to start an audio/video session with you."), | |
562 alias); | |
563 } else if (type & PURPLE_MEDIA_AUDIO) { | |
564 message = g_strdup_printf(_("%s wishes to start an audio session with you."), | |
565 alias); | |
566 } else if (type & PURPLE_MEDIA_VIDEO) { | |
567 message = g_strdup_printf(_("%s wishes to start a video session with you."), | |
568 alias); | |
569 } | |
570 | |
571 gtkmedia->priv->request_type = PURPLE_MEDIA_NONE; | |
572 | |
573 purple_request_accept_cancel(gtkmedia, "Media invitation", | |
574 message, NULL, PURPLE_DEFAULT_ACTION_NONE, | |
575 (void*)pc, gtkmedia->priv->screenname, NULL, | |
576 gtkmedia->priv->media, | |
577 pidgin_media_accept_cb, | |
578 pidgin_media_reject_cb); | |
579 pidgin_media_emit_message(gtkmedia, message); | |
580 g_free(message); | |
581 return FALSE; | |
582 } | |
583 | |
584 static void | |
527 pidgin_media_ready_cb(PurpleMedia *media, PidginMedia *gtkmedia, const gchar *sid) | 585 pidgin_media_ready_cb(PurpleMedia *media, PidginMedia *gtkmedia, const gchar *sid) |
528 { | 586 { |
529 GstElement *pipeline = purple_media_get_pipeline(media); | 587 GstElement *pipeline = purple_media_get_pipeline(media); |
530 GtkWidget *send_widget = NULL, *recv_widget = NULL; | 588 GtkWidget *send_widget = NULL, *recv_widget = NULL; |
531 gboolean is_initiator; | 589 gboolean is_initiator; |
670 gtkmedia->priv->recv_widget = recv_widget; | 728 gtkmedia->priv->recv_widget = recv_widget; |
671 | 729 |
672 g_object_get(G_OBJECT(media), "initiator", &is_initiator, NULL); | 730 g_object_get(G_OBJECT(media), "initiator", &is_initiator, NULL); |
673 | 731 |
674 if (is_initiator == FALSE) { | 732 if (is_initiator == FALSE) { |
675 gchar *message; | 733 if (gtkmedia->priv->timeout_id != 0) |
676 if (type & PURPLE_MEDIA_AUDIO && type & PURPLE_MEDIA_VIDEO) { | 734 g_source_remove(gtkmedia->priv->timeout_id); |
677 message = g_strdup_printf(_("%s wishes to start an audio/video session with you."), | 735 gtkmedia->priv->request_type |= type; |
678 gtkmedia->priv->screenname); | 736 gtkmedia->priv->timeout_id = g_timeout_add(500, |
679 } else if (type & PURPLE_MEDIA_AUDIO) { | 737 (GSourceFunc)pidgin_request_timeout_cb, |
680 message = g_strdup_printf(_("%s wishes to start an audio session with you."), | 738 gtkmedia); |
681 gtkmedia->priv->screenname); | |
682 } else if (type & PURPLE_MEDIA_VIDEO) { | |
683 message = g_strdup_printf(_("%s wishes to start a video session with you."), | |
684 gtkmedia->priv->screenname); | |
685 } | |
686 pidgin_media_emit_message(gtkmedia, message); | |
687 g_free(message); | |
688 } | 739 } |
689 | 740 |
690 gtk_widget_show(gtkmedia->priv->display); | 741 gtk_widget_show(gtkmedia->priv->display); |
691 } | 742 } |
692 | 743 |
834 pidgin_media_set_state(PidginMedia *gtkmedia, PidginMediaState state) | 885 pidgin_media_set_state(PidginMedia *gtkmedia, PidginMediaState state) |
835 { | 886 { |
836 gtkmedia->priv->state = state; | 887 gtkmedia->priv->state = state; |
837 } | 888 } |
838 | 889 |
839 static void | |
840 pidgin_media_accept_cb(PurpleMedia *media, int index) | |
841 { | |
842 purple_media_stream_info(media, PURPLE_MEDIA_INFO_ACCEPT, | |
843 NULL, NULL, TRUE); | |
844 } | |
845 | |
846 static void | |
847 pidgin_media_reject_cb(PurpleMedia *media, int index) | |
848 { | |
849 purple_media_stream_info(media, PURPLE_MEDIA_INFO_REJECT, | |
850 NULL, NULL, TRUE); | |
851 } | |
852 | |
853 static gboolean | 890 static gboolean |
854 pidgin_media_new_cb(PurpleMediaManager *manager, PurpleMedia *media, | 891 pidgin_media_new_cb(PurpleMediaManager *manager, PurpleMedia *media, |
855 PurpleConnection *pc, gchar *screenname, gpointer nul) | 892 PurpleConnection *pc, gchar *screenname, gpointer nul) |
856 { | 893 { |
857 PidginMedia *gtkmedia = PIDGIN_MEDIA( | 894 PidginMedia *gtkmedia = PIDGIN_MEDIA( |
863 purple_buddy_get_contact_alias(buddy) : screenname; | 900 purple_buddy_get_contact_alias(buddy) : screenname; |
864 gtkmedia->priv->pc = pc; | 901 gtkmedia->priv->pc = pc; |
865 gtk_window_set_title(GTK_WINDOW(gtkmedia), alias); | 902 gtk_window_set_title(GTK_WINDOW(gtkmedia), alias); |
866 | 903 |
867 g_object_get(G_OBJECT(media), "initiator", &initiator, NULL); | 904 g_object_get(G_OBJECT(media), "initiator", &initiator, NULL); |
868 if (initiator == FALSE) { | 905 if (initiator == TRUE) |
869 gchar *message = g_strdup_printf("%s wishes to start a " | |
870 "media session with you\n", alias); | |
871 purple_request_accept_cancel(gtkmedia, "Media invitation", | |
872 message, NULL, PURPLE_DEFAULT_ACTION_NONE, | |
873 (void*)pc, screenname, NULL, media, | |
874 pidgin_media_accept_cb, | |
875 pidgin_media_reject_cb); | |
876 g_free(message); | |
877 } else | |
878 gtk_widget_show(GTK_WIDGET(gtkmedia)); | 906 gtk_widget_show(GTK_WIDGET(gtkmedia)); |
879 | 907 |
880 return TRUE; | 908 return TRUE; |
881 } | 909 } |
882 | 910 |