summaryrefslogtreecommitdiff
path: root/writerperfect
diff options
context:
space:
mode:
authoralonso <laurent.alonso@inria.fr>2019-11-13 14:03:53 +0100
committerXisco FaulĂ­ <xiscofauli@libreoffice.org>2020-01-20 16:59:02 +0100
commit5fc07374dc00f1c35839cb3f2b9fb712a88272e6 (patch)
treea29ec6b7f13cfe8af961851ba2a2ed31f7f7ab3f /writerperfect
parentf87b8aa06fd6f38a0e604d780c0bc2e62f201735 (diff)
writerperfect[libwps,tdf#128673]: use the inFilter option in headless mode...
Change-Id: I494360ddb55e39e09edf03aaf0bf6a01dc432f83 Reviewed-on: https://gerrit.libreoffice.org/82595 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk> (cherry picked from commit f14cd1ad62e6f17f2a1e56a7d4dfb8fad8d5375e) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/87076 Reviewed-by: Xisco FaulĂ­ <xiscofauli@libreoffice.org>
Diffstat (limited to 'writerperfect')
-rw-r--r--writerperfect/source/calc/MSWorksCalcImportFilter.cxx127
-rw-r--r--writerperfect/source/writer/MSWorksImportFilter.cxx42
2 files changed, 99 insertions, 70 deletions
diff --git a/writerperfect/source/calc/MSWorksCalcImportFilter.cxx b/writerperfect/source/calc/MSWorksCalcImportFilter.cxx
index 0ed1903172e1..d001b84a79d5 100644
--- a/writerperfect/source/calc/MSWorksCalcImportFilter.cxx
+++ b/writerperfect/source/calc/MSWorksCalcImportFilter.cxx
@@ -174,7 +174,8 @@ private:
////////////////////////////////////////////////////////////
bool MSWorksCalcImportFilter::doImportDocument(weld::Window* pParent,
librevenge::RVNGInputStream& rInput,
- OdsGenerator& rGenerator, utl::MediaDescriptor&)
+ OdsGenerator& rGenerator,
+ utl::MediaDescriptor& mediaDescriptor)
{
libwps::WPSKind kind = libwps::WPS_TEXT;
libwps::WPSCreator creator;
@@ -188,70 +189,88 @@ bool MSWorksCalcImportFilter::doImportDocument(weld::Window* pParent,
std::string fileEncoding;
if (needEncoding)
{
- OUString title, encoding;
- switch (creator)
+ OUString encoding;
+ // first check if we can find the encoding in the filter options (headless mode)
+ mediaDescriptor[utl::MediaDescriptor::PROP_FILTEROPTIONS()] >>= encoding;
+ if (!encoding.isEmpty()) // TODO: check if the encoding string is valid
+ fileEncoding = encoding.toUtf8().getStr();
+ else
{
- case libwps::WPS_MSWORKS:
- title = WpResId(STR_ENCODING_DIALOG_TITLE_MSWORKS);
- encoding = "CP850";
- break;
- case libwps::WPS_LOTUS:
- title = WpResId(STR_ENCODING_DIALOG_TITLE_LOTUS);
- encoding = "CP437";
- break;
- case libwps::WPS_SYMPHONY:
- title = WpResId(STR_ENCODING_DIALOG_TITLE_SYMPHONY);
- encoding = "CP437";
- break;
- case libwps::WPS_QUATTRO_PRO:
- title = WpResId(STR_ENCODING_DIALOG_TITLE_QUATTROPRO);
- encoding = "CP437";
- break;
- case libwps::WPS_RESERVED_2:
- title = WpResId(STR_ENCODING_DIALOG_TITLE_MSMULTIPLAN);
- encoding = "CP437";
- break;
- default:
- SAL_INFO("writerperfect", "unexpected creator: " << creator);
- title = WpResId(STR_ENCODING_DIALOG_TITLE);
- encoding = "CP437";
- break;
- }
+ OUString title;
+ switch (creator)
+ {
+ case libwps::WPS_MSWORKS:
+ title = WpResId(STR_ENCODING_DIALOG_TITLE_MSWORKS);
+ encoding = "CP850";
+ break;
+ case libwps::WPS_LOTUS:
+ title = WpResId(STR_ENCODING_DIALOG_TITLE_LOTUS);
+ encoding = "CP437";
+ break;
+ case libwps::WPS_SYMPHONY:
+ title = WpResId(STR_ENCODING_DIALOG_TITLE_SYMPHONY);
+ encoding = "CP437";
+ break;
+ case libwps::WPS_QUATTRO_PRO:
+ title = WpResId(STR_ENCODING_DIALOG_TITLE_QUATTROPRO);
+ encoding = "CP437";
+ break;
+ case libwps::WPS_RESERVED_2:
+ title = WpResId(STR_ENCODING_DIALOG_TITLE_MSMULTIPLAN);
+ encoding = "CP437";
+ break;
+ default:
+ SAL_INFO("writerperfect", "unexpected creator: " << creator);
+ title = WpResId(STR_ENCODING_DIALOG_TITLE);
+ encoding = "CP437";
+ break;
+ }
- try
- {
- writerperfect::WPFTEncodingDialog aDlg(pParent, title, encoding);
- if (aDlg.run() == RET_OK)
+ fileEncoding = encoding.toUtf8().getStr(); // set default to the proposed encoding
+ try
{
- if (!aDlg.GetEncoding().isEmpty())
- fileEncoding = aDlg.GetEncoding().toUtf8().getStr();
+ writerperfect::WPFTEncodingDialog aDlg(pParent, title, encoding);
+ if (aDlg.run() == RET_OK)
+ {
+ if (!aDlg.GetEncoding().isEmpty())
+ fileEncoding = aDlg.GetEncoding().toUtf8().getStr();
+ }
+ // we can fail because we are in headless mode, the user has cancelled conversion, ...
+ else if (aDlg.hasUserCalledCancel())
+ return false;
+ }
+ catch (...)
+ {
+ SAL_WARN("writerperfect",
+ "ignoring Exception in MSWorksCalcImportFilter::doImportDocument");
}
- // we can fail because we are in headless mode, the user has cancelled conversion, ...
- else if (aDlg.hasUserCalledCancel())
- return false;
- }
- catch (...)
- {
- SAL_WARN("writerperfect",
- "ignoring Exception in MSWorksCalcImportFilter::doImportDocument");
}
}
OString aUtf8Passwd;
if (confidence == libwps::WPS_CONFIDENCE_SUPPORTED_ENCRYPTION)
{
- // try to ask for a password
- try
+ OUString sPassword;
+ // now check if we can find the password in the properties
+ // (just in case, "soffice --headless" adds an option to send password)
+ mediaDescriptor[utl::MediaDescriptor::PROP_PASSWORD()] >>= sPassword;
+ if (!sPassword.isEmpty())
+ aUtf8Passwd = OUStringToOString(sPassword, RTL_TEXTENCODING_UTF8);
+ else
{
- SfxPasswordDialog aPasswdDlg(pParent);
- aPasswdDlg.SetMinLen(1);
- if (!aPasswdDlg.run())
+ // ok, ask the user for a password
+ try
+ {
+ SfxPasswordDialog aPasswdDlg(pParent);
+ aPasswdDlg.SetMinLen(1);
+ if (!aPasswdDlg.run())
+ return false;
+ OUString aPasswd = aPasswdDlg.GetPassword();
+ aUtf8Passwd = OUStringToOString(aPasswd, RTL_TEXTENCODING_UTF8);
+ }
+ catch (...)
+ {
return false;
- OUString aPasswd = aPasswdDlg.GetPassword();
- aUtf8Passwd = OUStringToOString(aPasswd, RTL_TEXTENCODING_UTF8);
- }
- catch (...)
- {
- return false;
+ }
}
}
return libwps::WPS_OK
diff --git a/writerperfect/source/writer/MSWorksImportFilter.cxx b/writerperfect/source/writer/MSWorksImportFilter.cxx
index 61b79d698da1..2adec49cfeba 100644
--- a/writerperfect/source/writer/MSWorksImportFilter.cxx
+++ b/writerperfect/source/writer/MSWorksImportFilter.cxx
@@ -31,7 +31,8 @@ static bool handleEmbeddedWKSObject(const librevenge::RVNGBinaryData& data,
bool MSWorksImportFilter::doImportDocument(weld::Window* pParent,
librevenge::RVNGInputStream& rInput,
- OdtGenerator& rGenerator, utl::MediaDescriptor&)
+ OdtGenerator& rGenerator,
+ utl::MediaDescriptor& mediaDescriptor)
{
libwps::WPSKind kind = libwps::WPS_TEXT;
libwps::WPSCreator creator;
@@ -40,12 +41,17 @@ bool MSWorksImportFilter::doImportDocument(weld::Window* pParent,
= libwps::WPSDocument::isFileFormatSupported(&rInput, kind, creator, needEncoding);
std::string fileEncoding;
- try
+ if ((kind == libwps::WPS_TEXT) && (confidence == libwps::WPS_CONFIDENCE_EXCELLENT)
+ && needEncoding)
{
- if ((kind == libwps::WPS_TEXT) && (confidence == libwps::WPS_CONFIDENCE_EXCELLENT)
- && needEncoding)
+ OUString encoding;
+ // first check if we can find the encoding in the filter options (headless mode)
+ mediaDescriptor[utl::MediaDescriptor::PROP_FILTEROPTIONS()] >>= encoding;
+ if (!encoding.isEmpty()) // TODO: check if the encoding string is valid
+ fileEncoding = encoding.toUtf8().getStr();
+ else
{
- OUString title, encoding;
+ OUString title;
switch (creator)
{
@@ -67,21 +73,25 @@ bool MSWorksImportFilter::doImportDocument(weld::Window* pParent,
break;
}
- writerperfect::WPFTEncodingDialog aDlg(pParent, title, encoding);
- if (aDlg.run() == RET_OK)
+ fileEncoding = encoding.toUtf8().getStr(); // set default to the proposed encoding
+ try
{
- if (!aDlg.GetEncoding().isEmpty())
- fileEncoding = aDlg.GetEncoding().toUtf8().getStr();
+ writerperfect::WPFTEncodingDialog aDlg(pParent, title, encoding);
+ if (aDlg.run() == RET_OK)
+ {
+ if (!aDlg.GetEncoding().isEmpty())
+ fileEncoding = aDlg.GetEncoding().toUtf8().getStr();
+ }
+ // we can fail because we are in headless mode, the user has cancelled conversion, ...
+ else if (aDlg.hasUserCalledCancel())
+ return false;
+ }
+ catch (css::uno::Exception&)
+ {
+ TOOLS_WARN_EXCEPTION("writerperfect", "ignoring");
}
- // we can fail because we are in headless mode, the user has cancelled conversion, ...
- else if (aDlg.hasUserCalledCancel())
- return false;
}
}
- catch (css::uno::Exception&)
- {
- TOOLS_WARN_EXCEPTION("writerperfect", "ignoring");
- }
return libwps::WPS_OK
== libwps::WPSDocument::parse(&rInput, &rGenerator, "", fileEncoding.c_str());
}