# HG changeset patch # User Mike Ruprecht # Date 1231046394 0 # Node ID c7d4b67b33326819bfbf035575cfd671906bd519 # Parent f0c2e27c7ae7e031aac9d18e4e286fde41f4741f Add initiator property to PurpleMedia. diff -r f0c2e27c7ae7 -r c7d4b67b3332 libpurple/media.c --- a/libpurple/media.c Fri Jan 02 23:14:27 2009 +0000 +++ b/libpurple/media.c Sun Jan 04 05:19:54 2009 +0000 @@ -73,6 +73,7 @@ struct _PurpleMediaPrivate { FsConference *conference; + gboolean initiator; GHashTable *sessions; /* PurpleMediaSession table */ GHashTable *participants; /* FsParticipant table */ @@ -124,6 +125,7 @@ enum { PROP_0, PROP_CONFERENCE, + PROP_INITIATOR, }; GType @@ -166,6 +168,13 @@ FS_TYPE_CONFERENCE, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE)); + g_object_class_install_property(gobject_class, PROP_INITIATOR, + g_param_spec_boolean("initiator", + "initiator", + "If the local user initiated the conference.", + FALSE, + G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE)); + purple_media_signals[ERROR] = g_signal_new("error", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__STRING, @@ -311,6 +320,9 @@ media->priv->conference = g_value_get_object(value); g_object_ref(media->priv->conference); break; + case PROP_INITIATOR: + media->priv->initiator = g_value_get_boolean(value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -329,6 +341,9 @@ case PROP_CONFERENCE: g_value_set_object(value, media->priv->conference); break; + case PROP_INITIATOR: + g_value_set_boolean(value, media->priv->initiator); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; diff -r f0c2e27c7ae7 -r c7d4b67b3332 libpurple/mediamanager.c --- a/libpurple/mediamanager.c Fri Jan 02 23:14:27 2009 +0000 +++ b/libpurple/mediamanager.c Sun Jan 04 05:19:54 2009 +0000 @@ -140,7 +140,8 @@ purple_media_manager_create_media(PurpleMediaManager *manager, PurpleConnection *gc, const char *conference_type, - const char *remote_user) + const char *remote_user, + gboolean initiator) { PurpleMedia *media; FsConference *conference = FS_CONFERENCE(gst_element_factory_make(conference_type, NULL)); @@ -157,6 +158,7 @@ media = PURPLE_MEDIA(g_object_new(purple_media_get_type(), "conference", conference, + "initiator", initiator, NULL)); ret = gst_element_set_state(purple_media_get_pipeline(media), GST_STATE_PLAYING); diff -r f0c2e27c7ae7 -r c7d4b67b3332 libpurple/mediamanager.h --- a/libpurple/mediamanager.h Fri Jan 02 23:14:27 2009 +0000 +++ b/libpurple/mediamanager.h Sun Jan 04 05:19:54 2009 +0000 @@ -102,7 +102,8 @@ PurpleMedia *purple_media_manager_create_media(PurpleMediaManager *manager, PurpleConnection *gc, const char *conference_type, - const char *remote_user); + const char *remote_user, + gboolean initiator); /** * Gets all of the media sessions. diff -r f0c2e27c7ae7 -r c7d4b67b3332 libpurple/protocols/jabber/google.c --- a/libpurple/protocols/jabber/google.c Fri Jan 02 23:14:27 2009 +0000 +++ b/libpurple/protocols/jabber/google.c Sun Jan 04 05:19:54 2009 +0000 @@ -217,7 +217,7 @@ } session->media = purple_media_manager_create_media(purple_media_manager_get(), js->gc, - "fsrtpconference", session->remote_jid); + "fsrtpconference", session->remote_jid, FALSE); /* GTalk requires the NICE_COMPATIBILITY_GOOGLE param */ param.name = "compatibility-mode"; diff -r f0c2e27c7ae7 -r c7d4b67b3332 libpurple/protocols/jabber/jingle/rtp.c --- a/libpurple/protocols/jabber/jingle/rtp.c Fri Jan 02 23:14:27 2009 +0000 +++ b/libpurple/protocols/jabber/jingle/rtp.c Sun Jan 04 05:19:54 2009 +0000 @@ -372,7 +372,8 @@ gchar *sid = jingle_session_get_sid(session); PurpleMedia *media = purple_media_manager_create_media(purple_media_manager_get(), - js->gc, "fsrtpconference", remote_jid); + js->gc, "fsrtpconference", remote_jid, + jingle_session_is_initiator(session)); g_free(remote_jid); if (!media) {