first step at rewriting the button code - nothing works, but it compiles
[swfdec.git] / libswfdec / swfdec_system_as.c
blob36946d5bbcbde15710b2a7acf6a73bb5b1e3ff13
1 /* Swfdec
2 * Copyright (C) 2007 Benjamin Otte <otte@gnome.org>
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301 USA
20 #ifdef HAVE_CONFIG_H
21 #include "config.h"
22 #endif
24 #include "swfdec.h"
25 #include "swfdec_as_internal.h"
26 #include "swfdec_as_string.h"
27 #include "swfdec_as_strings.h"
28 #include "swfdec_codec_audio.h"
29 #include "swfdec_debug.h"
30 #include "swfdec_player_internal.h"
32 SWFDEC_AS_NATIVE (1066, 0, swfdec_system_setClipboard)
33 void
34 swfdec_system_setClipboard (SwfdecAsContext *cx, SwfdecAsObject *object,
35 guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
37 SWFDEC_STUB ("System.setClipboard (static)");
40 SWFDEC_AS_NATIVE (2107, 0, swfdec_system_showSettings)
41 void
42 swfdec_system_showSettings (SwfdecAsContext *cx, SwfdecAsObject *object,
43 guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
45 SWFDEC_STUB ("System.showSettings (static)");
48 SWFDEC_AS_NATIVE (2107, 1, swfdec_system_get_exactSettings)
49 void
50 swfdec_system_get_exactSettings (SwfdecAsContext *cx, SwfdecAsObject *object,
51 guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
53 SWFDEC_STUB ("System.exactSettings (static, get)");
56 SWFDEC_AS_NATIVE (2107, 2, swfdec_system_set_exactSettings)
57 void
58 swfdec_system_set_exactSettings (SwfdecAsContext *cx, SwfdecAsObject *object,
59 guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
61 SWFDEC_STUB ("System.exactSettings (static, set)");
64 SWFDEC_AS_NATIVE (2107, 3, swfdec_system_get_useCodepage)
65 void
66 swfdec_system_get_useCodepage (SwfdecAsContext *cx, SwfdecAsObject *object,
67 guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
69 SWFDEC_STUB ("System.useCodepage (static, get)");
72 SWFDEC_AS_NATIVE (2107, 4, swfdec_system_set_useCodepage)
73 void
74 swfdec_system_set_useCodepage (SwfdecAsContext *cx, SwfdecAsObject *object,
75 guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
77 SWFDEC_STUB ("System.useCodepage (static, set)");
80 static void
81 swfdec_system_has_audio (SwfdecPlayer *player, SwfdecAsValue *ret)
83 /* FIXME: allow setting this? */
84 SWFDEC_AS_VALUE_SET_BOOLEAN (ret, TRUE);
87 static void
88 swfdec_system_has_streaming_audio (SwfdecPlayer *player, SwfdecAsValue *ret)
90 SWFDEC_AS_VALUE_SET_BOOLEAN (ret, TRUE);
93 static void
94 swfdec_system_has_streaming_video (SwfdecPlayer *player, SwfdecAsValue *ret)
96 /* FIXME: check if video decoders got compiled in? */
97 SWFDEC_AS_VALUE_SET_BOOLEAN (ret, TRUE);
100 static void
101 swfdec_system_has_embedded_video (SwfdecPlayer *player, SwfdecAsValue *ret)
103 /* FIXME: what's this? */
104 SWFDEC_AS_VALUE_SET_BOOLEAN (ret, TRUE);
107 static void
108 swfdec_system_has_mp3 (SwfdecPlayer *player, SwfdecAsValue *ret)
110 SwfdecAudioDecoder *dec = swfdec_audio_decoder_new (SWFDEC_AUDIO_CODEC_MP3,
111 swfdec_audio_format_new (44100, 2, TRUE));
113 if (dec) {
114 SWFDEC_AS_VALUE_SET_BOOLEAN (ret, TRUE);
115 swfdec_audio_decoder_free (dec);
116 } else {
117 SWFDEC_AS_VALUE_SET_BOOLEAN (ret, FALSE);
121 static void
122 swfdec_system_has_audio_encoder (SwfdecPlayer *player, SwfdecAsValue *ret)
124 SWFDEC_AS_VALUE_SET_BOOLEAN (ret, FALSE);
127 static void
128 swfdec_system_has_video_encoder (SwfdecPlayer *player, SwfdecAsValue *ret)
130 SWFDEC_AS_VALUE_SET_BOOLEAN (ret, FALSE);
133 static void
134 swfdec_system_has_accessibility (SwfdecPlayer *player, SwfdecAsValue *ret)
136 SWFDEC_AS_VALUE_SET_BOOLEAN (ret, FALSE);
139 static void
140 swfdec_system_has_printing (SwfdecPlayer *player, SwfdecAsValue *ret)
142 SWFDEC_AS_VALUE_SET_BOOLEAN (ret, FALSE);
145 static void
146 swfdec_system_has_screen_broadcast (SwfdecPlayer *player, SwfdecAsValue *ret)
148 SWFDEC_AS_VALUE_SET_BOOLEAN (ret, FALSE);
151 static void
152 swfdec_system_has_screen_playback (SwfdecPlayer *player, SwfdecAsValue *ret)
154 SWFDEC_AS_VALUE_SET_BOOLEAN (ret, FALSE);
157 static void
158 swfdec_system_is_debugger (SwfdecPlayer *player, SwfdecAsValue *ret)
160 SWFDEC_AS_VALUE_SET_BOOLEAN (ret, player->system->debugger);
163 static void
164 swfdec_system_version (SwfdecPlayer *player, SwfdecAsValue *ret)
166 SWFDEC_AS_VALUE_SET_STRING (ret, swfdec_as_context_get_string (
167 SWFDEC_AS_CONTEXT (player), player->system->version));
170 static void
171 swfdec_system_manufacturer (SwfdecPlayer *player, SwfdecAsValue *ret)
173 SWFDEC_AS_VALUE_SET_STRING (ret, swfdec_as_context_get_string (
174 SWFDEC_AS_CONTEXT (player), player->system->manufacturer));
177 static void
178 swfdec_system_screen_width (SwfdecPlayer *player, SwfdecAsValue *ret)
180 SWFDEC_AS_VALUE_SET_INT (ret, player->system->screen_width);
183 static void
184 swfdec_system_screen_height (SwfdecPlayer *player, SwfdecAsValue *ret)
186 SWFDEC_AS_VALUE_SET_INT (ret, player->system->screen_height);
189 static void
190 swfdec_system_screen_dpi (SwfdecPlayer *player, SwfdecAsValue *ret)
192 SWFDEC_AS_VALUE_SET_INT (ret, player->system->dpi);
195 static void
196 swfdec_system_screen_color (SwfdecPlayer *player, SwfdecAsValue *ret)
198 SWFDEC_AS_VALUE_SET_STRING (ret, swfdec_as_context_get_string (
199 SWFDEC_AS_CONTEXT (player), player->system->color_mode));
202 static void
203 swfdec_system_screen_par (SwfdecPlayer *player, SwfdecAsValue *ret)
205 SWFDEC_AS_VALUE_SET_NUMBER (ret, player->system->par);
208 static void
209 swfdec_system_os (SwfdecPlayer *player, SwfdecAsValue *ret)
211 SWFDEC_AS_VALUE_SET_STRING (ret, swfdec_as_context_get_string (
212 SWFDEC_AS_CONTEXT (player), player->system->os));
215 static void
216 swfdec_system_language (SwfdecPlayer *player, SwfdecAsValue *ret)
218 SWFDEC_AS_VALUE_SET_STRING (ret, swfdec_as_context_get_string (
219 SWFDEC_AS_CONTEXT (player), player->system->language));
222 static void
223 swfdec_system_has_ime (SwfdecPlayer *player, SwfdecAsValue *ret)
225 SWFDEC_AS_VALUE_SET_BOOLEAN (ret, FALSE);
228 static void
229 swfdec_system_player_type (SwfdecPlayer *player, SwfdecAsValue *ret)
231 SWFDEC_AS_VALUE_SET_STRING (ret, swfdec_as_context_get_string (
232 SWFDEC_AS_CONTEXT (player), player->system->player_type));
235 static void
236 swfdec_system_av_disabled (SwfdecPlayer *player, SwfdecAsValue *ret)
238 SWFDEC_AS_VALUE_SET_BOOLEAN (ret, FALSE);
241 static void
242 swfdec_system_local_file_disabled (SwfdecPlayer *player, SwfdecAsValue *ret)
244 SWFDEC_AS_VALUE_SET_BOOLEAN (ret, FALSE);
247 static void
248 swfdec_system_windowless_disabled (SwfdecPlayer *player, SwfdecAsValue *ret)
250 SWFDEC_AS_VALUE_SET_BOOLEAN (ret, FALSE);
253 static void
254 swfdec_system_has_tls (SwfdecPlayer *player, SwfdecAsValue *ret)
256 SWFDEC_AS_VALUE_SET_BOOLEAN (ret, FALSE);
259 /* NB: ordered for the query string order */
260 const struct {
261 const char * name;
262 const char * server_string;
263 void (* get) (SwfdecPlayer *player, SwfdecAsValue *ret);
264 } queries[] = {
265 { SWFDEC_AS_STR_hasAudio, "A", swfdec_system_has_audio },
266 { SWFDEC_AS_STR_hasStreamingAudio, "SA", swfdec_system_has_streaming_audio },
267 { SWFDEC_AS_STR_hasStreamingVideo, "SV", swfdec_system_has_streaming_video },
268 { SWFDEC_AS_STR_hasEmbeddedVideo, "EV", swfdec_system_has_embedded_video },
269 { SWFDEC_AS_STR_hasMP3, "MP3", swfdec_system_has_mp3 },
270 { SWFDEC_AS_STR_hasAudioEncoder, "AE", swfdec_system_has_audio_encoder },
271 { SWFDEC_AS_STR_hasVideoEncoder, "VE", swfdec_system_has_video_encoder },
272 { SWFDEC_AS_STR_hasAccessibility, "ACC", swfdec_system_has_accessibility },
273 { SWFDEC_AS_STR_hasPrinting, "PR", swfdec_system_has_printing },
274 { SWFDEC_AS_STR_hasScreenPlayback, "SP", swfdec_system_has_screen_playback },
275 { SWFDEC_AS_STR_hasScreenBroadcast, "SB", swfdec_system_has_screen_broadcast },
276 { SWFDEC_AS_STR_isDebugger, "DEB", swfdec_system_is_debugger },
277 { SWFDEC_AS_STR_version, "V", swfdec_system_version },
278 { SWFDEC_AS_STR_manufacturer, NULL, swfdec_system_manufacturer },
279 { SWFDEC_AS_STR_screenResolutionX, "R", swfdec_system_screen_width },
280 { SWFDEC_AS_STR_screenResolutionY, NULL, swfdec_system_screen_height },
281 { SWFDEC_AS_STR_screenDPI, "DP", swfdec_system_screen_dpi },
282 { SWFDEC_AS_STR_screenColor, "COL", swfdec_system_screen_color },
283 { SWFDEC_AS_STR_pixelAspectRatio, NULL, swfdec_system_screen_par },
284 { SWFDEC_AS_STR_os, "OS", swfdec_system_os },
285 { SWFDEC_AS_STR_language, "L", swfdec_system_language },
286 { SWFDEC_AS_STR_hasIME, "IME", swfdec_system_has_ime },
287 { SWFDEC_AS_STR_playerType, "PT", swfdec_system_player_type },
288 { SWFDEC_AS_STR_avHardwareDisable, "AVD", swfdec_system_av_disabled },
289 { SWFDEC_AS_STR_localFileReadDisable, "LFD", swfdec_system_local_file_disabled },
290 { SWFDEC_AS_STR_windowlessDisable, "WD", swfdec_system_windowless_disabled },
291 { SWFDEC_AS_STR_hasTLS, "TLS", swfdec_system_has_tls },
294 SWFDEC_AS_NATIVE (11, 0, swfdec_system_query)
295 void
296 swfdec_system_query (SwfdecAsContext *cx, SwfdecAsObject *object,
297 guint argc, SwfdecAsValue *argv, SwfdecAsValue *retval)
299 SwfdecPlayer *player = SWFDEC_PLAYER (cx);
300 SwfdecAsValue val;
301 guint i;
302 GString *server;
304 if (object == NULL) {
305 SWFDEC_WARNING ("no this object in Query()");
306 return;
309 server = g_string_new ("");
310 for (i = 0; i < G_N_ELEMENTS (queries); i++) {
311 queries[i].get (player, &val);
312 swfdec_as_object_set_variable (object, queries[i].name, &val);
313 if (queries[i].name == SWFDEC_AS_STR_screenResolutionY) {
314 g_string_append_printf (server, "x%d", (int) SWFDEC_AS_VALUE_GET_NUMBER (&val));
315 } else if (queries[i].name == SWFDEC_AS_STR_pixelAspectRatio) {
316 char buffer[10];
317 g_ascii_formatd (buffer, sizeof (buffer), "%.1f",
318 SWFDEC_AS_VALUE_GET_NUMBER (&val));
319 g_string_append (server, "&AR=");
320 g_string_append (server, buffer);
321 } else if (queries[i].name == SWFDEC_AS_STR_manufacturer) {
322 char *s = swfdec_as_string_escape (cx, player->system->server_manufacturer);
323 g_string_append_printf (server, "&M=%s", s);
324 g_free (s);
325 } else {
326 g_assert (queries[i].server_string);
327 if (i > 0)
328 g_string_append_c (server, '&');
329 g_string_append (server, queries[i].server_string);
330 g_string_append_c (server, '=');
331 if (SWFDEC_AS_VALUE_IS_BOOLEAN (&val)) {
332 g_string_append_c (server, SWFDEC_AS_VALUE_GET_BOOLEAN (&val) ? 't' : 'f');
333 } else if (SWFDEC_AS_VALUE_IS_NUMBER (&val)) {
334 g_string_append_printf (server, "%d", (int) SWFDEC_AS_VALUE_GET_NUMBER (&val));
335 } else if (SWFDEC_AS_VALUE_IS_STRING (&val)) {
336 char *s = swfdec_as_string_escape (cx, SWFDEC_AS_VALUE_GET_STRING (&val));
337 g_string_append (server, s);
338 g_free (s);
339 } else {
340 g_assert_not_reached ();
344 SWFDEC_AS_VALUE_SET_STRING (&val, swfdec_as_context_give_string (cx, g_string_free (server, FALSE)));
345 swfdec_as_object_set_variable (object, SWFDEC_AS_STR_serverString, &val);