diff options
Diffstat (limited to 'desktop/source/app/userinstall.cxx')
-rw-r--r-- | desktop/source/app/userinstall.cxx | 297 |
1 files changed, 0 insertions, 297 deletions
diff --git a/desktop/source/app/userinstall.cxx b/desktop/source/app/userinstall.cxx deleted file mode 100644 index 9c3ce42d64..0000000000 --- a/desktop/source/app/userinstall.cxx +++ /dev/null @@ -1,297 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_desktop.hxx" - - -#include "userinstall.hxx" -#include "langselect.hxx" - -#include <stdio.h> -#include <rtl/ustring.hxx> -#include <rtl/ustrbuf.hxx> -#include <osl/file.hxx> -#include <osl/mutex.hxx> -#include <osl/process.h> -#include <osl/diagnose.h> -#include <osl/security.hxx> -#include <rtl/ref.hxx> - -#include <tools/resmgr.hxx> -#include <unotools/bootstrap.hxx> -#include <svl/languageoptions.hxx> -#include <unotools/syslocaleoptions.hxx> -#include <comphelper/processfactory.hxx> -#include <com/sun/star/container/XNameAccess.hpp> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <com/sun/star/beans/XPropertySet.hpp> -#include <i18npool/mslangid.hxx> -#include <com/sun/star/uno/Any.hxx> -#include <com/sun/star/util/XChangesBatch.hpp> -#include <com/sun/star/beans/XHierarchicalPropertySet.hpp> -#include <com/sun/star/beans/NamedValue.hpp> -#include <com/sun/star/container/XHierarchicalNameAccess.hpp> -#include <com/sun/star/lang/XComponent.hpp> -#include <com/sun/star/lang/XLocalizable.hpp> -#include <com/sun/star/lang/Locale.hpp> - -#include "app.hxx" - -using rtl::OString; -using rtl::OUString; -using namespace osl; -using namespace utl; -using namespace com::sun::star::container; -using namespace com::sun::star::uno; -using namespace com::sun::star::lang; -using namespace com::sun::star::beans; -using namespace com::sun::star::util; - - -namespace desktop { - - static UserInstall::UserInstallError create_user_install(OUString&); - - static bool is_user_install() - { - try - { - OUString sConfigSrvc( - RTL_CONSTASCII_USTRINGPARAM( - "com.sun.star.configuration.ConfigurationProvider" ) ); - OUString sAccessSrvc( - RTL_CONSTASCII_USTRINGPARAM( - "com.sun.star.configuration.ConfigurationAccess" ) ); - - // get configuration provider - Reference< XMultiServiceFactory > theMSF - = comphelper::getProcessServiceFactory(); - Reference< XMultiServiceFactory > theConfigProvider - = Reference< XMultiServiceFactory >( - theMSF->createInstance(sConfigSrvc), UNO_QUERY_THROW); - - // localize the provider to user selection - Reference< XLocalizable > localizable(theConfigProvider, UNO_QUERY_THROW); - OUString aUserLanguage = LanguageSelection::getLanguageString(); - Locale aLocale = LanguageSelection::IsoStringToLocale(aUserLanguage); - localizable->setLocale(aLocale); - - Sequence< Any > theArgs(1); - NamedValue v; - v.Name = OUString(RTL_CONSTASCII_USTRINGPARAM("NodePath")); - v.Value = makeAny(OUString(RTL_CONSTASCII_USTRINGPARAM("org.openoffice.Setup"))); - theArgs[0] <<= v; - Reference< XHierarchicalNameAccess> hnacc( - theConfigProvider->createInstanceWithArguments( - sAccessSrvc, theArgs), UNO_QUERY_THROW); - - try - { - sal_Bool bValue = sal_False; - hnacc->getByHierarchicalName( - OUString( RTL_CONSTASCII_USTRINGPARAM( - "Office/ooSetupInstCompleted" ) ) ) >>= bValue; - - return bValue ? true : false; - } - catch ( NoSuchElementException const & ) - { - // just return false in this case. - } - } - catch (Exception const & e) - { - OString msg(OUStringToOString(e.Message, RTL_TEXTENCODING_ASCII_US)); - OSL_FAIL(msg.getStr()); - } - - return false; - } - - UserInstall::UserInstallError UserInstall::finalize() - { - OUString aUserInstallPath; - utl::Bootstrap::PathStatus aLocateResult = - utl::Bootstrap::locateUserInstallation(aUserInstallPath); - - switch (aLocateResult) { - - case utl::Bootstrap::DATA_INVALID: - case utl::Bootstrap::DATA_MISSING: - case utl::Bootstrap::DATA_UNKNOWN: - // cannot find a valid path or path is missing - return E_Unknown; - - case utl::Bootstrap::PATH_EXISTS: - { - // path exists, check if an installation lives there - if ( is_user_install() ) - { - return E_None; - } - // Note: fall-thru intended. - } - case utl::Bootstrap::PATH_VALID: - // found a path but need to create user install - return create_user_install(aUserInstallPath); - default: - return E_Unknown; - } - } - - static osl::FileBase::RC copy_recursive( const rtl::OUString& srcUnqPath, const rtl::OUString& dstUnqPath) - { - - FileBase::RC err; - DirectoryItem aDirItem; - DirectoryItem::get(srcUnqPath, aDirItem); - FileStatus aFileStatus(osl_FileStatus_Mask_All); - aDirItem.getFileStatus(aFileStatus); - - if( aFileStatus.getFileType() == FileStatus::Directory) - { - // create directory if not already there - err = Directory::create( dstUnqPath ); - if (err == osl::FileBase::E_EXIST) - err = osl::FileBase::E_None; - - FileBase::RC next = err; - if (err == osl::FileBase::E_None) - { - // iterate through directory contents - Directory aDir( srcUnqPath ); - aDir.open(); - while (err == osl::FileBase::E_None && - (next = aDir.getNextItem( aDirItem )) == osl::FileBase::E_None) - { - aDirItem.getFileStatus(aFileStatus); - // generate new src/dst pair and make recursive call - rtl::OUString newSrcUnqPath = aFileStatus.getFileURL(); - rtl::OUString newDstUnqPath = dstUnqPath; - rtl::OUString itemname = aFileStatus.getFileName(); - // append trailing '/' if needed - if (newDstUnqPath.lastIndexOf(sal_Unicode('/')) != newDstUnqPath.getLength()-1) - newDstUnqPath += rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/")); - newDstUnqPath += itemname; - // recursion - err = copy_recursive(newSrcUnqPath, newDstUnqPath); - } - aDir.close(); - - if ( err != osl::FileBase::E_None ) - return err; - if( next != FileBase::E_NOENT ) - err = FileBase::E_INVAL; - } - } - else - { - // copy single file - foldback - err = File::copy( srcUnqPath,dstUnqPath ); - } - return err; - } - - static const char *pszSrcList[] = { - "/presets", - NULL - }; - static const char *pszDstList[] = { - "/user", - NULL - }; - - - static UserInstall::UserInstallError create_user_install(OUString& aUserPath) - { - OUString aBasePath; - if (utl::Bootstrap::locateBaseInstallation(aBasePath) != utl::Bootstrap::PATH_EXISTS) - return UserInstall::E_InvalidBaseinstall; - - // create the user directory - FileBase::RC rc = Directory::createPath(aUserPath); - if ((rc != FileBase::E_None) && (rc != FileBase::E_EXIST)) return UserInstall::E_Creation; - -#ifdef UNIX - // set safer permissions for the user directory by default - File::setAttributes(aUserPath, osl_File_Attribute_OwnWrite| osl_File_Attribute_OwnRead| osl_File_Attribute_OwnExe); -#endif - - // copy data from shared data directory of base installation - for (sal_Int32 i=0; pszSrcList[i]!=NULL && pszDstList[i]!=NULL; i++) - { - rc = copy_recursive( - aBasePath + OUString::createFromAscii(pszSrcList[i]), - aUserPath + OUString::createFromAscii(pszDstList[i])); - if ((rc != FileBase::E_None) && (rc != FileBase::E_EXIST)) - { - if ( rc == FileBase::E_NOSPC ) - return UserInstall::E_NoDiskSpace; - else if ( rc == FileBase::E_ACCES ) - return UserInstall::E_NoWriteAccess; - else - return UserInstall::E_Creation; - } - } - try - { - OUString sConfigSrvc(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.configuration.ConfigurationProvider")); - OUString sAccessSrvc(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.configuration.ConfigurationUpdateAccess")); - - // get configuration provider - Reference< XMultiServiceFactory > theMSF = comphelper::getProcessServiceFactory(); - Reference< XMultiServiceFactory > theConfigProvider = Reference< XMultiServiceFactory >( - theMSF->createInstance(sConfigSrvc), UNO_QUERY_THROW); - Sequence< Any > theArgs(1); - NamedValue v(OUString(RTL_CONSTASCII_USTRINGPARAM("NodePath")), makeAny(OUString(RTL_CONSTASCII_USTRINGPARAM("org.openoffice.Setup")))); - theArgs[0] <<= v; - Reference< XHierarchicalPropertySet> hpset( - theConfigProvider->createInstanceWithArguments(sAccessSrvc, theArgs), UNO_QUERY_THROW); - hpset->setHierarchicalPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("Office/ooSetupInstCompleted")), makeAny(sal_True)); - Reference< XChangesBatch >(hpset, UNO_QUERY_THROW)->commitChanges(); - } - catch ( PropertyVetoException& ) - { - // we are not allowed to change this - } - catch (Exception& e) - { - OString aMsg("create_user_install(): "); - aMsg += OUStringToOString(e.Message, RTL_TEXTENCODING_ASCII_US); - OSL_FAIL(aMsg.getStr()); - return UserInstall::E_Creation; - } - - return UserInstall::E_None; - - } -} - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |