#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 #include #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, public MultiPatch, public MultiPatch, public MultiPatch, public MultiPatch, public MultiPatch, public MultiPatch { 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 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