[Libreoffice-commits] core.git: embeddedobj/source

Miklos Vajna vmiklos at collabora.co.uk
Mon May 4 07:15:44 PDT 2015


 embeddedobj/source/commonembedding/persistence.cxx |    4 ++++
 embeddedobj/source/commonembedding/xfactory.cxx    |    6 ++++++
 embeddedobj/source/general/xcreator.cxx            |    7 +++++++
 3 files changed, 17 insertions(+)

New commits:
commit ed85e11a1bb2e8913e5efc9257ff74bf7543a1df
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Mon May 4 15:50:02 2015 +0200

    embeddedobj: allow creating objects lacking a FileFormatVersion=6800 filter
    
    dbaccess::ODatabaseDocument::loadFromStorage() is still not implemented,
    though.
    
    Change-Id: I1be11f2a2274f67dd0a11f96a718394d5f72605f

diff --git a/embeddedobj/source/commonembedding/persistence.cxx b/embeddedobj/source/commonembedding/persistence.cxx
index b2cd8ec..10a4485 100644
--- a/embeddedobj/source/commonembedding/persistence.cxx
+++ b/embeddedobj/source/commonembedding/persistence.cxx
@@ -447,6 +447,10 @@ OUString OCommonEmbeddedObject::GetFilterName( sal_Int32 nVersion ) const
         try {
             ::comphelper::MimeConfigurationHelper aHelper( m_xContext );
             aFilterName = aHelper.GetDefaultFilterFromServiceName( GetDocumentServiceName(), nVersion );
+
+            // If no filter is found, fall back to the FileFormatVersion=6200 filter, Base only has that.
+            if (aFilterName.isEmpty() && nVersion == SOFFICE_FILEFORMAT_CURRENT)
+                aFilterName = aHelper.GetDefaultFilterFromServiceName(GetDocumentServiceName(), SOFFICE_FILEFORMAT_60);
         } catch( const uno::Exception& )
         {}
     }
diff --git a/embeddedobj/source/commonembedding/xfactory.cxx b/embeddedobj/source/commonembedding/xfactory.cxx
index 42ddfb34..9a6477d 100644
--- a/embeddedobj/source/commonembedding/xfactory.cxx
+++ b/embeddedobj/source/commonembedding/xfactory.cxx
@@ -26,6 +26,7 @@
 
 #include <comphelper/processfactory.hxx>
 #include <cppuhelper/supportsservice.hxx>
+#include <comphelper/documentconstants.hxx>
 
 #include "xfactory.hxx"
 #include "commonembobj.hxx"
@@ -114,6 +115,11 @@ uno::Reference< uno::XInterface > SAL_CALL OOoEmbeddedObjectFactory::createInsta
         xSubStorage = uno::Reference< embed::XStorage >();
 
         uno::Sequence< beans::NamedValue > aObject = m_aConfigHelper.GetObjectPropsByMediaType( aMediaType );
+
+        // If the sequence is empty, fall back to the FileFormatVersion=6200 filter, Base only has that.
+        if (!aObject.hasElements() && aMediaType == MIMETYPE_OASIS_OPENDOCUMENT_DATABASE_ASCII)
+            aObject = m_aConfigHelper.GetObjectPropsByMediaType(MIMETYPE_VND_SUN_XML_BASE_ASCII);
+
         if ( !aObject.getLength() )
             throw io::IOException(); // unexpected mimetype of the storage
 
diff --git a/embeddedobj/source/general/xcreator.cxx b/embeddedobj/source/general/xcreator.cxx
index 4f301d4..8ccff0c 100644
--- a/embeddedobj/source/general/xcreator.cxx
+++ b/embeddedobj/source/general/xcreator.cxx
@@ -31,6 +31,7 @@
 
 #include <comphelper/processfactory.hxx>
 #include <cppuhelper/supportsservice.hxx>
+#include <comphelper/documentconstants.hxx>
 
 #include <xcreator.hxx>
 #include <dummyobject.hxx>
@@ -200,8 +201,14 @@ uno::Reference< uno::XInterface > SAL_CALL UNOEmbeddedObjectCreator::createInsta
 
     OSL_ENSURE( !aMediaType.isEmpty(), "No media type is specified for the object!" );
     if ( !aMediaType.isEmpty() && aEmbedFactory.isEmpty() )
+    {
         aEmbedFactory = m_aConfigHelper.GetFactoryNameByMediaType( aMediaType );
 
+        // If no factory is found, fall back to the FileFormatVersion=6200 filter, Base only has that.
+        if (aEmbedFactory.isEmpty() && aMediaType == MIMETYPE_OASIS_OPENDOCUMENT_DATABASE_ASCII)
+            aEmbedFactory = m_aConfigHelper.GetFactoryNameByMediaType(MIMETYPE_VND_SUN_XML_BASE_ASCII);
+    }
+
     if ( !aEmbedFactory.isEmpty() )
     {
         uno::Reference< uno::XInterface > xFact = m_xContext->getServiceManager()->createInstanceWithContext(aEmbedFactory, m_xContext);


More information about the Libreoffice-commits mailing list