diff options
author | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
---|---|---|
committer | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
commit | 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch) | |
tree | 12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/nprt_plugin/npp_gate.cpp | |
parent | 537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff) | |
download | winamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz |
Initial community commit
Diffstat (limited to 'Src/nprt_plugin/npp_gate.cpp')
-rw-r--r-- | Src/nprt_plugin/npp_gate.cpp | 262 |
1 files changed, 262 insertions, 0 deletions
diff --git a/Src/nprt_plugin/npp_gate.cpp b/Src/nprt_plugin/npp_gate.cpp new file mode 100644 index 00000000..54a46fec --- /dev/null +++ b/Src/nprt_plugin/npp_gate.cpp @@ -0,0 +1,262 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: NPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Netscape Public License + * Version 1.1 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://www.mozilla.org/NPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is + * Netscape Communications Corporation. + * Portions created by the Initial Developer are Copyright (C) 1998 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the NPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the NPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +//////////////////////////////////////////////////////////// +// +// Implementation of plugin entry points (NPP_*) +// most are just empty stubs for this particular plugin +// +#include "plugin.h" + +char* +NPP_GetMIMEDescription(void) +{ + return "application/x-winampx-1.0.0.1::Winamp Application Detector"; +} + + + +NPError NPP_Initialize(void) +{ + return NPERR_NO_ERROR; +} + +void NPP_Shutdown(void) +{ +} + +// here the plugin creates an instance of our CPlugin object which +// will be associated with this newly created plugin instance and +// will do all the neccessary job +NPError NPP_New(NPMIMEType pluginType, + NPP instance, + uint16 mode, + int16 argc, + char* argn[], + char* argv[], + NPSavedData* saved) +{ + if(instance == NULL) + return NPERR_INVALID_INSTANCE_ERROR; + + NPError rv = NPERR_NO_ERROR; + + CPlugin * pPlugin = new CPlugin(instance); + if(pPlugin == NULL) + return NPERR_OUT_OF_MEMORY_ERROR; + + instance->pdata = (void *)pPlugin; + return rv; +} + +// here is the place to clean up and destroy the CPlugin object +NPError NPP_Destroy (NPP instance, NPSavedData** save) +{ + if(instance == NULL) + return NPERR_INVALID_INSTANCE_ERROR; + + NPError rv = NPERR_NO_ERROR; + + CPlugin * pPlugin = (CPlugin *)instance->pdata; + if(pPlugin != NULL) { + pPlugin->shut(); + delete pPlugin; + } + return rv; +} + +// during this call we know when the plugin window is ready or +// is about to be destroyed so we can do some gui specific +// initialization and shutdown +NPError NPP_SetWindow (NPP instance, NPWindow* pNPWindow) +{ + if(instance == NULL) + return NPERR_INVALID_INSTANCE_ERROR; + + NPError rv = NPERR_NO_ERROR; + + if(pNPWindow == NULL) + return NPERR_GENERIC_ERROR; + + CPlugin * pPlugin = (CPlugin *)instance->pdata; + + if(pPlugin == NULL) + return NPERR_GENERIC_ERROR; + + // window just created + if(!pPlugin->isInitialized() && (pNPWindow->window != NULL)) { + if(!pPlugin->init(pNPWindow)) { + delete pPlugin; + pPlugin = NULL; + return NPERR_MODULE_LOAD_FAILED_ERROR; + } + } + + // window goes away + if((pNPWindow->window == NULL) && pPlugin->isInitialized()) + return NPERR_NO_ERROR; + + // window resized + if(pPlugin->isInitialized() && (pNPWindow->window != NULL)) + return NPERR_NO_ERROR; + + // this should not happen, nothing to do + if((pNPWindow->window == NULL) && !pPlugin->isInitialized()) + return NPERR_NO_ERROR; + + return rv; +} + +// ============================== +// ! Scriptability related code ! +// ============================== +// +// here the plugin is asked by Mozilla to tell if it is scriptable +// we should return a valid interface id and a pointer to +// nsScriptablePeer interface which we should have implemented +// and which should be defined in the corressponding *.xpt file +// in the bin/components folder +NPError NPP_GetValue(NPP instance, NPPVariable variable, void *value) +{ + if(instance == NULL) + return NPERR_INVALID_INSTANCE_ERROR; + + NPError rv = NPERR_NO_ERROR; + + if(instance == NULL) + return NPERR_GENERIC_ERROR; + + CPlugin * plugin = (CPlugin *)instance->pdata; + if(plugin == NULL) + return NPERR_GENERIC_ERROR; + + switch (variable) { + case NPPVpluginNameString: + *((char **)value) = "Winamp Application Detector"; + break; + case NPPVpluginDescriptionString: + *((char **)value) = "Winamp Application Detector"; + break; + case NPPVpluginScriptableNPObject: + *(NPObject **)value = plugin->GetScriptableObject(); + break; + default: + rv = NPERR_GENERIC_ERROR; + } + + return rv; +} + +NPError NPP_NewStream(NPP instance, + NPMIMEType type, + NPStream* stream, + NPBool seekable, + uint16* stype) +{ + if(instance == NULL) + return NPERR_INVALID_INSTANCE_ERROR; + + NPError rv = NPERR_NO_ERROR; + return rv; +} + +int32 NPP_WriteReady (NPP instance, NPStream *stream) +{ + if(instance == NULL) + return NPERR_INVALID_INSTANCE_ERROR; + + int32 rv = 0x0fffffff; + return rv; +} + +int32 NPP_Write (NPP instance, NPStream *stream, int32 offset, int32 len, void *buffer) +{ + if(instance == NULL) + return NPERR_INVALID_INSTANCE_ERROR; + + int32 rv = len; + return rv; +} + +NPError NPP_DestroyStream (NPP instance, NPStream *stream, NPError reason) +{ + if(instance == NULL) + return NPERR_INVALID_INSTANCE_ERROR; + + NPError rv = NPERR_NO_ERROR; + return rv; +} + +void NPP_StreamAsFile (NPP instance, NPStream* stream, const char* fname) +{ + if(instance == NULL) + return; +} + +void NPP_Print (NPP instance, NPPrint* printInfo) +{ + if(instance == NULL) + return; +} + +void NPP_URLNotify(NPP instance, const char* url, NPReason reason, void* notifyData) +{ + if(instance == NULL) + return; +} + +NPError NPP_SetValue(NPP instance, NPNVariable variable, void *value) +{ + if(instance == NULL) + return NPERR_INVALID_INSTANCE_ERROR; + + NPError rv = NPERR_NO_ERROR; + return rv; +} + +int16 NPP_HandleEvent(NPP instance, void* event) +{ + if(instance == NULL) + return 0; + + int16 rv = 0; + CPlugin * pPlugin = (CPlugin *)instance->pdata; + if (pPlugin) + rv = pPlugin->handleEvent(event); + + return rv; +} |