summaryrefslogtreecommitdiff
path: root/avmedia
diff options
context:
space:
mode:
authorMark Hung <marklh9@gmail.com>2019-01-27 13:41:34 +0800
committerMark Hung <marklh9@gmail.com>2019-02-04 01:15:22 +0100
commit6b6c0b120f3275be6bd9dbb26480f8f1df355e00 (patch)
treed25c799cad8b21e4836e3b309425b2271b0615bc /avmedia
parent8a1321362a0229a25869e4e3d0422a5a51c5b5be (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.cxx45
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: */