X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=activex%2Fpersiststorage.cpp;h=5bac3012aca1bd5cca7e078fc3e969f02d1c93d5;hb=c640ae86f495718fbd393b68b956771959515368;hp=b1bf657725680b5cf7c2b0668b1101689abb7b95;hpb=03e30a851a1df1a06e1dc02d877b636f6adeac1d;p=vlc diff --git a/activex/persiststorage.cpp b/activex/persiststorage.cpp index b1bf657725..5bac3012ac 100644 --- a/activex/persiststorage.cpp +++ b/activex/persiststorage.cpp @@ -1,79 +1,108 @@ -/***************************************************************************** - * persiststorage.cpp: ActiveX control for VLC - ***************************************************************************** - * Copyright (C) 2005 VideoLAN - * - * Authors: Damien Fouilleul - * - * 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., 59 Temple Place - Suite 330, Boston, MA 02111, 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 S_FALSE; -}; - -STDMETHODIMP VLCPersistStorage::InitNew(IStorage *pStg) -{ - if( NULL == pStg ) - return E_POINTER; - - return _p_instance->onInitNew(); -}; - -STDMETHODIMP VLCPersistStorage::Load(IStorage *pStg) -{ - if( NULL == pStg ) - return E_POINTER; - - return _p_instance->onInitNew(); -}; - -STDMETHODIMP VLCPersistStorage::Save(IStorage *pStg, BOOL fSameAsLoad) -{ - if( NULL == pStg ) - return E_POINTER; - - return S_OK; -}; - -STDMETHODIMP VLCPersistStorage::SaveCompleted(IStorage *pStg) -{ - if( NULL == pStg ) - return E_POINTER; - - return S_OK; -}; - -STDMETHODIMP VLCPersistStorage::HandsOffStorage(void) -{ - return S_OK; -}; - +/***************************************************************************** + * persiststorage.cpp: ActiveX control for VLC + ***************************************************************************** + * Copyright (C) 2005 the VideoLAN team + * + * Authors: Damien Fouilleul + * + * 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; +}; +