make playlist stop synchronous
[vlc.git] / bindings / java / src / playlist-jni.cc
1 /*****************************************************************************\r
2  * playlist-jni.cc: JNI native playlist functions for VLC Java Bindings\r
3  *****************************************************************************\r
4  * Copyright (C) 1998-2006 the VideoLAN team\r
5  *\r
6  * Authors: Filippo Carone <filippo@carone.org>\r
7  *\r
8  *\r
9  * $Id $\r
10  *\r
11  * This program is free software; you can redistribute it and/or modify\r
12  * it under the terms of the GNU General Public License as published by\r
13  * the Free Software Foundation; either version 2 of the License, or\r
14  * (at your option) any later version.\r
15  *\r
16  * This program is distributed in the hope that it will be useful,\r
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
19  * GNU General Public License for more details.\r
20  *\r
21  * You should have received a copy of the GNU General Public License\r
22  * along with this program; if not, write to the Free Software\r
23  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.\r
24  *****************************************************************************/\r
25 \r
26 /* These are a must*/\r
27 #include <jni.h>\r
28 #include <vlc/libvlc.h>\r
29 #include <unistd.h>\r
30 #include <stdio.h>\r
31 \r
32 /* JVLC internal imports, generated by gcjh */\r
33 #include "../includes/Playlist.h"\r
34 \r
35 #include "utils.h"\r
36 \r
37 \r
38 JNIEXPORT jint JNICALL Java_org_videolan_jvlc_Playlist__1playlist_1add (JNIEnv *env, jobject _this, jstring uri, jstring name,  jobjectArray options) {\r
39 \r
40     INIT_FUNCTION ;\r
41     \r
42     int res = 0;\r
43     int i_options = 0;\r
44     const char** ppsz_options = NULL;\r
45     const char* psz_uri  = env->GetStringUTFChars( uri, 0 );\r
46     const char* psz_name = env->GetStringUTFChars( name, 0 );\r
47 \r
48     if ( options != NULL ) {\r
49         i_options = ( int ) env->GetArrayLength( ( jarray ) options ) + 1;\r
50         ppsz_options = ( const char ** ) malloc( i_options * sizeof( char* ) );\r
51         sprintf( ( char * ) ppsz_options[0], "%s", "jvlc" );\r
52 \r
53         for (int i = 0; i < i_options - 1; i++) {\r
54             ppsz_options[ i+1 ] =\r
55                 env->GetStringUTFChars( ( jstring ) env->GetObjectArrayElement( options, i ), 0 );\r
56         }\r
57         res = libvlc_playlist_add_extended( ( libvlc_instance_t * ) instance, psz_uri, psz_name, i_options, ppsz_options, exception );\r
58 \r
59         CHECK_EXCEPTION_FREE;\r
60         \r
61     } else {\r
62         res = libvlc_playlist_add( ( libvlc_instance_t * ) instance, psz_uri, psz_name, exception );\r
63         \r
64         CHECK_EXCEPTION_FREE;\r
65     }\r
66     \r
67     if (psz_uri != NULL) {\r
68         env->ReleaseStringUTFChars( uri, psz_uri );\r
69     }\r
70 \r
71     if (psz_name != NULL) {\r
72         env->ReleaseStringUTFChars( name, psz_name );\r
73     }\r
74 \r
75     return res;\r
76 }\r
77 \r
78 \r
79 JNIEXPORT void JNICALL Java_org_videolan_jvlc_Playlist__1play (JNIEnv *env, jobject _this, jint id, jobjectArray options)\r
80 {\r
81 \r
82     INIT_FUNCTION;\r
83     \r
84     int i_options = 0;\r
85     const char** ppsz_options = NULL;\r
86 \r
87     if ( options != NULL ) {\r
88        i_options = ( int ) env->GetArrayLength( ( jarray ) options );\r
89        ppsz_options = ( const char ** ) malloc( i_options * sizeof( char* ) );\r
90        for ( int i = 0; i < i_options - 1; i++ ) {\r
91            ppsz_options[ i ] = \r
92                env->GetStringUTFChars( ( jstring ) env->GetObjectArrayElement( options, i ), 0 );\r
93        }\r
94     }\r
95 \r
96     libvlc_playlist_play( ( libvlc_instance_t * ) instance, id, i_options, ( char **  ) ppsz_options, exception );\r
97 \r
98     CHECK_EXCEPTION_FREE;\r
99 }\r
100 \r
101 \r
102 JNIEXPORT void JNICALL Java_org_videolan_jvlc_Playlist__1pause (JNIEnv *env, jobject _this)\r
103 {\r
104     INIT_FUNCTION ;\r
105 \r
106     libvlc_playlist_pause( ( libvlc_instance_t* ) instance, exception );\r
107 \r
108     CHECK_EXCEPTION_FREE ;\r
109 }\r
110 \r
111 JNIEXPORT void JNICALL Java_org_videolan_jvlc_Playlist__1stop (JNIEnv *env, jobject _this)\r
112 {\r
113     INIT_FUNCTION ;\r
114 \r
115     libvlc_playlist_stop( ( libvlc_instance_t* ) instance, exception );\r
116     \r
117     while ( libvlc_playlist_isplaying( (libvlc_instance_t*) instance, exception ) )\r
118     {\r
119         usleep(100);\r
120     }\r
121     \r
122 \r
123     CHECK_EXCEPTION_FREE ;\r
124 }\r
125 \r
126 JNIEXPORT void JNICALL Java_org_videolan_jvlc_Playlist__1next (JNIEnv *env, jobject _this)\r
127 {\r
128     INIT_FUNCTION ;\r
129     \r
130     libvlc_playlist_next( ( libvlc_instance_t* ) instance, exception );\r
131 \r
132     CHECK_EXCEPTION_FREE ;\r
133 }\r
134 \r
135 JNIEXPORT void JNICALL Java_org_videolan_jvlc_Playlist__1prev (JNIEnv *env, jobject _this)\r
136 {\r
137     INIT_FUNCTION ;\r
138     \r
139     libvlc_playlist_prev( (libvlc_instance_t*) instance, exception );\r
140 \r
141     CHECK_EXCEPTION_FREE ;\r
142 }\r
143 \r
144 JNIEXPORT void JNICALL Java_org_videolan_jvlc_Playlist__1clear (JNIEnv *env, jobject _this)\r
145 {\r
146     INIT_FUNCTION ;\r
147 \r
148     libvlc_playlist_clear( (libvlc_instance_t*) instance, exception );\r
149 \r
150     CHECK_EXCEPTION_FREE ;\r
151 }\r
152 \r
153 JNIEXPORT void JNICALL Java_org_videolan_jvlc_Playlist__1deleteItem (JNIEnv *env, jobject _this, jint itemID)\r
154 {\r
155     INIT_FUNCTION ;\r
156 \r
157     libvlc_playlist_delete_item( ( libvlc_instance_t * ) instance, itemID, exception );\r
158 \r
159     CHECK_EXCEPTION_FREE ;\r
160 }\r
161 \r
162 \r
163 JNIEXPORT jint JNICALL Java_org_videolan_jvlc_Playlist__1itemsCount (JNIEnv *env, jobject _this)\r
164 {\r
165     INIT_FUNCTION ;\r
166     int res = 0;\r
167 \r
168     res = libvlc_playlist_items_count( (libvlc_instance_t*) instance, exception );\r
169 \r
170     CHECK_EXCEPTION_FREE ;\r
171 \r
172     return res;\r
173 \r
174 }\r
175 \r
176 JNIEXPORT jint JNICALL Java_org_videolan_jvlc_Playlist__1isRunning (JNIEnv *env, jobject _this)\r
177 {\r
178     INIT_FUNCTION ;\r
179     int res = 0;\r
180 \r
181     res = libvlc_playlist_isplaying( (libvlc_instance_t*) instance, exception );\r
182 \r
183     CHECK_EXCEPTION_FREE ;\r
184 \r
185     return res;\r
186 }\r
187 \r
188 JNIEXPORT void JNICALL Java_org_videolan_jvlc_Playlist__1setLoop\r
189   (JNIEnv *env, jobject _this, jboolean loop)\r
190 {\r
191    INIT_FUNCTION ;\r
192 \r
193    libvlc_playlist_loop( (libvlc_instance_t*) instance, loop, exception );\r
194 \r
195    CHECK_EXCEPTION_FREE ;\r
196    \r
197 }   \r