Mercurial > pidgin.yaz
comparison libpurple/media/media.c @ 29565:eef5ec04a5bf
Remove the list of participants from PurpleMedia and use the Fs2 backend's.
author | maiku@pidgin.im |
---|---|
date | Mon, 26 Oct 2009 20:17:35 +0000 |
parents | 1156bf88b4d3 |
children | f600903f7811 |
comparison
equal
deleted
inserted
replaced
29564:7b0931b3e060 | 29565:eef5ec04a5bf |
---|---|
116 gulong gst_bus_handler_id; | 116 gulong gst_bus_handler_id; |
117 gboolean initiator; | 117 gboolean initiator; |
118 gpointer prpl_data; | 118 gpointer prpl_data; |
119 | 119 |
120 GHashTable *sessions; /* PurpleMediaSession table */ | 120 GHashTable *sessions; /* PurpleMediaSession table */ |
121 GHashTable *participants; /* FsParticipant table */ | |
122 | 121 |
123 GList *streams; /* PurpleMediaStream table */ | 122 GList *streams; /* PurpleMediaStream table */ |
124 | 123 |
125 GstElement *confbin; | 124 GstElement *confbin; |
126 #else | 125 #else |
366 PurpleMediaStream *stream = iter->data; | 365 PurpleMediaStream *stream = iter->data; |
367 if (stream->stream) { | 366 if (stream->stream) { |
368 g_object_unref(stream->stream); | 367 g_object_unref(stream->stream); |
369 stream->stream = NULL; | 368 stream->stream = NULL; |
370 } | 369 } |
371 } | |
372 | |
373 if (priv->participants) { | |
374 GList *participants = g_hash_table_get_values(priv->participants); | |
375 for (; participants; participants = g_list_delete_link(participants, participants)) | |
376 g_object_unref(participants->data); | |
377 } | 370 } |
378 | 371 |
379 if (priv->gst_bus_handler_id != 0) { | 372 if (priv->gst_bus_handler_id != 0) { |
380 GstElement *pipeline = purple_media_manager_get_pipeline( | 373 GstElement *pipeline = purple_media_manager_get_pipeline( |
381 priv->manager); | 374 priv->manager); |
724 g_return_val_if_fail(PURPLE_IS_MEDIA(media), NULL); | 717 g_return_val_if_fail(PURPLE_IS_MEDIA(media), NULL); |
725 return (PurpleMediaSession*) (media->priv->sessions) ? | 718 return (PurpleMediaSession*) (media->priv->sessions) ? |
726 g_hash_table_lookup(media->priv->sessions, sess_id) : NULL; | 719 g_hash_table_lookup(media->priv->sessions, sess_id) : NULL; |
727 } | 720 } |
728 | 721 |
729 static FsParticipant* | |
730 purple_media_get_participant(PurpleMedia *media, const gchar *name) | |
731 { | |
732 g_return_val_if_fail(PURPLE_IS_MEDIA(media), NULL); | |
733 return (FsParticipant*) (media->priv->participants) ? | |
734 g_hash_table_lookup(media->priv->participants, name) : NULL; | |
735 } | |
736 | |
737 static PurpleMediaStream* | 722 static PurpleMediaStream* |
738 purple_media_get_stream(PurpleMedia *media, const gchar *session, const gchar *participant) | 723 purple_media_get_stream(PurpleMedia *media, const gchar *session, const gchar *participant) |
739 { | 724 { |
740 GList *streams; | 725 GList *streams; |
741 | 726 |
792 static gboolean | 777 static gboolean |
793 purple_media_remove_session(PurpleMedia *media, PurpleMediaSession *session) | 778 purple_media_remove_session(PurpleMedia *media, PurpleMediaSession *session) |
794 { | 779 { |
795 g_return_val_if_fail(PURPLE_IS_MEDIA(media), FALSE); | 780 g_return_val_if_fail(PURPLE_IS_MEDIA(media), FALSE); |
796 return g_hash_table_remove(media->priv->sessions, session->id); | 781 return g_hash_table_remove(media->priv->sessions, session->id); |
797 } | |
798 | |
799 static FsParticipant * | |
800 purple_media_add_participant(PurpleMedia *media, const gchar *name) | |
801 { | |
802 FsParticipant *participant; | |
803 GError *err = NULL; | |
804 | |
805 g_return_val_if_fail(PURPLE_IS_MEDIA(media), NULL); | |
806 | |
807 participant = purple_media_get_participant(media, name); | |
808 | |
809 if (participant) | |
810 return participant; | |
811 | |
812 participant = fs_conference_new_participant(media->priv->conference, | |
813 (gchar*)name, &err); | |
814 | |
815 if (err) { | |
816 purple_debug_error("media", "Error creating participant: %s\n", | |
817 err->message); | |
818 g_error_free(err); | |
819 return NULL; | |
820 } | |
821 | |
822 if (!media->priv->participants) { | |
823 purple_debug_info("media", "Creating hash table for participants\n"); | |
824 media->priv->participants = g_hash_table_new_full(g_str_hash, | |
825 g_str_equal, g_free, NULL); | |
826 } | |
827 | |
828 g_hash_table_insert(media->priv->participants, g_strdup(name), participant); | |
829 | |
830 return participant; | |
831 } | 782 } |
832 | 783 |
833 static PurpleMediaStream * | 784 static PurpleMediaStream * |
834 purple_media_insert_stream(PurpleMediaSession *session, const gchar *name, FsStream *stream) | 785 purple_media_insert_stream(PurpleMediaSession *session, const gchar *name, FsStream *stream) |
835 { | 786 { |
1473 session->media, | 1424 session->media, |
1474 session->id, NULL); | 1425 session->id, NULL); |
1475 } | 1426 } |
1476 } | 1427 } |
1477 | 1428 |
1478 if (!(participant = purple_media_add_participant(media, who))) { | 1429 participant = purple_media_backend_fs2_get_participant( |
1479 purple_media_remove_session(media, session); | 1430 PURPLE_MEDIA_BACKEND_FS2(media->priv->backend), who); |
1480 g_free(session); | |
1481 return FALSE; | |
1482 } else { | |
1483 g_signal_emit(media, purple_media_signals[STATE_CHANGED], | |
1484 0, PURPLE_MEDIA_STATE_NEW, | |
1485 NULL, who); | |
1486 } | |
1487 | 1431 |
1488 stream = purple_media_get_stream(media, sess_id, who); | 1432 stream = purple_media_get_stream(media, sess_id, who); |
1489 | 1433 |
1490 if (!stream) { | 1434 if (!stream) { |
1491 GError *err = NULL; | 1435 GError *err = NULL; |
1542 g_value_set_boxed(¶m[next_param_index].value, | 1486 g_value_set_boxed(¶m[next_param_index].value, |
1543 relay_info); | 1487 relay_info); |
1544 g_value_array_free(relay_info); | 1488 g_value_array_free(relay_info); |
1545 } else { | 1489 } else { |
1546 purple_debug_error("media", "Error relay info"); | 1490 purple_debug_error("media", "Error relay info"); |
1547 g_object_unref(participant); | |
1548 g_hash_table_remove(media->priv->participants, who); | |
1549 purple_media_remove_session(media, session); | 1491 purple_media_remove_session(media, session); |
1550 g_free(session); | 1492 g_free(session); |
1551 return FALSE; | 1493 return FALSE; |
1552 } | 1494 } |
1553 } | 1495 } |
1569 "Error creating stream: %s\n", | 1511 "Error creating stream: %s\n", |
1570 err && err->message ? | 1512 err && err->message ? |
1571 err->message : "NULL"); | 1513 err->message : "NULL"); |
1572 if (err) | 1514 if (err) |
1573 g_error_free(err); | 1515 g_error_free(err); |
1574 g_object_unref(participant); | |
1575 g_hash_table_remove(media->priv->participants, who); | |
1576 purple_media_remove_session(media, session); | 1516 purple_media_remove_session(media, session); |
1577 g_free(session); | 1517 g_free(session); |
1578 return FALSE; | 1518 return FALSE; |
1579 } | 1519 } |
1580 | 1520 |