[Libreoffice-commits] core.git: writerperfect/qa writerperfect/source
Miklos Vajna
vmiklos at collabora.co.uk
Wed Nov 29 16:54:25 UTC 2017
writerperfect/qa/unit/EPUBExportTest.cxx | 19 ++++++++++++++++
writerperfect/source/writer/exp/xmlimp.cxx | 34 ++++++++++++++++++++++++++---
2 files changed, 50 insertions(+), 3 deletions(-)
New commits:
commit 612821223c574fe0956d348730d40623943821f3
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Wed Nov 29 11:45:12 2017 +0100
EPUB export: allow setting a custom cover image explicitly
If not set, fall back to the existing auto-find.
Change-Id: I5df7a535e4132a18a803c10fa0e06352d9b6b533
diff --git a/writerperfect/qa/unit/EPUBExportTest.cxx b/writerperfect/qa/unit/EPUBExportTest.cxx
index e038a7ef6135..72c9a27dc495 100644
--- a/writerperfect/qa/unit/EPUBExportTest.cxx
+++ b/writerperfect/qa/unit/EPUBExportTest.cxx
@@ -61,6 +61,7 @@ public:
void testSpanAutostyle();
void testParaAutostyleCharProps();
void testMeta();
+ void testCoverImage();
void testParaNamedstyle();
void testCharNamedstyle();
void testNamedStyleInheritance();
@@ -93,6 +94,7 @@ public:
CPPUNIT_TEST(testSpanAutostyle);
CPPUNIT_TEST(testParaAutostyleCharProps);
CPPUNIT_TEST(testMeta);
+ CPPUNIT_TEST(testCoverImage);
CPPUNIT_TEST(testParaNamedstyle);
CPPUNIT_TEST(testCharNamedstyle);
CPPUNIT_TEST(testNamedStyleInheritance);
@@ -333,6 +335,23 @@ void EPUBExportTest::testMeta()
CPPUNIT_ASSERT(mxZipFile->hasByName("OEBPS/images/image0001.png"));
}
+void EPUBExportTest::testCoverImage()
+{
+ OUString aCoverURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "meta.cover-image.png";
+ uno::Sequence<beans::PropertyValue> aFilterData(comphelper::InitPropertySequence(
+ {
+ {"EPUBCoverImage", uno::makeAny(aCoverURL)}
+ }));
+ createDoc("hello.fodt", aFilterData);
+ mpXmlDoc = parseExport("OEBPS/content.opf");
+
+ // Make sure that the explicitly set cover image is used.
+ // This failed, as the image was not part of the package.
+ assertXPath(mpXmlDoc, "/opf:package/opf:manifest/opf:item[@href='images/image0001.png']", "properties", "cover-image");
+ assertXPath(mpXmlDoc, "/opf:package/opf:manifest/opf:item[@href='images/image0001.png']", "media-type", "image/png");
+ CPPUNIT_ASSERT(mxZipFile->hasByName("OEBPS/images/image0001.png"));
+}
+
void EPUBExportTest::testParaNamedstyle()
{
createDoc("para-namedstyle.fodt", {});
diff --git a/writerperfect/source/writer/exp/xmlimp.cxx b/writerperfect/source/writer/exp/xmlimp.cxx
index 3d7f99cc399e..bc3b9c7693e4 100644
--- a/writerperfect/source/writer/exp/xmlimp.cxx
+++ b/writerperfect/source/writer/exp/xmlimp.cxx
@@ -46,10 +46,38 @@ OUString GetMimeType(const OUString &rExtension)
}
/// Picks up a cover image from the base directory.
-OUString FindCoverImage(const OUString &rDocumentBaseURL, OUString &rMimeType)
+OUString FindCoverImage(const OUString &rDocumentBaseURL, OUString &rMimeType, const uno::Sequence<beans::PropertyValue> &rDescriptor)
{
OUString aRet;
+ // See if filter data contains a cover image explicitly.
+ uno::Sequence<beans::PropertyValue> aFilterData;
+ for (sal_Int32 i = 0; i < rDescriptor.getLength(); ++i)
+ {
+ if (rDescriptor[i].Name == "FilterData")
+ {
+ rDescriptor[i].Value >>= aFilterData;
+ break;
+ }
+ }
+
+ for (sal_Int32 i = 0; i < aFilterData.getLength(); ++i)
+ {
+ if (aFilterData[i].Name == "EPUBCoverImage")
+ {
+ aFilterData[i].Value >>= aRet;
+ break;
+ }
+ }
+
+ if (!aRet.isEmpty())
+ {
+ INetURLObject aRetURL(aRet);
+ rMimeType = GetMimeType(aRetURL.GetExtension());
+ return aRet;
+ }
+
+ // Not set explicitly, try to pick it up from the base directory.
if (rDocumentBaseURL.isEmpty())
return aRet;
@@ -142,11 +170,11 @@ rtl::Reference<XMLImportContext> XMLOfficeDocContext::CreateChildContext(const O
return nullptr;
}
-XMLImport::XMLImport(librevenge::RVNGTextInterface &rGenerator, const OUString &rURL, const uno::Sequence<beans::PropertyValue> &/*rDescriptor*/)
+XMLImport::XMLImport(librevenge::RVNGTextInterface &rGenerator, const OUString &rURL, const uno::Sequence<beans::PropertyValue> &rDescriptor)
: mrGenerator(rGenerator)
{
OUString aMimeType;
- OUString aCoverImage = FindCoverImage(rURL, aMimeType);
+ OUString aCoverImage = FindCoverImage(rURL, aMimeType, rDescriptor);
if (!aCoverImage.isEmpty())
{
librevenge::RVNGBinaryData aBinaryData;
More information about the Libreoffice-commits
mailing list