Mercurial > pidgin.yaz
comparison libpurple/media.c @ 26069:7d2e06b29f88
Add state-changed signal to PurpleMedia.
author | Mike Ruprecht <maiku@soc.pidgin.im> |
---|---|
date | Mon, 05 Jan 2009 06:34:30 +0000 |
parents | b0e6a64cbf2e |
children | 8dba34f5f21a |
comparison
equal
deleted
inserted
replaced
26068:d881fc5d907f | 26069:7d2e06b29f88 |
---|---|
120 NEW_CANDIDATE, | 120 NEW_CANDIDATE, |
121 CANDIDATES_PREPARED, | 121 CANDIDATES_PREPARED, |
122 CANDIDATE_PAIR, | 122 CANDIDATE_PAIR, |
123 CODECS_READY, | 123 CODECS_READY, |
124 READY_NEW, | 124 READY_NEW, |
125 STATE_CHANGED, | |
125 LAST_SIGNAL | 126 LAST_SIGNAL |
126 }; | 127 }; |
127 static guint purple_media_signals[LAST_SIGNAL] = {0}; | 128 static guint purple_media_signals[LAST_SIGNAL] = {0}; |
128 | 129 |
129 enum { | 130 enum { |
149 0, | 150 0, |
150 (GInstanceInitFunc) purple_media_init, | 151 (GInstanceInitFunc) purple_media_init, |
151 NULL | 152 NULL |
152 }; | 153 }; |
153 type = g_type_register_static(G_TYPE_OBJECT, "PurpleMedia", &info, 0); | 154 type = g_type_register_static(G_TYPE_OBJECT, "PurpleMedia", &info, 0); |
155 } | |
156 return type; | |
157 } | |
158 | |
159 GType | |
160 purple_media_state_changed_get_type() | |
161 { | |
162 static GType type = 0; | |
163 if (type == 0) { | |
164 static const GEnumValue values[] = { | |
165 { PURPLE_MEDIA_STATE_CHANGED_NEW, "PURPLE_MEDIA_STATE_CHANGED_NEW", "new" }, | |
166 { PURPLE_MEDIA_STATE_CHANGED_CONNECTED, "PURPLE_MEDIA_STATE_CHANGED_CONNECTED", "connected" }, | |
167 { PURPLE_MEDIA_STATE_CHANGED_END, "PURPLE_MEDIA_STATE_CHANGED_END", "end" }, | |
168 { 0, NULL, NULL } | |
169 }; | |
170 type = g_enum_register_static("PurpleMediaStateChangedType", values); | |
154 } | 171 } |
155 return type; | 172 return type; |
156 } | 173 } |
157 | 174 |
158 static void | 175 static void |
234 G_TYPE_NONE, 1, G_TYPE_STRING); | 251 G_TYPE_NONE, 1, G_TYPE_STRING); |
235 purple_media_signals[READY_NEW] = g_signal_new("ready-new", G_TYPE_FROM_CLASS(klass), | 252 purple_media_signals[READY_NEW] = g_signal_new("ready-new", G_TYPE_FROM_CLASS(klass), |
236 G_SIGNAL_RUN_LAST, 0, NULL, NULL, | 253 G_SIGNAL_RUN_LAST, 0, NULL, NULL, |
237 purple_smarshal_VOID__STRING_STRING, | 254 purple_smarshal_VOID__STRING_STRING, |
238 G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_STRING); | 255 G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_STRING); |
256 purple_media_signals[STATE_CHANGED] = g_signal_new("state-changed", G_TYPE_FROM_CLASS(klass), | |
257 G_SIGNAL_RUN_LAST, 0, NULL, NULL, | |
258 purple_smarshal_VOID__ENUM_STRING_STRING, | |
259 G_TYPE_NONE, 3, PURPLE_MEDIA_TYPE_STATE_CHANGED, | |
260 G_TYPE_STRING, G_TYPE_STRING); | |
239 g_type_class_add_private(klass, sizeof(PurpleMediaPrivate)); | 261 g_type_class_add_private(klass, sizeof(PurpleMediaPrivate)); |
240 } | 262 } |
241 | 263 |
242 | 264 |
243 static void | 265 static void |
843 } | 865 } |
844 | 866 |
845 void | 867 void |
846 purple_media_hangup(PurpleMedia *media) | 868 purple_media_hangup(PurpleMedia *media) |
847 { | 869 { |
870 g_signal_emit(media, purple_media_signals[STATE_CHANGED], | |
871 0, PURPLE_MEDIA_STATE_CHANGED_END, | |
872 NULL, NULL); | |
848 g_signal_emit(media, purple_media_signals[HANGUP], 0); | 873 g_signal_emit(media, purple_media_signals[HANGUP], 0); |
849 } | 874 } |
850 | 875 |
851 void | 876 void |
852 purple_media_reject(PurpleMedia *media) | 877 purple_media_reject(PurpleMedia *media) |
853 { | 878 { |
879 g_signal_emit(media, purple_media_signals[STATE_CHANGED], | |
880 0, PURPLE_MEDIA_STATE_CHANGED_END, | |
881 NULL, NULL); | |
854 g_signal_emit(media, purple_media_signals[REJECT], 0); | 882 g_signal_emit(media, purple_media_signals[REJECT], 0); |
855 } | 883 } |
856 | 884 |
857 void | 885 void |
858 purple_media_got_request(PurpleMedia *media) | 886 purple_media_got_request(PurpleMedia *media) |
861 } | 889 } |
862 | 890 |
863 void | 891 void |
864 purple_media_got_hangup(PurpleMedia *media) | 892 purple_media_got_hangup(PurpleMedia *media) |
865 { | 893 { |
894 g_signal_emit(media, purple_media_signals[STATE_CHANGED], | |
895 0, PURPLE_MEDIA_STATE_CHANGED_END, | |
896 NULL, NULL); | |
866 g_signal_emit(media, purple_media_signals[GOT_HANGUP], 0); | 897 g_signal_emit(media, purple_media_signals[GOT_HANGUP], 0); |
867 } | 898 } |
868 | 899 |
869 void | 900 void |
870 purple_media_got_accept(PurpleMedia *media) | 901 purple_media_got_accept(PurpleMedia *media) |
1170 stream->sink); | 1201 stream->sink); |
1171 sinkpad = gst_element_get_static_pad(stream->sink, "ghostsink"); | 1202 sinkpad = gst_element_get_static_pad(stream->sink, "ghostsink"); |
1172 purple_debug_info("media", "connecting new src pad: %s\n", | 1203 purple_debug_info("media", "connecting new src pad: %s\n", |
1173 gst_pad_link(srcpad, sinkpad) == GST_PAD_LINK_OK ? "success" : "failure"); | 1204 gst_pad_link(srcpad, sinkpad) == GST_PAD_LINK_OK ? "success" : "failure"); |
1174 gst_element_set_state(stream->sink, GST_STATE_PLAYING); | 1205 gst_element_set_state(stream->sink, GST_STATE_PLAYING); |
1206 | |
1207 g_signal_emit(stream->session->media, purple_media_signals[STATE_CHANGED], | |
1208 0, PURPLE_MEDIA_STATE_CHANGED_CONNECTED, | |
1209 stream->session->id, stream->participant); | |
1175 } | 1210 } |
1176 | 1211 |
1177 static gchar * | 1212 static gchar * |
1178 purple_media_get_stun_pref_ip() | 1213 purple_media_get_stun_pref_ip() |
1179 { | 1214 { |
1257 session->id = g_strdup(sess_id); | 1292 session->id = g_strdup(sess_id); |
1258 session->media = media; | 1293 session->media = media; |
1259 session->type = purple_media_from_fs(type, type_direction); | 1294 session->type = purple_media_from_fs(type, type_direction); |
1260 | 1295 |
1261 purple_media_add_session(media, session); | 1296 purple_media_add_session(media, session); |
1297 g_signal_emit(media, purple_media_signals[STATE_CHANGED], | |
1298 0, PURPLE_MEDIA_STATE_CHANGED_NEW, | |
1299 session->id, NULL); | |
1262 } | 1300 } |
1263 | 1301 |
1264 if (!(participant = purple_media_add_participant(media, who))) { | 1302 if (!(participant = purple_media_add_participant(media, who))) { |
1265 purple_media_remove_session(media, session); | 1303 purple_media_remove_session(media, session); |
1266 g_free(session); | 1304 g_free(session); |
1267 return FALSE; | 1305 return FALSE; |
1306 } else { | |
1307 g_signal_emit(media, purple_media_signals[STATE_CHANGED], | |
1308 0, PURPLE_MEDIA_STATE_CHANGED_NEW, | |
1309 NULL, who); | |
1268 } | 1310 } |
1269 | 1311 |
1270 stream = purple_media_get_stream(media, sess_id, who); | 1312 stream = purple_media_get_stream(media, sess_id, who); |
1271 | 1313 |
1272 if (!stream) { | 1314 if (!stream) { |
1308 | 1350 |
1309 /* callback for source pad added (new stream source ready) */ | 1351 /* callback for source pad added (new stream source ready) */ |
1310 g_signal_connect(G_OBJECT(fsstream), | 1352 g_signal_connect(G_OBJECT(fsstream), |
1311 "src-pad-added", G_CALLBACK(purple_media_src_pad_added_cb), stream); | 1353 "src-pad-added", G_CALLBACK(purple_media_src_pad_added_cb), stream); |
1312 | 1354 |
1355 g_signal_emit(media, purple_media_signals[STATE_CHANGED], | |
1356 0, PURPLE_MEDIA_STATE_CHANGED_NEW, | |
1357 session->id, who); | |
1313 } else if (*direction != type_direction) { | 1358 } else if (*direction != type_direction) { |
1314 /* change direction */ | 1359 /* change direction */ |
1315 g_object_set(stream->stream, "direction", type_direction, NULL); | 1360 g_object_set(stream->stream, "direction", type_direction, NULL); |
1316 } | 1361 } |
1317 | 1362 |
1348 } | 1393 } |
1349 | 1394 |
1350 void | 1395 void |
1351 purple_media_remove_stream(PurpleMedia *media, const gchar *sess_id, const gchar *who) | 1396 purple_media_remove_stream(PurpleMedia *media, const gchar *sess_id, const gchar *who) |
1352 { | 1397 { |
1353 | 1398 /* Add state-changed end emits in here when this is implemented */ |
1354 } | 1399 } |
1355 | 1400 |
1356 PurpleMediaSessionType | 1401 PurpleMediaSessionType |
1357 purple_media_get_session_type(PurpleMedia *media, const gchar *sess_id) | 1402 purple_media_get_session_type(PurpleMedia *media, const gchar *sess_id) |
1358 { | 1403 { |