Benjamin Otte
2007-Mar-01 06:04 UTC
[Swfdec] 7 commits - libswfdec/swfdec_connection.c libswfdec/swfdec_js_connection.c libswfdec/swfdec_js_movie.c libswfdec/swfdec_js_net_stream.c libswfdec/swfdec_js_xml.c libswfdec/swfdec_net_stream.c libswfdec/swfdec_scriptable.c libswfdec/swfdec_scriptable.h libswfdec/swfdec_xml.c
libswfdec/swfdec_connection.c | 4 + libswfdec/swfdec_js_connection.c | 2 libswfdec/swfdec_js_movie.c | 89 +++++---------------------------------- libswfdec/swfdec_js_net_stream.c | 20 ++++++++ libswfdec/swfdec_js_xml.c | 2 libswfdec/swfdec_net_stream.c | 4 + libswfdec/swfdec_scriptable.c | 49 ++++++++++++++------- libswfdec/swfdec_scriptable.h | 3 + libswfdec/swfdec_xml.c | 4 + 9 files changed, 82 insertions(+), 95 deletions(-) New commits: diff-tree 7e865ad995f10d135ac60a20d725fb81e5c68372 (from b9a0b866f18fa9329f9e2a4dad82ec59666ded1d) Author: Benjamin Otte <otte@gnome.org> Date: Thu Mar 1 15:03:20 2007 +0100 implement NetStream.play () diff --git a/libswfdec/swfdec_js_net_stream.c b/libswfdec/swfdec_js_net_stream.c index 9f12dd0..ed9c81e 100644 --- a/libswfdec/swfdec_js_net_stream.c +++ b/libswfdec/swfdec_js_net_stream.c @@ -27,6 +27,23 @@ #include "swfdec_player_internal.h" static JSBool +swfdec_js_net_stream_play (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) +{ + SwfdecNetStream *stream; + const char *url; + + stream = swfdec_scriptable_from_object (cx, obj, SWFDEC_TYPE_NET_STREAM); + if (stream == NULL) + return JS_TRUE; + url = swfdec_js_to_string (cx, argv[0]); + if (url == NULL) + return JS_FALSE; + swfdec_net_stream_set_url (stream, url); + swfdec_net_stream_set_playing (stream, TRUE); + return JS_TRUE; +} + +static JSBool swfdec_js_net_stream_to_string (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { JSString *string; @@ -40,6 +57,7 @@ swfdec_js_net_stream_to_string (JSContex } static JSFunctionSpec net_stream_methods[] = { + { "play", swfdec_js_net_stream_play, 1, 0, 0 }, { "toString", swfdec_js_net_stream_to_string, 0, 0, 0 }, {0,0,0,0,0} }; diff-tree b9a0b866f18fa9329f9e2a4dad82ec59666ded1d (from 83559ae030079a2fd2b2372bc0b4a692f8d41795) Author: Benjamin Otte <otte@gnome.org> Date: Thu Mar 1 15:02:35 2007 +0100 mark properties from attached movies DontDelete and ReadOnly diff --git a/libswfdec/swfdec_js_movie.c b/libswfdec/swfdec_js_movie.c index 61baaee..dcf119d 100644 --- a/libswfdec/swfdec_js_movie.c +++ b/libswfdec/swfdec_js_movie.c @@ -1124,6 +1124,7 @@ swfdec_js_movie_add_property (SwfdecMovi jsval val; JSObject *jsobj; JSContext *cx; + JSBool found = JS_FALSE; jsobj = swfdec_scriptable_get_object (script); val = OBJECT_TO_JSVAL (jsobj); @@ -1138,7 +1139,11 @@ swfdec_js_movie_add_property (SwfdecMovi jsobj = SWFDEC_ROOT_MOVIE (movie)->player->jsobj; SWFDEC_LOG ("setting %s as property for _global", movie->name); } - JS_SetProperty (cx, jsobj, movie->name, &val); + if (!JS_SetProperty (cx, jsobj, movie->name, &val) || + !JS_SetPropertyAttributes (cx, jsobj, movie->name, JSPROP_READONLY | JSPROP_PERMANENT, &found) || + found != JS_TRUE) { + SWFDEC_ERROR ("could not set property %s correctly", movie->name); + } } void @@ -1147,6 +1152,7 @@ swfdec_js_movie_remove_property (SwfdecM SwfdecScriptable *script = SWFDEC_SCRIPTABLE (movie); JSObject *jsobj; JSContext *cx; + JSBool found = JS_FALSE; if (script->jsobj == NULL) return; @@ -1161,6 +1167,10 @@ swfdec_js_movie_remove_property (SwfdecM } SWFDEC_LOG ("removing %s as property", movie->name); - JS_DeleteProperty (cx, jsobj, movie->name); + if (!JS_SetPropertyAttributes (cx, jsobj, movie->name, JSPROP_READONLY | JSPROP_PERMANENT, &found) || + found != JS_TRUE || + !JS_DeleteProperty (cx, jsobj, movie->name)) { + SWFDEC_ERROR ("could not remove property %s correctly", movie->name); + } } diff-tree 83559ae030079a2fd2b2372bc0b4a692f8d41795 (from b7e6159a4eba0d9d58d828073d99d10fe81d67ed) Author: Benjamin Otte <otte@gnome.org> Date: Thu Mar 1 14:48:39 2007 +0100 remove if 0'ed code that lay dormant since 0.3 diff --git a/libswfdec/swfdec_js_movie.c b/libswfdec/swfdec_js_movie.c index 2296078..61baaee 100644 --- a/libswfdec/swfdec_js_movie.c +++ b/libswfdec/swfdec_js_movie.c @@ -1096,81 +1096,6 @@ static JSPropertySpec movieclip_props[] {NULL} }; -#if 0 -JSObject * -movieclip_find (SwfdecActionContext *context, - SwfdecMovie *movie) -{ - GList *g; - struct mc_list_entry *listentry; - - for (g = g_list_first (context->movielist); g; g = g_list_next (g)) { - listentry = (struct mc_list_entry *)g->data; - - if (listentry->movie == movie) - return listentry->mc; - } - - return NULL; -} - -static void -swfdec_native_ASSetPropFlags (SwfdecActionContext *context, int num_args, - ActionVal *_this) -{ - ActionVal *a; - ActionVal *b; - ActionVal *c; - ActionVal *d; - int allowFalse = 0; - int flags; - - a = stack_pop (context); /* obj */ - action_val_convert_to_object (a); - b = stack_pop (context); /* property list */ - c = stack_pop (context); /* flags */ - action_val_convert_to_number (c); - if (num_args >= 4) { - d = stack_pop (context); /* allowFalse */ - action_val_convert_to_boolean (d); - allowFalse = d->number; - action_val_free (d); - } - - flags = (int)c->number & 0x7; - /* The flags appear to be 0x1 for DontEnum, 0x2 for DontDelete, and 0x4 for - * DontWrite, though the tables I found on the web are poorly written. - */ - - if (ACTIONVAL_IS_NULL(b)) { - GList *g; - - SWFDEC_DEBUG("%d args", num_args); - - for (g = g_list_first (a->obj->properties); g; g = g_list_next (g)) { - ScriptObjectProperty *prop = g->data; - if (allowFalse) { - prop->flags = flags; - } else { - prop->flags |= flags; - } - } - } else { - action_val_convert_to_string (b); - SWFDEC_WARNING("ASSetPropFlags not implemented (properties %s, flags 0x%x)", - b->string, (int)c->number); - } - - action_val_free (a); - action_val_free (b); - action_val_free (c); - - a = action_val_new (); - a->type = ACTIONVAL_TYPE_UNDEF; - stack_push (context, a); -} -#endif - static JSBool swfdec_js_movieclip_new (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { diff-tree b7e6159a4eba0d9d58d828073d99d10fe81d67ed (from c093bc3060a499d2f2552b614498ab20e3b22dc9) Author: Benjamin Otte <otte@gnome.org> Date: Thu Mar 1 14:37:26 2007 +0100 add swfdec_scriptable_from_object diff --git a/libswfdec/swfdec_scriptable.c b/libswfdec/swfdec_scriptable.c index f70db42..6554666 100644 --- a/libswfdec/swfdec_scriptable.c +++ b/libswfdec/swfdec_scriptable.c @@ -124,6 +124,35 @@ swfdec_scriptable_get_object (SwfdecScri } /** + * swfdec_scriptable_from_object: + * @cx: a #JSContext + * @object: the JSObject to convert (NULL is a valid value) + * @type: type of the object to get. + * + * Converts the given @object to a #SwfdecScriptable, if it represents one. + * The object must be of @type, otherwise %NULL will be returned. + * + * Returns: the scriptable represented by @object or NULL if it does not + * reference a @scriptable + **/ +gpointer +swfdec_scriptable_from_object (JSContext *cx, JSObject *object, GType type) +{ + SwfdecScriptableClass *klass; + + g_return_val_if_fail (g_type_is_a (type, SWFDEC_TYPE_SCRIPTABLE), NULL); + + if (object == NULL) + return NULL; + klass = g_type_class_peek (type); + if (klass == NULL) + return NULL; /* class doesn't exist -> no object of this type exists */ + if (!JS_InstanceOf (cx, object, klass->jsclass, NULL)) + return NULL; + return JS_GetPrivate (cx, object); +} + +/** * swfdec_scriptable_from_jsval: * @cx: a #JSContext * @val: the jsval to convert @@ -138,22 +167,14 @@ swfdec_scriptable_get_object (SwfdecScri gpointer swfdec_scriptable_from_jsval (JSContext *cx, jsval val, GType type) { - SwfdecScriptableClass *klass; JSObject *object; g_return_val_if_fail (g_type_is_a (type, SWFDEC_TYPE_SCRIPTABLE), NULL); if (!JSVAL_IS_OBJECT (val)) return NULL; - if (JSVAL_IS_NULL (val)) - return NULL; object = JSVAL_TO_OBJECT (val); - klass = g_type_class_peek (type); - if (klass == NULL) - return NULL; /* class doesn't exist -> no object of this type exists */ - if (!JS_InstanceOf (cx, object, klass->jsclass, NULL)) - return NULL; - return JS_GetPrivate (cx, object); + return swfdec_scriptable_from_object (cx, object, type); } /** diff --git a/libswfdec/swfdec_scriptable.h b/libswfdec/swfdec_scriptable.h index 0f57f11..a197d8f 100644 --- a/libswfdec/swfdec_scriptable.h +++ b/libswfdec/swfdec_scriptable.h @@ -60,6 +60,9 @@ JSObject * swfdec_scriptable_get_object gpointer swfdec_scriptable_from_jsval (JSContext * cx, jsval val, GType type); +gpointer swfdec_scriptable_from_object (JSContext * cx, + JSObject * object, + GType type); void swfdec_scriptable_set_variables (SwfdecScriptable * script, const char * variables); diff-tree c093bc3060a499d2f2552b614498ab20e3b22dc9 (from parents) Merge: 3e757b2781984c01f99384dd12e729b2a4c9c2c8 c87585512fddb167171f7762b4a87598e0b0447d Author: Benjamin Otte <otte@gnome.org> Date: Thu Mar 1 13:20:29 2007 +0100 Merge branch 'master' of ssh://company@git.freedesktop.org/git/swfdec diff-tree 3e757b2781984c01f99384dd12e729b2a4c9c2c8 (from 40f546c66744e4e6deedcce714ffc344ef5afd1a) Author: Benjamin Otte <otte@gnome.org> Date: Thu Mar 1 13:20:09 2007 +0100 register the classes with the objects for NetConnection, NetStream and XML diff --git a/libswfdec/swfdec_connection.c b/libswfdec/swfdec_connection.c index 8e423df..464affb 100644 --- a/libswfdec/swfdec_connection.c +++ b/libswfdec/swfdec_connection.c @@ -42,12 +42,16 @@ swfdec_connection_dispose (GObject *obje G_OBJECT_CLASS (swfdec_connection_parent_class)->dispose (object); } +extern const JSClass connection_class; static void swfdec_connection_class_init (SwfdecConnectionClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); + SwfdecScriptableClass *scriptable_class = SWFDEC_SCRIPTABLE_CLASS (klass); object_class->dispose = swfdec_connection_dispose; + + scriptable_class->jsclass = &connection_class; } static void diff --git a/libswfdec/swfdec_js_connection.c b/libswfdec/swfdec_js_connection.c index 1ff1032..1568e64 100644 --- a/libswfdec/swfdec_js_connection.c +++ b/libswfdec/swfdec_js_connection.c @@ -81,7 +81,7 @@ swfdec_js_connection_finalize (JSContext } } -static JSClass connection_class = { +const JSClass connection_class = { "NetConnection", JSCLASS_HAS_PRIVATE, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, swfdec_js_connection_finalize, diff --git a/libswfdec/swfdec_js_net_stream.c b/libswfdec/swfdec_js_net_stream.c index 7b53cfb..9f12dd0 100644 --- a/libswfdec/swfdec_js_net_stream.c +++ b/libswfdec/swfdec_js_net_stream.c @@ -56,7 +56,7 @@ swfdec_js_net_stream_finalize (JSContext } } -static JSClass net_stream_class = { +const JSClass net_stream_class = { "NetStream", JSCLASS_HAS_PRIVATE, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, swfdec_js_net_stream_finalize, diff --git a/libswfdec/swfdec_js_xml.c b/libswfdec/swfdec_js_xml.c index d6d0df5..e2cdecf 100644 --- a/libswfdec/swfdec_js_xml.c +++ b/libswfdec/swfdec_js_xml.c @@ -73,7 +73,7 @@ swfdec_js_xml_finalize (JSContext *cx, J } } -static JSClass xml_class = { +const JSClass xml_class = { "XML", JSCLASS_HAS_PRIVATE, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, swfdec_js_xml_finalize, diff --git a/libswfdec/swfdec_net_stream.c b/libswfdec/swfdec_net_stream.c index 3fb4937..b6f15e8 100644 --- a/libswfdec/swfdec_net_stream.c +++ b/libswfdec/swfdec_net_stream.c @@ -222,12 +222,16 @@ swfdec_net_stream_dispose (GObject *obje G_OBJECT_CLASS (swfdec_net_stream_parent_class)->dispose (object); } +extern const JSClass net_stream_class; static void swfdec_net_stream_class_init (SwfdecNetStreamClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); + SwfdecScriptableClass *scriptable_class = SWFDEC_SCRIPTABLE_CLASS (klass); object_class->dispose = swfdec_net_stream_dispose; + + scriptable_class->jsclass = &net_stream_class; } static void diff --git a/libswfdec/swfdec_xml.c b/libswfdec/swfdec_xml.c index 1f05c7d..b5cbf26 100644 --- a/libswfdec/swfdec_xml.c +++ b/libswfdec/swfdec_xml.c @@ -141,12 +141,16 @@ swfdec_xml_dispose (GObject *object) G_OBJECT_CLASS (swfdec_xml_parent_class)->dispose (object); } +extern const JSClass xml_class; static void swfdec_xml_class_init (SwfdecXmlClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); + SwfdecScriptableClass *scriptable_class = SWFDEC_SCRIPTABLE_CLASS (klass); object_class->dispose = swfdec_xml_dispose; + + scriptable_class->jsclass = &xml_class; } static void diff-tree 40f546c66744e4e6deedcce714ffc344ef5afd1a (from 66e63dc1d746e5b3d5bffd3b780a028aa6b995be) Author: Benjamin Otte <otte@gnome.org> Date: Thu Mar 1 13:18:51 2007 +0100 fix swfdec_scriptable_set_variables again The last "fix" made the last property not being set diff --git a/libswfdec/swfdec_scriptable.c b/libswfdec/swfdec_scriptable.c index 772a7de..f70db42 100644 --- a/libswfdec/swfdec_scriptable.c +++ b/libswfdec/swfdec_scriptable.c @@ -174,8 +174,6 @@ swfdec_scriptable_set_variables (SwfdecS g_return_if_fail (variables != NULL); SWFDEC_DEBUG ("setting variables on %p: %s", script, variables); - if (*variables == '\0') - return; object = swfdec_scriptable_get_object (script); while (TRUE) { char *name, *value; @@ -186,15 +184,12 @@ swfdec_scriptable_set_variables (SwfdecS SWFDEC_WARNING ("variables invalid at \"%s\"", variables); break; } - if (*variables == '\0') { - break; - } else if (*variables != '&') { + if (*variables != '\0' && *variables != '&') { SWFDEC_WARNING ("variables not delimited with & at \"%s\"", variables); g_free (name); g_free (value); break; } - variables++; string = JS_NewStringCopyZ (script->jscx, value); if (string == NULL) { g_free (name); @@ -212,6 +207,9 @@ swfdec_scriptable_set_variables (SwfdecS SWFDEC_DEBUG ("Set variable \"%s\" to \"%s\"", name, value); g_free (name); g_free (value); + if (*variables == '\0') + break; + variables++; } }
Apparently Analagous Threads
- 11 commits - libswfdec/Makefile.am libswfdec/swfdec_connection.c libswfdec/swfdec_connection.h libswfdec/swfdec_flv_decoder.c libswfdec/swfdec_js.c libswfdec/swfdec_js_connection.c libswfdec/swfdec_js.h libswfdec/swfdec_js_net_stream.c
- 10 commits - libswfdec/js libswfdec/swfdec_js_color.c libswfdec/swfdec_js_connection.c libswfdec/swfdec_js_movie.c libswfdec/swfdec_js_net_stream.c libswfdec/swfdec_js_video.c libswfdec/swfdec_js_xml.c libswfdec/swfdec_script.c player/.gitignore
- 12 commits - libswfdec/Makefile.am libswfdec/swfdec_audio_flv.c libswfdec/swfdec_flv_decoder.c libswfdec/swfdec_js.c libswfdec/swfdec_js.h libswfdec/swfdec_js_video.c libswfdec/swfdec_loader.c libswfdec/swfdec_loader_internal.h
- Branch 'as' - 5 commits - libswfdec/Makefile.am libswfdec/swfdec_as_strings.c libswfdec/swfdec_js_net_stream.c libswfdec/swfdec_movie.c libswfdec/swfdec_net_connection.c libswfdec/swfdec_net_stream_as.c libswfdec/swfdec_net_stream.c
- Branch 'as' - 17 commits - configure.ac doc/Makefile.am doc/swfdec-docs.sgml doc/swfdec-sections.txt doc/swfdec.types libswfdec-gtk/Makefile.am libswfdec-gtk/swfdec-gtk.h libswfdec-gtk/swfdec_gtk_loader.c libswfdec-gtk/swfdec_gtk_loader.h