aboutsummaryrefslogtreecommitdiff
path: root/Src/omBrowser/storageXml.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Src/omBrowser/storageXml.cpp')
-rw-r--r--Src/omBrowser/storageXml.cpp146
1 files changed, 146 insertions, 0 deletions
diff --git a/Src/omBrowser/storageXml.cpp b/Src/omBrowser/storageXml.cpp
new file mode 100644
index 00000000..c2049f58
--- /dev/null
+++ b/Src/omBrowser/storageXml.cpp
@@ -0,0 +1,146 @@
+#include "main.h"
+#include "./storageXml.h"
+#include "./resource.h"
+
+#include "./ifc_omservice.h"
+#include "./ifc_omserviceenum.h"
+#include "./enumXmlFile.h"
+
+#include <strsafe.h>
+
+OmStorageXml::OmStorageXml()
+ : ref(1)
+{
+}
+
+OmStorageXml::~OmStorageXml()
+{
+}
+
+HRESULT OmStorageXml::CreateInstance(OmStorageXml **instance)
+{
+ if (NULL == instance) return E_POINTER;
+
+ *instance = new OmStorageXml();
+ if (NULL == *instance) return E_OUTOFMEMORY;
+
+ return S_OK;
+}
+
+size_t OmStorageXml::AddRef()
+{
+ return InterlockedIncrement((LONG*)&ref);
+}
+
+size_t OmStorageXml::Release()
+{
+ if (0 == ref)
+ return ref;
+
+ LONG r = InterlockedDecrement((LONG*)&ref);
+ if (0 == r)
+ delete(this);
+
+ return r;
+}
+
+int OmStorageXml::QueryInterface(GUID interface_guid, void **object)
+{
+ if (NULL == object) return E_POINTER;
+
+ if (IsEqualIID(interface_guid, IFC_OmStorage))
+ *object = static_cast<ifc_omstorage*>(this);
+ else if (IsEqualIID(interface_guid, STID_OmFileStorage))
+ *object = static_cast<ifc_omfilestorage*>(this);
+ else if (IsEqualIID(interface_guid, SUID_OmStorageXml))
+ *object = static_cast<ifc_omstorage*>(this);
+ else
+ {
+ *object = NULL;
+ return E_NOINTERFACE;
+ }
+
+ if (NULL == *object)
+ return E_UNEXPECTED;
+
+ AddRef();
+ return S_OK;
+}
+
+HRESULT OmStorageXml::GetId(GUID *storageUid)
+{
+ if (NULL == storageUid) return E_POINTER;
+ *storageUid = SUID_OmStorageXml;
+ return S_OK;
+}
+
+HRESULT OmStorageXml::GetType(GUID *storageType)
+{
+ if (NULL == storageType) return E_POINTER;
+ *storageType = STID_OmFileStorage;
+ return S_OK;
+}
+
+UINT OmStorageXml::GetCapabilities()
+{
+ return capLoad | capPublic;
+}
+
+HRESULT OmStorageXml::GetDescription(LPWSTR pszBuffer, UINT cchBufferMax)
+{
+ if (NULL == pszBuffer) return E_POINTER;
+ Plugin_LoadString(IDS_STORAGE_XML, pszBuffer, cchBufferMax);
+ return S_OK;
+}
+
+HRESULT OmStorageXml::Load(LPCWSTR pszAddress, ifc_omservicehost *host, ifc_omserviceenum **ppEnum)
+{
+ if (NULL == ppEnum) return E_POINTER;
+ *ppEnum = NULL;
+
+ if (NULL == pszAddress || L'\0' == *pszAddress)
+ return E_INVALIDARG;
+
+ return EnumXmlFile::CreateInstance(pszAddress, host, (EnumXmlFile**)ppEnum);
+}
+
+HRESULT OmStorageXml::Save(ifc_omservice **serviceList, ULONG listCount, UINT saveFlags, ULONG *savedCount)
+{
+ return E_NOTIMPL;
+}
+
+HRESULT OmStorageXml::Delete(ifc_omservice **serviceList, ULONG listCount, ULONG *deletedCount)
+{
+ return E_NOTIMPL;
+}
+
+HRESULT OmStorageXml::GetFilter(LPWSTR pszBuffer, UINT cchBufferMax)
+{
+ if (NULL == pszBuffer) return E_POINTER;
+ return StringCchCopy(pszBuffer, cchBufferMax, L"*.xml");
+}
+
+#define CBCLASS OmStorageXml
+START_MULTIPATCH;
+ START_PATCH(MPIID_OMSTORAGE)
+
+ M_CB(MPIID_OMSTORAGE, ifc_omstorage, ADDREF, AddRef);
+ M_CB(MPIID_OMSTORAGE, ifc_omstorage, RELEASE, Release);
+ M_CB(MPIID_OMSTORAGE, ifc_omstorage, QUERYINTERFACE, QueryInterface);
+ M_CB(MPIID_OMSTORAGE, ifc_omstorage, API_GETID, GetId);
+ M_CB(MPIID_OMSTORAGE, ifc_omstorage, API_GETTYPE, GetType);
+ M_CB(MPIID_OMSTORAGE, ifc_omstorage, API_GETCAPABILITIES, GetCapabilities);
+ M_CB(MPIID_OMSTORAGE, ifc_omstorage, API_GETDESCRIPTION, GetDescription);
+ M_CB(MPIID_OMSTORAGE, ifc_omstorage, API_LOAD, Load);
+ M_CB(MPIID_OMSTORAGE, ifc_omstorage, API_SAVE, Save);
+ M_CB(MPIID_OMSTORAGE, ifc_omstorage, API_DELETE, Delete);
+
+ NEXT_PATCH(MPIID_OMFILESTORAGE)
+ M_CB(MPIID_OMFILESTORAGE, ifc_omfilestorage, ADDREF, AddRef);
+ M_CB(MPIID_OMFILESTORAGE, ifc_omfilestorage, RELEASE, Release);
+ M_CB(MPIID_OMFILESTORAGE, ifc_omfilestorage, QUERYINTERFACE, QueryInterface);
+ M_CB(MPIID_OMFILESTORAGE, ifc_omfilestorage, API_GETFILTER, GetFilter);
+
+ END_PATCH
+END_MULTIPATCH;
+#undef CBCLASS \ No newline at end of file