X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=activex%2Fpersiststorage.cpp;h=5bac3012aca1bd5cca7e078fc3e969f02d1c93d5;hb=a192939a1b865184341e00f0869ea628518f6dea;hp=efbfa6cc5af9287b5188f2d4520c8c5099014a11;hpb=fe087a38282e93addb25fa9598393e40ea233b09;p=vlc diff --git a/activex/persiststorage.cpp b/activex/persiststorage.cpp index efbfa6cc5a..5bac3012ac 100644 --- a/activex/persiststorage.cpp +++ b/activex/persiststorage.cpp @@ -17,7 +17,7 @@ * * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ #include "plugin.h" @@ -37,38 +37,67 @@ STDMETHODIMP VLCPersistStorage::GetClassID(LPCLSID pClsID) STDMETHODIMP VLCPersistStorage::IsDirty(void) { - return S_FALSE; + return _p_instance->isDirty() ? S_OK : S_FALSE; }; -STDMETHODIMP VLCPersistStorage::InitNew(IStorage *pStg) +STDMETHODIMP VLCPersistStorage::InitNew(LPSTORAGE pStg) { - if( NULL == pStg ) - return E_POINTER; - return _p_instance->onInit(); }; -STDMETHODIMP VLCPersistStorage::Load(IStorage *pStg) +STDMETHODIMP VLCPersistStorage::Load(LPSTORAGE pStg) { if( NULL == pStg ) - return E_POINTER; + return E_INVALIDARG; - return _p_instance->onInit(); + 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(IStorage *pStg, BOOL fSameAsLoad) +STDMETHODIMP VLCPersistStorage::Save(LPSTORAGE pStg, BOOL fSameAsLoad) { if( NULL == pStg ) - return E_POINTER; + return E_INVALIDARG; - return S_OK; + 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) { - if( NULL == pStg ) - return E_POINTER; - return S_OK; };