summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorosnola <alonso@loria.fr>2017-04-02 09:42:59 +0200
committerDavid Tardon <dtardon@redhat.com>2017-04-02 13:42:19 +0200
commitb0067c89e6b2a4e29465d9da9a731ae30a66dce6 (patch)
tree4f10cbb6eb212c9528e6e3410d4f28b230818f97
parentaf45b3d48e3a027c14317db944a8d67de063352f (diff)
libwps import filter improvements
+ some astyle modifications, + add .wk4 and .123 to the list of file extensions, + add support to open Lotus files protected by a password. Change-Id: I94d4afffd73f0999ff2b1958704cb3985fcd0cc9
-rw-r--r--filter/source/config/fragments/types/calc_WPS_Lotus_Document.xcu2
-rw-r--r--writerperfect/Library_wpftcalc.mk1
-rw-r--r--writerperfect/qa/unit/DrawingImportTest.cxx2
-rw-r--r--writerperfect/qa/unit/PresentationImportTest.cxx2
-rw-r--r--writerperfect/qa/unit/SpreadsheetImportTest.cxx2
-rw-r--r--writerperfect/qa/unit/TextImportTest.cxx2
-rw-r--r--writerperfect/source/calc/MSWorksCalcImportFilter.cxx41
-rw-r--r--writerperfect/source/common/DocumentHandler.cxx6
8 files changed, 40 insertions, 18 deletions
diff --git a/filter/source/config/fragments/types/calc_WPS_Lotus_Document.xcu b/filter/source/config/fragments/types/calc_WPS_Lotus_Document.xcu
index 0ecc7114c3ed..abea24321e6b 100644
--- a/filter/source/config/fragments/types/calc_WPS_Lotus_Document.xcu
+++ b/filter/source/config/fragments/types/calc_WPS_Lotus_Document.xcu
@@ -18,7 +18,7 @@
<node oor:name="calc_WPS_Lotus_Document" oor:op="replace" >
<prop oor:name="DetectService"><value>com.sun.star.comp.Calc.MSWorksCalcImportFilter</value></prop>
<prop oor:name="URLPattern"/>
- <prop oor:name="Extensions"><value>wk1 wk3</value></prop>
+ <prop oor:name="Extensions"><value>wk1 wk3 wk4 123</value></prop>
<prop oor:name="MediaType"></prop>
<prop oor:name="Preferred"><value>true</value></prop>
<prop oor:name="PreferredFilter"><value>WPS_Lotus_Calc</value></prop>
diff --git a/writerperfect/Library_wpftcalc.mk b/writerperfect/Library_wpftcalc.mk
index 311741d26f5d..c4aecf391d44 100644
--- a/writerperfect/Library_wpftcalc.mk
+++ b/writerperfect/Library_wpftcalc.mk
@@ -33,6 +33,7 @@ $(eval $(call gb_Library_use_libraries,wpftcalc,\
cppu \
cppuhelper \
sal \
+ sfx \
sot \
svx \
tl \
diff --git a/writerperfect/qa/unit/DrawingImportTest.cxx b/writerperfect/qa/unit/DrawingImportTest.cxx
index 433c9a4458c4..661f851d3a0f 100644
--- a/writerperfect/qa/unit/DrawingImportTest.cxx
+++ b/writerperfect/qa/unit/DrawingImportTest.cxx
@@ -120,7 +120,7 @@ void DrawingImportTest::test()
{
using namespace css;
- rtl::Reference<DrawingImportFilter> xFilter{new DrawingImportFilter(m_xContext)};
+ rtl::Reference<DrawingImportFilter> xFilter {new DrawingImportFilter(m_xContext)};
writerperfect::test::WpftLoader aLoader(createDummyInput(), xFilter.get(), "private:factory/sdraw", m_xDesktop, m_xContext);
uno::Reference<drawing::XDrawPagesSupplier> xDoc(aLoader.getDocument(), uno::UNO_QUERY);
diff --git a/writerperfect/qa/unit/PresentationImportTest.cxx b/writerperfect/qa/unit/PresentationImportTest.cxx
index 7c1154ba6cfa..4181d55be85b 100644
--- a/writerperfect/qa/unit/PresentationImportTest.cxx
+++ b/writerperfect/qa/unit/PresentationImportTest.cxx
@@ -120,7 +120,7 @@ void PresentationImportTest::test()
{
using namespace css;
- rtl::Reference<PresentationImportFilter> xFilter{new PresentationImportFilter(m_xContext)};
+ rtl::Reference<PresentationImportFilter> xFilter {new PresentationImportFilter(m_xContext)};
writerperfect::test::WpftLoader aLoader(createDummyInput(), xFilter.get(), "private:factory/simpress", m_xDesktop, m_xContext);
uno::Reference<drawing::XDrawPagesSupplier> xDoc(aLoader.getDocument(), uno::UNO_QUERY);
diff --git a/writerperfect/qa/unit/SpreadsheetImportTest.cxx b/writerperfect/qa/unit/SpreadsheetImportTest.cxx
index 379f57ae1fd5..55d03151924b 100644
--- a/writerperfect/qa/unit/SpreadsheetImportTest.cxx
+++ b/writerperfect/qa/unit/SpreadsheetImportTest.cxx
@@ -115,7 +115,7 @@ void SpreadsheetImportTest::test()
{
using namespace css;
- rtl::Reference<SpreadsheetImportFilter> xFilter{new SpreadsheetImportFilter(m_xContext)};
+ rtl::Reference<SpreadsheetImportFilter> xFilter {new SpreadsheetImportFilter(m_xContext)};
writerperfect::test::WpftLoader aLoader(createDummyInput(), xFilter.get(), "private:factory/scalc", m_xDesktop, m_xContext);
uno::Reference<sheet::XSpreadsheetDocument> xDoc(aLoader.getDocument(), uno::UNO_QUERY);
diff --git a/writerperfect/qa/unit/TextImportTest.cxx b/writerperfect/qa/unit/TextImportTest.cxx
index ba464c6c0ac4..4789d003abec 100644
--- a/writerperfect/qa/unit/TextImportTest.cxx
+++ b/writerperfect/qa/unit/TextImportTest.cxx
@@ -108,7 +108,7 @@ void TextImportTest::test()
{
using namespace css;
- rtl::Reference<TextImportFilter> xFilter{new TextImportFilter(m_xContext)};
+ rtl::Reference<TextImportFilter> xFilter {new TextImportFilter(m_xContext)};
writerperfect::test::WpftLoader aLoader(createDummyInput(), xFilter.get(), "private:factory/swriter", m_xDesktop, m_xContext);
uno::Reference<text::XTextDocument> xDoc(aLoader.getDocument(), uno::UNO_QUERY);
diff --git a/writerperfect/source/calc/MSWorksCalcImportFilter.cxx b/writerperfect/source/calc/MSWorksCalcImportFilter.cxx
index 94a111ec7127..11881202ad28 100644
--- a/writerperfect/source/calc/MSWorksCalcImportFilter.cxx
+++ b/writerperfect/source/calc/MSWorksCalcImportFilter.cxx
@@ -16,6 +16,7 @@
#include <com/sun/star/ucb/XContentAccess.hpp>
#include <comphelper/processfactory.hxx>
#include <cppuhelper/supportsservice.hxx>
+#include <sfx2/passwd.hxx>
#include <tools/urlobj.hxx>
#include <ucbhelper/content.hxx>
@@ -90,7 +91,7 @@ public:
/*! \brief seeks to a offset position, from actual, beginning or ending position
* \return 0 if ok
*/
- int seek(long , librevenge::RVNG_SEEK_TYPE) override
+ int seek(long, librevenge::RVNG_SEEK_TYPE) override
{
return 1;
}
@@ -191,8 +192,10 @@ bool MSWorksCalcImportFilter::doImportDocument(librevenge::RVNGInputStream &rInp
bool needEncoding;
const libwps::WPSConfidence confidence = libwps::WPSDocument::isFileFormatSupported(&rInput, kind, creator, needEncoding);
+ if ((kind != libwps::WPS_SPREADSHEET && kind != libwps::WPS_DATABASE) || (confidence == libwps::WPS_CONFIDENCE_NONE))
+ return false;
std::string fileEncoding("");
- if ((kind == libwps::WPS_SPREADSHEET || kind == libwps::WPS_DATABASE) && (confidence == libwps::WPS_CONFIDENCE_EXCELLENT) && needEncoding)
+ if (needEncoding)
{
OUString title, encoding;
if (creator == libwps::WPS_MSWORKS)
@@ -232,7 +235,25 @@ bool MSWorksCalcImportFilter::doImportDocument(librevenge::RVNGInputStream &rInp
SAL_WARN("writerperfect", "ignoring Exception in MSWorksCalcImportFilter::doImportDocument");
}
}
- return libwps::WPS_OK == libwps::WPSDocument::parse(&rInput, &rGenerator, "", fileEncoding.c_str());
+ OString aUtf8Passwd;
+ if (confidence==libwps::WPS_CONFIDENCE_SUPPORTED_ENCRYPTION)
+ {
+ // try to ask for a password
+ try
+ {
+ ScopedVclPtrInstance< SfxPasswordDialog > aPasswdDlg(nullptr);
+ aPasswdDlg->SetMinLen(1);
+ if (!aPasswdDlg->Execute())
+ return false;
+ OUString aPasswd = aPasswdDlg->GetPassword();
+ aUtf8Passwd = OUStringToOString(aPasswd, RTL_TEXTENCODING_UTF8);
+ }
+ catch (...)
+ {
+ return false;
+ }
+ }
+ return libwps::WPS_OK == libwps::WPSDocument::parse(&rInput, &rGenerator, confidence==libwps::WPS_CONFIDENCE_SUPPORTED_ENCRYPTION ? aUtf8Passwd.getStr() : nullptr, fileEncoding.c_str());
}
//XExtendedFilterDetection
@@ -326,12 +347,12 @@ sal_Bool MSWorksCalcImportFilter::filter(const css::uno::Sequence< css::beans::P
structuredInput.addFile(sWM3Name,"WK3");
structuredInput.addFile(sFM3Name,"FM3");
- // If the file is valid and libwps is at least 0.4.4, doImportDocument will convert it.
- // If libwps is at most 0.4.3, doImportDocument will fail when checking if the file is supported
- // and it is ok to call again doImportDocument with the main input.
- // If the file is corrupted beyond all retrieval, doImportDocument will fail two times :-~
- if (this->doImportDocument(structuredInput, exporter, aDescriptor))
- return true;
+ libwps::WPSKind kind = libwps::WPS_TEXT;
+ libwps::WPSCreator creator;
+ bool needEncoding;
+ const libwps::WPSConfidence confidence = libwps::WPSDocument::isFileFormatSupported(&structuredInput, kind, creator, needEncoding);
+ if (confidence!=libwps::WPS_CONFIDENCE_NONE)
+ return this->doImportDocument(structuredInput, exporter, aDescriptor);
}
}
}
@@ -350,7 +371,7 @@ bool MSWorksCalcImportFilter::doDetectFormat(librevenge::RVNGInputStream &rInput
bool needEncoding;
const libwps::WPSConfidence confidence = libwps::WPSDocument::isFileFormatSupported(&rInput, kind, creator, needEncoding);
- if ((kind == libwps::WPS_SPREADSHEET || kind == libwps::WPS_DATABASE) && confidence == libwps::WPS_CONFIDENCE_EXCELLENT)
+ if ((kind == libwps::WPS_SPREADSHEET || kind == libwps::WPS_DATABASE) && confidence != libwps::WPS_CONFIDENCE_NONE)
{
if (creator == libwps::WPS_MSWORKS)
{
diff --git a/writerperfect/source/common/DocumentHandler.cxx b/writerperfect/source/common/DocumentHandler.cxx
index 29788200b6de..a38f8fc0fcf8 100644
--- a/writerperfect/source/common/DocumentHandler.cxx
+++ b/writerperfect/source/common/DocumentHandler.cxx
@@ -111,10 +111,10 @@ using com::sun::star::xml::sax::XAttributeList;
using com::sun::star::xml::sax::XDocumentHandler;
DocumentHandler::DocumentHandler(Reference < XDocumentHandler > &xHandler) :
- mxHandler( xHandler )
+ mxHandler(xHandler)
{
- if (SvXMLImport *pFastHandler = dynamic_cast<SvXMLImport*>(mxHandler.get()))
- mxHandler.set( new SvXMLLegacyToFastDocHandler( pFastHandler ) );
+ if (SvXMLImport *pFastHandler = dynamic_cast<SvXMLImport *>(mxHandler.get()))
+ mxHandler.set(new SvXMLLegacyToFastDocHandler(pFastHandler));
}
void DocumentHandler::startDocument()