summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuboš Luňák <l.lunak@collabora.com>2020-12-18 11:17:53 +0100
committerLuboš Luňák <l.lunak@collabora.com>2020-12-21 12:57:43 +0100
commitafa3dff9c7b963f1d312ef8c2efcbc8ab7271e62 (patch)
treebdf7f438a058ddbbf9006ede319c44649ba071ca
parent149743a124a3731cb98caf94190ef4a7deca9cb7 (diff)
do not preload all images in the pptx importer
Now with my GraphicFilter::MakeGraphicsAvailableThreaded() patches for Impress images will be loaded in parallel as they are needed, which should usually be more efficient than loading all of them immediately. This basically reverts commits: b1319842a49cdf6512bbd9e81081e2a9edbd6089 04e27df3c162f1df02f061b94434a38d1eaa3a46 9eb8e2737d3a4d52ce1b0cc44091a3b7ecf59e3b Change-Id: I46bb0d6d93fb69f03f464308f6fce1603aafdfd8 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107945 Tested-by: Luboš Luňák <l.lunak@collabora.com> Reviewed-by: Luboš Luňák <l.lunak@collabora.com>
-rw-r--r--include/oox/helper/graphichelper.hxx7
-rw-r--r--oox/source/helper/graphichelper.cxx67
-rw-r--r--oox/source/ppt/pptimport.cxx41
3 files changed, 0 insertions, 115 deletions
diff --git a/include/oox/helper/graphichelper.hxx b/include/oox/helper/graphichelper.hxx
index 9a99647589b2..50c54175db93 100644
--- a/include/oox/helper/graphichelper.hxx
+++ b/include/oox/helper/graphichelper.hxx
@@ -113,10 +113,6 @@ public:
const css::uno::Reference< css::io::XInputStream >& rxInStrm,
const WmfExternal* pExtHeader = nullptr ) const;
- /** Imports graphics from the passed input streams. */
- std::vector< css::uno::Reference<css::graphic::XGraphic> >
- importGraphics(const std::vector< css::uno::Reference<css::io::XInputStream> >& rStreams) const;
-
/** Imports a graphic from the passed binary memory block. */
css::uno::Reference< css::graphic::XGraphic >
importGraphic( const StreamDataSequence& rGraphicData ) const;
@@ -127,9 +123,6 @@ public:
const OUString& rStreamName,
const WmfExternal* pExtHeader = nullptr ) const;
- /** Imports graphics from the storage with the passed stream names. */
- void importEmbeddedGraphics(const std::vector<OUString>& rStreamNames) const;
-
/** calculates the original size of a graphic which is necessary to be able to calculate cropping values
@return The original Graphic size in 100thmm */
css::awt::Size getOriginalSize( const css::uno::Reference< css::graphic::XGraphic >& rxGraphic ) const;
diff --git a/oox/source/helper/graphichelper.cxx b/oox/source/helper/graphichelper.cxx
index e8a1c94326a7..82978a76451e 100644
--- a/oox/source/helper/graphichelper.cxx
+++ b/oox/source/helper/graphichelper.cxx
@@ -35,7 +35,6 @@
#include <vcl/svapp.hxx>
#include <vcl/outdev.hxx>
#include <tools/gen.hxx>
-#include <comphelper/propertysequence.hxx>
#include <comphelper/sequence.hxx>
#include <oox/helper/containerhelper.hxx>
#include <oox/helper/propertyset.hxx>
@@ -277,27 +276,6 @@ Reference< XGraphic > GraphicHelper::importGraphic( const Reference< XInputStrea
return xGraphic;
}
-std::vector< uno::Reference<graphic::XGraphic> > GraphicHelper::importGraphics(const std::vector< uno::Reference<io::XInputStream> >& rStreams) const
-{
- std::vector< uno::Sequence<beans::PropertyValue> > aArgsVec;
-
- for (const auto& rStream : rStreams)
- {
- uno::Sequence<beans::PropertyValue > aArgs = comphelper::InitPropertySequence(
- {
- {"InputStream", uno::makeAny(rStream)}
- });
- aArgsVec.push_back(aArgs);
- }
-
- std::vector< uno::Reference<graphic::XGraphic> > aRet;
-
- if (mxGraphicProvider.is())
- aRet = comphelper::sequenceToContainer< std::vector< uno::Reference<graphic::XGraphic> > >(mxGraphicProvider->queryGraphics(comphelper::containerToSequence(aArgsVec)));
-
- return aRet;
-}
-
Reference< XGraphic > GraphicHelper::importGraphic( const StreamDataSequence& rGraphicData ) const
{
Reference< XGraphic > xGraphic;
@@ -309,51 +287,6 @@ Reference< XGraphic > GraphicHelper::importGraphic( const StreamDataSequence& rG
return xGraphic;
}
-void GraphicHelper::importEmbeddedGraphics(const std::vector<OUString>& rStreamNames) const
-{
- // Don't actually return anything, just fill maEmbeddedGraphics.
-
- // Stream names and streams to be imported.
- std::vector<OUString> aMissingStreamNames;
- std::vector< uno::Reference<io::XInputStream> > aMissingStreams;
-
- initializeGraphicMapperIfNeeded();
-
- SAL_WARN_IF(!mxGraphicMapper.is(), "oox", "GraphicHelper::importEmbeddedGraphic - graphic mapper not available");
-
- for (const auto& rStreamName : rStreamNames)
- {
-
- if (rStreamName.isEmpty())
- {
- SAL_WARN("oox", "GraphicHelper::importEmbeddedGraphics - empty stream name");
- continue;
- }
-
- Reference<XGraphic> xGraphic;
-
- xGraphic = mxGraphicMapper->findGraphic(rStreamName);
-
- if (!xGraphic.is())
- {
- aMissingStreamNames.push_back(rStreamName);
- aMissingStreams.push_back(mxStorage->openInputStream(rStreamName));
- }
- }
-
- std::vector< uno::Reference<graphic::XGraphic> > aGraphics = importGraphics(aMissingStreams);
-
-
- assert(aGraphics.size() == aMissingStreamNames.size());
- for (size_t i = 0; i < aGraphics.size(); ++i)
- {
- if (aGraphics[i].is())
- {
- mxGraphicMapper->putGraphic(aMissingStreamNames[i], aGraphics[i]);
- }
- }
-}
-
Reference< XGraphic > GraphicHelper::importEmbeddedGraphic( const OUString& rStreamName, const WmfExternal* pExtHeader ) const
{
Reference< XGraphic > xGraphic;
diff --git a/oox/source/ppt/pptimport.cxx b/oox/source/ppt/pptimport.cxx
index f7d00920705e..98a855c77fa4 100644
--- a/oox/source/ppt/pptimport.cxx
+++ b/oox/source/ppt/pptimport.cxx
@@ -73,37 +73,6 @@ PowerPointImport::~PowerPointImport()
maPPTShapes.clear();
}
-/// Visits the relations from pRelations which are of type rType.
-static void visitRelations(PowerPointImport& rImport, const core::RelationsRef& pRelations, const OUString& rType, std::vector<OUString>& rImageFragments)
-{
- core::RelationsRef pRelationsOfType = pRelations->getRelationsFromTypeFromOfficeDoc(rType);
- if (!pRelationsOfType)
- return;
-
- for (const auto& rRelation : *pRelationsOfType)
- {
- OUString aFragment = pRelationsOfType->getFragmentPathFromRelation(rRelation.second);
- if (core::RelationsRef pFragmentRelations = rImport.importRelations(aFragment))
- {
- // See if the fragment has images.
- if (core::RelationsRef pImages = pFragmentRelations->getRelationsFromTypeFromOfficeDoc("image"))
- {
- for (const auto& rImage : *pImages)
- {
- OUString aPath = pImages->getFragmentPathFromRelation(rImage.second);
- // Safe subset: e.g. WMF may have an external header from the
- // referencing fragment.
- if (aPath.endsWith(".jpg") || aPath.endsWith(".jpeg"))
- rImageFragments.push_back(aPath);
- }
- }
-
- // See if the fragment has a slide layout, and recurse.
- visitRelations(rImport, pFragmentRelations, "slideLayout", rImageFragments);
- }
- }
-}
-
bool PowerPointImport::importDocument()
{
/* to activate the PPTX dumper, define the environment variable
@@ -132,16 +101,6 @@ bool PowerPointImport::importDocument()
const OUString sPresPropsPath
= xPresentationFragmentHandler->getFragmentPathFromFirstTypeFromOfficeDoc("presProps");
- // importRelations() is cheap, it will do an actual import for the first time only.
- if (core::RelationsRef pFragmentRelations = importRelations(aFragmentPath))
- {
- std::vector<OUString> aImageFragments;
- visitRelations(*this, pFragmentRelations, "slide", aImageFragments);
- visitRelations(*this, pFragmentRelations, "slideMaster", aImageFragments);
-
- getGraphicHelper().importEmbeddedGraphics(aImageFragments);
- }
-
bool bRet = importFragment(xPresentationFragmentHandler);
if (bRet && !sPresPropsPath.isEmpty())
{