bool xplayerNPObject::DupStringFromArguments (const NPVariant* argv, uint32_t argc, uint32_t argNum, char*& _result) { NPN_MemFree (_result); _result = NULL; NPString newValue; if (!GetNPStringFromArguments (argv, argc, argNum, newValue)) return false; _result = NPN_StrnDup (newValue.UTF8Characters, newValue.UTF8Length); return true; }
bool xplayerGMPControls::InvokeByIndex (int aIndex, const NPVariant *argv, uint32_t argc, NPVariant *_result) { XPLAYER_LOG_INVOKE (aIndex, xplayerGMPControls); switch (Methods (aIndex)) { case ePause: /* void pause (); */ Plugin()->Command (XPLAYER_COMMAND_PAUSE); return VoidVariant (_result); case ePlay: /* void play (); */ Plugin()->Command (XPLAYER_COMMAND_PLAY); return VoidVariant (_result); case eStop: /* void stop (); */ Plugin()->Command (XPLAYER_COMMAND_PAUSE); return VoidVariant (_result); case eGetAudioLanguageDescription: /* AUTF8String getAudioLanguageDescription (in long index); */ XPLAYER_WARN_1_INVOKE_UNIMPLEMENTED (aIndex,xplayerGMPControls); return StringVariant (_result, "English"); case eGetLanguageName: /* AUTF8String getLanguageName (in long LCID); */ XPLAYER_WARN_1_INVOKE_UNIMPLEMENTED (aIndex,xplayerGMPControls); return StringVariant (_result, "English"); case eIsAvailable: /* boolean isAvailable (in ACString name); */ NPString name; if (!GetNPStringFromArguments (argv, argc, 0, name)) return false; if (g_ascii_strncasecmp (name.UTF8Characters, "currentItem", name.UTF8Length) == 0 || g_ascii_strncasecmp (name.UTF8Characters, "next", name.UTF8Length) == 0 || g_ascii_strncasecmp (name.UTF8Characters, "pause", name.UTF8Length) == 0 || g_ascii_strncasecmp (name.UTF8Characters, "play", name.UTF8Length) == 0 || g_ascii_strncasecmp (name.UTF8Characters, "previous", name.UTF8Length) == 0 || g_ascii_strncasecmp (name.UTF8Characters, "stop", name.UTF8Length) == 0) return BoolVariant (_result, true); return BoolVariant (_result, false); case eFastForward: /* void fastForward (); */ case eFastReverse: /* void fastReverse (); */ case eGetAudioLanguageID: /* long getAudioLanguageID (in long index); */ case eNext: /* void next (); */ case ePlayItem: /* void playItem (in xplayerIGMPMedia theMediaItem); */ case ePrevious: /* void previous (); */ case eStep: /* void step (in long frameCount); */ XPLAYER_WARN_INVOKE_UNIMPLEMENTED (aIndex,xplayerGMPControls); return VoidVariant (_result); } return false; }
bool xplayerGMPPlayer::SetPropertyByIndex (int aIndex, const NPVariant *aValue) { XPLAYER_LOG_SETTER (aIndex, xplayerGMPPlayer); switch (Properties (aIndex)) { case eFullScreen: { /* attribute boolean fullScreen; */ bool enabled; if (!GetBoolFromArguments (aValue, 1, 0, enabled)) return false; Plugin()->SetFullscreen (enabled); return true; } case eWindowlessVideo: { /* attribute boolean windowlessVideo; */ bool enabled; if (!GetBoolFromArguments (aValue, 1, 0, enabled)) return false; Plugin()->SetIsWindowless(enabled); return true; } case eURL: { /* attribute AUTF8String URL; */ NPString url; if (!GetNPStringFromArguments (aValue, 1, 0, url)) return false; Plugin()->SetSrc (url); /* FIXMEchpe: use SetURL instead?? */ return true; } case eEnableContextMenu: { /* attribute boolean enableContextMenu; */ bool enabled; if (!GetBoolFromArguments (aValue, 1, 0, enabled)) return false; Plugin()->SetAllowContextMenu (enabled); return true; } case eCurrentMedia: /* attribute xplayerIGMPMedia currentMedia; */ case eCurrentPlaylist: /* attribute xplayerIGMPPlaylist currentPlaylist; */ case eEnabled: /* attribute boolean enabled; */ case eStretchToFit: /* attribute boolean stretchToFit; */ case eUiMode: /* attribute ACString uiMode; */ XPLAYER_WARN_SETTER_UNIMPLEMENTED (aIndex, xplayerGMPPlayer); return true; case eCdromCollection: /* readonly attribute xplayerIGMPCdromCollection cdromCollection; */ case eClosedCaption: /* readonly attribute xplayerIGMPClosedCaption closedCaption; */ case eControls: /* readonly attribute xplayerIGMPControls controls; */ case eDvd: /* readonly attribute xplayerIGMPDVD dvd; */ case eError: /* readonly attribute xplayerIGMPError error; */ case eIsOnline: /* readonly attribute boolean isOnline; */ case eIsRemote: /* readonly attribute boolean isRemote; */ case eMediaCollection: /* readonly attribute xplayerIGMPMediaCollection mediaCollection; */ case eNetwork: /* readonly attribute xplayerIGMPNetwork network; */ case eOpenState: /* readonly attribute long openState; */ case ePlayerApplication: /* readonly attribute xplayerIGMPPlayerApplication playerApplication; */ case ePlaylistCollection: /* readonly attribute xplayerIGMPPlaylistCollection playlistCollection; */ case ePlayState: /* readonly attribute long playState; */ case eSettings: /* readonly attribute xplayerIGMPSettings settings; */ case eStatus: /* readonly attribute AUTF8String status; */ case eVersionInfo: /* readonly attribute ACString versionInfo; */ return ThrowPropertyNotWritable (); } return false; }
bool totemConePlaylist::InvokeByIndex (int aIndex, const NPVariant *argv, uint32_t argc, NPVariant *_result) { TOTEM_LOG_INVOKE (aIndex, totemConePlaylist); switch (Methods (aIndex)) { case eAdd: { /* long add (in AUTF8String MRL, [in AUTF8String name, in AUTF8String options]); */ if (!CheckArgc (argc, 1, 3)) return false; NPString mrl; if (!GetNPStringFromArguments (argv, argc, 0, mrl)) return false; NPString title; if (argc != 3 || !GetNPStringFromArguments (argv, argc, 1, title)) title.UTF8Characters = NULL; NPString options; if (argc != 3 || !GetNPStringFromArguments (argv, argc, 2, options)) options.UTF8Characters = NULL; //FIXME handle options as array //http://wiki.videolan.org/Documentation:WebPlugin#Playlist_object char *subtitle = NULL; if (options.UTF8Characters && options.UTF8Length) { char *str, **items; guint i; str = g_strndup (options.UTF8Characters, options.UTF8Length); items = g_strsplit (str, " ", -1); g_free (str); for (i = 0; items[i] != NULL; i++) { if (g_str_has_prefix (items[i], ":sub-file=")) { subtitle = g_strdup (items[i] + strlen (":sub-file=")); break; } } g_strfreev (items); } Plugin()->AddItem (mrl, title, subtitle); g_free (subtitle); //FIXME we're supposed to return a unique number here return Int32Variant (_result, 1); } case ePlay: Plugin()->Command (TOTEM_COMMAND_PLAY); return VoidVariant (_result); case eStop: Plugin()->Command (TOTEM_COMMAND_STOP); return VoidVariant (_result); case eTogglePause: if (Plugin()->State() == TOTEM_STATE_PLAYING) { Plugin()->Command (TOTEM_COMMAND_PAUSE); } else if (Plugin()->State() == TOTEM_STATE_PAUSED) { Plugin()->Command (TOTEM_COMMAND_PLAY); } return VoidVariant (_result); case eNext: case ePlayItem: case ePrev: case eRemoveItem: TOTEM_WARN_INVOKE_UNIMPLEMENTED (aIndex, totemConePlaylist); return VoidVariant (_result); } return false; }