aboutsummaryrefslogtreecommitdiff
path: root/Src/omBrowser/service.h
diff options
context:
space:
mode:
Diffstat (limited to 'Src/omBrowser/service.h')
-rw-r--r--Src/omBrowser/service.h152
1 files changed, 152 insertions, 0 deletions
diff --git a/Src/omBrowser/service.h b/Src/omBrowser/service.h
new file mode 100644
index 00000000..814bb0b8
--- /dev/null
+++ b/Src/omBrowser/service.h
@@ -0,0 +1,152 @@
+#ifndef NULLSOFT_WINAMP_OMSERVICE_IMPLEMENTATION_HEADER
+#define NULLSOFT_WINAMP_OMSERVICE_IMPLEMENTATION_HEADER
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#pragma once
+#endif
+
+#include "./ifc_omservice.h"
+#include "./ifc_omservicedetails.h"
+#include "./ifc_omserviceeditor.h"
+#include "./ifc_omservicecopier.h"
+#include "./ifc_omservicecommand.h"
+#include "./ifc_omservicehostext.h"
+#include "./ifc_omserviceeventmngr.h"
+#include "./flagTracker.h"
+#include <vector>
+#include <bfc/multipatch.h>
+
+#define MPIID_OMSVC 10
+#define MPIID_OMSVCDETAILS 20
+#define MPIID_OMSVCEDITOR 30
+#define MPIID_OMSVCCOPIER 40
+#define MPIID_OMSVCCOMMAND 50
+#define MPIID_OMSVCEVENTMNGR 60
+#define MPIID_OMSVCHOSTEXT 70
+
+class OmService : public MultiPatch<MPIID_OMSVC, ifc_omservice>,
+ public MultiPatch<MPIID_OMSVCDETAILS, ifc_omservicedetails>,
+ public MultiPatch<MPIID_OMSVCEDITOR, ifc_omserviceeditor>,
+ public MultiPatch<MPIID_OMSVCCOPIER, ifc_omservicecopier>,
+ public MultiPatch<MPIID_OMSVCCOMMAND, ifc_omservicecommand>,
+ public MultiPatch<MPIID_OMSVCEVENTMNGR, ifc_omserviceeventmngr>,
+ public MultiPatch<MPIID_OMSVCHOSTEXT, ifc_omservicehostext>
+{
+protected:
+ OmService(UINT serviceId, ifc_omservicehost *serviceHost);
+ ~OmService();
+
+public:
+ static HRESULT CreateInstance(UINT serviceId, ifc_omservicehost *serviceHost, OmService **serviceOut);
+
+public:
+ /* Dispatchable */
+ size_t AddRef();
+ size_t Release();
+ int QueryInterface(GUID interface_guid, void **object);
+
+ /* ifc_omservice */
+ unsigned int GetId();
+ HRESULT GetName(LPWSTR pszBuffer, UINT cchBufferMax);
+ HRESULT GetUrl(LPWSTR pszBuffer, UINT cchBufferMax);
+ HRESULT GetUrlDirect(LPWSTR pszBuffer, UINT cchBufferMax);
+ HRESULT GetIcon(LPWSTR pszBuffer, UINT cchBufferMax);
+ HRESULT GetExternal(IDispatch **ppDispatch);
+ HRESULT GetRating(UINT *rating);
+ HRESULT GetVersion(UINT *version);
+ HRESULT GetFlags(UINT *flags);
+ HRESULT SetAddress(LPCWSTR pszAddress);
+ HRESULT GetAddress(LPWSTR pszBuffer, UINT cchBufferMax);
+ HRESULT GetGeneration(UINT *generation);
+ HRESULT UpdateFlags(UINT flags);
+
+ /* ifc_omservicedetails */
+ HRESULT GetDescription(LPWSTR pszBuffer, UINT cchBufferMax);
+ HRESULT GetAuthorFirst(LPWSTR pszBuffer, UINT cchBufferMax);
+ HRESULT GetAuthorLast(LPWSTR pszBuffer, UINT cchBufferMax);
+ HRESULT GetUpdated(LPWSTR pszBuffer, UINT cchBufferMax);
+ HRESULT GetPublished(LPWSTR pszBuffer, UINT cchBufferMax);
+ HRESULT GetThumbnail(LPWSTR pszBuffer, UINT cchBufferMax);
+ HRESULT GetScreenshot(LPWSTR pszBuffer, UINT cchBufferMax);
+
+ /* ifc_omserviceeditor */
+ HRESULT SetName(LPCWSTR pszName, BOOL utf8);
+ HRESULT SetUrl(LPCWSTR pszUrl, BOOL utf8);
+ HRESULT SetIcon(LPCWSTR pszPath, BOOL utf8);
+ HRESULT SetRating(UINT nRating);
+ HRESULT SetVersion(UINT nVersion);
+ HRESULT SetGeneration(UINT nGeneration);
+ HRESULT SetFlags(UINT nFlags, UINT nMask);
+ HRESULT SetDescription(LPCWSTR pszDescription, BOOL utf8);
+ HRESULT SetAuthorFirst(LPCWSTR pszName, BOOL utf8);
+ HRESULT SetAuthorLast(LPCWSTR pszName, BOOL utf8);
+ HRESULT SetUpdated(LPCWSTR pszDate, BOOL utf8);
+ HRESULT SetPublished(LPCWSTR pszDate, BOOL utf8);
+ HRESULT SetThumbnail(LPCWSTR pszPath, BOOL utf8);
+ HRESULT SetScreenshot(LPCWSTR pszPath, BOOL utf8);
+ HRESULT SetModified(UINT nFlags, UINT nMask);
+ HRESULT GetModified(UINT *pFlags);
+ HRESULT BeginUpdate();
+ HRESULT EndUpdate();
+
+ /* ifc_omservicecopier */
+ HRESULT CopyTo(ifc_omservice *service, UINT *modifiedFlags);
+
+ /* ifc_omservicecommand */
+ HRESULT QueryState(HWND hBrowser, const GUID *commandGroup, UINT commandId);
+ HRESULT Exec(HWND hBrowser, const GUID *commandGroup, UINT commandId, ULONG_PTR commandArg);
+
+ /* ifc_omserviceeventmngr */
+ HRESULT RegisterEventHandler(ifc_omserviceevent *handler);
+ HRESULT UnregisterEventHandler(ifc_omserviceevent *handler);
+ HRESULT Signal_ServiceChange(UINT modifiedFlags);
+ HRESULT Signal_CommandStateChange(const GUID *commandGroup, UINT commandId);
+
+ /* ifc_omservicehostext */
+ HRESULT GetHost(ifc_omservicehost **ppHost);
+ HRESULT SetHost(ifc_omservicehost *serviceHost);
+
+public:
+ HRESULT SetId(UINT serviceId);
+
+private:
+ static void CALLBACK ModifiedEvent(UINT nMark, FlagTracker *instance, ULONG_PTR user);
+ void UnregisterAllEventHandlers();
+ HRESULT StringCchCopyExMT(LPTSTR pszDest, size_t cchDest, LPCTSTR pszSrc, LPTSTR *ppszDestEnd, size_t *pcchRemaining, DWORD dwFlags);
+
+protected:
+ typedef std::vector<ifc_omserviceevent*> EventList;
+
+protected:
+ ULONG ref;
+ UINT id;
+ LPWSTR name;
+ LPWSTR url;
+ LPWSTR icon;
+ UINT rating;
+ UINT version;
+ UINT flags;
+ UINT generation;
+
+ LPWSTR description;
+ LPWSTR authorFirst;
+ LPWSTR authorLast;
+ LPWSTR published;
+ LPWSTR updated;
+ LPWSTR thumbnail;
+ LPWSTR screenshot;
+ FlagTracker modified;
+
+ LPWSTR address;
+ ifc_omservicehost *host;
+
+ CRITICAL_SECTION lock;
+
+ EventList eventList;
+ CRITICAL_SECTION eventLock;
+
+protected:
+ RECVS_MULTIPATCH;
+};
+
+#endif //NULLSOFT_WINAMP_OMSERVICE_IMPLEMENTATION_HEADER \ No newline at end of file