/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_extensions.hxx" #include "MNSProfileDiscover.hxx" // Registry Keys static ::rtl::OUString szProfileSubtreeString=::rtl::OUString::createFromAscii("Profiles"); static ::rtl::OUString szCurrentProfileString= ::rtl::OUString::createFromAscii("CurrentProfile"); static ::rtl::OUString szDirectoryString =::rtl::OUString::createFromAscii("directory"); #ifndef MAXPATHLEN #define MAXPATHLEN 1024 #endif #include #include namespace connectivity { namespace mozab { ProfileStruct::ProfileStruct(MozillaProductType aProduct,::rtl::OUString aProfileName, const ::rtl::OUString& aProfilePath) { product=aProduct; profileName = aProfileName; profilePath = aProfilePath; } ::rtl::OUString ProfileStruct::getProfilePath() { return profilePath; } ProfileAccess::~ProfileAccess() { } ProfileAccess::ProfileAccess() { LoadProductsInfo(); } sal_Int32 ProfileAccess::LoadProductsInfo() { //load SeaMonkey 2 profiles to m_ProductProfileList sal_Int32 count = LoadXPToolkitProfiles(MozillaProductType_Mozilla); //load thunderbird profiles to m_ProductProfileList count += LoadXPToolkitProfiles(MozillaProductType_Thunderbird); //load firefox profiles to m_ProductProfileList //firefox profile does not containt address book, but maybe others need them count += LoadXPToolkitProfiles(MozillaProductType_Firefox); return count; } //Thunderbird and firefox profiles are saved in profiles.ini sal_Int32 ProfileAccess::LoadXPToolkitProfiles(MozillaProductType product) { sal_Int32 index=product; ProductStruct &m_Product = m_ProductProfileList[index]; ::rtl::OUString regDir = getRegistryDir(product); ::rtl::OUString profilesIni( regDir ); profilesIni += ::rtl::OUString::createFromAscii( "profiles.ini" ); IniParser parser( profilesIni ); IniSectionMap &mAllSection = *(parser.getAllSection()); IniSectionMap::iterator iBegin = mAllSection.begin(); IniSectionMap::iterator iEnd = mAllSection.end(); for(;iBegin != iEnd;iBegin++) { ini_Section *aSection = &(*iBegin).second; ::rtl::OUString profileName; ::rtl::OUString profilePath; ::rtl::OUString sIsRelative; ::rtl::OUString sIsDefault; for(NameValueList::iterator itor=aSection->lList.begin(); itor != aSection->lList.end(); itor++) { struct ini_NameValue * aValue = &(*itor); if (aValue->sName.equals(::rtl::OUString::createFromAscii("Name"))) { profileName = aValue->sValue; } else if (aValue->sName.equals(::rtl::OUString::createFromAscii("IsRelative"))) { sIsRelative = aValue->sValue; } else if (aValue->sName.equals(::rtl::OUString::createFromAscii("Path"))) { profilePath = aValue->sValue; } else if (aValue->sName.equals(::rtl::OUString::createFromAscii("Default"))) { sIsDefault = aValue->sValue; } } if (profileName.getLength() != 0 || profilePath.getLength() != 0) { sal_Int32 isRelative = 0; if (sIsRelative.getLength() != 0) { isRelative = sIsRelative.toInt32(); } if (isRelative) { // Make it absolute profilePath = regDir + profilePath; } ProfileStruct* profileItem = new ProfileStruct(product,profileName, profilePath); m_Product.mProfileList[profileName] = profileItem; sal_Int32 isDefault = 0; if (sIsDefault.getLength() != 0) { isDefault = sIsDefault.toInt32(); } if (isDefault) m_Product.mCurrentProfileName = profileName; } } return static_cast< ::sal_Int32 >(m_Product.mProfileList.size()); } ::rtl::OUString ProfileAccess::getProfilePath( ::com::sun::star::mozilla::MozillaProductType product, const ::rtl::OUString& profileName ) throw (::com::sun::star::uno::RuntimeException) { sal_Int32 index=product; ProductStruct &m_Product = m_ProductProfileList[index]; if (!m_Product.mProfileList.size() || m_Product.mProfileList.find(profileName) == m_Product.mProfileList.end()) { //Profile not found return ::rtl::OUString(); } else return m_Product.mProfileList[profileName]->getProfilePath(); } ::sal_Int32 ProfileAccess::getProfileCount( ::com::sun::star::mozilla::MozillaProductType product) throw (::com::sun::star::uno::RuntimeException) { sal_Int32 index=product; ProductStruct &m_Product = m_ProductProfileList[index]; return static_cast< ::sal_Int32 >(m_Product.mProfileList.size()); } ::sal_Int32 ProfileAccess::getProfileList( ::com::sun::star::mozilla::MozillaProductType product, ::com::sun::star::uno::Sequence< ::rtl::OUString >& list ) throw (::com::sun::star::uno::RuntimeException) { sal_Int32 index=product; ProductStruct &m_Product = m_ProductProfileList[index]; list.realloc(static_cast(m_Product.mProfileList.size())); sal_Int32 i=0; for(ProfileList::iterator itor=m_Product.mProfileList.begin(); itor != m_Product.mProfileList.end(); itor++) { ProfileStruct * aProfile = (*itor).second; list[i] = aProfile->getProfileName(); i++; } return static_cast< ::sal_Int32 >(m_Product.mProfileList.size()); } ::rtl::OUString ProfileAccess::getDefaultProfile( ::com::sun::star::mozilla::MozillaProductType product ) throw (::com::sun::star::uno::RuntimeException) { sal_Int32 index=product; ProductStruct &m_Product = m_ProductProfileList[index]; if (m_Product.mCurrentProfileName.getLength() != 0) { //default profile set in mozilla registry return m_Product.mCurrentProfileName; } if (m_Product.mProfileList.size() == 0) { //there are not any profiles return ::rtl::OUString(); } ProfileStruct * aProfile = (*m_Product.mProfileList.begin()).second; return aProfile->getProfileName(); } ::sal_Bool ProfileAccess::isProfileLocked( ::com::sun::star::mozilla::MozillaProductType product, const ::rtl::OUString& profileName ) throw (::com::sun::star::uno::RuntimeException) { (void)product; /* avoid warning about unused parameter */ (void)profileName; /* avoid warning about unused parameter */ return sal_True; } ::sal_Bool ProfileAccess::getProfileExists( ::com::sun::star::mozilla::MozillaProductType product, const ::rtl::OUString& profileName ) throw (::com::sun::star::uno::RuntimeException) { sal_Int32 index=product; ProductStruct &m_Product = m_ProductProfileList[index]; if (!m_Product.mProfileList.size() || m_Product.mProfileList.find(profileName) == m_Product.mProfileList.end()) { return sal_False; } else return sal_True; } } }