Kaydet (Commit) 1a0a026a authored tarafından Miklos Vajna's avatar Miklos Vajna

EPUB export: handle custom media dir in cover image / XMP metadata

By changing the default to <media dir>/cover.<extension> and <media
dir>/<basename>.xmp.

Change-Id: I736aefafba5aa5208917d9ed40119ca7721cdde3
Reviewed-on: https://gerrit.libreoffice.org/45604Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarMiklos Vajna <vmiklos@collabora.co.uk>
üst 3ed60d22
......@@ -49,6 +49,37 @@ OUString GetMimeType(const OUString &rExtension)
return it == vMimeTypes.end() ? OUString() : it->second;
}
/// Determines the base directory for cover images, XMP metadata, popup images.
OUString FindMediaDir(const OUString &rDocumentBaseURL, const uno::Sequence<beans::PropertyValue> &rFilterData)
{
OUString aMediaDir;
// See if filter data contains a media directory explicitly.
for (sal_Int32 i = 0; i < rFilterData.getLength(); ++i)
{
if (rFilterData[i].Name == "RVNGMediaDir")
{
rFilterData[i].Value >>= aMediaDir;
break;
}
}
if (!aMediaDir.isEmpty())
return aMediaDir + "/";
// Not set explicitly, try to pick it up from the base directory.
INetURLObject aURL(rDocumentBaseURL);
try
{
aMediaDir = rtl::Uri::convertRelToAbs(rDocumentBaseURL, aURL.GetBase()) + "/";
}
catch (const rtl::MalformedUriException &rException)
{
SAL_WARN("writerperfect", "FindMediaDir: convertRelToAbs() failed:" << rException.getMessage());
}
return aMediaDir;
}
/// Picks up a cover image from the base directory.
OUString FindCoverImage(const OUString &rDocumentBaseURL, OUString &rMimeType, const uno::Sequence<beans::PropertyValue> &rFilterData)
{
......@@ -75,8 +106,6 @@ OUString FindCoverImage(const OUString &rDocumentBaseURL, OUString &rMimeType, c
if (rDocumentBaseURL.isEmpty())
return aRet;
INetURLObject aDocumentBaseURL(rDocumentBaseURL);
static const std::initializer_list<OUStringLiteral> vExtensions =
{
"gif",
......@@ -85,17 +114,10 @@ OUString FindCoverImage(const OUString &rDocumentBaseURL, OUString &rMimeType, c
"svg"
};
OUString aMediaDir = FindMediaDir(rDocumentBaseURL, rFilterData);
for (const auto &rExtension : vExtensions)
{
try
{
aRet = rtl::Uri::convertRelToAbs(rDocumentBaseURL, aDocumentBaseURL.GetBase() + ".cover-image." + rExtension);
}
catch (const rtl::MalformedUriException &rException)
{
SAL_WARN("writerperfect", "FindCoverImage: convertRelToAbs() failed:" << rException.getMessage());
}
aRet = aMediaDir + "cover." + rExtension;
if (!aRet.isEmpty())
{
SvFileStream aStream(aRet, StreamMode::READ);
......@@ -113,37 +135,6 @@ OUString FindCoverImage(const OUString &rDocumentBaseURL, OUString &rMimeType, c
return aRet;
}
/// Determines the base directory for cover images, XMP metadata, popup images.
OUString FindMediaDir(const OUString &rDocumentBaseURL, const uno::Sequence<beans::PropertyValue> &rFilterData)
{
OUString aMediaDir;
// See if filter data contains a media directory explicitly.
for (sal_Int32 i = 0; i < rFilterData.getLength(); ++i)
{
if (rFilterData[i].Name == "RVNGMediaDir")
{
rFilterData[i].Value >>= aMediaDir;
break;
}
}
if (!aMediaDir.isEmpty())
return aMediaDir + "/";
// Not set explicitly, try to pick it up from the base directory.
INetURLObject aURL(rDocumentBaseURL);
try
{
aMediaDir = rtl::Uri::convertRelToAbs(rDocumentBaseURL, aURL.GetBase()) + "/";
}
catch (const rtl::MalformedUriException &rException)
{
SAL_WARN("writerperfect", "FindMediaDir: convertRelToAbs() failed:" << rException.getMessage());
}
return aMediaDir;
}
/// Picks up XMP metadata from the base directory.
void FindXMPMetadata(const uno::Reference<uno::XComponentContext> &xContext, const OUString &rDocumentBaseURL, const uno::Sequence<beans::PropertyValue> &rFilterData, librevenge::RVNGPropertyList &rMetaData)
{
......@@ -187,18 +178,9 @@ void FindXMPMetadata(const uno::Reference<uno::XComponentContext> &xContext, con
if (rDocumentBaseURL.isEmpty())
return;
OUString aMediaDir = FindMediaDir(rDocumentBaseURL, rFilterData);
INetURLObject aDocumentBaseURL(rDocumentBaseURL);
OUString aURL;
try
{
aURL = rtl::Uri::convertRelToAbs(rDocumentBaseURL, aDocumentBaseURL.GetBase() + ".xmp");
}
catch (const rtl::MalformedUriException &rException)
{
SAL_WARN("writerperfect", "FindXMPMetadata: convertRelToAbs() failed:" << rException.getMessage());
return;
}
OUString aURL = aMediaDir + aDocumentBaseURL.GetBase() + ".xmp";
SvFileStream aStream(aURL, StreamMode::READ);
if (!aStream.IsOpen())
return;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment