aboutsummaryrefslogtreecommitdiff
path: root/Src/Winamp/ExternalCOM.h
diff options
context:
space:
mode:
authorJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
committerJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
commit20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch)
tree12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/Winamp/ExternalCOM.h
parent537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff)
downloadwinamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz
Initial community commit
Diffstat (limited to 'Src/Winamp/ExternalCOM.h')
-rw-r--r--Src/Winamp/ExternalCOM.h89
1 files changed, 89 insertions, 0 deletions
diff --git a/Src/Winamp/ExternalCOM.h b/Src/Winamp/ExternalCOM.h
new file mode 100644
index 00000000..9a9aa5fc
--- /dev/null
+++ b/Src/Winamp/ExternalCOM.h
@@ -0,0 +1,89 @@
+#ifndef NULLSOFT_EXTERNALCOMH
+#define NULLSOFT_EXTERNALCOMH
+
+#include <ocidl.h>
+
+
+#if defined(__cplusplus)
+
+#include <vector>
+#include "JSAPI_DispatchTable.h"
+#include "IWasabiDispatchable.h"
+#include "JSAPI_Info.h"
+
+class SkinCOM;
+class MediaCoreCOM;
+class CurrentSongCOM;
+class ExternalCOM;
+class ConfigCOM;
+namespace JSAPI2 { class ExternalObject; }
+
+HRESULT __cdecl JSAPI1_GetExternal(ExternalCOM **instance);
+HRESULT __cdecl JSAPI1_GetSkinCOM(SkinCOM **instance);
+HRESULT __cdecl JSAPI1_GetMediaCoreCOM(MediaCoreCOM **instance);
+HRESULT __cdecl JSAPI1_GetCurrentSongCOM(CurrentSongCOM **instance);
+
+class ExternalCOM : public IDispatch,
+ public IWasabiDispatchable,
+ public JSAPI::ifc_info
+{
+public:
+ enum
+ {
+ DISP_EXTERNAL_SIDECAR = 777,
+ DISP_EXTERNAL_BROWSER,
+ DISP_EXTERNAL_CURRENTSONG,
+ DISP_EXTERNAL_CURRENTSKIN,
+ DISP_EXTERNAL_NEW_ENTRIES_MARKER,
+ };
+
+public:
+ ExternalCOM();
+ ~ExternalCOM();
+
+ // *** IUnknown ***
+ STDMETHOD(QueryInterface)(REFIID riid, PVOID *ppvObject);
+ STDMETHOD_(ULONG, AddRef)(void);
+ STDMETHOD_(ULONG, Release)(void);
+ // *** IDispatch ***
+ STDMETHOD(GetIDsOfNames)(REFIID riid, OLECHAR FAR* FAR* rgszNames, unsigned int cNames, LCID lcid, DISPID FAR* rgdispid);
+ STDMETHOD(GetTypeInfo)(unsigned int itinfo, LCID lcid, ITypeInfo FAR* FAR* pptinfo);
+ STDMETHOD(GetTypeInfoCount)(unsigned int FAR * pctinfo);
+ STDMETHOD(Invoke)(DISPID dispid, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS FAR *pdispparams, VARIANT FAR *pvarResult, EXCEPINFO FAR * pexecinfo, unsigned int FAR *puArgErr);
+
+ JSAPI::DispatchTable dispatchTable;
+ DISPID AddDispatch(const wchar_t *name, IDispatch *object);
+ BOOL RemoveDispatch(DISPID dispatchId);
+
+
+ // *** IWasabiDispatchable Methods ***
+ STDMETHOD(QueryDispatchable)(REFIID riid, Dispatchable **ppDispatchable);
+
+ // *** JSAPI::ifc_info Methods ***
+ const wchar_t *GetUserAgent();
+
+ HRESULT FindDispatch(DISPID dispId, IDispatch **instance);
+ HRESULT GetSkinCOM(SkinCOM **instance);
+ HRESULT GetMediaCoreCOM(MediaCoreCOM **instance);
+ HRESULT GetCurrentSongCOM(CurrentSongCOM **instance);
+
+ HRESULT GetConfig(LPCWSTR configName, ConfigCOM **config);
+
+protected:
+ RECVS_DISPATCH;
+
+private:
+ typedef std::vector<ConfigCOM*> ConfigsList;
+
+private:
+ ULONG ref;
+ CRITICAL_SECTION tableLock;
+ wchar_t configFilename[MAX_PATH];
+ MediaCoreCOM *mediaCoreCOM;
+ SkinCOM *skinCOM;
+ CurrentSongCOM *songCOM;
+ JSAPI2::ExternalObject *api2;
+ ConfigsList configs;
+};
+#endif // __cplusplus
+#endif \ No newline at end of file