Index: configure =================================================================== --- configure (revision 328) +++ configure (working copy) @@ -639,6 +639,7 @@ am__EXEEXT_TRUE LTLIBOBJS LIBOBJS +plugindir GIO_DEFINES GIO_LIBS GIO_CFLAGS @@ -775,6 +776,7 @@ enable_schemas_install with_gconf with_gio +with_plugin_dir enable_caching ' ac_precious_vars='build_alias @@ -1444,6 +1446,7 @@ Directory for installing schema files. --with-gconf Use Gconf to store preferences --with-gio Use GIO for file I/O + --with-plugin-dir=dir Directory where plugins are stored Some influential environment variables: CC C compiler command @@ -9640,6 +9643,16 @@ fi + +# Check whether --with-plugin_dir was given. +if test "${with_plugin_dir+set}" = set; then + withval=$with_plugin_dir; plugindir=$withval +else + plugindir='$(libdir)/mozilla/plugins' +fi + + + # Check whether --enable-caching was given. if test "${enable_caching+set}" = set; then enableval=$enable_caching; usecache=$enableval Index: Makefile.in =================================================================== --- Makefile.in (revision 328) +++ Makefile.in (working copy) @@ -239,6 +239,7 @@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ +plugindir = @plugindir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ Index: configure.in =================================================================== --- configure.in (revision 328) +++ configure.in (working copy) @@ -114,6 +114,13 @@ AC_SUBST(GIO_LIBS) ]) +AC_ARG_WITH([plugin_dir], + [AS_HELP_STRING([--with-plugin-dir=dir], + [Directory where plugins are stored])], + [plugindir=$withval], + [plugindir='$(libdir)/mozilla/plugins']) +AC_SUBST(plugindir) + AC_ARG_ENABLE(caching, AC_HELP_STRING([--disable-caching],[Disable caching of remote media to local storage]), [usecache=$enableval],[usecache=yes]) Index: src/plugin.cpp =================================================================== --- src/plugin.cpp (revision 328) +++ src/plugin.cpp (working copy) @@ -42,9 +42,9 @@ #include "plugin_setup.h" #include "plugin_types.h" #include "plugin_dbus.h" -#include "nsIPrefBranch.h" -#include "nsIPrefService.h" -#include "nsIServiceManager.h" +#include +#include +#include nsIPrefBranch *prefBranch = NULL; nsIPrefService *prefService = NULL; @@ -170,9 +170,9 @@ { gchar *jscript; - jscript = g_strdup_printf("javascript:obj=document.getElementById('%s');" - "e=document.createEvent('Events');" - "e.initEvent('%s',true,true);" "obj.dispatchEvent(e);", id, event); + jscript = g_strdup_printf("javascript:obj_gmp=document.getElementById('%s');" + "e_gmp=document.createEvent('Events');" + "e_gmp.initEvent('%s',true,true);" "obj_gmp.dispatchEvent(e_gmp);", id, event); NPN_GetURL(mInstance, jscript, NULL); g_free(jscript); } @@ -259,6 +259,7 @@ console(NULL), controls(NULL), user_agent(NULL), +player_backend(NULL), disable_context_menu(FALSE), disable_fullscreen(FALSE), post_dom_events(FALSE), @@ -354,6 +355,8 @@ store = gm_pref_store_new("gecko-mediaplayer"); if (store != NULL) { debug_level = gm_pref_store_get_int(store, DEBUG_LEVEL); + player_backend = gm_pref_store_get_string(store, PLAYER_BACKEND); + printf("Using player backend of '%s'\n",player_backend); gm_pref_store_free(store); } @@ -458,10 +461,16 @@ } if (!player_launched && mWidth > 0 && mHeight > 0) { - app_name = g_find_program_in_path("gnome-mplayer"); - if (app_name == NULL) - app_name = g_find_program_in_path("gnome-mplayer-minimal"); - + app_name = NULL; + if (player_backend != NULL) { + app_name = g_find_program_in_path(player_backend); + } + if (app_name == NULL) { + app_name = g_find_program_in_path("gnome-mplayer"); + if (app_name == NULL) + app_name = g_find_program_in_path("gnome-mplayer-minimal"); + } + argvn[arg++] = g_strdup_printf("%s", app_name); g_free(app_name); argvn[arg++] = g_strdup_printf("--window=%i", (gint) mWindow); @@ -643,6 +652,14 @@ g_free(path); } //printf("Leaving destroy stream src = %s\n", item->src); + + } else if (reason == NPRES_NETWORK_ERR) { + item = (ListItem *) stream->notifyData; + if (item) { + printf("Destroy Stream, network error, item is %s\n", item->src); + } else { + printf("Destory Stream, network error, item is NULL\n"); + } } else { item = (ListItem *) stream->notifyData; // item = list_find(playlist, (gchar*)stream->url); @@ -692,9 +709,19 @@ */ } } else { - if (item) + if (item) { item->played = TRUE; - if (!item->streaming) { + if (!item->streaming) { + item = list_find_next_playable(playlist); + if (item) { + if (item->retrieved) { + open_location(this, item, TRUE); + } else { + NPN_GetURLNotify(mInstance, item->src, NULL, item); + } + } + } + } else { item = list_find_next_playable(playlist); if (item) { if (item->retrieved) { @@ -703,7 +730,7 @@ NPN_GetURLNotify(mInstance, item->src, NULL, item); } } - } + } } } Index: src/Makefile.in =================================================================== --- src/Makefile.in (revision 328) +++ src/Makefile.in (working copy) @@ -57,34 +57,45 @@ $(am__objects_1) gecko_mediaplayer_dvx_so_OBJECTS = \ $(am_gecko_mediaplayer_dvx_so_OBJECTS) -gecko_mediaplayer_dvx_so_DEPENDENCIES = libgmlib/libgmlib.a +am__DEPENDENCIES_1 = +gecko_mediaplayer_dvx_so_DEPENDENCIES = libgmlib/libgmlib.a \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) gecko_mediaplayer_dvx_so_LINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \ $(gecko_mediaplayer_dvx_so_LDFLAGS) $(LDFLAGS) -o $@ am_gecko_mediaplayer_qt_so_OBJECTS = plugin_types_qt.$(OBJEXT) \ $(am__objects_1) gecko_mediaplayer_qt_so_OBJECTS = \ $(am_gecko_mediaplayer_qt_so_OBJECTS) -gecko_mediaplayer_qt_so_DEPENDENCIES = libgmlib/libgmlib.a +gecko_mediaplayer_qt_so_DEPENDENCIES = libgmlib/libgmlib.a \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) gecko_mediaplayer_qt_so_LINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \ $(gecko_mediaplayer_qt_so_LDFLAGS) $(LDFLAGS) -o $@ am_gecko_mediaplayer_rm_so_OBJECTS = plugin_types_rm.$(OBJEXT) \ $(am__objects_1) gecko_mediaplayer_rm_so_OBJECTS = \ $(am_gecko_mediaplayer_rm_so_OBJECTS) -gecko_mediaplayer_rm_so_DEPENDENCIES = libgmlib/libgmlib.a +gecko_mediaplayer_rm_so_DEPENDENCIES = libgmlib/libgmlib.a \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) gecko_mediaplayer_rm_so_LINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \ $(gecko_mediaplayer_rm_so_LDFLAGS) $(LDFLAGS) -o $@ am_gecko_mediaplayer_wmp_so_OBJECTS = plugin_types_wmp.$(OBJEXT) \ $(am__objects_1) gecko_mediaplayer_wmp_so_OBJECTS = \ $(am_gecko_mediaplayer_wmp_so_OBJECTS) -gecko_mediaplayer_wmp_so_DEPENDENCIES = libgmlib/libgmlib.a +gecko_mediaplayer_wmp_so_DEPENDENCIES = libgmlib/libgmlib.a \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) gecko_mediaplayer_wmp_so_LINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \ $(gecko_mediaplayer_wmp_so_LDFLAGS) $(LDFLAGS) -o $@ am_gecko_mediaplayer_so_OBJECTS = plugin_types_std.$(OBJEXT) \ $(am__objects_1) gecko_mediaplayer_so_OBJECTS = $(am_gecko_mediaplayer_so_OBJECTS) -gecko_mediaplayer_so_DEPENDENCIES = libgmlib/libgmlib.a +gecko_mediaplayer_so_DEPENDENCIES = libgmlib/libgmlib.a \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) gecko_mediaplayer_so_LINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \ $(gecko_mediaplayer_so_LDFLAGS) $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) @@ -265,6 +276,7 @@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ +plugindir = @plugindir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -312,42 +324,42 @@ npp_gate.cpp \ npupp.h -install_libexecdir = $(libdir)/mozilla/plugins +install_libexecdir = $(plugindir) gecko_mediaplayer_so_SOURCES = \ plugin_types_std.cpp \ $(COMMONCODE) gecko_mediaplayer_so_CFLAGS = -fPIC -gecko_mediaplayer_so_LDFLAGS = -shared $(GLIB_LIBS) $(DBUS_LIBS) $(GCONF_LIBS) -fPIC -gecko_mediaplayer_so_LDADD = libgmlib/libgmlib.a +gecko_mediaplayer_so_LDFLAGS = -shared -fPIC +gecko_mediaplayer_so_LDADD = libgmlib/libgmlib.a $(GLIB_LIBS) $(DBUS_LIBS) $(GCONF_LIBS) gecko_mediaplayer_qt_so_SOURCES = \ plugin_types_qt.cpp \ $(COMMONCODE) gecko_mediaplayer_qt_so_CFLAGS = -fPIC -gecko_mediaplayer_qt_so_LDFLAGS = -shared $(GLIB_LIBS) $(DBUS_LIBS) $(GCONF_LIBS) -fPIC -gecko_mediaplayer_qt_so_LDADD = libgmlib/libgmlib.a +gecko_mediaplayer_qt_so_LDFLAGS = -shared -fPIC +gecko_mediaplayer_qt_so_LDADD = libgmlib/libgmlib.a $(GLIB_LIBS) $(DBUS_LIBS) $(GCONF_LIBS) gecko_mediaplayer_wmp_so_SOURCES = \ plugin_types_wmp.cpp \ $(COMMONCODE) gecko_mediaplayer_wmp_so_CFLAGS = -fPIC -gecko_mediaplayer_wmp_so_LDFLAGS = -shared $(GLIB_LIBS) $(DBUS_LIBS) $(GCONF_LIBS) -fPIC -gecko_mediaplayer_wmp_so_LDADD = libgmlib/libgmlib.a +gecko_mediaplayer_wmp_so_LDFLAGS = -shared -fPIC +gecko_mediaplayer_wmp_so_LDADD = libgmlib/libgmlib.a $(GLIB_LIBS) $(DBUS_LIBS) $(GCONF_LIBS) gecko_mediaplayer_dvx_so_SOURCES = \ plugin_types_dvx.cpp \ $(COMMONCODE) gecko_mediaplayer_dvx_so_CFLAGS = -fPIC -gecko_mediaplayer_dvx_so_LDFLAGS = -shared $(GLIB_LIBS) $(DBUS_LIBS) $(GCONF_LIBS) -fPIC -gecko_mediaplayer_dvx_so_LDADD = libgmlib/libgmlib.a +gecko_mediaplayer_dvx_so_LDFLAGS = -shared -fPIC +gecko_mediaplayer_dvx_so_LDADD = libgmlib/libgmlib.a $(GLIB_LIBS) $(DBUS_LIBS) $(GCONF_LIBS) gecko_mediaplayer_rm_so_SOURCES = \ plugin_types_rm.cpp \ $(COMMONCODE) gecko_mediaplayer_rm_so_CFLAGS = -fPIC -gecko_mediaplayer_rm_so_LDFLAGS = -shared $(GLIB_LIBS) $(DBUS_LIBS) $(GCONF_LIBS) -fPIC -gecko_mediaplayer_rm_so_LDADD = libgmlib/libgmlib.a +gecko_mediaplayer_rm_so_LDFLAGS = -shared -fPIC +gecko_mediaplayer_rm_so_LDADD = libgmlib/libgmlib.a $(GLIB_LIBS) $(DBUS_LIBS) $(GCONF_LIBS) all: all-recursive .SUFFIXES: Index: src/plugin.h =================================================================== --- src/plugin.h (revision 328) +++ src/plugin.h (working copy) @@ -84,6 +84,7 @@ #define DISABLE_DVX "disable_dvx" #define DEBUG_LEVEL "debug_level" #define DISABLE_MIDI "disable_midi" +#define PLAYER_BACKEND "player_backend" typedef enum { PLAYING, @@ -189,6 +190,7 @@ gchar *console; gchar *controls; gchar *user_agent; + gchar *player_backend; // events gboolean post_dom_events; Index: src/plugin_dbus.cpp =================================================================== --- src/plugin_dbus.cpp (revision 328) +++ src/plugin_dbus.cpp (working copy) @@ -109,6 +109,14 @@ return DBUS_HANDLER_RESULT_HANDLED; } + if (g_ascii_strcasecmp(dbus_message_get_member(message), "ListDump") == 0) { + + printf("playlist:\n"); + list_dump(instance->playlist); + + return DBUS_HANDLER_RESULT_HANDLED; + } + if (g_ascii_strcasecmp(dbus_message_get_member(message), "RequestById") == 0) { dbus_error_init(&error); if (dbus_message_get_args(message, &error, DBUS_TYPE_STRING, &s, DBUS_TYPE_INVALID)) { @@ -773,6 +781,10 @@ result = TRUE; + } else if (g_ascii_strcasecmp(message, "/DEBUG") == 0) { + + result = TRUE; + } else { if (instance->playlist != NULL) { Index: src/Makefile.am =================================================================== --- src/Makefile.am (revision 328) +++ src/Makefile.am (working copy) @@ -39,7 +39,7 @@ npp_gate.cpp \ npupp.h -install_libexecdir = $(libdir)/mozilla/plugins +install_libexecdir = $(plugindir) install_libexec_PROGRAMS = \ gecko-mediaplayer.so \ gecko-mediaplayer-qt.so \ @@ -52,40 +52,40 @@ $(COMMONCODE) gecko_mediaplayer_so_CFLAGS = -fPIC -gecko_mediaplayer_so_LDFLAGS = -shared $(GLIB_LIBS) $(DBUS_LIBS) $(GCONF_LIBS) -fPIC -gecko_mediaplayer_so_LDADD = libgmlib/libgmlib.a +gecko_mediaplayer_so_LDFLAGS = -shared -fPIC +gecko_mediaplayer_so_LDADD = libgmlib/libgmlib.a $(GLIB_LIBS) $(DBUS_LIBS) $(GCONF_LIBS) gecko_mediaplayer_qt_so_SOURCES = \ plugin_types_qt.cpp \ $(COMMONCODE) gecko_mediaplayer_qt_so_CFLAGS = -fPIC -gecko_mediaplayer_qt_so_LDFLAGS = -shared $(GLIB_LIBS) $(DBUS_LIBS) $(GCONF_LIBS) -fPIC -gecko_mediaplayer_qt_so_LDADD = libgmlib/libgmlib.a +gecko_mediaplayer_qt_so_LDFLAGS = -shared -fPIC +gecko_mediaplayer_qt_so_LDADD = libgmlib/libgmlib.a $(GLIB_LIBS) $(DBUS_LIBS) $(GCONF_LIBS) gecko_mediaplayer_wmp_so_SOURCES = \ plugin_types_wmp.cpp \ $(COMMONCODE) gecko_mediaplayer_wmp_so_CFLAGS = -fPIC -gecko_mediaplayer_wmp_so_LDFLAGS = -shared $(GLIB_LIBS) $(DBUS_LIBS) $(GCONF_LIBS) -fPIC -gecko_mediaplayer_wmp_so_LDADD = libgmlib/libgmlib.a +gecko_mediaplayer_wmp_so_LDFLAGS = -shared -fPIC +gecko_mediaplayer_wmp_so_LDADD = libgmlib/libgmlib.a $(GLIB_LIBS) $(DBUS_LIBS) $(GCONF_LIBS) gecko_mediaplayer_dvx_so_SOURCES = \ plugin_types_dvx.cpp \ $(COMMONCODE) gecko_mediaplayer_dvx_so_CFLAGS = -fPIC -gecko_mediaplayer_dvx_so_LDFLAGS = -shared $(GLIB_LIBS) $(DBUS_LIBS) $(GCONF_LIBS) -fPIC -gecko_mediaplayer_dvx_so_LDADD = libgmlib/libgmlib.a +gecko_mediaplayer_dvx_so_LDFLAGS = -shared -fPIC +gecko_mediaplayer_dvx_so_LDADD = libgmlib/libgmlib.a $(GLIB_LIBS) $(DBUS_LIBS) $(GCONF_LIBS) gecko_mediaplayer_rm_so_SOURCES = \ plugin_types_rm.cpp \ $(COMMONCODE) gecko_mediaplayer_rm_so_CFLAGS = -fPIC -gecko_mediaplayer_rm_so_LDFLAGS = -shared $(GLIB_LIBS) $(DBUS_LIBS) $(GCONF_LIBS) -fPIC -gecko_mediaplayer_rm_so_LDADD = libgmlib/libgmlib.a +gecko_mediaplayer_rm_so_LDFLAGS = -shared -fPIC +gecko_mediaplayer_rm_so_LDADD = libgmlib/libgmlib.a $(GLIB_LIBS) $(DBUS_LIBS) $(GCONF_LIBS) indent: indent -kr -l100 -i4 -nut *.cpp Index: src/plugin_list.cpp =================================================================== --- src/plugin_list.cpp (revision 328) +++ src/plugin_list.cpp (working copy) @@ -356,7 +356,7 @@ return list; } else { while (p != NULL) { - urlptr = (gchar *) memmem(p,datalen - (p - data), "url ", 4); + urlptr = (gchar *) memmem_compat(p,datalen - (p - data), "url ", 4); if (urlptr == NULL) { @@ -385,7 +385,7 @@ item->id = -1; list = g_list_append(list, newitem); } - p = (gchar *) memmem(urlptr,datalen - (urlptr - data),"mmdr",4); + p = (gchar *) memmem_compat(urlptr,datalen - (urlptr - data),"mmdr",4); } } Index: ChangeLog =================================================================== --- ChangeLog (revision 328) +++ ChangeLog (working copy) @@ -1,3 +1,11 @@ +Developement + Allow for configurable backend (fosfor or gnome-mplayer or something else) + Make dom event javascript a little more unique + React to Network Errors in DestroyStream differently + Added /DEBUG path for debugging purposes + Added ListDump dbus method + konqueror patch from Christian.Morales.Vega + plugin-dir patch from Christian.Morales.Vega 0.9.8 When cancelling a stream (USER_BREAK) and the cancelled one is streaming don't automatically load the next item on the playlist Index: gecko-mediaplayer.schemas =================================================================== --- gecko-mediaplayer.schemas (revision 328) +++ gecko-mediaplayer.schemas (working copy) @@ -62,5 +62,17 @@ + + /schemas/apps/gecko-mediaplayer/preferences/player_backend + /apps/gecko-mediaplayer/preferences/player_backend + gecko-mediaplayer + string + + + Backend to use + Backend to use + + +