diff options
author | Mark Hung <marklh9@gmail.com> | 2019-01-27 13:41:34 +0800 |
---|---|---|
committer | Mark Hung <marklh9@gmail.com> | 2019-02-04 01:15:22 +0100 |
commit | 6b6c0b120f3275be6bd9dbb26480f8f1df355e00 (patch) | |
tree | d25c799cad8b21e4836e3b309425b2271b0615bc | |
parent | 8a1321362a0229a25869e4e3d0422a5a51c5b5be (diff) |
tdf#44223 allow slideshow to play embedded media.
Implement MediaFileManager that create the temp media
file for package urls when making slideshow.
Change-Id: I10a5ddc405928b4322ad72eb603508faf25bf0db
Reviewed-on: https://gerrit.libreoffice.org/67209
Tested-by: Jenkins
Reviewed-by: Mark Hung <marklh9@gmail.com>
-rw-r--r-- | avmedia/source/framework/mediaitem.cxx | 45 | ||||
-rw-r--r-- | include/avmedia/mediaitem.hxx | 15 | ||||
-rw-r--r-- | slideshow/source/engine/animationnodes/animationaudionode.cxx | 3 | ||||
-rw-r--r-- | slideshow/source/engine/slide/slideimpl.cxx | 6 | ||||
-rw-r--r-- | slideshow/source/engine/slideshowcontext.cxx | 2 | ||||
-rw-r--r-- | slideshow/source/engine/slideshowimpl.cxx | 46 | ||||
-rw-r--r-- | slideshow/source/engine/soundplayer.cxx | 17 | ||||
-rw-r--r-- | slideshow/source/inc/mediafilemanager.hxx | 36 | ||||
-rw-r--r-- | slideshow/source/inc/slide.hxx | 2 | ||||
-rw-r--r-- | slideshow/source/inc/slideshowcontext.hxx | 6 | ||||
-rw-r--r-- | slideshow/source/inc/soundplayer.hxx | 11 | ||||
-rw-r--r-- | svx/source/svdraw/svdomedia.cxx | 69 |
12 files changed, 187 insertions, 71 deletions
diff --git a/avmedia/source/framework/mediaitem.cxx b/avmedia/source/framework/mediaitem.cxx index 6f960f49f3bc..0fca80f6d5b4 100644 --- a/avmedia/source/framework/mediaitem.cxx +++ b/avmedia/source/framework/mediaitem.cxx @@ -38,6 +38,7 @@ #include <comphelper/processfactory.hxx> #include <comphelper/storagehelper.hxx> #include <mediamisc.hxx> +#include <osl/file.hxx> using namespace ::com::sun::star; @@ -475,6 +476,50 @@ bool EmbedMedia(uno::Reference<frame::XModel> const& xModel, return false; } +bool CreateMediaTempFile(uno::Reference<io::XInputStream> const& xInStream, + OUString& o_rTempFileURL, const OUString& rDesiredExtension) +{ + OUString tempFileURL; + ::osl::FileBase::RC const err = + ::osl::FileBase::createTempFile(nullptr, nullptr, & tempFileURL); + if (::osl::FileBase::E_None != err) + { + SAL_WARN("avmedia", "cannot create temp file"); + return false; + } + + if (!rDesiredExtension.isEmpty()) + { + OUString newTempFileURL = tempFileURL + rDesiredExtension; + if (osl::File::move(tempFileURL, newTempFileURL) != osl::FileBase::E_None) + { + SAL_WARN("avmedia", "Could not rename file '" << tempFileURL << "' to '" << newTempFileURL << "'"); + return false; + } + tempFileURL = newTempFileURL; + } + + try + { + ::ucbhelper::Content tempContent(tempFileURL, + uno::Reference<ucb::XCommandEnvironment>(), + comphelper::getProcessComponentContext()); + tempContent.writeStream(xInStream, true); // copy stream to file + } + catch (uno::Exception const& e) + { + SAL_WARN("avmedia", "exception: '" << e << "'"); + return false; + } + o_rTempFileURL = tempFileURL; + return true; +} + +MediaTempFile::~MediaTempFile() +{ + ::osl::File::remove(m_TempFileURL); +} + } // namespace avmedia /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/avmedia/mediaitem.hxx b/include/avmedia/mediaitem.hxx index b2b624bee4db..1b7b235b7b6e 100644 --- a/include/avmedia/mediaitem.hxx +++ b/include/avmedia/mediaitem.hxx @@ -131,10 +131,25 @@ bool AVMEDIA_DLLPUBLIC EmbedMedia( ::css::uno::Reference<::css::io::XInputStream> const& xInputStream = ::css::uno::Reference<::css::io::XInputStream>()); +bool AVMEDIA_DLLPUBLIC CreateMediaTempFile( + ::css::uno::Reference<::css::io::XInputStream> const& xInStream, + OUString& o_rTempFileURL, + const OUString& rDesiredExtension); + OUString GetFilename(OUString const& rSourceURL); ::css::uno::Reference< ::css::io::XStream> CreateStream( const ::css::uno::Reference< ::css::embed::XStorage>& xStorage, const OUString& rFilename); + +struct AVMEDIA_DLLPUBLIC MediaTempFile +{ + OUString const m_TempFileURL; + MediaTempFile(OUString const& rURL) + : m_TempFileURL(rURL) + {} + ~MediaTempFile(); +}; + } #endif diff --git a/slideshow/source/engine/animationnodes/animationaudionode.cxx b/slideshow/source/engine/animationnodes/animationaudionode.cxx index 4aa02f5da7dd..b024de24de53 100644 --- a/slideshow/source/engine/animationnodes/animationaudionode.cxx +++ b/slideshow/source/engine/animationnodes/animationaudionode.cxx @@ -152,7 +152,8 @@ void AnimationAudioNode::createPlayer() const { mpPlayer = SoundPlayer::create( getContext().mrEventMultiplexer, maSoundURL, - getContext().mxComponentContext ); + getContext().mxComponentContext, + getContext().mrMediaFileManager); } catch( lang::NoSupportException& ) { diff --git a/slideshow/source/engine/slide/slideimpl.cxx b/slideshow/source/engine/slide/slideimpl.cxx index 931eea2211b7..3d01f4dfbef4 100644 --- a/slideshow/source/engine/slide/slideimpl.cxx +++ b/slideshow/source/engine/slide/slideimpl.cxx @@ -90,6 +90,7 @@ public: ActivitiesQueue& rActivitiesQueue, UserEventQueue& rUserEventQueue, CursorManager& rCursorManager, + MediaFileManager& rMediaFileManager, const UnoViewContainer& rViewContainer, const uno::Reference<uno::XComponentContext>& xContext, const ShapeEventListenerMap& rShapeListenerMap, @@ -310,6 +311,7 @@ SlideImpl::SlideImpl( const uno::Reference< drawing::XDrawPage >& xDra ActivitiesQueue& rActivitiesQueue, UserEventQueue& rUserEventQueue, CursorManager& rCursorManager, + MediaFileManager& rMediaFileManager, const UnoViewContainer& rViewContainer, const uno::Reference< uno::XComponentContext >& xComponentContext, const ShapeEventListenerMap& rShapeListenerMap, @@ -340,6 +342,7 @@ SlideImpl::SlideImpl( const uno::Reference< drawing::XDrawPage >& xDra rActivitiesQueue, rUserEventQueue, *this, + rMediaFileManager, rViewContainer, xComponentContext ), mrCursorManager( rCursorManager ), @@ -1096,6 +1099,7 @@ SlideSharedPtr createSlide( const uno::Reference< drawing::XDrawPage >& ActivitiesQueue& rActivitiesQueue, UserEventQueue& rUserEventQueue, CursorManager& rCursorManager, + MediaFileManager& rMediaFileManager, const UnoViewContainer& rViewContainer, const uno::Reference< uno::XComponentContext >& xComponentContext, const ShapeEventListenerMap& rShapeListenerMap, @@ -1110,7 +1114,7 @@ SlideSharedPtr createSlide( const uno::Reference< drawing::XDrawPage >& std::shared_ptr<SlideImpl> pRet( new SlideImpl( xDrawPage, xDrawPages, xRootNode, rEventQueue, rEventMultiplexer, rScreenUpdater, rActivitiesQueue, rUserEventQueue, - rCursorManager, rViewContainer, + rCursorManager, rMediaFileManager, rViewContainer, xComponentContext, rShapeListenerMap, rShapeCursorMap, rPolyPolygonVector, rUserPaintColor, dUserPaintStrokeWidth, bUserPaintEnabled, diff --git a/slideshow/source/engine/slideshowcontext.cxx b/slideshow/source/engine/slideshowcontext.cxx index 856c4d979c01..94d8c83cd96b 100644 --- a/slideshow/source/engine/slideshowcontext.cxx +++ b/slideshow/source/engine/slideshowcontext.cxx @@ -44,6 +44,7 @@ SlideShowContext::SlideShowContext( SubsettableShapeManagerSharedPtr& rSubsettab ActivitiesQueue& rActivitiesQueue, UserEventQueue& rUserEventQueue, CursorManager& rCursorManager, + MediaFileManager& rMediaFileManager, const UnoViewContainer& rViewContainer, const uno::Reference< uno::XComponentContext>& rComponentContext ) : @@ -54,6 +55,7 @@ SlideShowContext::SlideShowContext( SubsettableShapeManagerSharedPtr& rSubsettab mrActivitiesQueue( rActivitiesQueue ), mrUserEventQueue( rUserEventQueue ), mrCursorManager( rCursorManager ), + mrMediaFileManager( rMediaFileManager ), mrViewContainer( rViewContainer ), mxComponentContext( rComponentContext ) {} diff --git a/slideshow/source/engine/slideshowimpl.cxx b/slideshow/source/engine/slideshowimpl.cxx index b2437e4b147d..177ff07dfb1b 100644 --- a/slideshow/source/engine/slideshowimpl.cxx +++ b/slideshow/source/engine/slideshowimpl.cxx @@ -30,6 +30,7 @@ #include <comphelper/anytostring.hxx> #include <comphelper/scopeguard.hxx> #include <comphelper/servicedecl.hxx> +#include <comphelper/storagehelper.hxx> #include <cppcanvas/spritecanvas.hxx> #include <cppcanvas/vclfactory.hxx> @@ -68,6 +69,7 @@ #include <com/sun/star/drawing/XLayerSupplier.hpp> #include <com/sun/star/drawing/XLayerManager.hpp> #include <com/sun/star/container/XNameAccess.hpp> +#include <com/sun/star/document/XStorageBasedDocument.hpp> #include <com/sun/star/uno/Reference.hxx> #include <com/sun/star/loader/CannotActivateFactoryException.hpp> @@ -78,6 +80,7 @@ #include <usereventqueue.hxx> #include <eventqueue.hxx> #include <cursormanager.hxx> +#include <mediafilemanager.hxx> #include <slideshowcontext.hxx> #include <activitiesqueue.hxx> #include <activitiesfactory.hxx> @@ -209,6 +212,7 @@ typedef ::std::map< css::uno::Reference< class SlideShowImpl : private cppu::BaseMutex, public CursorManager, + public MediaFileManager, public SlideShowImplBase { public: @@ -271,6 +275,9 @@ public: */ bool handleAnimationEvent( const AnimationNodeSharedPtr& rNode ); + /** Obtain a MediaTempFile for the specified url. */ + virtual std::shared_ptr<avmedia::MediaTempFile> getMediaTempFile(const OUString& aUrl) override; + private: // XSlideShow: virtual sal_Bool SAL_CALL nextEffect() override; @@ -460,6 +467,8 @@ private: uno::Reference<drawing::XDrawPage> mxPrefetchSlide; /// save the XDrawPagesSupplier to retrieve polygons uno::Reference<drawing::XDrawPagesSupplier> mxDrawPagesSupplier; + /// Used by MediaFileManager, for media files with package url. + uno::Reference<document::XStorageBasedDocument> mxSBD; /// slide animation to be prefetched: uno::Reference<animations::XAnimationNode> mxPrefetchAnimationNode; @@ -572,6 +581,7 @@ SlideShowImpl::SlideShowImpl( mpPrefetchSlide(), mxPrefetchSlide(), mxDrawPagesSupplier(), + mxSBD(), mxPrefetchAnimationNode(), mnCurrentCursor(awt::SystemPointer::ARROW), mnWaitSymbolRequestCount(0), @@ -710,7 +720,7 @@ SoundPlayerSharedPtr SlideShowImpl::resetSlideTransitionSound( const uno::Any& r try { mpCurrentSlideTransitionSound = SoundPlayer::create( - maEventMultiplexer, url, mxComponentContext ); + maEventMultiplexer, url, mxComponentContext, *this); mpCurrentSlideTransitionSound->setPlaybackLoop( bLoopSound ); } catch (lang::NoSupportException const&) @@ -894,6 +904,7 @@ SlideSharedPtr SlideShowImpl::makeSlide( maActivitiesQueue, maUserEventQueue, *this, + *this, maViewContainer, mxComponentContext, maShapeEventListeners, @@ -1055,6 +1066,7 @@ void SlideShowImpl::displaySlide( DBG_TESTSOLARMUTEX(); mxDrawPagesSupplier = xDrawPages; + mxSBD = uno::Reference<document::XStorageBasedDocument>(mxDrawPagesSupplier, uno::UNO_QUERY); stopShow(); // MUST call that: results in // maUserEventQueue.clear(). What's more, @@ -1686,6 +1698,7 @@ sal_Bool SlideShowImpl::setProperty( beans::PropertyValue const& rProperty ) maActivitiesQueue, maUserEventQueue, *this, + *this, maViewContainer, mxComponentContext) ); } @@ -2332,6 +2345,37 @@ bool SlideShowImpl::handleAnimationEvent( const AnimationNodeSharedPtr& rNode ) return true; } +std::shared_ptr<avmedia::MediaTempFile> SlideShowImpl::getMediaTempFile(const OUString& aUrl) +{ + std::shared_ptr<avmedia::MediaTempFile> aRet; + + if (!mxSBD.is()) + return aRet; + + comphelper::LifecycleProxy aProxy; + uno::Reference<io::XStream> xStream = + comphelper::OStorageHelper::GetStreamAtPackageURL(mxSBD->getDocumentStorage(), aUrl, + css::embed::ElementModes::READ, aProxy); + + uno::Reference<io::XInputStream> xInStream = xStream->getInputStream(); + if (xInStream.is()) + { + sal_Int32 nLastDot = aUrl.lastIndexOf('.'); + sal_Int32 nLastSlash = aUrl.lastIndexOf('/'); + OUString sDesiredExtension; + if (nLastDot > nLastSlash && nLastDot+1 < aUrl.getLength()) + sDesiredExtension = aUrl.copy(nLastDot); + + OUString sTempUrl; + if (::avmedia::CreateMediaTempFile(xInStream, sTempUrl, sDesiredExtension)) + aRet.reset(new avmedia::MediaTempFile(sTempUrl)); + + xInStream->closeInput(); + } + + return aRet; +} + //===== FrameSynchronization ================================================== FrameSynchronization::FrameSynchronization (const double nFrameDuration) diff --git a/slideshow/source/engine/soundplayer.cxx b/slideshow/source/engine/soundplayer.cxx index 2f19fca124b9..505478cd3e33 100644 --- a/slideshow/source/engine/soundplayer.cxx +++ b/slideshow/source/engine/soundplayer.cxx @@ -31,7 +31,7 @@ #include <tools/urlobj.hxx> #include <avmedia/mediawindow.hxx> - +#include <mediafilemanager.hxx> #include <soundplayer.hxx> #include <algorithm> @@ -48,12 +48,14 @@ namespace slideshow std::shared_ptr<SoundPlayer> SoundPlayer::create( EventMultiplexer & rEventMultiplexer, const OUString& rSoundURL, - const uno::Reference< uno::XComponentContext>& rComponentContext ) + const uno::Reference< uno::XComponentContext>& rComponentContext, + MediaFileManager& rMediaFileManager) { std::shared_ptr<SoundPlayer> pPlayer( new SoundPlayer( rEventMultiplexer, rSoundURL, - rComponentContext ) ); + rComponentContext, + rMediaFileManager) ); rEventMultiplexer.addPauseHandler( pPlayer ); pPlayer->mThis = pPlayer; return pPlayer; @@ -86,7 +88,8 @@ namespace slideshow SoundPlayer::SoundPlayer( EventMultiplexer & rEventMultiplexer, const OUString& rSoundURL, - const uno::Reference< uno::XComponentContext>& rComponentContext ) + const uno::Reference< uno::XComponentContext>& rComponentContext, + MediaFileManager& rMediaFileManager) : mrEventMultiplexer(rEventMultiplexer), mThis(), mxPlayer() @@ -96,7 +99,11 @@ namespace slideshow try { - const INetURLObject aURL( rSoundURL ); + if (rSoundURL.startsWithIgnoreAsciiCase("vnd.sun.star.Package:")) + { + mpMediaTempFile = rMediaFileManager.getMediaTempFile(rSoundURL); + } + const INetURLObject aURL( mpMediaTempFile ? mpMediaTempFile->m_TempFileURL : rSoundURL ); mxPlayer.set( avmedia::MediaWindow::createPlayer( aURL.GetMainURL( INetURLObject::DecodeMechanism::Unambiguous ), ""/*TODO!*/ ), uno::UNO_QUERY); diff --git a/slideshow/source/inc/mediafilemanager.hxx b/slideshow/source/inc/mediafilemanager.hxx new file mode 100644 index 000000000000..1c6bee62e78d --- /dev/null +++ b/slideshow/source/inc/mediafilemanager.hxx @@ -0,0 +1,36 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + */ + +#ifndef INCLUDED_SLIDESHOW_SOURCE_INC_MEDIAFILEMANAGER_HXX +#define INCLUDED_SLIDESHOW_SOURCE_INC_MEDIAFILEMANAGER_HXX + +#include <com/sun/star/uno/Reference.hxx> +#include <memory> + +namespace avmedia +{ +struct MediaTempFile; +} + +namespace slideshow +{ +namespace internal +{ +class MediaFileManager +{ +public: + virtual ~MediaFileManager(){}; + virtual std::shared_ptr<avmedia::MediaTempFile> getMediaTempFile(const OUString& aUrl) = 0; +}; +} +} +#endif // INCLUDED_SLIDESHOW_SOURCE_INC_MEDIAFILEMANAGER_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/slideshow/source/inc/slide.hxx b/slideshow/source/inc/slide.hxx index 8715931bf33b..cce3edbeee4e 100644 --- a/slideshow/source/inc/slide.hxx +++ b/slideshow/source/inc/slide.hxx @@ -153,6 +153,7 @@ namespace slideshow class EventQueue; class CursorManager; + class MediaFileManager; class EventMultiplexer; class ActivitiesQueue; class UserEventQueue; @@ -195,6 +196,7 @@ namespace slideshow ActivitiesQueue& rActivitiesQueue, UserEventQueue& rUserEventQueue, CursorManager& rCursorManager, + MediaFileManager& rMediaFileManager, const UnoViewContainer& rViewContainer, const css::uno::Reference< css::uno::XComponentContext >& xContext, const ShapeEventListenerMap& rShapeListenerMap, diff --git a/slideshow/source/inc/slideshowcontext.hxx b/slideshow/source/inc/slideshowcontext.hxx index 7c1907321760..dee43ba0a8b9 100644 --- a/slideshow/source/inc/slideshowcontext.hxx +++ b/slideshow/source/inc/slideshowcontext.hxx @@ -41,6 +41,7 @@ namespace slideshow class ScreenUpdater; class UnoViewContainer; class CursorManager; + class MediaFileManager; class SubsettableShapeManager; /** Common arguments for slideshow objects. @@ -72,6 +73,9 @@ namespace slideshow Activities queue, where repeating activities are to be scheduled. + @param rMediaFileManager + To handle media file with package urls. + @param rUserEventQueue User event queue @@ -88,6 +92,7 @@ namespace slideshow ActivitiesQueue& rActivitiesQueue, UserEventQueue& rUserEventQueue, CursorManager& rCursorManager, + MediaFileManager& rMediaFileManager, const UnoViewContainer& rViewContainer, const css::uno::Reference< css::uno::XComponentContext>& rComponentContext ); void dispose(); @@ -99,6 +104,7 @@ namespace slideshow ActivitiesQueue& mrActivitiesQueue; UserEventQueue& mrUserEventQueue; CursorManager& mrCursorManager; + MediaFileManager& mrMediaFileManager; const UnoViewContainer& mrViewContainer; css::uno::Reference< css::uno::XComponentContext> mxComponentContext; }; diff --git a/slideshow/source/inc/soundplayer.hxx b/slideshow/source/inc/soundplayer.hxx index 82af088af462..ea496d88b8cc 100644 --- a/slideshow/source/inc/soundplayer.hxx +++ b/slideshow/source/inc/soundplayer.hxx @@ -25,6 +25,7 @@ #include <com/sun/star/uno/XComponentContext.hpp> #include <com/sun/star/media/XManager.hpp> #include <com/sun/star/media/XPlayer.hpp> +#include <avmedia/mediaitem.hxx> #include <memory> @@ -39,6 +40,8 @@ namespace slideshow { namespace internal { + class MediaFileManager; + /** Little class that plays a sound from a URL. TODO: Must be explicitly disposed (as long as enable_shared_ptr_from_this @@ -64,7 +67,8 @@ namespace slideshow static ::std::shared_ptr<SoundPlayer> create( EventMultiplexer & rEventMultiplexer, const OUString& rSoundURL, - const css::uno::Reference< css::uno::XComponentContext>& rComponentContext ); + const css::uno::Reference< css::uno::XComponentContext>& rComponentContext, + MediaFileManager& rMediaFileManager); virtual ~SoundPlayer() override; @@ -92,12 +96,15 @@ namespace slideshow SoundPlayer( EventMultiplexer & rEventMultiplexer, const OUString& rSoundURL, - const css::uno::Reference< css::uno::XComponentContext>& rComponentContext ); + const css::uno::Reference< css::uno::XComponentContext>& rComponentContext, + MediaFileManager & rMediaFileManager); EventMultiplexer & mrEventMultiplexer; // TODO(Q3): obsolete when boost::enable_shared_ptr_from_this // is available ::std::shared_ptr<SoundPlayer> mThis; + // Temp file for pakcage url. + ::std::shared_ptr<::avmedia::MediaTempFile> mpMediaTempFile; css::uno::Reference< css::media::XPlayer > mxPlayer; }; diff --git a/svx/source/svdraw/svdomedia.cxx b/svx/source/svdraw/svdomedia.cxx index 8ed836168792..7dd3f37d119b 100644 --- a/svx/source/svdraw/svdomedia.cxx +++ b/svx/source/svdraw/svdomedia.cxx @@ -44,25 +44,13 @@ using namespace ::com::sun::star; -// Note: the temp file is read only, until it is deleted! -// It may be shared between multiple documents in case of copy/paste, -// hence the shared_ptr. -struct MediaTempFile -{ - OUString const m_TempFileURL; - MediaTempFile(OUString const& rURL) - : m_TempFileURL(rURL) - {} - ~MediaTempFile() - { - ::osl::File::remove(m_TempFileURL); - } -}; - struct SdrMediaObj::Impl { ::avmedia::MediaItem m_MediaProperties; - std::shared_ptr< MediaTempFile > m_pTempFile; + // Note: the temp file is read only, until it is deleted! + // It may be shared between multiple documents in case of copy/paste, + // hence the shared_ptr. + std::shared_ptr< ::avmedia::MediaTempFile > m_pTempFile; uno::Reference< graphic::XGraphic > m_xCachedSnapshot; OUString m_LastFailedPkgURL; }; @@ -270,47 +258,6 @@ uno::Reference<io::XInputStream> SdrMediaObj::GetInputStream() return tempFile.openStream(); } -static bool lcl_CopyToTempFile( - uno::Reference<io::XInputStream> const& xInStream, - OUString & o_rTempFileURL, - const OUString& rDesiredExtension) -{ - OUString tempFileURL; - ::osl::FileBase::RC const err = - ::osl::FileBase::createTempFile(nullptr, nullptr, & tempFileURL); - if (::osl::FileBase::E_None != err) - { - SAL_INFO("svx", "cannot create temp file"); - return false; - } - - if (!rDesiredExtension.isEmpty()) - { - OUString newTempFileURL = tempFileURL + rDesiredExtension; - if (osl::File::move(tempFileURL, newTempFileURL) != osl::FileBase::E_None) - { - SAL_WARN("svx", "Could not rename file '" << tempFileURL << "' to '" << newTempFileURL << "'"); - return false; - } - tempFileURL = newTempFileURL; - } - - try - { - ::ucbhelper::Content tempContent(tempFileURL, - uno::Reference<ucb::XCommandEnvironment>(), - comphelper::getProcessComponentContext()); - tempContent.writeStream(xInStream, true); // copy stream to file - } - catch (uno::Exception const& e) - { - SAL_WARN("svx", "exception: '" << e << "'"); - return false; - } - o_rTempFileURL = tempFileURL; - return true; -} - void SdrMediaObj::SetInputStream(uno::Reference<io::XInputStream> const& xStream) { if (m_xImpl->m_pTempFile || m_xImpl->m_LastFailedPkgURL.isEmpty()) @@ -321,14 +268,14 @@ void SdrMediaObj::SetInputStream(uno::Reference<io::XInputStream> const& xStream OUString tempFileURL; const bool bSuccess( - lcl_CopyToTempFile( + ::avmedia::CreateMediaTempFile( xStream, tempFileURL, "")); if (bSuccess) { - m_xImpl->m_pTempFile.reset(new MediaTempFile(tempFileURL)); + m_xImpl->m_pTempFile.reset(new ::avmedia::MediaTempFile(tempFileURL)); #if HAVE_FEATURE_AVMEDIA m_xImpl->m_MediaProperties.setURL( m_xImpl->m_LastFailedPkgURL, tempFileURL, ""); @@ -372,7 +319,7 @@ static bool lcl_HandlePackageURL( OUString sDesiredExtension; if (nLastDot > nLastSlash && nLastDot+1 < rURL.getLength()) sDesiredExtension = rURL.copy(nLastDot); - return lcl_CopyToTempFile(xInStream, o_rTempFileURL, sDesiredExtension); + return ::avmedia::CreateMediaTempFile(xInStream, o_rTempFileURL, sDesiredExtension); } #endif @@ -407,7 +354,7 @@ void SdrMediaObj::mediaPropertiesChanged( const ::avmedia::MediaItem& rNewProper if (bSuccess) { m_xImpl->m_pTempFile.reset( - new MediaTempFile(tempFileURL)); + new ::avmedia::MediaTempFile(tempFileURL)); #if HAVE_FEATURE_AVMEDIA m_xImpl->m_MediaProperties.setURL(url, tempFileURL, ""); #endif |