diff options
Diffstat (limited to 'writerperfect/source/writer/MSWorksImportFilter.cxx')
-rw-r--r-- | writerperfect/source/writer/MSWorksImportFilter.cxx | 42 |
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()); } |