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]
