summaryrefslogtreecommitdiff
path: root/writerperfect/source/writer/MSWorksImportFilter.cxx
diff options
context:
space:
mode:
authorosnola <alonso@loria.fr>2015-05-18 10:21:10 +0200
committerDavid Tardon <dtardon@redhat.com>2015-05-19 08:24:59 +0200
commitf9568335a653f72732f9c8ebf007cf8850021ff9 (patch)
treead5c96cbe2636c58a46692f92a1f127e5b2c4453 /writerperfect/source/writer/MSWorksImportFilter.cxx
parentfa76bbbe9869b0a009e6e05df1130fac5b4fc15a (diff)
upload libwps 0.4.0
Change-Id: I9da61333b7c46d20cf7010553929b141ec011d84
Diffstat (limited to 'writerperfect/source/writer/MSWorksImportFilter.cxx')
-rw-r--r--writerperfect/source/writer/MSWorksImportFilter.cxx34
1 files changed, 32 insertions, 2 deletions
diff --git a/writerperfect/source/writer/MSWorksImportFilter.cxx b/writerperfect/source/writer/MSWorksImportFilter.cxx
index 61c54f5779b4..f06a21a08ee6 100644
--- a/writerperfect/source/writer/MSWorksImportFilter.cxx
+++ b/writerperfect/source/writer/MSWorksImportFilter.cxx
@@ -9,11 +9,13 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
+#include <boost/scoped_ptr.hpp>
#include <com/sun/star/uno/Reference.h>
#include <cppuhelper/supportsservice.hxx>
#include <libwps/libwps.h>
+#include "writerperfect/WPFTEncodingDialog.hxx"
#include "MSWorksImportFilter.hxx"
using com::sun::star::uno::Sequence;
@@ -33,13 +35,41 @@ static bool handleEmbeddedWKSObject(const librevenge::RVNGBinaryData &data, OdfD
bool MSWorksImportFilter::doImportDocument(librevenge::RVNGInputStream &rInput, OdtGenerator &rGenerator, utl::MediaDescriptor &)
{
- return libwps::WPS_OK == libwps::WPSDocument::parse(&rInput, &rGenerator);
+ libwps::WPSKind kind = libwps::WPS_TEXT;
+ libwps::WPSCreator creator;
+ bool needEncoding;
+ const libwps::WPSConfidence confidence = libwps::WPSDocument::isFileFormatSupported(&rInput, kind, creator, needEncoding);
+
+ std::string fileEncoding("");
+ try
+ {
+ if ((kind == libwps::WPS_TEXT) && (confidence == libwps::WPS_CONFIDENCE_EXCELLENT) && needEncoding)
+ {
+ OUString title("Import MsWorks files(libwps)");
+ OUString encoding("CP850");
+ const ScopedVclPtrInstance<writerperfect::WPFTEncodingDialog> pDlg(nullptr, &title, &encoding);
+ if (pDlg->Execute() == RET_OK)
+ {
+ if (!pDlg->GetEncoding().isEmpty())
+ fileEncoding=pDlg->GetEncoding().toUtf8().getStr();
+ }
+ // we can fail because we are in headless mode, the user has cancelled conversion, ...
+ else if (pDlg->hasUserCalledCancel())
+ return false;
+ }
+ }
+ catch (...)
+ {
+ }
+ return libwps::WPS_OK == libwps::WPSDocument::parse(&rInput, &rGenerator, "", fileEncoding.c_str());
}
bool MSWorksImportFilter::doDetectFormat(librevenge::RVNGInputStream &rInput, OUString &rTypeName)
{
libwps::WPSKind kind = libwps::WPS_TEXT;
- const libwps::WPSConfidence confidence = libwps::WPSDocument::isFileFormatSupported(&rInput, kind);
+ libwps::WPSCreator creator;
+ bool needEncoding;
+ const libwps::WPSConfidence confidence = libwps::WPSDocument::isFileFormatSupported(&rInput, kind, creator, needEncoding);
if ((kind == libwps::WPS_TEXT) && (confidence == libwps::WPS_CONFIDENCE_EXCELLENT))
{