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 /avmedia | |
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>
Diffstat (limited to 'avmedia')
-rw-r--r-- | avmedia/source/framework/mediaitem.cxx | 45 |
1 files changed, 45 insertions, 0 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: */ |