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