static void drag_data_received(GtkWidget *widget, GdkDragContext *context, gint x, gint y, GtkSelectionData *selection_data, guint target_type, guint time, gpointer user_data){ int datalen=gtk_selection_data_get_length(selection_data); const void *data=gtk_selection_data_get_data(selection_data); LinphoneCall *call=g_object_get_data(G_OBJECT(widget),"call"); ms_message("target_type=%i, datalen=%i, data=%p",target_type,datalen,data); if (target_type==TARGET_URILIST && data){ LinphonePlayer *player=linphone_call_get_player(call); char *path=ms_strdup(data); while (datalen&&(path[datalen-1]=='\r'||path[datalen-1]=='\n')) { path[datalen-1]='\0'; datalen--; } if (player){ const char* filepath = (strstr(path,"file://")==path) ? path+strlen("file://") : path; if (linphone_player_open(player,filepath,on_end_of_play,NULL)==0){ linphone_player_start(player); }else{ GtkWidget *warn=gtk_message_dialog_new(GTK_WINDOW(widget),GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR,GTK_BUTTONS_CLOSE, _("Cannot play %s."),filepath); g_signal_connect(warn,"response",(GCallback)gtk_widget_destroy,NULL); gtk_widget_show(warn); } } ms_free(path); } gtk_drag_finish (context, TRUE, FALSE, time); }
static void play_file(const char *filename, bool_t unsupported_format, const char *audio_mime, const char *video_mime) { LinphoneCoreManager *lc_manager; LinphonePlayer *player; int res, time = 0; bool_t eof = FALSE; lc_manager = linphone_core_manager_new("marie_rc"); CU_ASSERT_PTR_NOT_NULL(lc_manager); if(lc_manager == NULL) return; player = linphone_core_create_local_player(lc_manager->lc, ms_snd_card_manager_get_default_card(ms_snd_card_manager_get()), video_stream_get_default_video_renderer(), 0); CU_ASSERT_PTR_NOT_NULL(player); if(player == NULL) goto fail; res = linphone_player_open(player, filename, eof_callback, &eof); if(unsupported_format || (audio_mime == NULL && video_mime == NULL) || (video_mime == NULL && audio_mime && !ms_filter_codec_supported(audio_mime)) || (audio_mime == NULL && video_mime && !ms_filter_codec_supported(video_mime))) { CU_ASSERT_EQUAL(res, -1); } else { CU_ASSERT_EQUAL(res, 0); } if(res == -1) goto fail; CU_ASSERT_EQUAL((res = linphone_player_start(player)), 0); if(res == -1) goto fail; CU_ASSERT_TRUE(wait_for_eof(&eof, &time, 100, 13000)); linphone_player_close(player); fail: if(player) linphone_player_destroy(player); if(lc_manager) linphone_core_manager_destroy(lc_manager); }