diff options
author | Mikhail Voytenko <mav@openoffice.org> | 2010-05-26 15:50:21 +0200 |
---|---|---|
committer | Mikhail Voytenko <mav@openoffice.org> | 2010-05-26 15:50:21 +0200 |
commit | 27ed1825a087bedfb0e1f117a7bfc2a2f405333a (patch) | |
tree | 088bac7229b04d8fca4a6f09dd9e45951e8a521c /comphelper/source | |
parent | e11315fea42a010fb2248b54be599bdbf98be127 (diff) |
fwk139: #i101937# integrate patch
Diffstat (limited to 'comphelper/source')
-rw-r--r-- | comphelper/source/misc/makefile.mk | 1 | ||||
-rw-r--r-- | comphelper/source/misc/mediadescriptor.cxx | 121 |
2 files changed, 2 insertions, 120 deletions
diff --git a/comphelper/source/misc/makefile.mk b/comphelper/source/misc/makefile.mk index 94837ce49df9..5ad7e3ed289e 100644 --- a/comphelper/source/misc/makefile.mk +++ b/comphelper/source/misc/makefile.mk @@ -92,6 +92,7 @@ SLOFILES= \ $(SLO)$/comphelper_module.obj \ $(SLO)$/comphelper_services.obj \ $(SLO)$/componentbase.obj \ + $(SLO)$/stillreadwriteinteraction.obj \ # --- Targets ---------------------------------- diff --git a/comphelper/source/misc/mediadescriptor.cxx b/comphelper/source/misc/mediadescriptor.cxx index 7e3be338992b..23daea5543a9 100644 --- a/comphelper/source/misc/mediadescriptor.cxx +++ b/comphelper/source/misc/mediadescriptor.cxx @@ -28,6 +28,7 @@ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_comphelper.hxx" #include <comphelper/mediadescriptor.hxx> +#include <comphelper/stillreadwriteinteraction.hxx> //_______________________________________________ // includes @@ -59,22 +60,10 @@ #include <com/sun/star/util/XURLTransformer.hpp> #endif -#ifndef __COM_SUN_STAR_UCB_INTERACTIVEIOEXCEPTION_HPP__ -#include <com/sun/star/ucb/InteractiveIOException.hpp> -#endif - -#ifndef __COM_SUN_STAR_UCB_UNSUPPORTEDDATASINKEXCEPTION_HPP__ -#include <com/sun/star/ucb/UnsupportedDataSinkException.hpp> -#endif - #ifndef __COM_SUN_STAR_UCB_COMMANDFAILEDEXCEPTION_HPP__ #include <com/sun/star/ucb/CommandFailedException.hpp> #endif -#ifndef __COM_SUN_STAR_TASK_XINTERACTIONABORT_HPP__ -#include <com/sun/star/task/XInteractionAbort.hpp> -#endif - #ifndef __COM_SUN_STAR_URI_XURIREFERENCEFACTORY_HPP__ #include <com/sun/star/uri/XUriReferenceFactory.hpp> #endif @@ -667,114 +656,6 @@ sal_Bool MediaDescriptor::impl_openStreamWithPostData( const css::uno::Reference } /*-----------------------------------------------*/ -class StillReadWriteInteraction : public ::ucbhelper::InterceptedInteraction -{ - private: - static const sal_Int32 HANDLE_INTERACTIVEIOEXCEPTION = 0; - static const sal_Int32 HANDLE_UNSUPPORTEDDATASINKEXCEPTION = 1; - - sal_Bool m_bUsed; - sal_Bool m_bHandledByMySelf; - sal_Bool m_bHandledByInternalHandler; - - public: - StillReadWriteInteraction(const css::uno::Reference< css::task::XInteractionHandler >& xHandler) - : m_bUsed (sal_False) - , m_bHandledByMySelf (sal_False) - , m_bHandledByInternalHandler(sal_False) - { - ::std::vector< ::ucbhelper::InterceptedInteraction::InterceptedRequest > lInterceptions; - ::ucbhelper::InterceptedInteraction::InterceptedRequest aInterceptedRequest; - - aInterceptedRequest.Handle = HANDLE_INTERACTIVEIOEXCEPTION; - aInterceptedRequest.Request <<= css::ucb::InteractiveIOException(); - aInterceptedRequest.Continuation = ::getCppuType(static_cast< css::uno::Reference< css::task::XInteractionAbort >* >(0)); - aInterceptedRequest.MatchExact = sal_False; - lInterceptions.push_back(aInterceptedRequest); - - aInterceptedRequest.Handle = HANDLE_UNSUPPORTEDDATASINKEXCEPTION; - aInterceptedRequest.Request <<= css::ucb::UnsupportedDataSinkException(); - aInterceptedRequest.Continuation = ::getCppuType(static_cast< css::uno::Reference< css::task::XInteractionAbort >* >(0)); - aInterceptedRequest.MatchExact = sal_False; - lInterceptions.push_back(aInterceptedRequest); - - setInterceptedHandler(xHandler); - setInterceptions(lInterceptions); - } - - void resetInterceptions() - { - setInterceptions(::std::vector< ::ucbhelper::InterceptedInteraction::InterceptedRequest >()); - } - - void resetErrorStates() - { - m_bUsed = sal_False; - m_bHandledByMySelf = sal_False; - m_bHandledByInternalHandler = sal_False; - } - - sal_Bool wasWriteError() - { - return (m_bUsed && m_bHandledByMySelf); - } - - private: - virtual ucbhelper::InterceptedInteraction::EInterceptionState intercepted(const ::ucbhelper::InterceptedInteraction::InterceptedRequest& aRequest, - const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionRequest >& xRequest) - { - // we are used! - m_bUsed = sal_True; - - // check if its a real interception - might some parameters are not the right ones ... - sal_Bool bAbort = sal_False; - switch(aRequest.Handle) - { - case HANDLE_INTERACTIVEIOEXCEPTION: - { - css::ucb::InteractiveIOException exIO; - xRequest->getRequest() >>= exIO; - bAbort = ( - (exIO.Code == css::ucb::IOErrorCode_ACCESS_DENIED ) - || (exIO.Code == css::ucb::IOErrorCode_LOCKING_VIOLATION ) -#ifdef MACOSX - // this is a workaround for MAC, on this platform if the file is locked - // the returned error code looks to be wrong - || (exIO.Code == css::ucb::IOErrorCode_GENERAL ) -#endif - ); - } - break; - - case HANDLE_UNSUPPORTEDDATASINKEXCEPTION: - { - bAbort = sal_True; - } - break; - } - - // handle interaction by ourself - if (bAbort) - { - m_bHandledByMySelf = sal_True; - css::uno::Reference< css::task::XInteractionContinuation > xAbort = ::ucbhelper::InterceptedInteraction::extractContinuation( - xRequest->getContinuations(), - ::getCppuType(static_cast< css::uno::Reference< css::task::XInteractionAbort >* >(0))); - if (!xAbort.is()) - return ::ucbhelper::InterceptedInteraction::E_NO_CONTINUATION_FOUND; - xAbort->select(); - return ::ucbhelper::InterceptedInteraction::E_INTERCEPTED; - } - - // Otherwhise use internal handler. - if (m_xInterceptedHandler.is()) - { - m_bHandledByInternalHandler = sal_True; - m_xInterceptedHandler->handle(xRequest); - } - return ::ucbhelper::InterceptedInteraction::E_INTERCEPTED; - } -}; /*----------------------------------------------- 25.03.2004 12:29 |