22#include <com/sun/star/uno/Sequence.hxx>
24#include <com/sun/star/beans/XPropertySet.hpp>
25#include <com/sun/star/embed/ElementModes.hpp>
26#include <com/sun/star/embed/XTransactedObject.hpp>
27#include <com/sun/star/frame/XModel.hpp>
28#include <com/sun/star/document/XStorageBasedDocument.hpp>
29#include <com/sun/star/ucb/XCommandEnvironment.hpp>
30#include <com/sun/star/uri/UriReferenceFactory.hpp>
31#include <com/sun/star/uri/XUriReference.hpp>
32#include <com/sun/star/uri/XUriReferenceFactory.hpp>
33#include <com/sun/star/text/GraphicCrop.hpp>
43#include <osl/file.hxx>
79 ,
m_eZoom( css::media::ZoomLevel_NOT_AVAILABLE )
106 assert( SfxPoolItem::operator==(rItem));
159 uno::Sequence< uno::Any >
aSeq;
162 if( ( rVal >>=
aSeq ) && (
aSeq.getLength() == 10 ) )
164 sal_Int32 nInt32 = 0;
167 aSeq[ 1 ] >>= nInt32;
169 aSeq[ 2 ] >>= nInt32;
187 bool bChanged =
false;
235 bool bChanged = rURL !=
m_pImpl->m_URL || rTempURL !=
m_pImpl->m_TempFileURL || rReferer !=
m_pImpl->m_Referer;
239 m_pImpl->m_TempFileURL = rTempURL;
264 bool bChanged = rMimeType !=
m_pImpl->m_sMimeType;
266 m_pImpl->m_sMimeType = rMimeType;
278 bool bChanged = rGraphic !=
m_pImpl->m_aGraphic;
280 m_pImpl->m_aGraphic = rGraphic;
289 bool bChanged = rCrop !=
m_pImpl->m_aCrop;
300 bool bChanged = eState !=
m_pImpl->m_eState;
314 bool bChanged = fDuration !=
m_pImpl->m_fDuration;
316 m_pImpl->m_fDuration = fDuration;
328 bool bChanged = fTime !=
m_pImpl->m_fTime;
342 bool bChanged = bLoop !=
m_pImpl->m_bLoop;
356 bool bChanged = bMute !=
m_pImpl->m_bMute;
370 bool bChanged = nDB !=
m_pImpl->m_nVolumeDB;
384 bool bChanged = eZoom !=
m_pImpl->m_eZoom;
397 uno::Reference<uri::XUriReferenceFactory>
const xUriFactory(
398 uri::UriReferenceFactory::create(
400 uno::Reference<uri::XUriReference>
const xSourceURI(
401 xUriFactory->parse(rSourceURL), uno::UNO_SET_THROW);
405 sal_Int32
const nSegments(xSourceURI->getPathSegmentCount());
408 filename = xSourceURI->getPathSegment(nSegments - 1);
412 filename,
false) || !filename.getLength())
420uno::Reference<io::XStream>
422 OUString
const& rFilename)
424 OUString filename(rFilename);
426 if (xStorage->hasByName(filename))
428 std::u16string_view basename;
429 std::u16string_view suffix;
430 sal_Int32
const nIndex(rFilename.lastIndexOf(
'.'));
433 basename = rFilename.subView(0,
nIndex);
434 suffix = rFilename.subView(
nIndex);
440 filename = basename + OUString::number(
count) + suffix;
442 while (xStorage->hasByName(filename));
445 uno::Reference<io::XStream>
const xStream(
446 xStorage->openStreamElement(filename,
447 embed::ElementModes::WRITE | embed::ElementModes::TRUNCATE),
449 uno::Reference< beans::XPropertySet >
const xStreamProps(
xStream,
451 if (xStreamProps.is()) {
452 OUString
const guessed(::comphelper::GuessMediaMimeType(filename));
453 xStreamProps->setPropertyValue(
"MediaType",
455 xStreamProps->setPropertyValue(
463 OUString
const& rSourceURL, OUString & o_rEmbeddedURL, uno::Reference<io::XInputStream>
const& xInputStream)
467 uno::Reference<document::XStorageBasedDocument>
const xSBD(
xModel,
468 uno::UNO_QUERY_THROW);
469 uno::Reference<embed::XStorage>
const xStorage(
470 xSBD->getDocumentStorage(), uno::UNO_SET_THROW);
472 static constexpr OUStringLiteral media(
u"Media");
473 uno::Reference<embed::XStorage>
const xSubStorage(
474 xStorage->openStorageElement(media, embed::ElementModes::WRITE));
478 uno::Reference<io::XStream>
const xStream(
479 CreateStream(xSubStorage, filename), uno::UNO_SET_THROW);
480 uno::Reference<io::XOutputStream>
const xOutStream(
481 xStream->getOutputStream(), uno::UNO_SET_THROW);
483 if (xInputStream.is())
491 uno::Reference<ucb::XCommandEnvironment>(),
496 SAL_INFO(
"avmedia",
"openStream to storage failed");
501 uno::Reference<embed::XTransactedObject>
const xSubTransaction(
502 xSubStorage, uno::UNO_QUERY);
503 if (xSubTransaction.is()) {
504 xSubTransaction->commit();
506 uno::Reference<embed::XTransactedObject>
const xTransaction(
507 xStorage, uno::UNO_QUERY);
508 if (xTransaction.is()) {
509 xTransaction->commit();
512 o_rEmbeddedURL =
"vnd.sun.star.Package:" + media +
"/" + filename;
515 catch (uno::Exception
const&)
518 "Exception while trying to embed media");
524 OUString& o_rTempFileURL, std::u16string_view rDesiredExtension)
526 OUString tempFileURL;
527 ::osl::FileBase::RC
const err =
528 ::osl::FileBase::createTempFile(
nullptr,
nullptr, & tempFileURL);
529 if (::osl::FileBase::E_None !=
err)
531 SAL_WARN(
"avmedia",
"cannot create temp file");
535 if (!rDesiredExtension.empty())
537 OUString newTempFileURL = tempFileURL + rDesiredExtension;
538 if (osl::File::move(tempFileURL, newTempFileURL) != osl::FileBase::E_None)
540 SAL_WARN(
"avmedia",
"Could not rename file '" << tempFileURL <<
"' to '" << newTempFileURL <<
"'");
543 tempFileURL = newTempFileURL;
549 uno::Reference<ucb::XCommandEnvironment>(),
553 catch (uno::Exception
const&)
558 o_rTempFileURL = tempFileURL;
static bool IsValidZipEntryFileName(std::u16string_view aName, bool bSlashAllowed)
static void CopyInputToOutput(const css::uno::Reference< css::io::XInputStream > &xInput, const css::uno::Reference< css::io::XOutputStream > &xOutput)
css::uno::Reference< css::io::XInputStream > openStream()
void writeStream(const css::uno::Reference< css::io::XInputStream > &rStream, bool bReplaceExisting)
#define TOOLS_WARN_EXCEPTION(area, stream)
Sequence< sal_Int8 > aSeq
#define SAL_WARN(area, stream)
#define SAL_INFO(area, stream)
Reference< XComponentContext > getProcessComponentContext()
Reference< XModel > xModel