summaryrefslogtreecommitdiff
path: root/writerperfect/source/writer/MSWorksImportFilter.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'writerperfect/source/writer/MSWorksImportFilter.cxx')
-rw-r--r--writerperfect/source/writer/MSWorksImportFilter.cxx42
1 files changed, 26 insertions, 16 deletions
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());
}