]> git.sesse.net Git - vlc/blobdiff - activex/persiststorage.cpp
Code factorization
[vlc] / activex / persiststorage.cpp
index b1bf657725680b5cf7c2b0668b1101689abb7b95..5bac3012aca1bd5cca7e078fc3e969f02d1c93d5 100644 (file)
-/*****************************************************************************\r
- * persiststorage.cpp: ActiveX control for VLC\r
- *****************************************************************************\r
- * Copyright (C) 2005 VideoLAN\r
- *\r
- * Authors: Damien Fouilleul <Damien.Fouilleul@laposte.net>\r
- *\r
- * This program is free software; you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation; either version 2 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program; if not, write to the Free Software\r
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.\r
- *****************************************************************************/\r
-\r
-#include "plugin.h"\r
-#include "persiststorage.h"\r
-\r
-using namespace std;\r
-\r
-STDMETHODIMP VLCPersistStorage::GetClassID(LPCLSID pClsID)\r
-{\r
-    if( NULL == pClsID )\r
-        return E_POINTER;\r
-\r
-    *pClsID = _p_instance->getClassID();\r
-\r
-    return S_OK;\r
-};\r
-\r
-STDMETHODIMP VLCPersistStorage::IsDirty(void)\r
-{\r
-    return S_FALSE;\r
-};\r
-\r
-STDMETHODIMP VLCPersistStorage::InitNew(IStorage *pStg)\r
-{\r
-    if( NULL == pStg )\r
-        return E_POINTER;\r
-\r
-    return _p_instance->onInitNew();\r
-};\r
-\r
-STDMETHODIMP VLCPersistStorage::Load(IStorage *pStg)\r
-{\r
-    if( NULL == pStg )\r
-        return E_POINTER;\r
-\r
-    return _p_instance->onInitNew();\r
-};\r
-\r
-STDMETHODIMP VLCPersistStorage::Save(IStorage *pStg, BOOL fSameAsLoad)\r
-{\r
-    if( NULL == pStg )\r
-        return E_POINTER;\r
-\r
-    return S_OK;\r
-};\r
-\r
-STDMETHODIMP VLCPersistStorage::SaveCompleted(IStorage *pStg)\r
-{\r
-    if( NULL == pStg )\r
-        return E_POINTER;\r
-\r
-    return S_OK;\r
-};\r
-\r
-STDMETHODIMP VLCPersistStorage::HandsOffStorage(void)\r
-{\r
-    return S_OK;\r
-};\r
-\r
+/*****************************************************************************
+ * persiststorage.cpp: ActiveX control for VLC
+ *****************************************************************************
+ * Copyright (C) 2005 the VideoLAN team
+ *
+ * Authors: Damien Fouilleul <Damien.Fouilleul@laposte.net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#include "plugin.h"
+#include "persiststorage.h"
+
+using namespace std;
+
+STDMETHODIMP VLCPersistStorage::GetClassID(LPCLSID pClsID)
+{
+    if( NULL == pClsID )
+        return E_POINTER;
+
+    *pClsID = _p_instance->getClassID();
+
+    return S_OK;
+};
+
+STDMETHODIMP VLCPersistStorage::IsDirty(void)
+{
+    return _p_instance->isDirty() ? S_OK : S_FALSE;
+};
+
+STDMETHODIMP VLCPersistStorage::InitNew(LPSTORAGE pStg)
+{
+    return _p_instance->onInit();
+};
+
+STDMETHODIMP VLCPersistStorage::Load(LPSTORAGE pStg)
+{
+    if( NULL == pStg )
+        return E_INVALIDARG;
+
+    LPSTREAM pStm = NULL;
+    HRESULT result = pStg->OpenStream(L"VideoLAN ActiveX Plugin Data", NULL,
+                        STGM_READ|STGM_SHARE_EXCLUSIVE, 0, &pStm);
+
+    if( FAILED(result) )
+        return result;
+
+    LPPERSISTSTREAMINIT pPersistStreamInit;
+    if( SUCCEEDED(QueryInterface(IID_IPersistStreamInit, (void **)&pPersistStreamInit)) )
+    {
+        result = pPersistStreamInit->Load(pStm);
+        pPersistStreamInit->Release();
+    }
+
+    pStm->Release();
+
+    return result;
+};
+
+STDMETHODIMP VLCPersistStorage::Save(LPSTORAGE pStg, BOOL fSameAsLoad)
+{
+    if( NULL == pStg )
+        return E_INVALIDARG;
+
+    if( fSameAsLoad && (S_FALSE == IsDirty()) )
+        return S_OK;
+
+    LPSTREAM pStm = NULL;
+    HRESULT result = pStg->CreateStream(L"VideoLAN ActiveX Plugin Data",
+                        STGM_CREATE|STGM_READWRITE|STGM_SHARE_EXCLUSIVE, 0, 0, &pStm);
+
+    if( FAILED(result) )
+        return result;
+
+    LPPERSISTSTREAMINIT pPersistStreamInit;
+    if( SUCCEEDED(QueryInterface(IID_IPersistStreamInit, (void **)&pPersistStreamInit)) )
+    {
+        result = pPersistStreamInit->Save(pStm, fSameAsLoad);
+        pPersistStreamInit->Release();
+    }
+
+    pStm->Release();
+
+    return result;
+};
+
+STDMETHODIMP VLCPersistStorage::SaveCompleted(IStorage *pStg)
+{
+    return S_OK;
+};
+
+STDMETHODIMP VLCPersistStorage::HandsOffStorage(void)
+{
+    return S_OK;
+};
+