User: vg      
Date: 05/02/21 04:30:16

Modified:
 /dba/connectivity/source/drivers/mozab/mozillasrc/
  MDatabaseMetaDataHelper.cxx

Log:
 INTEGRATION: CWS mozab05 (1.9.46); FILE MERGED
 2005/01/27 11:30:11 windly 1.9.46.5: #i41444# mozab crash on solaris sparc
 2005/01/24 09:47:16 windly 1.9.46.4: #i20088#
 2005/01/24 08:04:59 windly 1.9.46.3: #i20088# fix build bugs on solaris sparc
 2005/01/24 07:49:06 windly 1.9.46.2: #i20088# add thunderbird support
 2005/01/17 05:30:53 windly 1.9.46.1: #i20088# Detect Mozilla Thunderbird 
Address Book: patchs for connectivity

File Changes:

Directory: /dba/connectivity/source/drivers/mozab/mozillasrc/
=============================================================

File [changed]: MDatabaseMetaDataHelper.cxx
Url: 
http://dba.openoffice.org/source/browse/dba/connectivity/source/drivers/mozab/mozillasrc/MDatabaseMetaDataHelper.cxx?r1=1.9&r2=1.10
Delta lines:  +118 -20
----------------------
--- MDatabaseMetaDataHelper.cxx 25 Jun 2004 18:31:28 -0000      1.9
+++ MDatabaseMetaDataHelper.cxx 21 Feb 2005 12:30:12 -0000      1.10
@@ -94,10 +94,28 @@
 #ifndef _CONNECTIVITY_MAB_MOZABHELPER_HXX_
 #include "MNSMozabProxy.hxx"
 #endif
+#ifndef _CONNECTIVITY_MAB_NS_DECLARES_HXX_
+#include <MNSDeclares.hxx>
+#endif
 static ::osl::Mutex    m_aMetaMutex;
 
+#include <osl/diagnose.h>
+#include <com/sun/star/uno/Reference.hxx>
+#include <com/sun/star/uno/Sequence.hxx>
+#include <com/sun/star/uno/XInterface.hpp>
+#include <com/sun/star/uno/Exception.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/beans/Property.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/beans/XPropertySetInfo.hpp>
+#include <com/sun/star/beans/PropertyAttribute.hpp>
+#include <unotools/processfactory.hxx>
+#ifndef _COM_SUN_STAR_MOZILLA_XMOZILLABOOTSTRAP_HPP_
+#include <com/sun/star/mozilla/XMozillaBootstrap.hpp>
+#endif
 
-#if OSL_DEBUG_LEVEL > 1
+
+#if OSL_DEBUG_LEVEL > 0
 # define OUtoCStr( x ) ( ::rtl::OUStringToOString ( (x), 
RTL_TEXTENCODING_ASCII_US).getStr())
 #else /* OSL_DEBUG_LEVEL */
 # define OUtoCStr( x ) ("dummy")
@@ -110,10 +128,11 @@
 
 using namespace connectivity::mozab;
 using namespace connectivity;
-using namespace ::rtl;
 using namespace ::com::sun::star::uno;
+using namespace com::sun::star::lang;
 using namespace ::com::sun::star::beans;
 using namespace ::com::sun::star::sdbc;
+using namespace com::sun::star::mozilla;
 
 namespace connectivity
 {
@@ -123,14 +142,14 @@
     }
 }
 
+extern sal_Bool MNS_Init(sal_Bool& aProfileExists,sal_Int32 nProduct);
+
 // -------------------------------------------------------------------------
 MDatabaseMetaDataHelper::MDatabaseMetaDataHelper()
     : m_bProfileExists(sal_False)
 {
     OSL_TRACE( "IN MDatabaseMetaDataHelper::MDatabaseMetaDataHelper()\n" );
-    sal_Bool rv = MNS_Init(m_bProfileExists);
 
-    OSL_TRACE( "\tMAB_NS_Init returned %s\n", rv?"True":"False" );
     OSL_TRACE( "\tOUT MDatabaseMetaDataHelper::MDatabaseMetaDataHelper()\n" );
 
 }
