blob: ee7d43f47d6b63b8a51fcae46b53f032a5e80e50 [file] [log] [blame]
/**************************************************************
*
* 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 <MNSFolders.hxx>
#include <MNSINIParser.hxx>
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();
}
ProfileStruct* profileItem = new ProfileStruct(product,profileName,
regDir + 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<sal_Int32>(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 setted 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;
}
}
}