19874e4f6SJuergen Schmidt /************************************************************** 29874e4f6SJuergen Schmidt * 39874e4f6SJuergen Schmidt * Licensed to the Apache Software Foundation (ASF) under one 49874e4f6SJuergen Schmidt * or more contributor license agreements. See the NOTICE file 59874e4f6SJuergen Schmidt * distributed with this work for additional information 69874e4f6SJuergen Schmidt * regarding copyright ownership. The ASF licenses this file 79874e4f6SJuergen Schmidt * to you under the Apache License, Version 2.0 (the 89874e4f6SJuergen Schmidt * "License"); you may not use this file except in compliance 99874e4f6SJuergen Schmidt * with the License. You may obtain a copy of the License at 109874e4f6SJuergen Schmidt * 119874e4f6SJuergen Schmidt * http://www.apache.org/licenses/LICENSE-2.0 129874e4f6SJuergen Schmidt * 139874e4f6SJuergen Schmidt * Unless required by applicable law or agreed to in writing, 149874e4f6SJuergen Schmidt * software distributed under the License is distributed on an 159874e4f6SJuergen Schmidt * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 169874e4f6SJuergen Schmidt * KIND, either express or implied. See the License for the 179874e4f6SJuergen Schmidt * specific language governing permissions and limitations 189874e4f6SJuergen Schmidt * under the License. 199874e4f6SJuergen Schmidt * 209874e4f6SJuergen Schmidt *************************************************************/ 219874e4f6SJuergen Schmidt 229874e4f6SJuergen Schmidt // MARKER(update_precomp.py): autogen include statement, do not remove 239874e4f6SJuergen Schmidt #include "precompiled_extensions.hxx" 249874e4f6SJuergen Schmidt #include "MNSProfileDiscover.hxx" 259874e4f6SJuergen Schmidt 269874e4f6SJuergen Schmidt // Registry Keys 279874e4f6SJuergen Schmidt 289874e4f6SJuergen Schmidt static ::rtl::OUString szProfileSubtreeString=::rtl::OUString::createFromAscii("Profiles"); 299874e4f6SJuergen Schmidt static ::rtl::OUString szCurrentProfileString= ::rtl::OUString::createFromAscii("CurrentProfile"); 309874e4f6SJuergen Schmidt static ::rtl::OUString szDirectoryString =::rtl::OUString::createFromAscii("directory"); 319874e4f6SJuergen Schmidt 329874e4f6SJuergen Schmidt #ifndef MAXPATHLEN 339874e4f6SJuergen Schmidt #define MAXPATHLEN 1024 349874e4f6SJuergen Schmidt #endif 359874e4f6SJuergen Schmidt #include <MNSFolders.hxx> 369874e4f6SJuergen Schmidt #include <MNSINIParser.hxx> 379874e4f6SJuergen Schmidt 389874e4f6SJuergen Schmidt namespace connectivity 399874e4f6SJuergen Schmidt { 409874e4f6SJuergen Schmidt namespace mozab 419874e4f6SJuergen Schmidt { ProfileStruct(MozillaProductType aProduct,::rtl::OUString aProfileName,const::rtl::OUString & aProfilePath)429874e4f6SJuergen Schmidt ProfileStruct::ProfileStruct(MozillaProductType aProduct,::rtl::OUString aProfileName, 439874e4f6SJuergen Schmidt const ::rtl::OUString& aProfilePath) 449874e4f6SJuergen Schmidt { 459874e4f6SJuergen Schmidt product=aProduct; 469874e4f6SJuergen Schmidt profileName = aProfileName; 479874e4f6SJuergen Schmidt profilePath = aProfilePath; 489874e4f6SJuergen Schmidt } getProfilePath()499874e4f6SJuergen Schmidt ::rtl::OUString ProfileStruct::getProfilePath() 509874e4f6SJuergen Schmidt { 519874e4f6SJuergen Schmidt return profilePath; 529874e4f6SJuergen Schmidt } 539874e4f6SJuergen Schmidt ~ProfileAccess()549874e4f6SJuergen Schmidt ProfileAccess::~ProfileAccess() 559874e4f6SJuergen Schmidt { 569874e4f6SJuergen Schmidt } ProfileAccess()579874e4f6SJuergen Schmidt ProfileAccess::ProfileAccess() 589874e4f6SJuergen Schmidt { 599874e4f6SJuergen Schmidt LoadProductsInfo(); 609874e4f6SJuergen Schmidt } 619874e4f6SJuergen Schmidt LoadProductsInfo()629874e4f6SJuergen Schmidt sal_Int32 ProfileAccess::LoadProductsInfo() 639874e4f6SJuergen Schmidt { 649874e4f6SJuergen Schmidt //load SeaMonkey 2 profiles to m_ProductProfileList 659874e4f6SJuergen Schmidt sal_Int32 count = LoadXPToolkitProfiles(MozillaProductType_Mozilla); 669874e4f6SJuergen Schmidt 679874e4f6SJuergen Schmidt //load thunderbird profiles to m_ProductProfileList 689874e4f6SJuergen Schmidt count += LoadXPToolkitProfiles(MozillaProductType_Thunderbird); 699874e4f6SJuergen Schmidt 709874e4f6SJuergen Schmidt //load firefox profiles to m_ProductProfileList 719874e4f6SJuergen Schmidt //firefox profile does not containt address book, but maybe others need them 729874e4f6SJuergen Schmidt count += LoadXPToolkitProfiles(MozillaProductType_Firefox); 739874e4f6SJuergen Schmidt return count; 749874e4f6SJuergen Schmidt } 759874e4f6SJuergen Schmidt //Thunderbird and firefox profiles are saved in profiles.ini LoadXPToolkitProfiles(MozillaProductType product)769874e4f6SJuergen Schmidt sal_Int32 ProfileAccess::LoadXPToolkitProfiles(MozillaProductType product) 779874e4f6SJuergen Schmidt { 789874e4f6SJuergen Schmidt sal_Int32 index=product; 799874e4f6SJuergen Schmidt ProductStruct &m_Product = m_ProductProfileList[index]; 809874e4f6SJuergen Schmidt 819874e4f6SJuergen Schmidt ::rtl::OUString regDir = getRegistryDir(product); 829874e4f6SJuergen Schmidt ::rtl::OUString profilesIni( regDir ); 839874e4f6SJuergen Schmidt profilesIni += ::rtl::OUString::createFromAscii( "profiles.ini" ); 849874e4f6SJuergen Schmidt IniParser parser( profilesIni ); 859874e4f6SJuergen Schmidt IniSectionMap &mAllSection = *(parser.getAllSection()); 869874e4f6SJuergen Schmidt 879874e4f6SJuergen Schmidt IniSectionMap::iterator iBegin = mAllSection.begin(); 889874e4f6SJuergen Schmidt IniSectionMap::iterator iEnd = mAllSection.end(); 899874e4f6SJuergen Schmidt for(;iBegin != iEnd;iBegin++) 909874e4f6SJuergen Schmidt { 919874e4f6SJuergen Schmidt ini_Section *aSection = &(*iBegin).second; 929874e4f6SJuergen Schmidt ::rtl::OUString profileName; 939874e4f6SJuergen Schmidt ::rtl::OUString profilePath; 949874e4f6SJuergen Schmidt ::rtl::OUString sIsRelative; 959874e4f6SJuergen Schmidt ::rtl::OUString sIsDefault; 969874e4f6SJuergen Schmidt 979874e4f6SJuergen Schmidt for(NameValueList::iterator itor=aSection->lList.begin(); 989874e4f6SJuergen Schmidt itor != aSection->lList.end(); 999874e4f6SJuergen Schmidt itor++) 1009874e4f6SJuergen Schmidt { 1019874e4f6SJuergen Schmidt struct ini_NameValue * aValue = &(*itor); 1029874e4f6SJuergen Schmidt if (aValue->sName.equals(::rtl::OUString::createFromAscii("Name"))) 1039874e4f6SJuergen Schmidt { 1049874e4f6SJuergen Schmidt profileName = aValue->sValue; 1059874e4f6SJuergen Schmidt } 1069874e4f6SJuergen Schmidt else if (aValue->sName.equals(::rtl::OUString::createFromAscii("IsRelative"))) 1079874e4f6SJuergen Schmidt { 1089874e4f6SJuergen Schmidt sIsRelative = aValue->sValue; 1099874e4f6SJuergen Schmidt } 1109874e4f6SJuergen Schmidt else if (aValue->sName.equals(::rtl::OUString::createFromAscii("Path"))) 1119874e4f6SJuergen Schmidt { 1129874e4f6SJuergen Schmidt profilePath = aValue->sValue; 1139874e4f6SJuergen Schmidt } 1149874e4f6SJuergen Schmidt else if (aValue->sName.equals(::rtl::OUString::createFromAscii("Default"))) 1159874e4f6SJuergen Schmidt { 1169874e4f6SJuergen Schmidt sIsDefault = aValue->sValue; 1179874e4f6SJuergen Schmidt } 1189874e4f6SJuergen Schmidt } 1199874e4f6SJuergen Schmidt if (profileName.getLength() != 0 || profilePath.getLength() != 0) 1209874e4f6SJuergen Schmidt { 1219874e4f6SJuergen Schmidt sal_Int32 isRelative = 0; 1229874e4f6SJuergen Schmidt if (sIsRelative.getLength() != 0) 1239874e4f6SJuergen Schmidt { 1249874e4f6SJuergen Schmidt isRelative = sIsRelative.toInt32(); 1259874e4f6SJuergen Schmidt } 126*f27fad25SDamjan Jovanovic if (isRelative) 127*f27fad25SDamjan Jovanovic { 128*f27fad25SDamjan Jovanovic // Make it absolute 129*f27fad25SDamjan Jovanovic profilePath = regDir + profilePath; 130*f27fad25SDamjan Jovanovic } 1319874e4f6SJuergen Schmidt 1329874e4f6SJuergen Schmidt ProfileStruct* profileItem = new ProfileStruct(product,profileName, 133*f27fad25SDamjan Jovanovic profilePath); 1349874e4f6SJuergen Schmidt m_Product.mProfileList[profileName] = profileItem; 1359874e4f6SJuergen Schmidt 1369874e4f6SJuergen Schmidt sal_Int32 isDefault = 0; 1379874e4f6SJuergen Schmidt if (sIsDefault.getLength() != 0) 1389874e4f6SJuergen Schmidt { 1399874e4f6SJuergen Schmidt isDefault = sIsDefault.toInt32(); 1409874e4f6SJuergen Schmidt } 1419874e4f6SJuergen Schmidt if (isDefault) 1429874e4f6SJuergen Schmidt m_Product.mCurrentProfileName = profileName; 1439874e4f6SJuergen Schmidt 1449874e4f6SJuergen Schmidt } 1459874e4f6SJuergen Schmidt 1469874e4f6SJuergen Schmidt } 1479874e4f6SJuergen Schmidt return static_cast< ::sal_Int32 >(m_Product.mProfileList.size()); 1489874e4f6SJuergen Schmidt } 1499874e4f6SJuergen Schmidt getProfilePath(::com::sun::star::mozilla::MozillaProductType product,const::rtl::OUString & profileName)1509874e4f6SJuergen Schmidt ::rtl::OUString ProfileAccess::getProfilePath( ::com::sun::star::mozilla::MozillaProductType product, const ::rtl::OUString& profileName ) throw (::com::sun::star::uno::RuntimeException) 1519874e4f6SJuergen Schmidt { 1529874e4f6SJuergen Schmidt sal_Int32 index=product; 1539874e4f6SJuergen Schmidt ProductStruct &m_Product = m_ProductProfileList[index]; 1549874e4f6SJuergen Schmidt if (!m_Product.mProfileList.size() || m_Product.mProfileList.find(profileName) == m_Product.mProfileList.end()) 1559874e4f6SJuergen Schmidt { 1569874e4f6SJuergen Schmidt //Profile not found 1579874e4f6SJuergen Schmidt return ::rtl::OUString(); 1589874e4f6SJuergen Schmidt } 1599874e4f6SJuergen Schmidt else 1609874e4f6SJuergen Schmidt return m_Product.mProfileList[profileName]->getProfilePath(); 1619874e4f6SJuergen Schmidt } 1629874e4f6SJuergen Schmidt getProfileCount(::com::sun::star::mozilla::MozillaProductType product)1639874e4f6SJuergen Schmidt ::sal_Int32 ProfileAccess::getProfileCount( ::com::sun::star::mozilla::MozillaProductType product) throw (::com::sun::star::uno::RuntimeException) 1649874e4f6SJuergen Schmidt { 1659874e4f6SJuergen Schmidt sal_Int32 index=product; 1669874e4f6SJuergen Schmidt ProductStruct &m_Product = m_ProductProfileList[index]; 1679874e4f6SJuergen Schmidt return static_cast< ::sal_Int32 >(m_Product.mProfileList.size()); 1689874e4f6SJuergen Schmidt } getProfileList(::com::sun::star::mozilla::MozillaProductType product,::com::sun::star::uno::Sequence<::rtl::OUString> & list)1699874e4f6SJuergen Schmidt ::sal_Int32 ProfileAccess::getProfileList( ::com::sun::star::mozilla::MozillaProductType product, ::com::sun::star::uno::Sequence< ::rtl::OUString >& list ) throw (::com::sun::star::uno::RuntimeException) 1709874e4f6SJuergen Schmidt { 1719874e4f6SJuergen Schmidt sal_Int32 index=product; 1729874e4f6SJuergen Schmidt ProductStruct &m_Product = m_ProductProfileList[index]; 1739874e4f6SJuergen Schmidt list.realloc(static_cast<sal_Int32>(m_Product.mProfileList.size())); 1749874e4f6SJuergen Schmidt sal_Int32 i=0; 1759874e4f6SJuergen Schmidt for(ProfileList::iterator itor=m_Product.mProfileList.begin(); 1769874e4f6SJuergen Schmidt itor != m_Product.mProfileList.end(); 1779874e4f6SJuergen Schmidt itor++) 1789874e4f6SJuergen Schmidt { 1799874e4f6SJuergen Schmidt ProfileStruct * aProfile = (*itor).second; 1809874e4f6SJuergen Schmidt list[i] = aProfile->getProfileName(); 1819874e4f6SJuergen Schmidt i++; 1829874e4f6SJuergen Schmidt } 1839874e4f6SJuergen Schmidt 1849874e4f6SJuergen Schmidt return static_cast< ::sal_Int32 >(m_Product.mProfileList.size()); 1859874e4f6SJuergen Schmidt } 1869874e4f6SJuergen Schmidt getDefaultProfile(::com::sun::star::mozilla::MozillaProductType product)1879874e4f6SJuergen Schmidt ::rtl::OUString ProfileAccess::getDefaultProfile( ::com::sun::star::mozilla::MozillaProductType product ) throw (::com::sun::star::uno::RuntimeException) 1889874e4f6SJuergen Schmidt { 1899874e4f6SJuergen Schmidt sal_Int32 index=product; 1909874e4f6SJuergen Schmidt ProductStruct &m_Product = m_ProductProfileList[index]; 1919874e4f6SJuergen Schmidt if (m_Product.mCurrentProfileName.getLength() != 0) 1929874e4f6SJuergen Schmidt { 1939874e4f6SJuergen Schmidt //default profile setted in mozilla registry 1949874e4f6SJuergen Schmidt return m_Product.mCurrentProfileName; 1959874e4f6SJuergen Schmidt } 1969874e4f6SJuergen Schmidt if (m_Product.mProfileList.size() == 0) 1979874e4f6SJuergen Schmidt { 1989874e4f6SJuergen Schmidt //there are not any profiles 1999874e4f6SJuergen Schmidt return ::rtl::OUString(); 2009874e4f6SJuergen Schmidt } 2019874e4f6SJuergen Schmidt ProfileStruct * aProfile = (*m_Product.mProfileList.begin()).second; 2029874e4f6SJuergen Schmidt return aProfile->getProfileName(); 2039874e4f6SJuergen Schmidt } 2049874e4f6SJuergen Schmidt isProfileLocked(::com::sun::star::mozilla::MozillaProductType product,const::rtl::OUString & profileName)2059874e4f6SJuergen Schmidt ::sal_Bool ProfileAccess::isProfileLocked( ::com::sun::star::mozilla::MozillaProductType product, const ::rtl::OUString& profileName ) throw (::com::sun::star::uno::RuntimeException) 2069874e4f6SJuergen Schmidt { 2079874e4f6SJuergen Schmidt (void)product; /* avoid warning about unused parameter */ 2089874e4f6SJuergen Schmidt (void)profileName; /* avoid warning about unused parameter */ 2099874e4f6SJuergen Schmidt return sal_True; 2109874e4f6SJuergen Schmidt } 2119874e4f6SJuergen Schmidt getProfileExists(::com::sun::star::mozilla::MozillaProductType product,const::rtl::OUString & profileName)2129874e4f6SJuergen Schmidt ::sal_Bool ProfileAccess::getProfileExists( ::com::sun::star::mozilla::MozillaProductType product, const ::rtl::OUString& profileName ) throw (::com::sun::star::uno::RuntimeException) 2139874e4f6SJuergen Schmidt { 2149874e4f6SJuergen Schmidt sal_Int32 index=product; 2159874e4f6SJuergen Schmidt ProductStruct &m_Product = m_ProductProfileList[index]; 2169874e4f6SJuergen Schmidt if (!m_Product.mProfileList.size() || m_Product.mProfileList.find(profileName) == m_Product.mProfileList.end()) 2179874e4f6SJuergen Schmidt { 2189874e4f6SJuergen Schmidt return sal_False; 2199874e4f6SJuergen Schmidt } 2209874e4f6SJuergen Schmidt else 2219874e4f6SJuergen Schmidt return sal_True; 2229874e4f6SJuergen Schmidt } 2239874e4f6SJuergen Schmidt } 2249874e4f6SJuergen Schmidt } 2259874e4f6SJuergen Schmidt 2269874e4f6SJuergen Schmidt 227