@@ -140,7 +159,17 @@
     m_aTableNames.clear();
     m_aTableTypes.clear();
 
-    sal_Bool rv = MNS_Term();
+       if (m_bProfileExists)
+       {
+               Reference<XMozillaBootstrap> xMozillaBootstrap;
+               Reference<XMultiServiceFactory> xFactory = 
::comphelper::getProcessServiceFactory();
+               OSL_ENSURE( xFactory.is(), "can't get service factory" );
+ 
+               Reference<XInterface> xInstance = 
xFactory->createInstance(::rtl::OUString( 
RTL_CONSTASCII_USTRINGPARAM("com.sun.star.mozilla.MozillaBootstrap")) );
+               OSL_ENSURE( xInstance.is(), "failed to create instance" );
+               xMozillaBootstrap = 
Reference<XMozillaBootstrap>(xInstance,UNO_QUERY);
+               m_bProfileExists = xMozillaBootstrap->shutdownProfile() > 0;
+       }
 
     OSL_TRACE( "IN/OUT MDatabaseMetaDataHelper::~MDatabaseMetaDataHelper()\n" 
);
 }
@@ -212,10 +241,26 @@
        }
        return rv;
 }
+//
+// nsAbDirectoryDataSource
+//
+#define NS_RDF_CONTRACTID                           "@mozilla.org/rdf"
+#define NS_RDF_DATASOURCE_CONTRACTID                NS_RDF_CONTRACTID 
"/datasource;1"
+#define NS_RDF_DATASOURCE_CONTRACTID_PREFIX NS_RDF_DATASOURCE_CONTRACTID 
"?name="
+#define NS_ABDIRECTORYDATASOURCE_CONTRACTID \
+  NS_RDF_DATASOURCE_CONTRACTID_PREFIX "addressdirectory"
+#define database_uri "@mozilla.org/rdf/datasource;1?name=addressdirectory"
+#define NS_ABDIRECTORYDATASOURCE_CID                   \
+{ /* 0A79186D-F754-11d2-A2DA-001083003D0C */           \
+    0xa79186d, 0xf754, 0x11d2,                         \
+    {0xa2, 0xda, 0x0, 0x10, 0x83, 0x0, 0x3d, 0xc}      \
+}
+
 // -------------------------------------------------------------------------
 // Case where we get a parent uri, and need to list its children.
 static nsresult getSubsFromParent(const rtl::OString& aParent, nsIEnumerator 
**aSubs)
 {
+
        if (aSubs == nsnull) { return NS_ERROR_NULL_POINTER ; }
        *aSubs = nsnull ;
        nsresult retCode = NS_OK ;
@@ -230,6 +275,13 @@
     NS_ENSURE_SUCCESS(retCode, retCode) ;
        nsCOMPtr<nsIRDFResource> rdfResource ;
 
+       nsCOMPtr<nsIRDFDataSource> rdfDirectory ;
+       
+       rtl::OString dir("rdf:addressdirectory");
+       retCode = 
rdfService->GetDataSource(dir.getStr(),getter_AddRefs(rdfDirectory)) ;
+
+       
+
        OSL_TRACE("uri: %s\n", aParent.getStr()) ;
        retCode = 
rdfService->GetResource(nsDependentCString(aParent.getStr(),aParent.getLength()),
 getter_AddRefs(rdfResource)) ;
        NS_ENSURE_SUCCESS(retCode, retCode) ;
@@ -340,10 +392,15 @@
 
 void MDatabaseMetaDataHelper::setAbSpecificError( OConnection* _pCon, sal_Bool 
bGivenURI )
 {
-    if ( ! bGivenURI ) {
+         
+    if ( ! bGivenURI && m_ProductType 
==::com::sun::star::mozilla::MozillaProductType_Mozilla) {
         m_aErrorString = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("No 
Mozilla Addressbook Directories Exist"));
        }
        else {
+               if ( m_ProductType 
==::com::sun::star::mozilla::MozillaProductType_Thunderbird) {
+                       m_aErrorString = ::rtl::OUString( 
RTL_CONSTASCII_USTRINGPARAM("No Thunderbird Addressbook Directories Exist"));
+               }
+               else
                if (_pCon->usesFactory()) {
             if ( _pCon->isOutlookExpress() ) {
                 m_aErrorString = ::rtl::OUString( 
RTL_CONSTASCII_USTRINGPARAM("No Outlook Express Addressbook Exists"));
@@ -403,6 +460,8 @@
     PRBool                  bIsMailList = PR_FALSE;
 
     ::rtl::OUString aTableName;
+       nsCOMPtr<nsIRDFService> rdfService(do_GetService(kRDFServiceCID, &rv)) ;
+    NS_ENSURE_SUCCESS(rv, rv) ;
 
     nmap->reset();
     do {
@@ -436,6 +495,10 @@
         OSL_TRACE("TableName = >%s<\n", OUtoCStr( aTableName ) );
 
         rv = nmap->add( aTableName, subDirectory);
+               nsCOMPtr<nsIRDFResource> rdfResource = 
do_QueryInterface(subDirectory, &rv) ;
+               if (!NS_FAILED(rv))
+                       rdfService->UnregisterResource(rdfResource);
+
         if (!NS_FAILED(rv)) //failed means we have added this directory
         {
             //map mailing lists as views
@@ -460,8 +523,8 @@
                                                    ::std::vector< 
::rtl::OUString >&   _rTypes)
 {
     sal_Bool                                                                   
bGivenURI;
-    rtl::OUString                                                              
sAbURI;
-    OString                                                                    
        sAbURIString;
+    ::rtl::OUString                                                            
sAbURI;
+    ::rtl::OString                                                             
                sAbURIString;
 
     OSL_TRACE( "IN MDatabaseMetaDataHelper::getTableStrings( 0x%08X, %s)\n", 
_pCon, _pCon->getForceLoadTables()?"True":"False" );
 
@@ -496,6 +559,18 @@
     nsresult rv = NS_OK;
     nsCOMPtr<nsIEnumerator> subDirectories;
        sal_Int32 nDirectoryType=0;
+       m_ProductType=::com::sun::star::mozilla::MozillaProductType_Mozilla;
+       m_ProfileName = _pCon->getMozProfile();
+
+
+       if (_pCon->isThunderbird())
+       {
+               if (!bGivenURI)
+                       sAbURIString = s_pADDRESSBOOKROOTDIR;
+               nDirectoryType = SDBCAddress::ThunderBird;
+               m_ProductType = 
::com::sun::star::mozilla::MozillaProductType_Thunderbird;
+       }
+       else
        if (!bGivenURI) {
                sAbURIString = s_pADDRESSBOOKROOTDIR;
                nDirectoryType = SDBCAddress::Mozilla;
@@ -514,7 +589,30 @@
                        }
                }
        }
-       if (nDirectoryType == SDBCAddress::Mozilla && !m_bProfileExists)
+
+       if (!m_bProfileExists)
+       {
+               Reference<XMozillaBootstrap> xMozillaBootstrap;
+               Reference<XMultiServiceFactory> xFactory = 
::comphelper::getProcessServiceFactory();
+               OSL_ENSURE( xFactory.is(), "can't get service factory" );
+               Reference<XInterface> xInstance = 
xFactory->createInstance(::rtl::OUString( 
RTL_CONSTASCII_USTRINGPARAM("com.sun.star.mozilla.MozillaBootstrap")) );
+               OSL_ENSURE( xInstance.is(), "failed to create instance" );
+               xMozillaBootstrap = 
Reference<XMozillaBootstrap>(xInstance,UNO_QUERY);
+               m_bProfileExists = sal_False;
+               //If there are no profiles for this product
+               //Or the given profile name does not found
+               //We will reaise a "No Addressbook Directories Exist" error
+               if ( xMozillaBootstrap->getProfileCount(m_ProductType) == 0 ||
+                       ( m_ProfileName.getLength() && 
!(xMozillaBootstrap->getProfilePath(m_ProductType,m_ProfileName).getLength())))
+                       m_bProfileExists = sal_False;
+               else
+                       if 
(xMozillaBootstrap->bootupProfile(m_ProductType,m_ProfileName) > 0)
+                               m_bProfileExists = sal_True;
+               
+       }
+       if ( ( nDirectoryType == SDBCAddress::Mozilla 
+                || m_ProductType 
==::com::sun::star::mozilla::MozillaProductType_Thunderbird) 
+               && !m_bProfileExists)
        {
         setAbSpecificError( _pCon, bGivenURI );
                return sal_False;
@@ -535,7 +633,7 @@
        args.arg4 = (void*)&m_aTableNames;
        args.arg5 = (void*)&m_aTableTypes;
        args.arg6 = (void*)&m_aErrorString;
-       rv = xMProxy.StartProxy(&args); 
+       rv = xMProxy.StartProxy(&args,m_ProductType,m_ProfileName);     
 
        if (NS_FAILED(rv))
        {
@@ -626,13 +724,13 @@
 
     sal_Int32 pos = sAbURI.indexOf( MOZ_SCHEMA );
     if ( pos != -1 ) {
-        sAbURI = sAbURI.replaceAt (pos, strlen( MOZ_SCHEMA ), 
OString(LDAP_SCHEMA) );
+        sAbURI = sAbURI.replaceAt (pos, strlen( MOZ_SCHEMA ), 
::rtl::OString(LDAP_SCHEMA) );
     }
 
     pos = sAbURI.indexOf( QUERY_CHAR );
     if ( pos != -1 ) {
         sal_Int32 len =  sAbURI.getLength();
-        sAbURI = sAbURI.replaceAt( pos, len - pos, OString("") );
+        sAbURI = sAbURI.replaceAt( pos, len - pos, ::rtl::OString("") );
     }
     const sal_Unicode* bindDN=nsnull;
     if (sAbBindDN.getLength() != 0)
@@ -649,14 +747,14 @@
        args.arg4 = (void*)&useSSL;
 
        MNSMozabProxy xMProxy;
-       if (xMProxy.StartProxy(&args))  //Init LDAP
+       if (xMProxy.StartProxy(&args,m_ProductType,::rtl::OUString()))  //Init 
LDAP,pass OUString() to StarProxy to ignore profile switch
        {
                args.funcIndex = ProxiedFunc::FUNC_TESTLDAP_IS_LDAP_CONNECTED;
            TimeValue               timeValue = { 1, 0 };  // 1 * 60 Seconds 
timeout
                sal_Int32                               times=0;
                while( times < 60 )
                {
-                       rv = xMProxy.StartProxy(&args); //check whether ldap is 
connect
+                       rv = 
xMProxy.StartProxy(&args,m_ProductType,::rtl::OUString()); //check whether ldap 
is connect
                        if (!rv )
                        {
                                osl_waitThread(&timeValue);
@@ -666,7 +764,7 @@
                                break;
                }
                args.funcIndex = ProxiedFunc::FUNC_TESTLDAP_IS_LDAP_CONNECTED;
-               rv = xMProxy.StartProxy(&args); //release resource
+               rv = xMProxy.StartProxy(&args,m_ProductType,::rtl::OUString()); 
//release resource
     }
        return rv;
 }
@@ -693,7 +791,7 @@
        args.funcIndex = ProxiedFunc::FUNC_NEW_ADDRESS_BOOK;
        args.argCount = 1;
        args.arg1 = (void*)&aTableName;
-       rv = xMProxy.StartProxy(&args); 
+       rv = xMProxy.StartProxy(&args,m_ProductType,m_ProfileName);     
 
        _pCon->setForceLoadTables(sal_True); //force reload table next time
        if (rv == NS_ERROR_FILE_IS_LOCKED)
@@ -709,7 +807,7 @@
 }
 nsresult NewAddressBook(const ::rtl::OUString * aName)
 {
-    if (isProfileLocked())
+    if (isProfileLocked(NULL))
         return NS_ERROR_FILE_IS_LOCKED;
     nsresult rv;
     nsCOMPtr<nsIAbDirectoryProperties> aProperties = 
do_CreateInstance(NS_ABDIRECTORYPROPERTIES_CONTRACTID, &rv);




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to