diff options
Diffstat (limited to 'desktop/source')
209 files changed, 6214 insertions, 4030 deletions
diff --git a/desktop/source/app/app.cxx b/desktop/source/app/app.cxx index 05858e19cd..1544b20506 100644 --- a/desktop/source/app/app.cxx +++ b/desktop/source/app/app.cxx @@ -117,6 +117,7 @@ #include <osl/file.hxx> #include <osl/process.h> #include <osl/signal.h> +#include <osl/thread.hxx> #include <rtl/uuid.h> #include <rtl/uri.hxx> #include <unotools/pathoptions.hxx> @@ -167,14 +168,10 @@ using rtl::OUString; using rtl::OUStringBuffer; -//Gives an ICE with MSVC6 -//namespace css = ::com::sun::star; - using namespace ::com::sun::star::uno; using namespace ::com::sun::star::util; using namespace ::com::sun::star::lang; using namespace ::com::sun::star::beans; -//using namespace ::com::sun::star::bridge; using namespace ::com::sun::star::frame; using namespace ::com::sun::star::document; using namespace ::com::sun::star::view; @@ -193,38 +190,23 @@ namespace desktop static oslSignalHandler pSignalHandler = 0; static sal_Bool _bCrashReporterEnabled = sal_True; -static const ::rtl::OUString CFG_PACKAGE_COMMON_HELP ( RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Office.Common/Help")); -static const ::rtl::OUString CFG_PATH_REG ( RTL_CONSTASCII_USTRINGPARAM( "Registration" )); -static const ::rtl::OUString CFG_ENTRY_REGURL ( RTL_CONSTASCII_USTRINGPARAM( "URL" )); -static const ::rtl::OUString CFG_ENTRY_TEMPLATEREGURL ( RTL_CONSTASCII_USTRINGPARAM( "TemplateURL" )); - +static ::rtl::OUString getBrandSharePreregBundledPathURL(); // ---------------------------------------------------------------------------- ResMgr* Desktop::GetDesktopResManager() { if ( !Desktop::pResMgr ) { - String aMgrName = String::CreateFromAscii( "dkt" ); - // Create desktop resource manager and bootstrap process // was successful. Use default way to get language specific message. if ( Application::IsInExecute() ) - Desktop::pResMgr = ResMgr::CreateResMgr( U2S( aMgrName )); + Desktop::pResMgr = ResMgr::CreateResMgr("dkt"); if ( !Desktop::pResMgr ) { // Use VCL to get the correct language specific message as we // are in the bootstrap process and not able to get the installed // language!! -/* - LanguageType aLanguageType = LANGUAGE_DONTKNOW; - - Desktop::pResMgr = ResMgr::SearchCreateResMgr( U2S( aMgrName ), aLanguageType ); - AllSettings as = GetSettings(); - as.SetUILanguage(aLanguageType); - SetSettings(as); -*/ - // LanguageSelection langselect; OUString aUILocaleString = LanguageSelection::getLanguageString(); sal_Int32 nIndex = 0; OUString aLanguage = aUILocaleString.getToken( 0, '-', nIndex); @@ -233,7 +215,7 @@ ResMgr* Desktop::GetDesktopResManager() ::com::sun::star::lang::Locale aLocale( aLanguage, aCountry, aVariant ); - Desktop::pResMgr = ResMgr::SearchCreateResMgr( U2S( aMgrName ), aLocale); + Desktop::pResMgr = ResMgr::SearchCreateResMgr( "dkt", aLocale); AllSettings as = GetSettings(); as.SetUILocale(aLocale); SetSettings(as); @@ -247,7 +229,7 @@ ResMgr* Desktop::GetDesktopResManager() // Get a message string securely. There is a fallback string if the resource // is not available. -OUString Desktop::GetMsgString( USHORT nId, const OUString& aFaultBackMsg ) +OUString Desktop::GetMsgString( sal_uInt16 nId, const OUString& aFaultBackMsg ) { ResMgr* resMgr = GetDesktopResManager(); if ( !resMgr ) @@ -289,7 +271,7 @@ OUString MakeStartupConfigAccessErrorMessage( OUString const & aInternalErrMsg ) if ( pResMgr ) aDiagnosticMessage.append( OUString(String(ResId(STR_INTERNAL_ERRMSG, *pResMgr ))) ); else - aDiagnosticMessage.appendAscii( "The following internal error has occured:\n\n" ); + aDiagnosticMessage.appendAscii( "The following internal error has occurred:\n\n" ); aDiagnosticMessage.append( aInternalErrMsg ); } @@ -298,15 +280,12 @@ OUString MakeStartupConfigAccessErrorMessage( OUString const & aInternalErrMsg ) //============================================================================= // shows a simple error box with the given message ... but exits from these process ! -// // Fatal errors cant be solved by the process ... nor any recovery can help. // Mostly the installation was damaged and must be repaired manually .. or by calling // setup again. -// // On the other side we must make sure that no further actions will be possible within // the current office process ! No pipe requests, no menu/toolbar/shortuct actions // are allowed. Otherwise we will force a "crash inside a crash". -// // Thats why we have to use a special native message box here which does not use yield :-) //============================================================================= void FatalError(const ::rtl::OUString& sMessage) @@ -343,10 +322,8 @@ CommandLineArgs* Desktop::GetCommandLineArgs() { ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() ); if ( !pArgs ) - { pArgs = new CommandLineArgs; } - } return pArgs; } @@ -484,7 +461,7 @@ static bool needsSynchronization( } else if (err1 != ::osl::File::E_None) { - OSL_ENSURE(0, "Cannot access lastsynchronized in user layer"); + OSL_FAIL("Cannot access lastsynchronized in user layer"); return true; //sync just in case } @@ -498,7 +475,7 @@ static bool needsSynchronization( } else if (err2 != ::osl::File::E_None) { - OSL_ENSURE(0, "Cannot access file lastsynchronized in base layer"); + OSL_FAIL("Cannot access file lastsynchronized in base layer"); return true; //sync just in case } @@ -575,6 +552,44 @@ static ::rtl::OUString getLastSyncFileURLFromUserInstallation() return aTmp.makeStringAndClear(); } +//Checks if the argument src is the folder of the help or configuration +//backend in the prereg folder +static bool excludeTmpFilesAndFolders(const rtl::OUString & src) +{ + const char helpBackend[] = "com.sun.star.comp.deployment.help.PackageRegistryBackend"; + const char configBackend[] = "com.sun.star.comp.deployment.configuration.PackageRegistryBackend"; + if (src.endsWithAsciiL(helpBackend, sizeof(helpBackend) - 1 ) + || src.endsWithAsciiL(configBackend, sizeof(configBackend) - 1)) + { + return true; + } + return false; +} + +//If we are about to copy the contents of some special folder as determined +//by excludeTmpFilesAndFolders, then we omit those files or folders with a name +//derived from temporary folders. +static bool isExcludedFileOrFolder( const rtl::OUString & name) +{ + char const * allowed[] = { + "backenddb.xml", + "configmgr.ini", + "registered_packages.db" + }; + + const unsigned int size = sizeof(allowed) / sizeof (char const *); + bool bExclude = true; + for (unsigned int i= 0; i < size; i ++) + { + ::rtl::OUString allowedName = ::rtl::OUString::createFromAscii(allowed[i]); + if (allowedName.equals(name)) + { + bExclude = false; + break; + } + } + return bExclude; +} static osl::FileBase::RC copy_bundled_recursive( const rtl::OUString& srcUnqPath, @@ -590,64 +605,73 @@ throw() } else if( TypeToCopy == +1 ) // Folder { - osl::Directory aDir( srcUnqPath ); - aDir.open(); - err = osl::Directory::create( dstUnqPath ); osl::FileBase::RC next = err; - if( err == osl::FileBase::E_None || - err == osl::FileBase::E_EXIST ) + if( err == osl::FileBase::E_None || err == osl::FileBase::E_EXIST ) { err = osl::FileBase::E_None; - sal_Int32 n_Mask = FileStatusMask_FileURL | FileStatusMask_FileName | FileStatusMask_Type; - osl::DirectoryItem aDirItem; - - while( err == osl::FileBase::E_None && ( next = aDir.getNextItem( aDirItem ) ) == osl::FileBase::E_None ) + osl::Directory aDir( srcUnqPath ); + bool bExcludeFiles = excludeTmpFilesAndFolders(srcUnqPath); + if (aDir.open() == osl::FileBase::E_None) { - sal_Bool IsDoc = false; - sal_Bool bFilter = false; - osl::FileStatus aFileStatus( n_Mask ); - aDirItem.getFileStatus( aFileStatus ); - if( aFileStatus.isValid( FileStatusMask_Type ) ) - IsDoc = aFileStatus.getFileType() == osl::FileStatus::Regular; - - // Getting the information for the next recursive copy - sal_Int32 newTypeToCopy = IsDoc ? -1 : +1; - - rtl::OUString newSrcUnqPath; - if( aFileStatus.isValid( FileStatusMask_FileURL ) ) - newSrcUnqPath = aFileStatus.getFileURL(); - - rtl::OUString newDstUnqPath = dstUnqPath; - rtl::OUString tit; - if( aFileStatus.isValid( FileStatusMask_FileName ) ) + sal_Int32 n_Mask = FileStatusMask_FileURL | + FileStatusMask_FileName | + FileStatusMask_Type; + + osl::DirectoryItem aDirItem; + while( err == osl::FileBase::E_None && ( next = aDir.getNextItem( aDirItem ) ) == osl::FileBase::E_None ) { - ::rtl::OUString aFileName = aFileStatus.getFileName(); - tit = rtl::Uri::encode( aFileName, - rtl_UriCharClassPchar, - rtl_UriEncodeIgnoreEscapes, - RTL_TEXTENCODING_UTF8 ); + sal_Bool IsDoc = false; + sal_Bool bFilter = false; + osl::FileStatus aFileStatus( n_Mask ); + aDirItem.getFileStatus( aFileStatus ); + if( aFileStatus.isValid( FileStatusMask_Type ) ) + IsDoc = aFileStatus.getFileType() == osl::FileStatus::Regular; + + // Getting the information for the next recursive copy + sal_Int32 newTypeToCopy = IsDoc ? -1 : +1; + + rtl::OUString newSrcUnqPath; + if( aFileStatus.isValid( FileStatusMask_FileURL ) ) + newSrcUnqPath = aFileStatus.getFileURL(); + + rtl::OUString newDstUnqPath = dstUnqPath; + rtl::OUString tit; + if( aFileStatus.isValid( FileStatusMask_FileName ) ) + { + ::rtl::OUString aFileName = aFileStatus.getFileName(); + tit = rtl::Uri::encode( aFileName, + rtl_UriCharClassPchar, + rtl_UriEncodeIgnoreEscapes, + RTL_TEXTENCODING_UTF8 ); + + // Special treatment for "lastsychronized" file. Must not be + // copied from the bundled folder! + //Also do not copy *.tmp files and *.tmp_ folders. This affects the files/folders + //from the help and configuration backend + if ( IsDoc && (aFileName.equalsAscii( pLastSyncFileName ) + || (bExcludeFiles && isExcludedFileOrFolder(aFileName)))) + bFilter = true; + else if (!IsDoc && bExcludeFiles && isExcludedFileOrFolder(aFileName)) + bFilter = true; + } - // Special treatment for "lastsychronized" file. Must not be - // copied from the bundled folder! - if ( IsDoc && aFileName.equalsAscii( pLastSyncFileName )) - bFilter = true; + if( newDstUnqPath.lastIndexOf( sal_Unicode('/') ) != newDstUnqPath.getLength()-1 ) + newDstUnqPath += rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/")); + + newDstUnqPath += tit; + + if (( newSrcUnqPath != dstUnqPath ) && !bFilter ) + err = copy_bundled_recursive( newSrcUnqPath,newDstUnqPath, newTypeToCopy ); } - - if( newDstUnqPath.lastIndexOf( sal_Unicode('/') ) != newDstUnqPath.getLength()-1 ) - newDstUnqPath += rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/")); - newDstUnqPath += tit; + if( err == osl::FileBase::E_None && next != osl::FileBase::E_NOENT ) + err = next; - if (( newSrcUnqPath != dstUnqPath ) && !bFilter ) - err = copy_bundled_recursive( newSrcUnqPath,newDstUnqPath, newTypeToCopy ); + aDir.close(); } - - if( err == osl::FileBase::E_None && next != osl::FileBase::E_NOENT ) - err = next; } - aDir.close(); } return err; @@ -688,14 +712,10 @@ void Desktop::Init() } } - // create service factory... - Reference < XMultiServiceFactory > rSMgr = CreateApplicationServiceManager(); - if( rSMgr.is() ) - { - ::comphelper::setProcessServiceFactory( rSMgr ); - } - else + // We need to have service factory before going further. + if( !::comphelper::getProcessServiceFactory().is()) { + OSL_FAIL("Service factory should have been crated in soffice_main()."); SetBootstrapError( BE_UNO_SERVICEMANAGER ); } @@ -714,13 +734,6 @@ void Desktop::Init() if ( GetBootstrapError() == BE_OK ) { CommandLineArgs* pCmdLineArgs = GetCommandLineArgs(); -#ifdef UNX - // check whether we need to print cmdline help - if ( pCmdLineArgs->IsHelp() ) { - displayCmdlineHelp(); - SetBootstrapStatus(BS_TERMINATE); - } -#endif // start ipc thread only for non-remote offices RTL_LOGFILE_CONTEXT( aLog2, "desktop (cd100003) ::OfficeIPCThread::EnableOfficeIPCThread" ); OfficeIPCThread::Status aStatus = OfficeIPCThread::EnableOfficeIPCThread(); @@ -749,6 +762,17 @@ void Desktop::InitFinished() CloseSplashScreen(); } +// GetCommandLineArgs() requires this code to work, otherwise it will abort, and +// on Unix command line args needs to be checked before Desktop::Init() +void Desktop::CreateProcessServiceFactory() +{ + Reference < XMultiServiceFactory > rSMgr = CreateApplicationServiceManager(); + if( rSMgr.is() ) + { + ::comphelper::setProcessServiceFactory( rSMgr ); + } +} + void Desktop::DeInit() { RTL_LOGFILE_CONTEXT( aLog, "desktop (cd100003) ::Desktop::DeInit" ); @@ -782,7 +806,7 @@ void Desktop::DeInit() RTL_LOGFILE_CONTEXT_TRACE( aLog, "FINISHED WITH Destop::DeInit" ); } -BOOL Desktop::QueryExit() +sal_Bool Desktop::QueryExit() { try { @@ -808,7 +832,7 @@ BOOL Desktop::QueryExit() xPropertySet->setPropertyValue( OUSTRING(RTL_CONSTASCII_USTRINGPARAM( SUSPEND_QUICKSTARTVETO )), a ); } - BOOL bExit = ( !xDesktop.is() || xDesktop->terminate() ); + sal_Bool bExit = ( !xDesktop.is() || xDesktop->terminate() ); if ( !bExit && xPropertySet.is() ) @@ -840,9 +864,6 @@ void Desktop::HandleBootstrapPathErrors( ::utl::Bootstrap::Status aBootstrapStat { if ( aBootstrapStatus != ::utl::Bootstrap::DATA_OK ) { - sal_Bool bWorkstationInstallation = sal_False; - ::rtl::OUString aBaseInstallURL; - ::rtl::OUString aUserInstallURL; ::rtl::OUString aProductKey; ::rtl::OUString aTemp; @@ -855,16 +876,6 @@ void Desktop::HandleBootstrapPathErrors( ::utl::Bootstrap::Status aBootstrapStat if ( aTemp.getLength() > 0 ) aProductKey = aTemp; - ::utl::Bootstrap::PathStatus aBaseInstallStatus = ::utl::Bootstrap::locateBaseInstallation( aBaseInstallURL ); - ::utl::Bootstrap::PathStatus aUserInstallStatus = ::utl::Bootstrap::locateUserInstallation( aUserInstallURL ); - - if (( aBaseInstallStatus == ::utl::Bootstrap::PATH_EXISTS && - aUserInstallStatus == ::utl::Bootstrap::PATH_EXISTS )) - { - if ( aBaseInstallURL != aUserInstallURL ) - bWorkstationInstallation = sal_True; - } - OUString aMessage; OUStringBuffer aBuffer( 100 ); aBuffer.append( aDiagnosticMessage ); @@ -1248,8 +1259,6 @@ void impl_checkRecoveryState(sal_Bool& bCrashed , static const ::rtl::OUString PROP_CRASHED(RTL_CONSTASCII_USTRINGPARAM("Crashed")); static const ::rtl::OUString PROP_EXISTSRECOVERY(RTL_CONSTASCII_USTRINGPARAM("ExistsRecoveryData")); static const ::rtl::OUString PROP_EXISTSSESSION(RTL_CONSTASCII_USTRINGPARAM("ExistsSessionData")); - static const ::rtl::OUString CFG_PACKAGE_RECOVERY(RTL_CONSTASCII_USTRINGPARAM("org.openoffice.Office.Recovery/")); - static const ::rtl::OUString CFG_PATH_RECOVERYINFO(RTL_CONSTASCII_USTRINGPARAM("RecoveryInfo")); bCrashed = sal_False; bRecoveryDataExists = sal_False; @@ -1410,10 +1419,10 @@ void restartOnMac(bool passArguments) { } -USHORT Desktop::Exception(USHORT nError) +sal_uInt16 Desktop::Exception(sal_uInt16 nError) { // protect against recursive calls - static BOOL bInException = FALSE; + static sal_Bool bInException = sal_False; sal_uInt16 nOldMode = Application::GetSystemWindowMode(); Application::SetSystemWindowMode( nOldMode & ~SYSTEMWINDOW_MODE_NOAUTOMODE ); @@ -1425,7 +1434,7 @@ USHORT Desktop::Exception(USHORT nError) Application::Abort( aDoubleExceptionString ); } - bInException = TRUE; + bInException = sal_True; CommandLineArgs* pArgs = GetCommandLineArgs(); // save all modified documents ... if it's allowed doing so. @@ -1511,8 +1520,26 @@ namespace { } } -void Desktop::Main() +struct ExecuteGlobals +{ + Reference < css::document::XEventListener > xGlobalBroadcaster; + sal_Bool bRestartRequested; + sal_Bool bUseSystemFileDialog; + std::auto_ptr<SvtLanguageOptions> pLanguageOptions; + std::auto_ptr<SvtPathOptions> pPathOptions; + + ExecuteGlobals() + : bRestartRequested( sal_False ) + , bUseSystemFileDialog( sal_True ) + {} +}; + +static ExecuteGlobals* pExecGlobals = NULL; + +int Desktop::Main() { + pExecGlobals = new ExecuteGlobals(); + RTL_LOGFILE_CONTEXT( aLog, "desktop (cd100003) ::Desktop::Main" ); // Remember current context object @@ -1523,12 +1550,12 @@ void Desktop::Main() if ( eError != BE_OK ) { HandleBootstrapErrors( eError ); - return; + return EXIT_FAILURE; } BootstrapStatus eStatus = GetBootstrapStatus(); if (eStatus == BS_TERMINATE) { - return; + return EXIT_FAILURE; } // Detect desktop environment - need to do this as early as possible @@ -1554,14 +1581,14 @@ void Desktop::Main() UserInstall::UserInstallError instErr_fin = UserInstall::finalize(); if ( instErr_fin != UserInstall::E_None) { - OSL_ENSURE(sal_False, "userinstall failed"); + OSL_FAIL("userinstall failed"); if ( instErr_fin == UserInstall::E_NoDiskSpace ) HandleBootstrapErrors( BE_USERINSTALL_NOTENOUGHDISKSPACE ); else if ( instErr_fin == UserInstall::E_NoWriteAccess ) HandleBootstrapErrors( BE_USERINSTALL_NOWRITEACCESS ); else HandleBootstrapErrors( BE_USERINSTALL_FAILED ); - return; + return EXIT_FAILURE; } // refresh path information utl::Bootstrap::reloadData(); @@ -1571,14 +1598,8 @@ void Desktop::Main() Reference< XMultiServiceFactory > xSMgr = ::comphelper::getProcessServiceFactory(); - std::auto_ptr<SvtLanguageOptions> pLanguageOptions; - std::auto_ptr<SvtPathOptions> pPathOptions; - Reference< ::com::sun::star::task::XRestartManager > xRestartManager; - sal_Bool bRestartRequested( sal_False ); - sal_Bool bUseSystemFileDialog(sal_True); - int nAcquireCount( 0 ); - Reference < css::document::XEventListener > xGlobalBroadcaster; + int nAcquireCount( 0 ); try { RegisterServices( xSMgr ); @@ -1588,7 +1609,7 @@ void Desktop::Main() #ifndef UNX if ( pCmdLineArgs->IsHelp() ) { displayCmdlineHelp(); - return; + return EXIT_SUCCESS; } #endif @@ -1596,9 +1617,10 @@ void Desktop::Main() // there is no other instance using our data files from a remote host RTL_LOGFILE_CONTEXT_TRACE( aLog, "desktop (lo119109) Desktop::Main -> Lockfile" ); m_pLockfile = new Lockfile; - if ( !pCmdLineArgs->IsInvisible() && !pCmdLineArgs->IsNoLockcheck() && !m_pLockfile->check( Lockfile_execWarning )) { + if ( !pCmdLineArgs->IsHeadless() && !pCmdLineArgs->IsInvisible() && + !pCmdLineArgs->IsNoLockcheck() && !m_pLockfile->check( Lockfile_execWarning )) { // Lockfile exists, and user clicked 'no' - return; + return EXIT_FAILURE; } RTL_LOGFILE_CONTEXT_TRACE( aLog, "desktop (lo119109) Desktop::Main <- Lockfile" ); @@ -1606,20 +1628,22 @@ void Desktop::Main() RTL_LOGFILE_CONTEXT_TRACE( aLog, "{ GetEnableATToolSupport" ); if( Application::GetSettings().GetMiscSettings().GetEnableATToolSupport() ) { - BOOL bQuitApp; + sal_Bool bQuitApp; if( !InitAccessBridge( true, bQuitApp ) ) if( bQuitApp ) - return; + return EXIT_FAILURE; } RTL_LOGFILE_CONTEXT_TRACE( aLog, "} GetEnableATToolSupport" ); // terminate if requested... - if( pCmdLineArgs->IsTerminateAfterInit() ) return; + if( pCmdLineArgs->IsTerminateAfterInit() ) + return EXIT_SUCCESS; // Read the common configuration items for optimization purpose - if ( !InitializeConfiguration() ) return; + if ( !InitializeConfiguration() ) + return EXIT_FAILURE; SetSplashScreenProgress(30); @@ -1634,41 +1658,16 @@ void Desktop::Main() // create title string sal_Bool bCheckOk = sal_False; ::com::sun::star::lang::Locale aLocale; - String aMgrName = String::CreateFromAscii( "iso" ); - ResMgr* pLabelResMgr = ResMgr::SearchCreateResMgr( U2S( aMgrName ), aLocale ); - if ( !pLabelResMgr ) - { - // no "iso" resource -> search for "ooo" resource - aMgrName = String::CreateFromAscii( "ooo" ); - pLabelResMgr = ResMgr::SearchCreateResMgr( U2S( aMgrName ), aLocale); - } + String aMgrName = String::CreateFromAscii( "ofa" ); + ResMgr* pLabelResMgr = ResMgr::SearchCreateResMgr( "ofa", aLocale ); String aTitle = pLabelResMgr ? String( ResId( RID_APPTITLE, *pLabelResMgr ) ) : String(); delete pLabelResMgr; -/* - // locale and UI locale in AppSettings are now retrieved from configuration or system directly via SvtSysLocale - // no reason to set while starting - // set UI language and locale - RTL_LOGFILE_CONTEXT_TRACE( aLog, "{ set locale settings" ); - //LanguageSelection langselect; - OUString aUILocaleString = LanguageSelection::getLanguageString(); - Locale aUILocale = LanguageSelection::IsoStringToLocale(aUILocaleString); - LanguageType eLanguage = SvtSysLocale().GetLanguage(); - - // #i39040#, do not call anything between GetSettings and SetSettings that might have - // a side effect on the settings (like, eg, SvtSysLocaleOptions().GetLocaleLanguageType(), - // which changes the MiscSettings !!! ) - AllSettings aSettings( Application::GetSettings() ); - aSettings.SetUILocale( aUILocale ); - aSettings.SetLanguage( eLanguage ); - Application::SetSettings( aSettings ); - RTL_LOGFILE_CONTEXT_TRACE( aLog, "} set locale settings" ); -*/ // Check for StarOffice/Suite specific extensions runs also with OpenOffice installation sets OUString aTitleString( aTitle ); bCheckOk = CheckInstallation( aTitleString ); if ( !bCheckOk ) - return; + return EXIT_FAILURE; else aTitle = aTitleString; @@ -1684,13 +1683,11 @@ void Desktop::Main() SetDisplayName( aTitle ); SetSplashScreenProgress(35); RTL_LOGFILE_CONTEXT_TRACE( aLog, "{ create SvtPathOptions and SvtLanguageOptions" ); - pPathOptions.reset( new SvtPathOptions); + pExecGlobals->pPathOptions.reset( new SvtPathOptions); SetSplashScreenProgress(40); -// pLanguageOptions = new SvtLanguageOptions(sal_True); -// SetSplashScreenProgress(45); RTL_LOGFILE_CONTEXT_TRACE( aLog, "} create SvtPathOptions and SvtLanguageOptions" ); - // Check special env variable #111015# + // Check special env variable std::vector< String > aUnrestrictedFolders; svt::getUnrestrictedFolders( aUnrestrictedFolders ); @@ -1703,7 +1700,7 @@ void Desktop::Main() } // create service for loadin SFX (still needed in startup) - xGlobalBroadcaster = Reference < css::document::XEventListener > + pExecGlobals->xGlobalBroadcaster = Reference < css::document::XEventListener > ( xSMgr->createInstance( DEFINE_CONST_UNICODE( "com.sun.star.frame.GlobalEventBroadcaster" ) ), UNO_QUERY ); @@ -1725,21 +1722,22 @@ void Desktop::Main() SynchronizeExtensionRepositories(); bool bAbort = CheckExtensionDependencies(); if ( bAbort ) - return; + return EXIT_FAILURE; Migration::migrateSettingsIfNecessary(); // keep a language options instance... - pLanguageOptions.reset( new SvtLanguageOptions(sal_True)); + pExecGlobals->pLanguageOptions.reset( new SvtLanguageOptions(sal_True)); - if (xGlobalBroadcaster.is()) + if (pExecGlobals->xGlobalBroadcaster.is()) { css::document::EventObject aEvent; aEvent.EventName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("OnStartApp")); - xGlobalBroadcaster->notifyEvent(aEvent); + pExecGlobals->xGlobalBroadcaster->notifyEvent(aEvent); } SetSplashScreenProgress(50); + // Backing Component sal_Bool bCrashed = sal_False; sal_Bool bExistsRecoveryData = sal_False; @@ -1755,7 +1753,7 @@ void Desktop::Main() } // check whether the shutdown is caused by restart - bRestartRequested = ( xRestartManager.is() && xRestartManager->isRestartRequested( sal_True ) ); + pExecGlobals->bRestartRequested = ( xRestartManager.is() && xRestartManager->isRestartRequested( sal_True ) ); if ( pCmdLineArgs->IsHeadless() ) { @@ -1763,43 +1761,38 @@ void Desktop::Main() // headless mode relies on Application::EnableHeadlessMode() // which does only work for VCL dialogs!! SvtMiscOptions aMiscOptions; - bUseSystemFileDialog = aMiscOptions.UseSystemFileDialog(); + pExecGlobals->bUseSystemFileDialog = aMiscOptions.UseSystemFileDialog(); aMiscOptions.SetUseSystemFileDialog( sal_False ); } - if ( !bRestartRequested ) + if ( !pExecGlobals->bRestartRequested ) { - if ( - (pCmdLineArgs->IsEmptyOrAcceptOnly() ) && + if ((!pCmdLineArgs->WantsToLoadDocument() && !pCmdLineArgs->IsInvisible() && !pCmdLineArgs->IsHeadless() ) && (SvtModuleOptions().IsModuleInstalled(SvtModuleOptions::E_SSTARTMODULE)) && (!bExistsRecoveryData ) && (!bExistsSessionData ) && - (!Application::AnyInput( INPUT_APPEVENT ) ) - ) + (!Application::AnyInput( INPUT_APPEVENT ) )) { - RTL_LOGFILE_CONTEXT_TRACE( aLog, "{ create BackingComponent" ); - Reference< XFrame > xDesktopFrame( xSMgr->createInstance( - OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.frame.Desktop" ))), UNO_QUERY ); - if (xDesktopFrame.is()) - { - SetSplashScreenProgress(60); - Reference< XFrame > xBackingFrame; - Reference< ::com::sun::star::awt::XWindow > xContainerWindow; - - xBackingFrame = xDesktopFrame->findFrame(OUString( RTL_CONSTASCII_USTRINGPARAM( "_blank" )), 0); - if (xBackingFrame.is()) - xContainerWindow = xBackingFrame->getContainerWindow(); - if (xContainerWindow.is()) - { - SetDocumentExtendedStyle(xContainerWindow); - SetSplashScreenProgress(75); - Sequence< Any > lArgs(1); - lArgs[0] <<= xContainerWindow; - - Reference< XController > xBackingComp( - xSMgr->createInstanceWithArguments(OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.frame.StartModule") ), lArgs), - UNO_QUERY); - SetSplashScreenProgress(80); + RTL_LOGFILE_CONTEXT_TRACE( aLog, "{ create BackingComponent" ); + Reference< XFrame > xDesktopFrame( xSMgr->createInstance( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.frame.Desktop" ))), UNO_QUERY ); + if (xDesktopFrame.is()) + { + SetSplashScreenProgress(60); + Reference< XFrame > xBackingFrame; + Reference< ::com::sun::star::awt::XWindow > xContainerWindow; + + xBackingFrame = xDesktopFrame->findFrame(OUString( RTL_CONSTASCII_USTRINGPARAM( "_blank" )), 0); + if (xBackingFrame.is()) + xContainerWindow = xBackingFrame->getContainerWindow(); + if (xContainerWindow.is()) + { + SetDocumentExtendedStyle(xContainerWindow); + SetSplashScreenProgress(75); + Sequence< Any > lArgs(1); + lArgs[0] <<= xContainerWindow; + + Reference< XController > xBackingComp( + xSMgr->createInstanceWithArguments(OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.frame.StartModule") ), lArgs), UNO_QUERY); if (xBackingComp.is()) { Reference< ::com::sun::star::awt::XWindow > xBackingWin(xBackingComp, UNO_QUERY); @@ -1823,22 +1816,13 @@ void Desktop::Main() com::sun::star::uno::Exception te; wte.TargetException >>= te; FatalError( MakeStartupConfigAccessErrorMessage(wte.Message + te.Message) ); - return; + return EXIT_FAILURE; } catch ( com::sun::star::uno::Exception& e ) { FatalError( MakeStartupErrorMessage(e.Message) ); - return; + return EXIT_FAILURE; } - /* - catch ( ... ) - { - FatalError( MakeStartupErrorMessage( - OUString::createFromAscii( - "Unknown error during startup (Office wrapper service).\nInstallation could be damaged."))); - return; - } - */ SetSplashScreenProgress(55); SvtFontSubstConfig().Apply(); @@ -1850,10 +1834,9 @@ void Desktop::Main() aOptions.SetVCLSettings(); SetSplashScreenProgress(60); - if ( !bRestartRequested ) + if ( !pExecGlobals->bRestartRequested ) { Application::SetFilterHdl( LINK( this, Desktop, ImplInitFilterHdl ) ); - sal_Bool bTerminateRequested = sal_False; // Preload function depends on an initialized sfx application! @@ -1880,17 +1863,8 @@ void Desktop::Main() catch ( com::sun::star::uno::Exception& e ) { FatalError( MakeStartupErrorMessage(e.Message) ); - return; - } - /* - catch ( ... ) - { - FatalError( MakeStartupErrorMessage( - OUString::createFromAscii( - "Unknown error during startup (TD/Desktop service).\nInstallation could be damaged."))); - return; + return EXIT_FAILURE; } - */ // Post user event to startup first application component window // We have to send this OpenClients message short before execute() to @@ -1918,9 +1892,9 @@ void Desktop::Main() new svt::JavaContext( com::sun::star::uno::getCurrentContext() ) ); // check whether the shutdown is caused by restart just before entering the Execute - bRestartRequested = bRestartRequested || ( xRestartManager.is() && xRestartManager->isRestartRequested( sal_True ) ); + pExecGlobals->bRestartRequested = pExecGlobals->bRestartRequested || ( xRestartManager.is() && xRestartManager->isRestartRequested( sal_True ) ); - if ( !bRestartRequested ) + if ( !pExecGlobals->bRestartRequested ) { // if this run of the office is triggered by restart, some additional actions should be done DoRestartActionsIfNecessary( !pCmdLineArgs->IsInvisible() && !pCmdLineArgs->IsNoQuickstart() ); @@ -1939,52 +1913,65 @@ void Desktop::Main() FatalError( MakeStartupErrorMessage(exAnyCfg.Message) ); } } - - if ( bRestartRequested ) + // CAUTION: you do not necessarily get here e.g. on the Mac. + // please put all deinitialization code into doShutdown + return doShutdown(); +} + +int Desktop::doShutdown() +{ + if( ! pExecGlobals ) + return EXIT_SUCCESS; + + if ( pExecGlobals->bRestartRequested ) SetRestartState(); - if (xGlobalBroadcaster.is()) + if (pExecGlobals->xGlobalBroadcaster.is()) { css::document::EventObject aEvent; aEvent.EventName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("OnCloseApp")); - xGlobalBroadcaster->notifyEvent(aEvent); + pExecGlobals->xGlobalBroadcaster->notifyEvent(aEvent); } - delete pResMgr; + delete pResMgr, pResMgr = NULL; // Restore old value + CommandLineArgs* pCmdLineArgs = GetCommandLineArgs(); if ( pCmdLineArgs->IsHeadless() ) - SvtMiscOptions().SetUseSystemFileDialog( bUseSystemFileDialog ); + SvtMiscOptions().SetUseSystemFileDialog( pExecGlobals->bUseSystemFileDialog ); // remove temp directory RemoveTemporaryDirectory(); FlushConfiguration(); // The acceptors in the AcceptorMap must be released (in DeregisterServices) // with the solar mutex unlocked, to avoid deadlock: - nAcquireCount = Application::ReleaseSolarMutex(); + sal_uLong nAcquireCount = Application::ReleaseSolarMutex(); DeregisterServices(); Application::AcquireSolarMutex(nAcquireCount); tools::DeInitTestToolLib(); // be sure that path/language options gets destroyed before // UCB is deinitialized RTL_LOGFILE_CONTEXT_TRACE( aLog, "-> dispose path/language options" ); - pLanguageOptions.reset( 0 ); - pPathOptions.reset( 0 ); + pExecGlobals->pLanguageOptions.reset( 0 ); + pExecGlobals->pPathOptions.reset( 0 ); RTL_LOGFILE_CONTEXT_TRACE( aLog, "<- dispose path/language options" ); RTL_LOGFILE_CONTEXT_TRACE( aLog, "-> deinit ucb" ); ::ucbhelper::ContentBroker::deinitialize(); RTL_LOGFILE_CONTEXT_TRACE( aLog, "<- deinit ucb" ); + sal_Bool bRR = pExecGlobals->bRestartRequested; + delete pExecGlobals, pExecGlobals = NULL; + RTL_LOGFILE_CONTEXT_TRACE( aLog, "FINISHED WITH Destop::Main" ); - if ( bRestartRequested ) + if ( bRR ) { restartOnMac(true); if ( m_rSplashScreen.is() ) m_rSplashScreen->reset(); - // wouldn't the solution be more clean if SalMain returns the exit code to the system? - _exit( ExitHelper::E_NORMAL_RESTART ); + return ExitHelper::E_NORMAL_RESTART; } + return EXIT_SUCCESS; } IMPL_LINK( Desktop, ImplInitFilterHdl, ConvertData*, pData ) @@ -2082,7 +2069,7 @@ sal_Bool Desktop::shouldLaunchQuickstart() const SfxPoolItem* pItem=0; SfxItemSet aQLSet(SFX_APP()->GetPool(), SID_ATTR_QUICKLAUNCHER, SID_ATTR_QUICKLAUNCHER); SFX_APP()->GetOptions(aQLSet); - SfxItemState eState = aQLSet.GetItemState(SID_ATTR_QUICKLAUNCHER, FALSE, &pItem); + SfxItemState eState = aQLSet.GetItemState(SID_ATTR_QUICKLAUNCHER, sal_False, &pItem); if (SFX_ITEM_SET == eState) bQuickstart = ((SfxBoolItem*)pItem)->GetValue(); } @@ -2164,18 +2151,6 @@ void Desktop::SystemSettingsChanging( AllSettings& rSettings, Window* ) SvtMenuOptions aMenuOpt; hStyleSettings.SetUseImagesInMenus(aMenuOpt.GetMenuIconsState()); - - sal_uInt16 nTabStyle = hStyleSettings.GetTabControlStyle(); - nTabStyle &= ~STYLE_TABCONTROL_SINGLELINE; - if( aAppearanceCfg.IsSingleLineTabCtrl() ) - nTabStyle |=STYLE_TABCONTROL_SINGLELINE; - - nTabStyle &= ~STYLE_TABCONTROL_COLOR; - if( aAppearanceCfg.IsColoredTabCtrl() ) - nTabStyle |= STYLE_TABCONTROL_COLOR; - - hStyleSettings.SetTabControlStyle(nTabStyle); - hStyleSettings.SetDragFullOptions( nDragFullOptions ); rSettings.SetStyleSettings ( hStyleSettings ); } @@ -2211,14 +2186,8 @@ IMPL_LINK( Desktop, OpenClients_Impl, void*, EMPTYARG ) OfficeIPCThread::SetReady(); - // CloseStartupScreen(); CloseSplashScreen(); - CheckFirstRun( ); - - // allow ipc interaction -// OfficeIPCThread::SetReady(); - EnableOleAutomation(); if (getenv ("OOO_EXIT_POST_STARTUP")) @@ -2611,7 +2580,7 @@ void Desktop::OpenClients() // check if a document has been recovered - if there is one of if a document was loaded by cmdline, no default document // should be created Reference < XComponent > xFirst; - BOOL bLoaded = FALSE; + sal_Bool bLoaded = sal_False; CommandLineArgs* pArgs = GetCommandLineArgs(); SvtInternalOptions aInternalOptions; @@ -2655,8 +2624,6 @@ void Desktop::OpenClients() aHelpURLBuffer.appendAscii("&System=UNX"); #elif defined WNT aHelpURLBuffer.appendAscii("&System=WIN"); -#elif defined MAC - aHelpURLBuffer.appendAscii("&System=MAC"); #elif defined OS2 aHelpURLBuffer.appendAscii("&System=OS2"); #endif @@ -2687,7 +2654,7 @@ void Desktop::OpenClients() OUString aPreloadData; aPerfTuneIniFile.getFrom( OUString( RTL_CONSTASCII_USTRINGPARAM( "QuickstartPreloadConfiguration" )), aPreloadData, aDefault ); - if ( aPreloadData.equalsAscii( "1" )) + if ( aPreloadData.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "1" ) )) { if ( pArgs->IsWriter() || pArgs->IsCalc() || @@ -2716,16 +2683,6 @@ void Desktop::OpenClients() if ( ! bAllowRecoveryAndSessionManagement ) { - /* - ::comphelper::ConfigurationHelper::writeDirectKey( - ::comphelper::getProcessServiceFactory(), - ::rtl::OUString::createFromAscii("org.openoffice.Office.Recovery"), - ::rtl::OUString::createFromAscii("AutoSave"), - ::rtl::OUString::createFromAscii("Enabled"), - ::com::sun::star::uno::makeAny(sal_False), - ::comphelper::ConfigurationHelper::E_STANDARD); - - */ try { Reference< XDispatch > xRecovery( @@ -2746,7 +2703,7 @@ void Desktop::OpenClients() { OUString aMessage = OUString(RTL_CONSTASCII_USTRINGPARAM("Could not disable AutoRecovery.\n")) + e.Message; - OSL_ENSURE(sal_False, OUStringToOString(aMessage, RTL_TEXTENCODING_ASCII_US).getStr()); + OSL_FAIL(OUStringToOString(aMessage, RTL_TEXTENCODING_ASCII_US).getStr()); } } else @@ -2772,7 +2729,7 @@ void Desktop::OpenClients() bCrashed , bExistsRecoveryData); /* TODO we cant be shure, that at least one document could be recovered here successfully - So we set bLoaded=TRUE to supress opening of the default document. + So we set bLoaded=sal_True to supress opening of the default document. But we should make it more safe. Otherwhise we have an office without an UI ... ... May be we can check the desktop if some documents are existing there. @@ -2788,7 +2745,7 @@ void Desktop::OpenClients() { OUString aMessage = OUString(RTL_CONSTASCII_USTRINGPARAM("Error during recovery\n")) + e.Message; - OSL_ENSURE(sal_False, OUStringToOString(aMessage, RTL_TEXTENCODING_ASCII_US).getStr()); + OSL_FAIL(OUStringToOString(aMessage, RTL_TEXTENCODING_ASCII_US).getStr()); } } @@ -2811,7 +2768,7 @@ void Desktop::OpenClients() { OUString aMessage = OUString(RTL_CONSTASCII_USTRINGPARAM("Registration of session listener failed\n")) + e.Message; - OSL_ENSURE(sal_False, OUStringToOString(aMessage, RTL_TEXTENCODING_ASCII_US).getStr()); + OSL_FAIL(OUStringToOString(aMessage, RTL_TEXTENCODING_ASCII_US).getStr()); } if ( @@ -2829,7 +2786,7 @@ void Desktop::OpenClients() { OUString aMessage = OUString(RTL_CONSTASCII_USTRINGPARAM("Error in session management\n")) + e.Message; - OSL_ENSURE(sal_False, OUStringToOString(aMessage, RTL_TEXTENCODING_ASCII_US).getStr()); + OSL_FAIL(OUStringToOString(aMessage, RTL_TEXTENCODING_ASCII_US).getStr()); } } } @@ -2998,7 +2955,7 @@ String GetURL_Impl( } // Add path seperator to these directory and make given URL (rName) absolute by using of current working directory - // Attention: "setFianlSlash()" is neccessary for calling "smartRel2Abs()"!!! + // Attention: "setFinalSlash()" is necessary for calling "smartRel2Abs()"!!! // Otherwhise last part will be ignored and wrong result will be returned!!! // "smartRel2Abs()" interpret given URL as file not as path. So he truncate last element to get the base path ... // But if we add a seperator - he doesn't do it anymore. @@ -3010,7 +2967,6 @@ String GetURL_Impl( // Use the provided parameters for smartRel2Abs to support the usage of '%' in system paths. // Otherwise this char won't get encoded and we are not able to load such files later, - // see #110156# bool bWasAbsolute; INetURLObject aURL = aObj.smartRel2Abs( rName, bWasAbsolute, false, INetURLObject::WAS_ENCODED, RTL_TEXTENCODING_UTF8, true ); @@ -3198,6 +3154,13 @@ void Desktop::HandleAppEvent( const ApplicationEvent& rAppEvent ) catch(const css::uno::Exception&) {} } + else if( rAppEvent.GetEvent() == "PRIVATE:DOSHUTDOWN" ) + { + Desktop* pD = dynamic_cast<Desktop*>(GetpApp()); + OSL_ENSURE( pD, "no desktop ?!?" ); + if( pD ) + pD->doShutdown(); + } } void Desktop::OpenSplashScreen() @@ -3207,6 +3170,7 @@ void Desktop::OpenSplashScreen() sal_Bool bVisible = sal_False; // Show intro only if this is normal start (e.g. no server, no quickstart, no printing ) if ( !pCmdLine->IsInvisible() && + !pCmdLine->IsHeadless() && !pCmdLine->IsQuickstart() && !pCmdLine->IsMinimized() && !pCmdLine->IsNoLogo() && @@ -3289,7 +3253,7 @@ void Desktop::DoFirstRunInitializations() } catch(const ::com::sun::star::uno::Exception&) { - OSL_ENSURE( sal_False, "Desktop::DoFirstRunInitializations: caught an exception while trigger job executor ..." ); + OSL_FAIL( "Desktop::DoFirstRunInitializations: caught an exception while trigger job executor ..." ); } } diff --git a/desktop/source/app/appfirststart.cxx b/desktop/source/app/appfirststart.cxx index 6e6b4c32c7..4ab37b7a3e 100644 --- a/desktop/source/app/appfirststart.cxx +++ b/desktop/source/app/appfirststart.cxx @@ -49,88 +49,6 @@ using namespace ::com::sun::star::beans; static const OUString sConfigSrvc( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.configuration.ConfigurationProvider" ) ); static const OUString sAccessSrvc( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.configuration.ConfigurationUpdateAccess" ) ); -/* Path of the license. */ -OUString Desktop::GetLicensePath() -{ - // license file name - static const char *szLicensePath = "/share/readme"; -#if defined(WNT) || defined(OS2) - static const char *szWNTLicenseName = "/license"; - static const char *szWNTLicenseExt = ".txt"; -#else - static const char *szUNXLicenseName = "/LICENSE"; - static const char *szUNXLicenseExt = ""; -#endif - static OUString aLicensePath; - - if (aLicensePath.getLength() > 0) - return aLicensePath; - - OUString aBaseInstallPath(RTL_CONSTASCII_USTRINGPARAM("$BRAND_BASE_DIR")); - rtl::Bootstrap::expandMacros(aBaseInstallPath); - - // determine the filename of the license to show - OUString aLangString; - ::com::sun::star::lang::Locale aLocale; - rtl::OString aMgrName = rtl::OString("dkt"); - - AllSettings aSettings(Application::GetSettings()); - aLocale = aSettings.GetUILocale(); - ResMgr* pLocalResMgr = ResMgr::SearchCreateResMgr(aMgrName, aLocale); - - aLangString = aLocale.Language; - if ( aLocale.Country.getLength() != 0 ) - { - aLangString += OUString::createFromAscii("-"); - aLangString += aLocale.Country; - if ( aLocale.Variant.getLength() != 0 ) - { - aLangString += OUString::createFromAscii("-"); - aLangString += aLocale.Variant; - } - } -#if defined(WNT) || defined(OS2) - aLicensePath = - aBaseInstallPath + OUString::createFromAscii(szLicensePath) - + OUString::createFromAscii(szWNTLicenseName) - + OUString::createFromAscii("_") - + aLangString - + OUString::createFromAscii(szWNTLicenseExt); -#else - aLicensePath = - aBaseInstallPath + OUString::createFromAscii(szLicensePath) - + OUString::createFromAscii(szUNXLicenseName) - + OUString::createFromAscii("_") - + aLangString - + OUString::createFromAscii(szUNXLicenseExt); -#endif - delete pLocalResMgr; - return aLicensePath; -} - -/* Check if we need to accept license. */ -sal_Bool Desktop::LicenseNeedsAcceptance() -{ - // Don't show a license - return sal_False; -/* - sal_Bool bShowLicense = sal_True; - sal_Int32 nOpenSourceContext = 0; - try - { - ::utl::ConfigManager::GetDirectConfigProperty( - ::utl::ConfigManager::OPENSOURCECONTEXT ) >>= nOpenSourceContext; - } - catch( const ::com::sun::star::uno::Exception& ) {} - - // open source needs no license - if ( nOpenSourceContext > 0 ) - bShowLicense = sal_False; - - return bShowLicense; -*/ -} - /* Local function - get access to the configuration */ static Reference< XPropertySet > impl_getConfigurationAccess( const OUString& rPath ) { @@ -147,128 +65,6 @@ static Reference< XPropertySet > impl_getConfigurationAccess( const OUString& rP xConfigProvider->createInstanceWithArguments( sAccessSrvc, aArgs ), UNO_QUERY_THROW ); } -/* Local function - was the wizard completed already? */ -static sal_Bool impl_isFirstStart() -{ - try { - Reference< XPropertySet > xPSet = impl_getConfigurationAccess( OUString( RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Setup/Office" ) ) ); - - Any result = xPSet->getPropertyValue(OUString::createFromAscii("FirstStartWizardCompleted")); - sal_Bool bCompleted = sal_False; - if ((result >>= bCompleted) && bCompleted) - return sal_False; // wizard was already completed - else - return sal_True; - } catch (const Exception&) - { - return sal_True; - } -} - -/* Local function - convert oslDateTime to tools DateTime */ -static DateTime impl_oslDateTimeToDateTime(const oslDateTime& aDateTime) -{ - return DateTime( - Date(aDateTime.Day, aDateTime.Month, aDateTime.Year), - Time(aDateTime.Hours, aDateTime.Minutes, aDateTime.Seconds)); -} - -/* Local function - get DateTime from a string */ -static sal_Bool impl_parseDateTime(const OUString& aString, DateTime& aDateTime) -{ - // take apart a canonical literal xsd:dateTime string - //CCYY-MM-DDThh:mm:ss(Z) - - OUString aDateTimeString = aString.trim(); - - // check length - if (aDateTimeString.getLength() < 19 || aDateTimeString.getLength() > 20) - return sal_False; - - sal_Int32 nDateLength = 10; - sal_Int32 nTimeLength = 8; - - OUString aDateTimeSep = OUString::createFromAscii("T"); - OUString aDateSep = OUString::createFromAscii("-"); - OUString aTimeSep = OUString::createFromAscii(":"); - OUString aUTCString = OUString::createFromAscii("Z"); - - OUString aDateString = aDateTimeString.copy(0, nDateLength); - OUString aTimeString = aDateTimeString.copy(nDateLength+1, nTimeLength); - - sal_Int32 nIndex = 0; - sal_Int32 nYear = aDateString.getToken(0, '-', nIndex).toInt32(); - sal_Int32 nMonth = aDateString.getToken(0, '-', nIndex).toInt32(); - sal_Int32 nDay = aDateString.getToken(0, '-', nIndex).toInt32(); - nIndex = 0; - sal_Int32 nHour = aTimeString.getToken(0, ':', nIndex).toInt32(); - sal_Int32 nMinute = aTimeString.getToken(0, ':', nIndex).toInt32(); - sal_Int32 nSecond = aTimeString.getToken(0, ':', nIndex).toInt32(); - - Date tmpDate((USHORT)nDay, (USHORT)nMonth, (USHORT)nYear); - Time tmpTime(nHour, nMinute, nSecond); - DateTime tmpDateTime(tmpDate, tmpTime); - if (aString.indexOf(aUTCString) < 0) - tmpDateTime.ConvertToUTC(); - - aDateTime = tmpDateTime; - return sal_True; -} - -/* Local function - was the license accepted already? */ -static sal_Bool impl_isLicenseAccepted() -{ - // If no license will be shown ... it must not be accepted. - // So it was accepted "hardly" by the outside installer. - // But if the configuration entry "HideEula" will be removed afterwards .. - // we have to show the licese page again and user has to accept it here .-) - if ( ! Desktop::LicenseNeedsAcceptance() ) - return sal_True; - - try - { - Reference< XPropertySet > xPSet = impl_getConfigurationAccess( OUString( RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Setup/Office" ) ) ); - - Any result = xPSet->getPropertyValue(OUString::createFromAscii("LicenseAcceptDate")); - - OUString aAcceptDate; - if (result >>= aAcceptDate) - { - // compare to date of license file - OUString aLicenseURL = Desktop::GetLicensePath(); - osl::DirectoryItem aDirItem; - if (osl::DirectoryItem::get(aLicenseURL, aDirItem) != osl::FileBase::E_None) - return sal_False; - osl::FileStatus aStatus(FileStatusMask_All); - if (aDirItem.getFileStatus(aStatus) != osl::FileBase::E_None) - return sal_False; - TimeValue aTimeVal = aStatus.getModifyTime(); - oslDateTime aDateTimeVal; - if (!osl_getDateTimeFromTimeValue(&aTimeVal, &aDateTimeVal)) - return sal_False; - - // compare dates - DateTime aLicenseDateTime = impl_oslDateTimeToDateTime(aDateTimeVal); - DateTime aAcceptDateTime; - if (!impl_parseDateTime(aAcceptDate, aAcceptDateTime)) - return sal_False; - - if ( aAcceptDateTime > aLicenseDateTime ) - return sal_True; - } - return sal_False; - } catch (const Exception&) - { - return sal_False; - } -} - -/* Check if we need the first start wizard. */ -sal_Bool Desktop::IsFirstStartWizardNeeded() -{ - return impl_isFirstStart() || !impl_isLicenseAccepted(); -} - void Desktop::DoRestartActionsIfNecessary( sal_Bool bQuickStart ) { if ( bQuickStart ) diff --git a/desktop/source/app/appinit.cxx b/desktop/source/app/appinit.cxx index c33e7c0077..bb83abc18a 100644 --- a/desktop/source/app/appinit.cxx +++ b/desktop/source/app/appinit.cxx @@ -82,7 +82,6 @@ #define DESKTOP_TEMPDIRNAME "soffice.tmp" -using namespace rtl; using namespace desktop; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::lang; @@ -90,6 +89,8 @@ using namespace ::com::sun::star::beans; using namespace ::com::sun::star::registry; using namespace ::com::sun::star::ucb; +using ::rtl::OUString; + namespace desktop { @@ -102,7 +103,7 @@ static bool configureUcb(bool bServer, rtl::OUString const & rPortalConnect) xServiceFactory( comphelper::getProcessServiceFactory() ); if (!xServiceFactory.is()) { - DBG_ERROR("configureUcb(): No XMultiServiceFactory"); + OSL_FAIL("configureUcb(): No XMultiServiceFactory"); return false; } @@ -118,14 +119,13 @@ static bool configureUcb(bool bServer, rtl::OUString const & rPortalConnect) Sequence< Any > aArgs(6); aArgs[0] - <<= rtl::OUString::createFromAscii(bServer ? - UCB_CONFIGURATION_KEY1_SERVER : - UCB_CONFIGURATION_KEY1_LOCAL); + <<= bServer ? rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(UCB_CONFIGURATION_KEY1_SERVER)) : + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(UCB_CONFIGURATION_KEY1_LOCAL)); aArgs[1] - <<= rtl::OUString::createFromAscii(UCB_CONFIGURATION_KEY2_OFFICE); - aArgs[2] <<= rtl::OUString::createFromAscii("PIPE"); + <<= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(UCB_CONFIGURATION_KEY2_OFFICE)); + aArgs[2] <<= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PIPE")); aArgs[3] <<= aPipe; - aArgs[4] <<= rtl::OUString::createFromAscii("PORTAL"); + aArgs[4] <<= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PORTAL")); aArgs[5] <<= aPortal.makeStringAndClear(); bool ret = @@ -146,13 +146,13 @@ static bool configureUcb(bool bServer, rtl::OUString const & rPortalConnect) ); rtl::OUString aDesktopEnvironment; if ((aValue >>= aDesktopEnvironment) - && aDesktopEnvironment.equalsAscii("GNOME")) + && aDesktopEnvironment.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("GNOME"))) { Reference<XContentProviderManager> xCPM = cb->getContentProviderManagerInterface(); - // Workaround for P1 #124597#. Instanciate GNOME-VFS-UCP in the thread that initialized + //Instanciate GNOME-VFS-UCP in the thread that initialized // GNOME in order to avoid a deadlock that may occure in case UCP gets initialized from // a different thread. The latter may happen when calling the Office remotely via UNO. // THIS IS NOT A FIX, JUST A WORKAROUND! @@ -161,20 +161,20 @@ static bool configureUcb(bool bServer, rtl::OUString const & rPortalConnect) { Reference<XContentProvider> xCP( xServiceFactory->createInstance( - rtl::OUString::createFromAscii( - "com.sun.star.ucb.GnomeVFSContentProvider")), + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( + "com.sun.star.ucb.GnomeVFSContentProvider"))), UNO_QUERY); if(xCP.is()) xCPM->registerContentProvider( xCP, - rtl::OUString::createFromAscii(".*"), + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".*")), false); } catch (...) { } } } - } catch (RuntimeException e) { + } catch (RuntimeException &e) { } } #endif // GNOME_VFS_ENABLED @@ -277,8 +277,8 @@ void Desktop::RegisterServices( Reference< XMultiServiceFactory >& xSMgr ) pCmdLine->GetPortalConnectString( aPortalConnect ); if ( !configureUcb( bServer, aPortalConnect ) ) { - DBG_ERROR( "Can't configure UCB" ); - throw com::sun::star::uno::Exception(rtl::OUString::createFromAscii("RegisterServices, configureUcb"), NULL); + OSL_FAIL( "Can't configure UCB" ); + throw com::sun::star::uno::Exception(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("RegisterServices, configureUcb")), NULL); } CreateTemporaryDirectory(); @@ -306,7 +306,7 @@ void Desktop::createAcceptor(const OUString& aAcceptString) aSeq[1] <<= bAccept; Reference<XInitialization> rAcceptor( ::comphelper::getProcessServiceFactory()->createInstance( - OUString::createFromAscii( "com.sun.star.office.Acceptor" )), UNO_QUERY ); + OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.office.Acceptor" ))), UNO_QUERY ); if ( rAcceptor.is() ) { try{ rAcceptor->initialize( aSeq ); @@ -314,11 +314,11 @@ void Desktop::createAcceptor(const OUString& aAcceptString) } catch (com::sun::star::uno::Exception&) { // no error handling needed... // acceptor just won't come up - OSL_ENSURE(sal_False, "Acceptor could not be created."); + OSL_FAIL("Acceptor could not be created."); } } else { // there is already an acceptor with this description - OSL_ENSURE(sal_False, "Acceptor already exists."); + OSL_FAIL("Acceptor already exists."); } } @@ -368,7 +368,7 @@ void Desktop::destroyAcceptor(const OUString& aAcceptString) // this is the last reference and the acceptor will be destructed rMap.erase(aAcceptString); } else { - OSL_ENSURE(sal_False, "Found no acceptor to remove"); + OSL_FAIL("Found no acceptor to remove"); } } } diff --git a/desktop/source/app/appsys.cxx b/desktop/source/app/appsys.cxx index 61948550ca..e2856d5b72 100644 --- a/desktop/source/app/appsys.cxx +++ b/desktop/source/app/appsys.cxx @@ -35,11 +35,10 @@ #include <rtl/ustring.hxx> #include <tools/solar.h> -#include <tools/prewin.h> -#include <winreg.h> -#include <tools/postwin.h> #include <tools/urlobj.hxx> +#include <windows.h> + #define U2S(STRING) ::rtl::OUStringToOString(STRING, RTL_TEXTENCODING_UTF8) @@ -55,7 +54,7 @@ void FATToVFat_Impl( String& aName ) HANDLE h = FindFirstFile( U2S(aName).getStr(), &aData ); if ( h ) { - // FAT-Kurzname in VFAT-Langname wandeln + // Change FAT short filename into VFAT long filename aObj.removeSegment(); aObj.insertName( String::CreateFromAscii( aData.cFileName ) ); aName = aObj.PathToFileName(); diff --git a/desktop/source/app/check_ext_deps.cxx b/desktop/source/app/check_ext_deps.cxx index bfc0197b3a..fbc5136518 100644 --- a/desktop/source/app/check_ext_deps.cxx +++ b/desktop/source/app/check_ext_deps.cxx @@ -2,7 +2,7 @@ /************************************************************************* * * 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 @@ -148,7 +148,7 @@ void SilentCommandEnv::handle( Reference< task::XInteractionRequest> const & xRe uno::Reference< uno::XComponentContext > xContext = comphelper_getProcessComponentContext(); uno::Reference< ui::dialogs::XExecutableDialog > xDialog( deployment::ui::LicenseDialog::create( - xContext, VCLUnoHelper::GetInterface( NULL ), + xContext, VCLUnoHelper::GetInterface( NULL ), licExc.ExtensionName, licExc.Text ) ); sal_Int16 res = xDialog->execute(); if ( res == ui::dialogs::ExecutableDialogResults::CANCEL ) @@ -220,8 +220,6 @@ void SilentCommandEnv::pop() throw (uno::RuntimeException) } // end namespace //----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- static const OUString sConfigSrvc( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.configuration.ConfigurationProvider" ) ); static const OUString sAccessSrvc( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.configuration.ConfigurationUpdateAccess" ) ); //------------------------------------------------------------------------------ @@ -233,7 +231,7 @@ static sal_Int16 impl_showExtensionDialog( uno::Reference< uno::XComponentContex uno::Reference< lang::XMultiComponentFactory > xServiceManager( xContext->getServiceManager() ); if( !xServiceManager.is() ) - throw uno::RuntimeException( + throw uno::RuntimeException( UNISTRING( "impl_showExtensionDialog(): unable to obtain service manager from component context" ), uno::Reference< uno::XInterface > () ); xService = xServiceManager->createInstanceWithContext( sServiceName, xContext ); @@ -254,7 +252,7 @@ static bool impl_checkDependencies( const uno::Reference< uno::XComponentContext if ( !xExtensionManager.is() ) { - OSL_ENSURE( 0, "Could not get the Extension Manager!" ); + OSL_FAIL( "Could not get the Extension Manager!" ); return true; } @@ -301,7 +299,7 @@ static bool impl_checkDependencies( const uno::Reference< uno::XComponentContext catch ( uno::RuntimeException & ) { throw; } catch ( uno::Exception & exc) { (void) exc; - OSL_ENSURE( 0, ::rtl::OUStringToOString( exc.Message, RTL_TEXTENCODING_UTF8 ).getStr() ); + OSL_FAIL( ::rtl::OUStringToOString( exc.Message, RTL_TEXTENCODING_UTF8 ).getStr() ); } if ( bRegistered ) @@ -334,15 +332,15 @@ static void impl_setNeedsCompatCheck() xFactory->createInstance(sConfigSrvc), UNO_QUERY_THROW); Sequence< Any > theArgs(1); - beans::NamedValue v( OUString::createFromAscii("NodePath"), - makeAny( OUString::createFromAscii("org.openoffice.Setup/Office") ) ); + beans::NamedValue v( OUString(RTL_CONSTASCII_USTRINGPARAM("NodePath")), + makeAny( OUString(RTL_CONSTASCII_USTRINGPARAM("org.openoffice.Setup/Office")) ) ); theArgs[0] <<= v; Reference< beans::XPropertySet > pset = Reference< beans::XPropertySet >( theConfigProvider->createInstanceWithArguments( sAccessSrvc, theArgs ), UNO_QUERY_THROW ); - Any value = makeAny( OUString::createFromAscii("never") ); + Any value = makeAny( OUString(RTL_CONSTASCII_USTRINGPARAM("never")) ); - pset->setPropertyValue( OUString::createFromAscii("LastCompatibilityCheckID"), value ); + pset->setPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("LastCompatibilityCheckID")), value ); Reference< util::XChangesBatch >( pset, UNO_QUERY_THROW )->commitChanges(); } catch (const Exception&) {} @@ -387,20 +385,20 @@ static bool impl_needsCompatCheck() xFactory->createInstance(sConfigSrvc), UNO_QUERY_THROW); Sequence< Any > theArgs(1); - beans::NamedValue v( OUString::createFromAscii("NodePath"), - makeAny( OUString::createFromAscii("org.openoffice.Setup/Office") ) ); + beans::NamedValue v( OUString(RTL_CONSTASCII_USTRINGPARAM("NodePath")), + makeAny( OUString(RTL_CONSTASCII_USTRINGPARAM("org.openoffice.Setup/Office")) ) ); theArgs[0] <<= v; Reference< beans::XPropertySet > pset = Reference< beans::XPropertySet >( theConfigProvider->createInstanceWithArguments( sAccessSrvc, theArgs ), UNO_QUERY_THROW ); - Any result = pset->getPropertyValue( OUString::createFromAscii("LastCompatibilityCheckID") ); + Any result = pset->getPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("LastCompatibilityCheckID")) ); result >>= aLastCheckBuildID; if ( aLastCheckBuildID != aCurrentBuildID ) { bNeedsCheck = true; result <<= aCurrentBuildID; - pset->setPropertyValue( OUString::createFromAscii("LastCompatibilityCheckID"), result ); + pset->setPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("LastCompatibilityCheckID")), result ); Reference< util::XChangesBatch >( pset, UNO_QUERY_THROW )->commitChanges(); } #ifdef DEBUG diff --git a/desktop/source/app/checkinstall.cxx b/desktop/source/app/checkinstall.cxx index ee5c96b8c7..52f6c6d526 100644 --- a/desktop/source/app/checkinstall.cxx +++ b/desktop/source/app/checkinstall.cxx @@ -39,11 +39,12 @@ #include <vcl/msgbox.hxx> #include <tools/date.hxx> -using namespace rtl; using namespace com::sun::star::uno; using namespace com::sun::star::lang; using namespace com::sun::star::beans; +using ::rtl::OUString; + namespace desktop { diff --git a/desktop/source/app/cmdlineargs.cxx b/desktop/source/app/cmdlineargs.cxx index 841f55ce5e..817a43f696 100644 --- a/desktop/source/app/cmdlineargs.cxx +++ b/desktop/source/app/cmdlineargs.cxx @@ -2,7 +2,7 @@ /************************************************************************* * * 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 @@ -41,11 +41,14 @@ #include <svl/documentlockfile.hxx> -using namespace rtl; +#include <cstdio> + using namespace com::sun::star::lang; using namespace com::sun::star::uri; using namespace com::sun::star::uno; +using ::rtl::OUString; + namespace desktop { @@ -58,7 +61,7 @@ public: m_index(0) { rtl::OUString url; - if (tools::getProcessWorkingDir(&url)) { + if (tools::getProcessWorkingDir(url)) { m_cwdUrl.reset(url); } } @@ -138,25 +141,26 @@ void CommandLineArgs::ParseCommandLine_Impl( Supplier& supplier ) Reference< XExternalUriReferenceTranslator > xTranslator( xMS->createInstance( - OUString::createFromAscii( - "com.sun.star.uri.ExternalUriReferenceTranslator")), + OUString(RTL_CONSTASCII_USTRINGPARAM( + "com.sun.star.uri.ExternalUriReferenceTranslator"))), UNO_QUERY); // parse command line arguments - sal_Bool bPrintEvent = sal_False; - sal_Bool bOpenEvent = sal_True; - sal_Bool bViewEvent = sal_False; - sal_Bool bStartEvent = sal_False; - sal_Bool bPrintToEvent = sal_False; - sal_Bool bPrinterName = sal_False; - sal_Bool bForceOpenEvent = sal_False; - sal_Bool bForceNewEvent = sal_False; - sal_Bool bDisplaySpec = sal_False; - sal_Bool bConversionEvent= sal_False; - sal_Bool bConversionParamsEvent= sal_False; - sal_Bool bBatchPrintEvent= sal_False; - sal_Bool bBatchPrinterNameEvent= sal_False; - sal_Bool bConversionOutEvent = sal_False; + bool bOpenEvent(true); + bool bPrintEvent(false); + bool bViewEvent(false); + bool bStartEvent(false); + bool bPrintToEvent(false); + bool bPrinterName(false); + bool bForceOpenEvent(false); + bool bForceNewEvent(false); + bool bDisplaySpec(false); + bool bOpenDoc(false); + bool bConversionEvent(false); + bool bConversionParamsEvent(false); + bool bBatchPrintEvent(false); + bool bBatchPrinterNameEvent(false); + bool bConversionOutEvent(false); m_eArgumentCount = NONE; @@ -167,160 +171,140 @@ void CommandLineArgs::ParseCommandLine_Impl( Supplier& supplier ) { break; } - // convert file URLs to internal form #112849# - if (aArg.indexOf(OUString::createFromAscii("file:"))==0 && + // convert file URLs to internal form + if (aArg.indexOfAsciiL(RTL_CONSTASCII_STRINGPARAM("file:"))==0 && xTranslator.is()) { OUString tmp(xTranslator->translateToInternal(aArg)); if (tmp.getLength() > 0) aArg = tmp; } - String aArgStr = aArg; if ( aArg.getLength() > 0 ) { m_eArgumentCount = m_eArgumentCount == NONE ? ONE : MANY; - if ( !InterpretCommandLineParameter( aArg )) + ::rtl::OUString oArg; + if ( !InterpretCommandLineParameter( aArg, oArg )) { - if ( aArgStr.GetChar(0) == '-' ) + if ( aArg.toChar() == '-' ) { // handle this argument as an option - if ( aArgStr.EqualsIgnoreCaseAscii( "-n" )) + if ( aArg.equalsIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM("-n"))) { // force new documents based on the following documents - bForceNewEvent = sal_True; - bOpenEvent = sal_False; - bForceOpenEvent = sal_False; - bPrintToEvent = sal_False; - bPrintEvent = sal_False; - bViewEvent = sal_False; - bStartEvent = sal_False; - bDisplaySpec = sal_False; - } - else if ( aArgStr.EqualsIgnoreCaseAscii( "-o" )) - { - // force open documents regards if they are templates or not - bForceOpenEvent = sal_True; - bOpenEvent = sal_False; - bForceNewEvent = sal_False; - bPrintToEvent = sal_False; - bPrintEvent = sal_False; - bViewEvent = sal_False; - bStartEvent = sal_False; - bDisplaySpec = sal_False; - } - else if ( aArgStr.EqualsIgnoreCaseAscii( "-pt" )) + bForceNewEvent = true; + bOpenEvent = false; + bForceOpenEvent = false; + bPrintToEvent = false; + bPrintEvent = false; + bViewEvent = false; + bStartEvent = false; + bDisplaySpec = false; + } + else if ( aArg.equalsIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM( "-o" ))) { - // Print to special printer - bPrintToEvent = sal_True; - bPrinterName = sal_True; - bPrintEvent = sal_False; - bOpenEvent = sal_False; - bForceNewEvent = sal_False; - bViewEvent = sal_False; - bStartEvent = sal_False; - bDisplaySpec = sal_False; - bForceOpenEvent = sal_False; + // force open documents regardless if they are templates or not + bForceOpenEvent = true; + bOpenEvent = false; + bForceNewEvent = false; + bPrintToEvent = false; + bPrintEvent = false; + bViewEvent = false; + bStartEvent = false; + bDisplaySpec = false; } - else if ( aArgStr.EqualsIgnoreCaseAscii( "-p" )) + else if ( aArg.equalsIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM( "-pt" ))) { + // Print to special printer + bPrintToEvent = true; + bPrinterName = true; + bPrintEvent = false; + bOpenEvent = false; + bForceNewEvent = false; + bViewEvent = false; + bStartEvent = false; + bDisplaySpec = false; + bForceOpenEvent = false; + } + else if ( aArg.equalsIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM( "-p" ))) + { // Print to default printer - bPrintEvent = sal_True; - bPrintToEvent = sal_False; - bOpenEvent = sal_False; - bForceNewEvent = sal_False; - bForceOpenEvent = sal_False; - bViewEvent = sal_False; - bStartEvent = sal_False; - bDisplaySpec = sal_False; - } - else if ( aArgStr.EqualsIgnoreCaseAscii( "-view" )) - { + bPrintEvent = true; + bPrintToEvent = false; + bOpenEvent = false; + bForceNewEvent = false; + bForceOpenEvent = false; + bViewEvent = false; + bStartEvent = false; + bDisplaySpec = false; + } + else if ( aArg.equalsIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM( "-view" ))) + { // open in viewmode - bOpenEvent = sal_False; - bPrintEvent = sal_False; - bPrintToEvent = sal_False; - bForceNewEvent = sal_False; - bForceOpenEvent = sal_False; - bViewEvent = sal_True; - bStartEvent = sal_False; - bDisplaySpec = sal_False; - } - else if ( aArgStr.EqualsIgnoreCaseAscii( "-show" )) - { + bOpenEvent = false; + bPrintEvent = false; + bPrintToEvent = false; + bForceNewEvent = false; + bForceOpenEvent = false; + bViewEvent = true; + bStartEvent = false; + bDisplaySpec = false; + } + else if ( aArg.equalsIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM( "-show" ))) + { // open in viewmode - bOpenEvent = sal_False; - bViewEvent = sal_False; - bStartEvent = sal_True; - bPrintEvent = sal_False; - bPrintToEvent = sal_False; - bForceNewEvent = sal_False; - bForceOpenEvent = sal_False; - bDisplaySpec = sal_False; + bOpenEvent = false; + bViewEvent = false; + bStartEvent = true; + bPrintEvent = false; + bPrintToEvent = false; + bForceNewEvent = false; + bForceOpenEvent = false; + bDisplaySpec = false; } - else if ( aArgStr.EqualsIgnoreCaseAscii( "-display" )) + else if ( oArg.equalsIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM("display"))) { // set display - bOpenEvent = sal_False; - bPrintEvent = sal_False; - bForceOpenEvent = sal_False; - bPrintToEvent = sal_False; - bForceNewEvent = sal_False; - bViewEvent = sal_False; - bStartEvent = sal_False; - bDisplaySpec = sal_True; + bOpenEvent = false; + bPrintEvent = false; + bForceOpenEvent = false; + bPrintToEvent = false; + bForceNewEvent = false; + bViewEvent = false; + bStartEvent = false; + bDisplaySpec = true; } - else if ( aArgStr.EqualsIgnoreCaseAscii( "-language" )) - { - bOpenEvent = sal_False; - bPrintEvent = sal_False; - bForceOpenEvent = sal_False; - bPrintToEvent = sal_False; - bForceNewEvent = sal_False; - bViewEvent = sal_False; - bStartEvent = sal_False; - bDisplaySpec = sal_False; - } - - #ifdef MACOSX - /* #i84053# ignore -psn on Mac - Platform dependent #ifdef here is ugly, however this is currently - the only platform dependent parameter. Should more appear - we should find a better solution - */ - else if ( aArgStr.CompareToAscii( "-psn", 4 ) == COMPARE_EQUAL ) + else if ( oArg.equalsIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM("language"))) { - // finder argument from MacOSX - bOpenEvent = sal_False; - bPrintEvent = sal_False; - bForceOpenEvent = sal_False; - bPrintToEvent = sal_False; - bForceNewEvent = sal_False; - bViewEvent = sal_False; - bStartEvent = sal_False; - bDisplaySpec = sal_False; + bOpenEvent = false; + bPrintEvent = false; + bForceOpenEvent = false; + bPrintToEvent = false; + bForceNewEvent = false; + bViewEvent = false; + bStartEvent = false; + bDisplaySpec = false; } - #endif - else if ( aArgStr.EqualsIgnoreCaseAscii( "-convert-to" ) ) + else if ( oArg.equalsIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM("convert-to"))) { - bOpenEvent = sal_False; - bConversionEvent = sal_True; - bConversionParamsEvent = sal_True; + bOpenEvent = false; + bConversionEvent = true; + bConversionParamsEvent = true; } - else if ( aArgStr.EqualsIgnoreCaseAscii( "-print-to-file" ) ) + else if ( oArg.equalsIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM("print-to-file"))) { - bOpenEvent = sal_False; - bBatchPrintEvent = sal_True; + bOpenEvent = false; + bBatchPrintEvent = true; } - else if ( aArgStr.EqualsIgnoreCaseAscii( "-printer-name" ) && + else if ( oArg.equalsIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM("printer-name")) && bBatchPrintEvent ) { - bBatchPrinterNameEvent = sal_True; + bBatchPrinterNameEvent = true; } - else if ( aArgStr.EqualsIgnoreCaseAscii( "-outdir" ) && + else if ( oArg.equalsIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM("outdir")) && (bConversionEvent || bBatchPrintEvent) ) { - bConversionOutEvent = sal_True; + bConversionOutEvent = true; } } else @@ -328,64 +312,89 @@ void CommandLineArgs::ParseCommandLine_Impl( Supplier& supplier ) if ( bPrinterName && bPrintToEvent ) { // first argument after "-pt" this must be the printer name - AddStringListParam_Impl( CMD_STRINGPARAM_PRINTERNAME, aArgStr ); - bPrinterName = sal_False; + AddStringListParam_Impl( CMD_STRINGPARAM_PRINTERNAME, aArg ); + bPrinterName = false; } else if ( bConversionParamsEvent && bConversionEvent ) { // first argument must be the the params - AddStringListParam_Impl( CMD_STRINGPARAM_CONVERSIONPARAMS, aArgStr ); - bConversionParamsEvent = sal_False; + AddStringListParam_Impl( CMD_STRINGPARAM_CONVERSIONPARAMS, aArg ); + bConversionParamsEvent = false; } else if ( bBatchPrinterNameEvent && bBatchPrintEvent ) { // first argument is the printer name - AddStringListParam_Impl( CMD_STRINGPARAM_PRINTERNAME, aArgStr ); - bBatchPrinterNameEvent = sal_False; + AddStringListParam_Impl( CMD_STRINGPARAM_PRINTERNAME, aArg ); + bBatchPrinterNameEvent = false; } else if ( (bConversionEvent || bBatchPrintEvent) && bConversionOutEvent ) { - AddStringListParam_Impl( CMD_STRINGPARAM_CONVERSIONOUT, aArgStr ); - bConversionOutEvent = sal_False; + AddStringListParam_Impl( CMD_STRINGPARAM_CONVERSIONOUT, aArg ); + bConversionOutEvent = false; } else { if( bOpenEvent || bViewEvent || bForceNewEvent || bForceOpenEvent ) { - if( ::rtl::OUString(aArgStr).matchIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM("::ODMA")) ) + if( aArg.matchIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM("::ODMA")) ) { - ::rtl::OUString sArg = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("vnd.sun.star.odma:/")); - sArg += aArgStr; - aArgStr = sArg; + ::rtl::OUString sArg(RTL_CONSTASCII_USTRINGPARAM("vnd.sun.star.odma:/")); + sArg += aArg; + aArg = sArg; } } // handle this argument as a filename if ( bOpenEvent ) - AddStringListParam_Impl( CMD_STRINGPARAM_OPENLIST, aArgStr ); + { + AddStringListParam_Impl( CMD_STRINGPARAM_OPENLIST, aArg ); + bOpenDoc = true; + } else if ( bViewEvent ) - AddStringListParam_Impl( CMD_STRINGPARAM_VIEWLIST, aArgStr ); + { + AddStringListParam_Impl( CMD_STRINGPARAM_VIEWLIST, aArg ); + bOpenDoc = true; + } else if ( bStartEvent ) - AddStringListParam_Impl( CMD_STRINGPARAM_STARTLIST, aArgStr ); + { + AddStringListParam_Impl( CMD_STRINGPARAM_STARTLIST, aArg ); + bOpenDoc = true; + } else if ( bPrintEvent ) - AddStringListParam_Impl( CMD_STRINGPARAM_PRINTLIST, aArgStr ); + { + AddStringListParam_Impl( CMD_STRINGPARAM_PRINTLIST, aArg ); + bOpenDoc = true; + } else if ( bPrintToEvent ) - AddStringListParam_Impl( CMD_STRINGPARAM_PRINTTOLIST, aArgStr ); + { + AddStringListParam_Impl( CMD_STRINGPARAM_PRINTTOLIST, aArg ); + bOpenDoc = true; + } else if ( bForceNewEvent ) - AddStringListParam_Impl( CMD_STRINGPARAM_FORCENEWLIST, aArgStr ); + { + AddStringListParam_Impl( CMD_STRINGPARAM_FORCENEWLIST, aArg ); + bOpenDoc = true; + } else if ( bForceOpenEvent ) - AddStringListParam_Impl( CMD_STRINGPARAM_FORCEOPENLIST, aArgStr ); - else if ( bDisplaySpec ){ - AddStringListParam_Impl( CMD_STRINGPARAM_DISPLAY, aArgStr ); - bDisplaySpec = sal_False; // only one display, not a lsit - bOpenEvent = sal_True; // set back to standard + { + AddStringListParam_Impl( CMD_STRINGPARAM_FORCEOPENLIST, aArg ); + bOpenDoc = true; + } + else if ( bDisplaySpec ) + { + AddStringListParam_Impl( CMD_STRINGPARAM_DISPLAY, aArg ); + bDisplaySpec = false; // only one display, not a lsit + bOpenEvent = true; // set back to standard } else if ( bConversionEvent || bBatchPrintEvent ) - AddStringListParam_Impl( CMD_STRINGPARAM_CONVERSIONLIST, aArgStr ); + AddStringListParam_Impl( CMD_STRINGPARAM_CONVERSIONLIST, aArg ); } } } } } + + if ( bOpenDoc ) + m_bDocumentArgs = true; } void CommandLineArgs::AddStringListParam_Impl( StringParam eParam, const rtl::OUString& aParam ) @@ -403,255 +412,245 @@ void CommandLineArgs::SetBoolParam_Impl( BoolParam eParam, sal_Bool bValue ) m_aBoolParams[eParam] = bValue; } -sal_Bool CommandLineArgs::InterpretCommandLineParameter( const ::rtl::OUString& aArg ) +sal_Bool CommandLineArgs::InterpretCommandLineParameter( const ::rtl::OUString& aArg, ::rtl::OUString& oArg ) { - String aArgStr( aArg ); + bool bDeprecated = false; + if (aArg.matchIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM("--"))) + { + oArg = ::rtl::OUString(aArg.getStr()+2, aArg.getLength()-2); + } + else if (aArg.toChar() == '-') + { + bDeprecated = true; + oArg = ::rtl::OUString(aArg.getStr()+1, aArg.getLength()-1); + } + else + { + return sal_False; + } - if ( aArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "-minimized" )) == sal_True ) + if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "minimized" )) == sal_True ) { SetBoolParam_Impl( CMD_BOOLPARAM_MINIMIZED, sal_True ); - return sal_True; } - else if ( aArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "-invisible" )) == sal_True ) + else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "invisible" )) == sal_True ) { SetBoolParam_Impl( CMD_BOOLPARAM_INVISIBLE, sal_True ); - return sal_True; } - else if ( aArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "-norestore" )) == sal_True ) + else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "norestore" )) == sal_True ) { SetBoolParam_Impl( CMD_BOOLPARAM_NORESTORE, sal_True ); - return sal_True; } - else if ( aArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "-nodefault" )) == sal_True ) + else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "nodefault" )) == sal_True ) { SetBoolParam_Impl( CMD_BOOLPARAM_NODEFAULT, sal_True ); - return sal_True; } - else if ( aArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "-bean" )) == sal_True ) + else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "bean" )) == sal_True ) { SetBoolParam_Impl( CMD_BOOLPARAM_BEAN, sal_True ); - return sal_True; } - else if ( aArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "-plugin" )) == sal_True ) + else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "plugin" )) == sal_True ) { SetBoolParam_Impl( CMD_BOOLPARAM_PLUGIN, sal_True ); - return sal_True; } - else if ( aArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "-server" )) == sal_True ) + else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "server" )) == sal_True ) { SetBoolParam_Impl( CMD_BOOLPARAM_SERVER, sal_True ); - return sal_True; } - else if ( aArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "-headless" )) == sal_True ) + else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "headless" )) == sal_True ) { // Headless means also invisibile, so set this parameter to true! SetBoolParam_Impl( CMD_BOOLPARAM_HEADLESS, sal_True ); SetBoolParam_Impl( CMD_BOOLPARAM_INVISIBLE, sal_True ); - return sal_True; } - else if ( aArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "-quickstart" )) == sal_True ) + else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "quickstart" )) == sal_True ) { #if defined(ENABLE_QUICKSTART_APPLET) SetBoolParam_Impl( CMD_BOOLPARAM_QUICKSTART, sal_True ); #endif SetBoolParam_Impl( CMD_BOOLPARAM_NOQUICKSTART, sal_False ); - return sal_True; } - else if ( aArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "-quickstart=no" ))) + else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "quickstart=no" ))) { SetBoolParam_Impl( CMD_BOOLPARAM_NOQUICKSTART, sal_True ); SetBoolParam_Impl( CMD_BOOLPARAM_QUICKSTART, sal_False ); - return sal_True; } - else if ( aArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "-terminate_after_init" )) == sal_True ) + else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "terminate_after_init" )) == sal_True ) { SetBoolParam_Impl( CMD_BOOLPARAM_TERMINATEAFTERINIT, sal_True ); - return sal_True; } - else if ( aArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "-nofirststartwizard" )) == sal_True ) + else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "nofirststartwizard" )) == sal_True ) { SetBoolParam_Impl( CMD_BOOLPARAM_NOFIRSTSTARTWIZARD, sal_True ); - return sal_True; } - else if ( aArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "-nologo" )) == sal_True ) + else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "nologo" )) == sal_True ) { SetBoolParam_Impl( CMD_BOOLPARAM_NOLOGO, sal_True ); - return sal_True; } - else if ( aArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "-nolockcheck" )) == sal_True ) + else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "nolockcheck" )) == sal_True ) { SetBoolParam_Impl( CMD_BOOLPARAM_NOLOCKCHECK, sal_True ); // Workaround for automated testing ::svt::DocumentLockFile::AllowInteraction( sal_False ); - - return sal_True; } - else if ( aArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "-help" )) + else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "help" )) || aArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "-h" )) || aArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "-?" ))) { SetBoolParam_Impl( CMD_BOOLPARAM_HELP, sal_True ); - return sal_True; } - else if ( aArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "-helpwriter" )) == sal_True ) + else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "helpwriter" )) == sal_True ) { SetBoolParam_Impl( CMD_BOOLPARAM_HELPWRITER, sal_True ); - return sal_True; } - else if ( aArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "-helpcalc" )) == sal_True ) + else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "helpcalc" )) == sal_True ) { SetBoolParam_Impl( CMD_BOOLPARAM_HELPCALC, sal_True ); - return sal_True; } - else if ( aArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "-helpdraw" )) == sal_True ) + else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "helpdraw" )) == sal_True ) { SetBoolParam_Impl( CMD_BOOLPARAM_HELPDRAW, sal_True ); - return sal_True; } - else if ( aArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "-helpimpress" )) == sal_True ) + else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "helpimpress" )) == sal_True ) { SetBoolParam_Impl( CMD_BOOLPARAM_HELPIMPRESS, sal_True ); - return sal_True; } - else if ( aArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "-helpbase" )) == sal_True ) + else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "helpbase" )) == sal_True ) { SetBoolParam_Impl( CMD_BOOLPARAM_HELPBASE, sal_True ); - return sal_True; } - else if ( aArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "-helpbasic" )) == sal_True ) + else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "helpbasic" )) == sal_True ) { SetBoolParam_Impl( CMD_BOOLPARAM_HELPBASIC, sal_True ); - return sal_True; } - else if ( aArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "-helpmath" )) == sal_True ) + else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "helpmath" )) == sal_True ) { SetBoolParam_Impl( CMD_BOOLPARAM_HELPMATH, sal_True ); - return sal_True; } - else if ( aArgStr.Copy(0, 13).EqualsIgnoreCaseAscii( "-splash-pipe=" )) + else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "version" )) == sal_True ) { - AddStringListParam_Impl( CMD_STRINGPARAM_SPLASHPIPE, aArgStr.Copy( 13 ) ); - return sal_True; + SetBoolParam_Impl( CMD_BOOLPARAM_VERSION, sal_True ); + } + else if ( oArg.matchIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM("splash-pipe=")) ) + { + AddStringListParam_Impl( CMD_STRINGPARAM_SPLASHPIPE, oArg.copy(RTL_CONSTASCII_LENGTH("splash-pipe=")) ); } - #ifdef MACOSX +#ifdef MACOSX /* #i84053# ignore -psn on Mac Platform dependent #ifdef here is ugly, however this is currently the only platform dependent parameter. Should more appear we should find a better solution */ - else if ( aArg.compareToAscii( "-psn", 4 ) == 0 ) + else if ( aArg.matchAsciiL(RTL_CONSTASCII_STRINGPARAM("-psn")) ) { SetBoolParam_Impl( CMD_BOOLPARAM_PSN, sal_True ); return sal_True; } - #endif - else if ( aArgStr.Copy(0, 10).EqualsIgnoreCaseAscii( "-infilter=" )) +#endif + else if ( oArg.matchIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM("infilter="))) { - AddStringListParam_Impl( CMD_STRINGPARAM_INFILTER, aArgStr.Copy( 10 ) ); - return sal_True; + AddStringListParam_Impl( CMD_STRINGPARAM_INFILTER, oArg.copy(RTL_CONSTASCII_LENGTH("infilter=")) ); } - else if ( aArgStr.Copy(0, 8).EqualsIgnoreCaseAscii( "-accept=" )) + else if ( oArg.matchIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM("accept="))) { - AddStringListParam_Impl( CMD_STRINGPARAM_ACCEPT, aArgStr.Copy( 8 ) ); - return sal_True; + AddStringListParam_Impl( CMD_STRINGPARAM_ACCEPT, oArg.copy(RTL_CONSTASCII_LENGTH("accept=")) ); } - else if ( aArgStr.Copy(0, 10).EqualsIgnoreCaseAscii( "-unaccept=" )) + else if ( oArg.matchIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM("unaccept="))) { - AddStringListParam_Impl( CMD_STRINGPARAM_UNACCEPT, aArgStr.Copy( 10 ) ); - return sal_True; + AddStringListParam_Impl( CMD_STRINGPARAM_UNACCEPT, oArg.copy(RTL_CONSTASCII_LENGTH("unaccept=")) ); } - else if ( aArgStr.CompareIgnoreCaseToAscii( "-portal," , - RTL_CONSTASCII_LENGTH( "-portal," )) == COMPARE_EQUAL ) + else if ( oArg.matchIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM("portal,"))) { - AddStringListParam_Impl( CMD_STRINGPARAM_PORTAL, aArgStr.Copy( RTL_CONSTASCII_LENGTH( "-portal," )) ); - return sal_True; + AddStringListParam_Impl( CMD_STRINGPARAM_PORTAL, oArg.copy(RTL_CONSTASCII_LENGTH("portal,")) ); } - else if ( aArgStr.Copy( 0, 7 ).EqualsIgnoreCaseAscii( "-userid" )) + else if ( oArg.matchIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM("userid"))) { - if ( aArgStr.Len() > 8 ) + if ( oArg.getLength() > RTL_CONSTASCII_LENGTH("userid")+1 ) { - rtl::OUString aUserDir = aArgStr; AddStringListParam_Impl( CMD_STRINGPARAM_USERDIR, - ::rtl::Uri::decode( aUserDir.copy( 8 ), + ::rtl::Uri::decode( oArg.copy(RTL_CONSTASCII_LENGTH("userid")+1), rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8 ) ); } - return sal_True; } - else if ( aArgStr.Copy( 0, 15).EqualsIgnoreCaseAscii( "-clientdisplay=" )) + else if ( oArg.matchIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM("clientdisplay="))) { - AddStringListParam_Impl( CMD_STRINGPARAM_CLIENTDISPLAY, aArgStr.Copy( 15 ) ); - return sal_True; + AddStringListParam_Impl( CMD_STRINGPARAM_CLIENTDISPLAY, oArg.copy(RTL_CONSTASCII_LENGTH("clientdisplay=")) ); } - else if ( aArgStr.Copy(0, 9).EqualsIgnoreCaseAscii( "-version=" )) + else if ( oArg.matchIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM("version="))) { - AddStringListParam_Impl( CMD_STRINGPARAM_VERSION, aArgStr.Copy( 9 ) ); - return sal_True; + AddStringListParam_Impl( CMD_STRINGPARAM_VERSION, oArg.copy(RTL_CONSTASCII_LENGTH("version=")) ); } - else if ( aArgStr.Copy(0, 10).EqualsIgnoreCaseAscii( "-language=" )) + else if ( oArg.matchIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM("language="))) { - AddStringListParam_Impl( CMD_STRINGPARAM_LANGUAGE, aArgStr.Copy( 10 ) ); - return sal_True; + AddStringListParam_Impl( CMD_STRINGPARAM_LANGUAGE, oArg.copy(RTL_CONSTASCII_LENGTH("language=")) ); } - else if ( aArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "-writer" )) == sal_True ) + else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "writer" )) == sal_True ) { sal_Bool bAlreadySet = CheckGroupMembers( CMD_GRPID_MODULE, CMD_BOOLPARAM_WRITER ); if ( !bAlreadySet ) SetBoolParam_Impl( CMD_BOOLPARAM_WRITER, sal_True ); - return sal_True; + m_bDocumentArgs = true; } - else if ( aArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "-calc" )) == sal_True ) + else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "calc" )) == sal_True ) { sal_Bool bAlreadySet = CheckGroupMembers( CMD_GRPID_MODULE, CMD_BOOLPARAM_CALC ); if ( !bAlreadySet ) SetBoolParam_Impl( CMD_BOOLPARAM_CALC, sal_True ); - return sal_True; + m_bDocumentArgs = true; } - else if ( aArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "-draw" )) == sal_True ) + else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "draw" )) == sal_True ) { sal_Bool bAlreadySet = CheckGroupMembers( CMD_GRPID_MODULE, CMD_BOOLPARAM_DRAW ); if ( !bAlreadySet ) SetBoolParam_Impl( CMD_BOOLPARAM_DRAW, sal_True ); - return sal_True; + m_bDocumentArgs = true; } - else if ( aArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "-impress" )) == sal_True ) + else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "impress" )) == sal_True ) { sal_Bool bAlreadySet = CheckGroupMembers( CMD_GRPID_MODULE, CMD_BOOLPARAM_IMPRESS ); if ( !bAlreadySet ) SetBoolParam_Impl( CMD_BOOLPARAM_IMPRESS, sal_True ); - return sal_True; + m_bDocumentArgs = true; } - else if ( aArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "-base" )) == sal_True ) + else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "base" )) == sal_True ) { sal_Bool bAlreadySet = CheckGroupMembers( CMD_GRPID_MODULE, CMD_BOOLPARAM_BASE ); if ( !bAlreadySet ) SetBoolParam_Impl( CMD_BOOLPARAM_BASE, sal_True ); - return sal_True; + m_bDocumentArgs = true; } - else if ( aArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "-global" )) == sal_True ) + else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "global" )) == sal_True ) { sal_Bool bAlreadySet = CheckGroupMembers( CMD_GRPID_MODULE, CMD_BOOLPARAM_GLOBAL ); if ( !bAlreadySet ) SetBoolParam_Impl( CMD_BOOLPARAM_GLOBAL, sal_True ); - return sal_True; + m_bDocumentArgs = true; } - else if ( aArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "-math" )) == sal_True ) + else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "math" )) == sal_True ) { sal_Bool bAlreadySet = CheckGroupMembers( CMD_GRPID_MODULE, CMD_BOOLPARAM_MATH ); if ( !bAlreadySet ) SetBoolParam_Impl( CMD_BOOLPARAM_MATH, sal_True ); - return sal_True; + m_bDocumentArgs = true; } - else if ( aArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "-web" )) == sal_True ) + else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "web" )) == sal_True ) { sal_Bool bAlreadySet = CheckGroupMembers( CMD_GRPID_MODULE, CMD_BOOLPARAM_WEB ); if ( !bAlreadySet ) SetBoolParam_Impl( CMD_BOOLPARAM_WEB, sal_True ); - return sal_True; + m_bDocumentArgs = true; } + else + return sal_False; - return sal_False; + if (bDeprecated) + { + rtl::OString sArg(rtl::OUStringToOString(aArg, RTL_TEXTENCODING_UTF8)); + fprintf(stderr, "Warning: %s is deprecated. Use -%s instead.\n", sArg.getStr(), sArg.getStr()); + } + return sal_True; } sal_Bool CommandLineArgs::CheckGroupMembers( GroupParamId nGroupId, BoolParam nExcludeMember ) const @@ -670,12 +669,12 @@ sal_Bool CommandLineArgs::CheckGroupMembers( GroupParamId nGroupId, BoolParam nE void CommandLineArgs::ResetParamValues() { int i; - for ( i = 0; i < CMD_BOOLPARAM_COUNT; i++ ) m_aBoolParams[i] = sal_False; for ( i = 0; i < CMD_STRINGPARAM_COUNT; i++ ) m_aStrSetParams[i] = sal_False; m_eArgumentCount = NONE; + m_bDocumentArgs = false; } void CommandLineArgs::SetBoolParam( BoolParam eParam, sal_Bool bNewValue ) @@ -754,12 +753,6 @@ sal_Bool CommandLineArgs::IsTerminateAfterInit() const return m_aBoolParams[ CMD_BOOLPARAM_TERMINATEAFTERINIT ]; } -sal_Bool CommandLineArgs::IsNoFirstStartWizard() const -{ - osl::MutexGuard aMutexGuard( m_aMutex ); - return m_aBoolParams[ CMD_BOOLPARAM_NOFIRSTSTARTWIZARD ]; -} - sal_Bool CommandLineArgs::IsNoLogo() const { osl::MutexGuard aMutexGuard( m_aMutex ); @@ -865,6 +858,12 @@ sal_Bool CommandLineArgs::IsWeb() const return m_aBoolParams[ CMD_BOOLPARAM_WEB ]; } +sal_Bool CommandLineArgs::IsVersion() const +{ + osl::MutexGuard aMutexGuard( m_aMutex ); + return m_aBoolParams[ CMD_BOOLPARAM_VERSION ]; +} + sal_Bool CommandLineArgs::HasModuleParam() const { osl::MutexGuard aMutexGuard( m_aMutex ); @@ -982,8 +981,6 @@ sal_Bool CommandLineArgs::GetConversionOut( ::rtl::OUString& rPara ) const return m_aStrSetParams[ CMD_STRINGPARAM_CONVERSIONOUT ]; } - - sal_Bool CommandLineArgs::IsEmpty() const { osl::MutexGuard aMutexGuard( m_aMutex ); @@ -1000,6 +997,12 @@ sal_Bool CommandLineArgs::IsEmptyOrAcceptOnly() const ( ( m_eArgumentCount == ONE ) && m_aBoolParams[ CMD_BOOLPARAM_PSN ] ); } +sal_Bool CommandLineArgs::WantsToLoadDocument() const +{ + osl::MutexGuard aMutexGuard( m_aMutex ); + return m_bDocumentArgs; +} + } // namespace desktop /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/desktop/source/app/cmdlineargs.hxx b/desktop/source/app/cmdlineargs.hxx index 05b31f40ec..c983ab274f 100644 --- a/desktop/source/app/cmdlineargs.hxx +++ b/desktop/source/app/cmdlineargs.hxx @@ -39,9 +39,9 @@ namespace desktop class CommandLineArgs { public: - enum BoolParam // must be zero based! + enum BoolParam // must be zero based! { - CMD_BOOLPARAM_MINIMIZED, + CMD_BOOLPARAM_MINIMIZED = 0, CMD_BOOLPARAM_INVISIBLE, CMD_BOOLPARAM_NORESTORE, CMD_BOOLPARAM_BEAN, @@ -72,12 +72,13 @@ class CommandLineArgs CMD_BOOLPARAM_HELPIMPRESS, CMD_BOOLPARAM_HELPBASE, CMD_BOOLPARAM_PSN, + CMD_BOOLPARAM_VERSION, CMD_BOOLPARAM_COUNT // must be last element! }; enum StringParam // must be zero based! { - CMD_STRINGPARAM_PORTAL, + CMD_STRINGPARAM_PORTAL = 0, CMD_STRINGPARAM_SPLASHPIPE, CMD_STRINGPARAM_ACCEPT, CMD_STRINGPARAM_UNACCEPT, @@ -98,16 +99,17 @@ class CommandLineArgs CMD_STRINGPARAM_INFILTER, CMD_STRINGPARAM_DISPLAY, CMD_STRINGPARAM_LANGUAGE, - CMD_STRINGPARAM_COUNT // must be last element! + CMD_STRINGPARAM_COUNT // must be last element! }; enum GroupParamId { - CMD_GRPID_MODULE, + CMD_GRPID_MODULE = 0, CMD_GRPID_COUNT }; - struct Supplier { + struct Supplier + { // Thrown from constructors and next: class Exception { public: @@ -128,7 +130,7 @@ class CommandLineArgs boost::optional< rtl::OUString > getCwdUrl() const { return m_cwdUrl; } // generic methods to access parameter - void SetBoolParam( BoolParam eParam, sal_Bool bNewValue ); + void SetBoolParam( BoolParam eParam, sal_Bool bNewValue ); const rtl::OUString& GetStringParam( StringParam eParam ) const; @@ -143,7 +145,6 @@ class CommandLineArgs sal_Bool IsQuickstart() const; sal_Bool IsNoQuickstart() const; sal_Bool IsTerminateAfterInit() const; - sal_Bool IsNoFirstStartWizard() const; sal_Bool IsNoLogo() const; sal_Bool IsNoLockcheck() const; sal_Bool IsHelp() const; @@ -162,7 +163,9 @@ class CommandLineArgs sal_Bool IsGlobal() const; sal_Bool IsMath() const; sal_Bool IsWeb() const; + sal_Bool IsVersion() const; sal_Bool HasModuleParam() const; + sal_Bool WantsToLoadDocument() const; // Access to string parameters sal_Bool GetPortalConnectString( ::rtl::OUString& rPara) const; @@ -183,40 +186,41 @@ class CommandLineArgs sal_Bool GetConversionOut( ::rtl::OUString& rPara ) const; // Special analyzed states (does not match directly to a command line parameter!) - sal_Bool IsPrinting() const; - sal_Bool IsEmpty() const; - sal_Bool IsEmptyOrAcceptOnly() const; + sal_Bool IsPrinting() const; + sal_Bool IsEmpty() const; + sal_Bool IsEmptyOrAcceptOnly() const; private: enum Count { NONE, ONE, MANY }; struct GroupDefinition { - sal_Int32 nCount; - BoolParam* pGroupMembers; + sal_Int32 nCount; + BoolParam* pGroupMembers; }; // no copy and operator= CommandLineArgs( const CommandLineArgs& ); CommandLineArgs operator=( const CommandLineArgs& ); - sal_Bool InterpretCommandLineParameter( const ::rtl::OUString& ); + sal_Bool InterpretCommandLineParameter( const ::rtl::OUString&, ::rtl::OUString& ); void ParseCommandLine_Impl( Supplier& supplier ); void ResetParamValues(); sal_Bool CheckGroupMembers( GroupParamId nGroup, BoolParam nExcludeMember ) const; - void AddStringListParam_Impl( StringParam eParam, const rtl::OUString& aParam ); - void SetBoolParam_Impl( BoolParam eParam, sal_Bool bValue ); + void AddStringListParam_Impl( StringParam eParam, const rtl::OUString& aParam ); + void SetBoolParam_Impl( BoolParam eParam, sal_Bool bValue ); boost::optional< rtl::OUString > m_cwdUrl; - sal_Bool m_aBoolParams[ CMD_BOOLPARAM_COUNT ]; // Stores boolean parameters - rtl::OUString m_aStrParams[ CMD_STRINGPARAM_COUNT ]; // Stores string parameters - sal_Bool m_aStrSetParams[ CMD_STRINGPARAM_COUNT ]; // Stores if string parameters are provided on cmdline - Count m_eArgumentCount; // Number of Args - mutable ::osl::Mutex m_aMutex; + sal_Bool m_aBoolParams[ CMD_BOOLPARAM_COUNT ]; // Stores boolean parameters + rtl::OUString m_aStrParams[ CMD_STRINGPARAM_COUNT ]; // Stores string parameters + sal_Bool m_aStrSetParams[ CMD_STRINGPARAM_COUNT ]; // Stores if string parameters are provided on cmdline + Count m_eArgumentCount; // Number of Args + bool m_bDocumentArgs; // A document creation/open/load arg is used + mutable ::osl::Mutex m_aMutex; // static definition for groups where only one member can be true - static GroupDefinition m_pGroupDefinitions[ CMD_GRPID_COUNT ]; + static GroupDefinition m_pGroupDefinitions[ CMD_GRPID_COUNT ]; }; } diff --git a/desktop/source/app/cmdlinehelp.cxx b/desktop/source/app/cmdlinehelp.cxx index 110aa3e731..6a09755a7b 100644 --- a/desktop/source/app/cmdlinehelp.cxx +++ b/desktop/source/app/cmdlinehelp.cxx @@ -54,30 +54,32 @@ namespace desktop // __BOTTOM__ // [OK] - const char *aCmdLineHelp_head = + const char *aCmdLineHelp_version = "%PRODUCTNAME %PRODUCTVERSION %PRODUCTEXTENSION %BUILDID\n"\ - "\n"\ + "\n"; + const char *aCmdLineHelp_head = "Usage: %CMDNAME [options] [documents...]\n"\ "\n"\ "Options:\n"; const char *aCmdLineHelp_left = - "-minimized \n"\ - "-invisible \n"\ - "-norestore \n"\ - "-quickstart \n"\ - "-nologo \n"\ - "-nolockcheck \n"\ - "-nodefault \n"\ - "-headless \n"\ - "-help/-h/-? \n"\ - "-writer \n"\ - "-calc \n"\ - "-draw \n"\ - "-impress \n"\ - "-base \n"\ - "-math \n"\ - "-global \n"\ - "-web \n"\ + "--minimized \n"\ + "--invisible \n"\ + "--norestore \n"\ + "--quickstart \n"\ + "--nologo \n"\ + "--nolockcheck \n"\ + "--nodefault \n"\ + "--headless \n"\ + "--help/-h/-? \n"\ + "--version \n"\ + "--writer \n"\ + "--calc \n"\ + "--draw \n"\ + "--impress \n"\ + "--base \n"\ + "--math \n"\ + "--global \n"\ + "--web \n"\ "-o \n"\ "-n \n"; const char *aCmdLineHelp_right = @@ -90,6 +92,7 @@ namespace desktop "don't start with an empty document\n"\ "like invisible but no userinteraction at all.\n"\ "show this message and exit.\n"\ + "display the version information.\n"\ "create new text document.\n"\ "create new spreadsheet document.\n"\ "create new drawing.\n"\ @@ -101,36 +104,36 @@ namespace desktop "open documents regardless whether they are templates or not.\n"\ "always open documents as new files (use as template).\n"; const char *aCmdLineHelp_bottom = - "-display <display>\n"\ + "--display <display>\n"\ " Specify X-Display to use in Unix/X11 versions.\n" "-p <documents...>\n"\ " print the specified documents on the default printer.\n"\ - "-pt <printer> <documents...>\n"\ + "--pt <printer> <documents...>\n"\ " print the specified documents on the specified printer.\n"\ - "-view <documents...>\n"\ + "--view <documents...>\n"\ " open the specified documents in viewer-(readonly-)mode.\n"\ - "-show <presentation>\n"\ + "--show <presentation>\n"\ " open the specified presentation and start it immediately\n"\ - "-accept=<accept-string>\n"\ + "--accept=<accept-string>\n"\ " Specify an UNO connect-string to create an UNO acceptor through which\n"\ " other programs can connect to access the API\n"\ - "-unaccept=<accept-string>\n"\ + "--unaccept=<accept-string>\n"\ " Close an acceptor that was created with -accept=<accept-string>\n"\ " Use -unnaccept=all to close all open acceptors\n"\ - "-infilter=<filter>\n"\ + "--infilter=<filter>\n"\ " Force an input filter type if possible\n"\ " Eg. -infilter=\"Calc Office Open XML\"\n"\ - "-convert-to output_file_extension[:output_filter_name] [-outdir ouput_dir] files\n"\ + "--convert-to output_file_extension[:output_filter_name] [-outdir ouput_dir] files\n"\ " Batch convert files.\n"\ " If -outdir is not specified then current working dir is used as output_dir.\n"\ " Eg. -convert-to pdf *.doc\n"\ " -convert-to pdf:writer_pdf_Export -outdir /home/user *.doc\n"\ - "-print-to-file [-printer-name printer_name] [-outdir ouput_dir] files\n"\ + "--print-to-file [-printer-name printer_name] [-outdir ouput_dir] files\n"\ " Batch print files to file.\n"\ " If -outdir is not specified then current working dir is used as output_dir.\n"\ " Eg. -print-to-file *.doc\n"\ " -print-to-file -printer-name nasty_lowres_printer -outdir /home/user *.doc\n"\ - "\nRemaining arguments will be treated as filenames or URLs of documents to open.\n"; + "\nRemaining arguments will be treated as filenames or URLs of documents to open.\n\n"; void ReplaceStringHookProc( UniString& rStr ); @@ -138,40 +141,62 @@ namespace desktop { // if you put variables in other chunks don't forget to call the replace routines // for those chunks... + String aHelpMessage_version(aCmdLineHelp_version, RTL_TEXTENCODING_ASCII_US); String aHelpMessage_head(aCmdLineHelp_head, RTL_TEXTENCODING_ASCII_US); String aHelpMessage_left(aCmdLineHelp_left, RTL_TEXTENCODING_ASCII_US); String aHelpMessage_right(aCmdLineHelp_right, RTL_TEXTENCODING_ASCII_US); String aHelpMessage_bottom(aCmdLineHelp_bottom, RTL_TEXTENCODING_ASCII_US); - ReplaceStringHookProc(aHelpMessage_head); + ReplaceStringHookProc(aHelpMessage_version); ::rtl::OUString aDefault; String aVerId( ::utl::Bootstrap::getBuildIdData( aDefault )); - aHelpMessage_head.SearchAndReplaceAscii( "%BUILDID", aVerId ); + aHelpMessage_version.SearchAndReplaceAscii( "%BUILDID", aVerId ); aHelpMessage_head.SearchAndReplaceAscii( "%CMDNAME", String( "soffice", RTL_TEXTENCODING_ASCII_US) ); #ifdef UNX // on unix use console for output - fprintf(stderr, "%s\n", ByteString(aHelpMessage_head, - RTL_TEXTENCODING_ASCII_US).GetBuffer()); + fprintf(stdout, "%s%s", + ByteString(aHelpMessage_version, RTL_TEXTENCODING_ASCII_US).GetBuffer(), + ByteString(aHelpMessage_head, RTL_TEXTENCODING_ASCII_US).GetBuffer()); // merge left and right column int n = aHelpMessage_left.GetTokenCount ('\n'); ByteString bsLeft(aHelpMessage_left, RTL_TEXTENCODING_ASCII_US); ByteString bsRight(aHelpMessage_right, RTL_TEXTENCODING_ASCII_US); for ( int i = 0; i < n; i++ ) { - fprintf(stderr, "%s", bsLeft.GetToken(i, '\n').GetBuffer()); - fprintf(stderr, "%s\n", bsRight.GetToken(i, '\n').GetBuffer()); + fprintf(stdout, "%s", bsLeft.GetToken(i, '\n').GetBuffer()); + fprintf(stdout, "%s\n", bsRight.GetToken(i, '\n').GetBuffer()); } - fprintf(stderr, "%s", ByteString(aHelpMessage_bottom, + fprintf(stdout, "%s", ByteString(aHelpMessage_bottom, RTL_TEXTENCODING_ASCII_US).GetBuffer()); #else // rest gets a dialog box CmdlineHelpDialog aDlg; - aDlg.m_ftHead.SetText(aHelpMessage_head); + String head = aHelpMessage_version; + head.Append(aHelpMessage_head); + aDlg.m_ftHead.SetText(head); aDlg.m_ftLeft.SetText(aHelpMessage_left); aDlg.m_ftRight.SetText(aHelpMessage_right); aDlg.m_ftBottom.SetText(aHelpMessage_bottom); aDlg.Execute(); #endif } + + void displayVersion() + { + String aVersionMsg(aCmdLineHelp_version, RTL_TEXTENCODING_ASCII_US); + ReplaceStringHookProc(aVersionMsg); + ::rtl::OUString aDefault; + String aVerId = ::utl::Bootstrap::getBuildIdData(aDefault); + aVersionMsg.SearchAndReplaceAscii("%BUILDID", aVerId); +#ifdef UNX + fprintf(stdout, "%s", ByteString(aVersionMsg, RTL_TEXTENCODING_ASCII_US).GetBuffer()); +#else + // Just re-use the help dialog for now. + CmdlineHelpDialog aDlg; + aDlg.m_ftHead.SetText(aVersionMsg); + aDlg.Execute(); +#endif + } + #ifndef UNX CmdlineHelpDialog::CmdlineHelpDialog (void) : ModalDialog( NULL, DesktopResId( DLG_CMDLINEHELP ) ) diff --git a/desktop/source/app/cmdlinehelp.hxx b/desktop/source/app/cmdlinehelp.hxx index 823e7b4d9f..2036d64678 100644 --- a/desktop/source/app/cmdlinehelp.hxx +++ b/desktop/source/app/cmdlinehelp.hxx @@ -6,6 +6,7 @@ namespace desktop { void displayCmdlineHelp( void ); + void displayVersion(); #ifndef UNX class CmdlineHelpDialog : public ModalDialog { diff --git a/desktop/source/app/configinit.cxx b/desktop/source/app/configinit.cxx index 3704d842c3..c5bad69298 100644 --- a/desktop/source/app/configinit.cxx +++ b/desktop/source/app/configinit.cxx @@ -81,7 +81,7 @@ typedef uno::Reference< lang::XMultiServiceFactory > ConfigurationProvider; // Get a message string securely. There is a fallback string if the resource // is not available. Adapted from Desktop::GetMsgString() -OUString getMsgString( USHORT nId, char const * aFallBackMsg ) +OUString getMsgString( sal_uInt16 nId, char const * aFallBackMsg ) { ResMgr* pResMgr = Desktop::GetDesktopResManager(); if ( !pResMgr || !nId ) @@ -176,7 +176,6 @@ uno::Reference< lang::XMultiServiceFactory > CreateApplicationConfigurationProvi // ---------------------------------------------------------------------------- -// ---------------------------------------------------------------------------- // ConfigurationErrorHandler // ---------------------------------------------------------------------------- @@ -243,7 +242,7 @@ private: uno::Any SAL_CALL ConfigurationErrorHandler::Context::getValueByName( OUString const & aName) throw (uno::RuntimeException) { - if ( aName.equalsAscii( CONFIG_ERROR_HANDLER ) ) + if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(CONFIG_ERROR_HANDLER)) ) { if ( !m_xHandler.is() ) m_xHandler = ConfigurationErrorHandler::getDefaultInteractionHandler(); diff --git a/desktop/source/app/copyright_ascii_ooo.c b/desktop/source/app/copyright_ascii_ooo.c index b35aa2cee9..b35aa2cee9 100644..100755 --- a/desktop/source/app/copyright_ascii_ooo.c +++ b/desktop/source/app/copyright_ascii_ooo.c diff --git a/desktop/source/app/copyright_ascii_sun.c b/desktop/source/app/copyright_ascii_sun.c index a94966855e..a94966855e 100644..100755 --- a/desktop/source/app/copyright_ascii_sun.c +++ b/desktop/source/app/copyright_ascii_sun.c diff --git a/desktop/source/app/desktop.hrc b/desktop/source/app/desktop.hrc index 035318b4d7..035318b4d7 100644..100755 --- a/desktop/source/app/desktop.hrc +++ b/desktop/source/app/desktop.hrc diff --git a/desktop/source/app/desktop.src b/desktop/source/app/desktop.src index e333c44181..10411e5adb 100644 --- a/desktop/source/app/desktop.src +++ b/desktop/source/app/desktop.src @@ -159,6 +159,7 @@ InfoBox INFOBOX_CMDLINEHELP ModalDialog DLG_CMDLINEHELP { + HelpID = "desktop:ModalDialog:DLG_CMDLINEHELP"; Text = "Help Message..."; Size = MAP_APPFONT(250, 365); Border = True; diff --git a/desktop/source/app/desktopcontext.cxx b/desktop/source/app/desktopcontext.cxx index 73038d30f7..a6b29a092d 100644 --- a/desktop/source/app/desktopcontext.cxx +++ b/desktop/source/app/desktopcontext.cxx @@ -33,10 +33,11 @@ #include <vcl/svapp.hxx> #include <svtools/javainteractionhandler.hxx> -using namespace rtl; using namespace com::sun::star::uno; using namespace com::sun::star::task; +using ::rtl::OUString; + namespace desktop { @@ -49,7 +50,7 @@ Any SAL_CALL DesktopContext::getValueByName( const OUString& Name) throw (Runtim { Any retVal; - if ( 0 == Name.compareToAscii( JAVA_INTERACTION_HANDLER_NAME )) + if (Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(JAVA_INTERACTION_HANDLER_NAME))) { retVal = makeAny( Reference< XInteractionHandler >( new svt::JavaInteractionHandler()) ); } diff --git a/desktop/source/app/desktopresid.cxx b/desktop/source/app/desktopresid.cxx index 347ee542a3..b817738772 100644 --- a/desktop/source/app/desktopresid.cxx +++ b/desktop/source/app/desktopresid.cxx @@ -37,7 +37,7 @@ namespace desktop { -DesktopResId::DesktopResId( USHORT nId ) : +DesktopResId::DesktopResId( sal_uInt16 nId ) : ResId( nId, *Desktop::GetDesktopResManager() ) { } diff --git a/desktop/source/app/desktopresid.hxx b/desktop/source/app/desktopresid.hxx index 689a0f11da..2a517c9f29 100644 --- a/desktop/source/app/desktopresid.hxx +++ b/desktop/source/app/desktopresid.hxx @@ -37,7 +37,7 @@ namespace desktop class DesktopResId : public ResId { public: - DesktopResId( USHORT nId ); + DesktopResId( sal_uInt16 nId ); }; } diff --git a/desktop/source/app/dispatchwatcher.cxx b/desktop/source/app/dispatchwatcher.cxx index 7701bbae48..2a9dcad5c7 100644 --- a/desktop/source/app/dispatchwatcher.cxx +++ b/desktop/source/app/dispatchwatcher.cxx @@ -94,7 +94,7 @@ static String impl_GetFilterFromExt( OUString aUrl, SfxFilterFlags nFlags, { String aFilter; SfxMedium* pMedium = new SfxMedium( aUrl, - STREAM_STD_READ, FALSE ); + STREAM_STD_READ, sal_False ); const SfxFilter *pSfxFilter = NULL; SfxFilterMatcher aMatcher; if( nFlags == SFX_FILTER_EXPORT ) @@ -176,7 +176,7 @@ sal_Bool DispatchWatcher::executeDispatchRequests( const DispatchList& aDispatch sal_Bool bSetInputFilter = sal_False; ::rtl::OUString aForcedInputFilter; - for ( p = aDispatchRequestsList.begin(); p != aDispatchRequestsList.end(); p++ ) + for ( p = aDispatchRequestsList.begin(); p != aDispatchRequestsList.end(); ++p ) { const DispatchRequest& aDispatchRequest = *p; @@ -340,7 +340,7 @@ sal_Bool DispatchWatcher::executeDispatchRequests( const DispatchList& aDispatch { OUString aMsg = OUString(RTL_CONSTASCII_USTRINGPARAM( "Desktop::OpenDefault() IllegalArgumentException while calling XNotifyingDispatch: ")); - OSL_ENSURE( sal_False, OUStringToOString(aMsg, RTL_TEXTENCODING_ASCII_US).getStr()); + OSL_FAIL( OUStringToOString(aMsg, RTL_TEXTENCODING_ASCII_US).getStr()); } } } @@ -364,7 +364,6 @@ sal_Bool DispatchWatcher::executeDispatchRequests( const DispatchList& aDispatch } // if we are called in viewmode, open document read-only - // #95425# if(aDispatchRequest.aRequestType == REQUEST_VIEW) { sal_Int32 nIndex = aArgs.getLength(); aArgs.realloc(nIndex+1); @@ -393,21 +392,20 @@ sal_Bool DispatchWatcher::executeDispatchRequests( const DispatchList& aDispatch try { xDoc = Reference < XPrintable >( ::comphelper::SynchronousDispatch::dispatch( xDesktop, aName, aTarget, 0, aArgs ), UNO_QUERY ); - //xDoc = Reference < XPrintable >( xDesktop->loadComponentFromURL( aName, aTarget, 0, aArgs ), UNO_QUERY ); } catch ( ::com::sun::star::lang::IllegalArgumentException& iae) { OUString aMsg = OUString(RTL_CONSTASCII_USTRINGPARAM( "Dispatchwatcher IllegalArgumentException while calling loadComponentFromURL: ")) + iae.Message; - OSL_ENSURE( sal_False, OUStringToOString(aMsg, RTL_TEXTENCODING_ASCII_US).getStr()); + OSL_FAIL( OUStringToOString(aMsg, RTL_TEXTENCODING_ASCII_US).getStr()); } catch (com::sun::star::io::IOException& ioe) { OUString aMsg = OUString(RTL_CONSTASCII_USTRINGPARAM( "Dispatchwatcher IOException while calling loadComponentFromURL: ")) + ioe.Message; - OSL_ENSURE( sal_False, OUStringToOString(aMsg, RTL_TEXTENCODING_ASCII_US).getStr()); + OSL_FAIL( OUStringToOString(aMsg, RTL_TEXTENCODING_ASCII_US).getStr()); } if ( aDispatchRequest.aRequestType == REQUEST_OPEN || aDispatchRequest.aRequestType == REQUEST_VIEW || @@ -455,7 +453,6 @@ sal_Bool DispatchWatcher::executeDispatchRequests( const DispatchList& aDispatch rtl::OUString aOutFile = aFilterOut+ ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "/" ))+ aOutFilename.getName(); - //FileBase::getFileURLFromSystemPath( aOutFile, aOutFile ); if ( bGuess ) { @@ -639,18 +636,6 @@ void SAL_CALL DispatchWatcher::dispatchFinished( const DispatchResultEvent& ) th sal_Int16 nCount = --m_nRequestCount; aGuard.clear(); OfficeIPCThread::RequestsCompleted( 1 ); -/* - // Find request in our hash map and remove it as a pending request - DispatchWatcherHashMap::iterator pDispatchEntry = m_aRequestContainer.find( rEvent.FeatureURL.Complete ) ; - if ( pDispatchEntry != m_aRequestContainer.end() ) - { - m_aRequestContainer.erase( pDispatchEntry ); - aGuard.clear(); - OfficeIPCThread::RequestsCompleted( 1 ); - } - else - aGuard.clear(); -*/ if ( !nCount && !OfficeIPCThread::AreRequestsPending() ) { // We have to check if we have an open task otherwise we have to shutdown the office. diff --git a/desktop/source/app/dispatchwatcher.hxx b/desktop/source/app/dispatchwatcher.hxx index 6dc2d9362c..a787c1e069 100644 --- a/desktop/source/app/dispatchwatcher.hxx +++ b/desktop/source/app/dispatchwatcher.hxx @@ -34,7 +34,7 @@ #include <com/sun/star/frame/XDispatchResultListener.hpp> #include "officeipcthread.hxx" -#include <hash_map> +#include <boost/unordered_map.hpp> #include <vector> namespace desktop @@ -56,7 +56,7 @@ struct OUStringHashCode } }; -class DispatchWatcherHashMap : public ::std::hash_map< ::rtl::OUString, sal_Int32, OUStringHashCode, ::std::equal_to< ::rtl::OUString > > +class DispatchWatcherHashMap : public ::boost::unordered_map< ::rtl::OUString, sal_Int32, OUStringHashCode, ::std::equal_to< ::rtl::OUString > > { public: inline void free() diff --git a/desktop/source/app/exports.dxp b/desktop/source/app/exports.dxp index 9630d7e067..f0e1c69934 100644..100755 --- a/desktop/source/app/exports.dxp +++ b/desktop/source/app/exports.dxp @@ -1,3 +1,2 @@ component_getImplementationEnvironment -component_writeInfo component_getFactory diff --git a/desktop/source/app/langselect.cxx b/desktop/source/app/langselect.cxx index e356360608..7e0776799b 100644 --- a/desktop/source/app/langselect.cxx +++ b/desktop/source/app/langselect.cxx @@ -54,13 +54,16 @@ #include <osl/process.h> #include <osl/file.hxx> -using namespace rtl; using namespace com::sun::star::uno; using namespace com::sun::star::lang; using namespace com::sun::star::container; using namespace com::sun::star::beans; using namespace com::sun::star::util; +using ::rtl::OUString; +using ::rtl::OUStringBuffer; +using ::rtl::OString; + namespace desktop { static char const SOFFICE_BOOTSTRAP[] = "Bootstrap"; @@ -268,7 +271,7 @@ bool LanguageSelection::prepareLanguage() catch (Exception& e) { OString aMsg = OUStringToOString(e.Message, RTL_TEXTENCODING_ASCII_US); - OSL_ENSURE(sal_False, aMsg.getStr()); + OSL_FAIL(aMsg.getStr()); } } @@ -283,7 +286,6 @@ bool LanguageSelection::prepareLanguage() void LanguageSelection::setDefaultLanguage(const OUString& sLocale) { // #i32939# setting of default document language - // // See #i42730# for rules for determining source of settings // determine script type of locale @@ -396,7 +398,7 @@ Reference< XNameAccess > LanguageSelection::getConfigAccess(const sal_Char* pPat } catch (com::sun::star::uno::Exception& e) { OString aMsg = OUStringToOString(e.Message, RTL_TEXTENCODING_ASCII_US); - OSL_ENSURE(sal_False, aMsg.getStr()); + OSL_FAIL(aMsg.getStr()); } return xNameAccess; } @@ -416,7 +418,7 @@ Sequence< OUString > LanguageSelection::getInstalledLanguages() static Sequence< OUString > _getFallbackLocales(const OUString& aIsoLang) { Sequence< OUString > seqFallbacks; - if (aIsoLang.equalsAscii("zh-HK")) { + if (aIsoLang.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("zh-HK"))) { seqFallbacks = Sequence< OUString >(1); seqFallbacks[0] = OUString(RTL_CONSTASCII_USTRINGPARAM("zh-TW")); } @@ -536,7 +538,7 @@ void LanguageSelection::resetUserLanguage() try { Reference< XPropertySet > xProp(getConfigAccess("org.openoffice.Office.Linguistic/General", sal_True), UNO_QUERY_THROW); - xProp->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("UILocale")), makeAny(OUString::createFromAscii(""))); + xProp->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("UILocale")), makeAny(OUString())); Reference< XChangesBatch >(xProp, UNO_QUERY_THROW)->commitChanges(); } catch ( PropertyVetoException& ) @@ -546,7 +548,7 @@ void LanguageSelection::resetUserLanguage() catch ( Exception& e) { OString aMsg = OUStringToOString(e.Message, RTL_TEXTENCODING_ASCII_US); - OSL_ENSURE(sal_False, aMsg.getStr()); + OSL_FAIL(aMsg.getStr()); m_eStatus = LS_STATUS_CONFIGURATIONACCESS_BROKEN; } } diff --git a/desktop/source/app/lockfile.cxx b/desktop/source/app/lockfile.cxx index db23c7db19..8ac41ce99a 100644 --- a/desktop/source/app/lockfile.cxx +++ b/desktop/source/app/lockfile.cxx @@ -30,12 +30,10 @@ #include "precompiled_desktop.hxx" #include <stdlib.h> #include <time.h> -#ifdef WNT -#include <tools/prewin.h> -#include <windows.h> -#include <tools/postwin.h> -#else +#ifndef WNT #include <unistd.h> +#else +#include <windows.h> #endif #include <sal/types.h> #include <osl/file.hxx> @@ -104,7 +102,7 @@ namespace desktop { int tmpByte = 0; for (int i = 0; i<nIdBytes; i++) { tmpByte = rand( ) % 0xFF; - sprintf( tmpId+i*2, "%02X", tmpByte ); // #100211# - checked + sprintf( tmpId+i*2, "%02X", tmpByte ); } tmpId[nIdBytes*2]=0x00; m_aId = OUString::createFromAscii( tmpId ); @@ -121,7 +119,7 @@ namespace desktop { // try to create file File aFile(m_aLockname); - if (aFile.open( OpenFlag_Create ) == File::E_EXIST) { + if (aFile.open( osl_File_OpenFlag_Create ) == File::E_EXIST) { m_bIsLocked = sal_True; } else { // new lock created @@ -141,7 +139,7 @@ namespace desktop { // remove file and create new File::remove( m_aLockname ); File aFile(m_aLockname); - aFile.open( OpenFlag_Create ); + aFile.open( osl_File_OpenFlag_Create ); aFile.close( ); syncToFile( ); m_bRemove = sal_True; @@ -165,21 +163,21 @@ namespace desktop { String aLockname = m_aLockname; Config aConfig(aLockname); aConfig.SetGroup(LOCKFILE_GROUP); - ByteString aIPCserver = aConfig.ReadKey( LOCKFILE_IPCKEY ); - if (! aIPCserver.EqualsIgnoreCaseAscii( "true" )) + rtl::OString aIPCserver = aConfig.ReadKey( LOCKFILE_IPCKEY ); + if (!aIPCserver.equalsIgnoreAsciiCase(rtl::OString("true"))) return false; - ByteString aHost = aConfig.ReadKey( LOCKFILE_HOSTKEY ); - ByteString aUser = aConfig.ReadKey( LOCKFILE_USERKEY ); + rtl::OString aHost = aConfig.ReadKey( LOCKFILE_HOSTKEY ); + rtl::OString aUser = aConfig.ReadKey( LOCKFILE_USERKEY ); // lockfile from same host? - ByteString myHost( impl_getHostname() ); + rtl::OString myHost( impl_getHostname() ); if (aHost == myHost) { // lockfile by same UID OUString myUserName; Security aSecurity; aSecurity.getUserName( myUserName ); - ByteString myUser = OUStringToOString( myUserName, RTL_TEXTENCODING_ASCII_US ); + rtl::OString myUser(rtl::OUStringToOString(myUserName, RTL_TEXTENCODING_ASCII_US)); if (aUser == myUser) return sal_True; } @@ -193,13 +191,13 @@ namespace desktop { aConfig.SetGroup(LOCKFILE_GROUP); // get information - ByteString aHost( impl_getHostname() ); + rtl::OString aHost( impl_getHostname() ); OUString aUserName; Security aSecurity; aSecurity.getUserName( aUserName ); - ByteString aUser = OUStringToOString( aUserName, RTL_TEXTENCODING_ASCII_US ); - ByteString aTime = OUStringToOString( m_aDate, RTL_TEXTENCODING_ASCII_US ); - ByteString aStamp = OUStringToOString( m_aId, RTL_TEXTENCODING_ASCII_US ); + rtl::OString aUser = OUStringToOString( aUserName, RTL_TEXTENCODING_ASCII_US ); + rtl::OString aTime = OUStringToOString( m_aDate, RTL_TEXTENCODING_ASCII_US ); + rtl::OString aStamp = OUStringToOString( m_aId, RTL_TEXTENCODING_ASCII_US ); // write information aConfig.WriteKey( LOCKFILE_USERKEY, aUser ); @@ -208,7 +206,7 @@ namespace desktop { aConfig.WriteKey( LOCKFILE_TIMEKEY, aTime ); aConfig.WriteKey( LOCKFILE_IPCKEY, - m_bIPCserver ? ByteString("true") : ByteString("false") ); + m_bIPCserver ? rtl::OString("true") : rtl::OString("false") ); aConfig.Flush( ); } diff --git a/desktop/source/app/main.c b/desktop/source/app/main.c index 198e42a0ca..198e42a0ca 100644..100755 --- a/desktop/source/app/main.c +++ b/desktop/source/app/main.c diff --git a/desktop/source/app/makefile.mk b/desktop/source/app/makefile.mk index e7c30a2ca7..e7c30a2ca7 100644..100755 --- a/desktop/source/app/makefile.mk +++ b/desktop/source/app/makefile.mk diff --git a/desktop/source/app/officeipcthread.cxx b/desktop/source/app/officeipcthread.cxx index c685596d26..e12add5a12 100644 --- a/desktop/source/app/officeipcthread.cxx +++ b/desktop/source/app/officeipcthread.cxx @@ -53,12 +53,15 @@ #include "rtl/process.h" #include "tools/getprocessworkingdir.hxx" -using namespace rtl; using namespace desktop; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::lang; using namespace ::com::sun::star::frame; +using ::rtl::OString; +using ::rtl::OUString; +using ::rtl::OUStringBuffer; + const char *OfficeIPCThread::sc_aTerminationSequence = "InternalIPC::TerminateThread"; const int OfficeIPCThread::sc_nTSeqLength = 28; const char *OfficeIPCThread::sc_aShowSequence = "-tofront"; @@ -222,7 +225,7 @@ OfficeIPCThread* OfficeIPCThread::pGlobalOfficeIPCThread = 0; namespace { struct Security : public rtl::Static<osl::Security, Security> {}; } ::osl::Mutex* OfficeIPCThread::pOfficeIPCThreadMutex = 0; -// Turns a string in aMsg such as file://home/foo/.libreoffice/3 +// Turns a string in aMsg such as file:///home/foo/.libreoffice/3 // Into a hex string of well known length ff132a86... String CreateMD5FromString( const OUString& aMsg ) { @@ -472,18 +475,18 @@ OfficeIPCThread::Status OfficeIPCThread::EnableOfficeIPCThread() aIniName += OUString( RTL_CONSTASCII_USTRINGPARAM( "rc" )); #endif } - + ::rtl::Bootstrap aPerfTuneIniFile( aIniName ); - + OUString aDefault( RTL_CONSTASCII_USTRINGPARAM( "0" )); OUString aPreloadData; - + aPerfTuneIniFile.getFrom( OUString( RTL_CONSTASCII_USTRINGPARAM( "FastPipeCommunication" )), aPreloadData, aDefault ); OUString aUserInstallPathHashCode; - if ( aPreloadData.equalsAscii( "1" )) + if ( aPreloadData.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "1" ) )) { sal_Char szBuffer[32]; sprintf( szBuffer, "%d", SUPD ); @@ -491,7 +494,7 @@ OfficeIPCThread::Status OfficeIPCThread::EnableOfficeIPCThread() } else aUserInstallPathHashCode = CreateMD5FromString( aDummy ); - + // Check result to create a hash code from the user install path if ( aUserInstallPathHashCode.getLength() == 0 ) @@ -540,10 +543,9 @@ OfficeIPCThread::Status OfficeIPCThread::EnableOfficeIPCThread() // Seems another office is running. Pipe arguments to it and self terminate osl::StreamPipe aStreamPipe(pThread->maPipe.getHandle()); - sal_Bool bWaitBeforeClose = sal_False; ByteString aArguments(RTL_CONSTASCII_STRINGPARAM(ARGUMENT_PREFIX)); rtl::OUString cwdUrl; - if (!(tools::getProcessWorkingDir(&cwdUrl) && + if (!(tools::getProcessWorkingDir(cwdUrl) && addArgument(&aArguments, '1', cwdUrl))) { aArguments += '0'; @@ -552,19 +554,14 @@ OfficeIPCThread::Status OfficeIPCThread::EnableOfficeIPCThread() for( sal_uInt32 i=0; i < nCount; i++ ) { rtl_getAppCommandArg( i, &aDummy.pData ); - if( aDummy.indexOf('-',0) != 0 ) - { - bWaitBeforeClose = sal_True; - } if (!addArgument(&aArguments, ',', aDummy)) { return IPC_STATUS_BOOTSTRAP_ERROR; } } - // finaly, write the string onto the pipe + // finally, write the string onto the pipe aStreamPipe.write( aArguments.GetBuffer(), aArguments.Len() ); aStreamPipe.write( "\0", 1 ); - // wait for confirmation #95361# #95425# ByteString aToken(sc_aConfirmationSequence); char *aReceiveBuffer = new char[aToken.Len()+1]; int n = aStreamPipe.read( aReceiveBuffer, aToken.Len() ); @@ -597,7 +594,6 @@ void OfficeIPCThread::DisableOfficeIPCThread() // this is done so the subsequent join will not hang // because the thread hangs in accept of pipe osl::StreamPipe aPipe ( pOfficeIPCThread->maPipeIdent, osl_Pipe_OPEN, Security::get() ); - //Pipe.send( TERMINATION_SEQUENCE, TERMINATION_LENGTH ); if (aPipe.is()) { aPipe.send( sc_aTerminationSequence, sc_nTSeqLength+1 ); // also send 0-byte @@ -664,8 +660,6 @@ void SAL_CALL OfficeIPCThread::run() if( nError == osl_Pipe_E_None ) { - - // #111143# and others: // if we receive a request while the office is displaying some dialog or error during // bootstrap, that dialogs event loop might get events that are dispatched by this thread // we have to wait for cReady to be set by the real main loop. @@ -695,7 +689,7 @@ void SAL_CALL OfficeIPCThread::run() } // don't close pipe ... - // #90717# Is this a lookup message from another application? if so, ignore + // Is this a lookup message from another application? if so, ignore if ( aArguments.Len() == 0 ) continue; @@ -728,14 +722,12 @@ void SAL_CALL OfficeIPCThread::run() } // handle request for acceptor - sal_Bool bAcceptorRequest = sal_False; OUString aAcceptString; if ( aCmdLineArgs->GetAcceptString(aAcceptString) && Desktop::CheckOEM()) { ApplicationEvent* pAppEvent = new ApplicationEvent( aEmpty, aEmpty, "ACCEPT", aAcceptString ); ImplPostForeignAppEvent( pAppEvent ); - bAcceptorRequest = sal_True; } // handle acceptor removal OUString aUnAcceptString; @@ -744,7 +736,6 @@ void SAL_CALL OfficeIPCThread::run() new ApplicationEvent( aEmpty, aEmpty, "UNACCEPT", aUnAcceptString ); ImplPostForeignAppEvent( pAppEvent ); - bAcceptorRequest = sal_True; } #ifndef UNX @@ -849,8 +840,6 @@ void SAL_CALL OfficeIPCThread::run() aHelpURLBuffer.appendAscii("&System=UNX"); #elif defined WNT aHelpURLBuffer.appendAscii("&System=WIN"); -#elif defined MAC - aHelpURLBuffer.appendAscii("&System=MAC"); #elif defined OS2 aHelpURLBuffer.appendAscii("&System=OS2"); #endif @@ -908,9 +897,6 @@ void SAL_CALL OfficeIPCThread::run() while ( (nResult = maStreamPipe.send(sc_aConfirmationSequence+nBytes, sc_nCSeqLength-nBytes))>0 && ((nBytes += nResult) < sc_nCSeqLength) ) ; - // now we can close, don't we? - // maStreamPipe.close(); - } else { @@ -972,20 +958,20 @@ static void AddConversionsToDispatchList( OUString aOutDir( rParamOut.trim() ); ::rtl::OUString aPWD; - ::tools::getProcessWorkingDir( &aPWD ); + ::tools::getProcessWorkingDir( aPWD ); if( !::osl::FileBase::getAbsoluteFileURL( aPWD, rParamOut, aOutDir ) ) ::osl::FileBase::getSystemPathFromFileURL( aOutDir, aOutDir ); if( rParamOut.trim().getLength() ) { - aParam += ::rtl::OUString::createFromAscii(";"); + aParam += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(";")); aParam += aOutDir; } else { ::osl::FileBase::getSystemPathFromFileURL( aPWD, aPWD ); - aParam += ::rtl::OUString::createFromAscii( ";" ) + aPWD; + aParam += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( ";" )) + aPWD; } if ( rRequestList.getLength() > 0 ) @@ -1027,7 +1013,7 @@ sal_Bool OfficeIPCThread::ExecuteCmdLineRequests( ProcessDocumentsRequest& aRequ { if( ! pGlobalOfficeIPCThread->AreRequestsEnabled() ) return bShutdown; - + pGlobalOfficeIPCThread->mnPendingRequests += aDispatchList.size(); if ( !pGlobalOfficeIPCThread->mpDispatchWatcher ) { @@ -1038,7 +1024,7 @@ sal_Bool OfficeIPCThread::ExecuteCmdLineRequests( ProcessDocumentsRequest& aRequ // copy for execute DispatchWatcher::DispatchList aTempList( aDispatchList ); aDispatchList.clear(); - + aGuard.clear(); // Execute dispatch requests diff --git a/desktop/source/app/officeipcthread.hxx b/desktop/source/app/officeipcthread.hxx index f075aec313..e72db07e05 100644 --- a/desktop/source/app/officeipcthread.hxx +++ b/desktop/source/app/officeipcthread.hxx @@ -123,7 +123,7 @@ class OfficeIPCThread : public osl::Thread static void RequestsCompleted( int n = 1 ); static sal_Bool ExecuteCmdLineRequests( ProcessDocumentsRequest& ); - // return FALSE if second office + // return sal_False if second office static Status EnableOfficeIPCThread(); static void DisableOfficeIPCThread(); // start dispatching events... diff --git a/desktop/source/app/sofficemain.cxx b/desktop/source/app/sofficemain.cxx index b7d190c845..1e640c58ae 100644 --- a/desktop/source/app/sofficemain.cxx +++ b/desktop/source/app/sofficemain.cxx @@ -30,11 +30,13 @@ #include "precompiled_desktop.hxx" #include "app.hxx" +#include "cmdlineargs.hxx" +#include "cmdlinehelp.hxx" #include <rtl/logfile.hxx> #include <tools/extendapplicationenvironment.hxx> -BOOL SVMain(); +int SVMain(); // -=-= main() -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= @@ -47,9 +49,23 @@ extern "C" int soffice_main() desktop::Desktop aDesktop; // This string is used during initialization of the Gtk+ VCL module aDesktop.SetAppName( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("soffice")) ); - SVMain(); - - return 0; + aDesktop.CreateProcessServiceFactory(); +#ifdef UNX + // handle --version and --help already here, otherwise they would be handled + // after VCL initialization that might fail if $DISPLAY is not set + desktop::CommandLineArgs* pCmdLineArgs = aDesktop.GetCommandLineArgs(); + if ( pCmdLineArgs->IsHelp() ) + { + desktop::displayCmdlineHelp(); + return EXIT_SUCCESS; + } + else if ( pCmdLineArgs->IsVersion() ) + { + desktop::displayVersion(); + return EXIT_SUCCESS; + } +#endif + return SVMain(); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/desktop/source/app/sofficemain.h b/desktop/source/app/sofficemain.h index 5b07bb4684..5b07bb4684 100644..100755 --- a/desktop/source/app/sofficemain.h +++ b/desktop/source/app/sofficemain.h diff --git a/desktop/source/app/userinstall.cxx b/desktop/source/app/userinstall.cxx index ca68ab00ad..a41dccd0da 100644 --- a/desktop/source/app/userinstall.cxx +++ b/desktop/source/app/userinstall.cxx @@ -97,11 +97,6 @@ namespace desktop { theMSF->createInstance(sConfigSrvc), UNO_QUERY_THROW); // localize the provider to user selection -// Reference< XLocalizable > localizable(theConfigProvider, UNO_QUERY_THROW); -// LanguageType aUserLanguageType = LanguageSelection::getLanguageType(); -// Locale aLocale( MsLangId::convertLanguageToIsoString(aUserLanguageType)); -// localizable->setLocale(aLocale); - Reference< XLocalizable > localizable(theConfigProvider, UNO_QUERY_THROW); OUString aUserLanguage = LanguageSelection::getLanguageString(); Locale aLocale = LanguageSelection::IsoStringToLocale(aUserLanguage); @@ -109,8 +104,8 @@ namespace desktop { Sequence< Any > theArgs(1); NamedValue v; - v.Name = OUString::createFromAscii("NodePath"); - v.Value = makeAny(OUString::createFromAscii("org.openoffice.Setup")); + 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( @@ -133,7 +128,7 @@ namespace desktop { catch (Exception const & e) { OString msg(OUStringToOString(e.Message, RTL_TEXTENCODING_ASCII_US)); - OSL_ENSURE(sal_False, msg.getStr()); + OSL_FAIL(msg.getStr()); } return false; @@ -202,7 +197,7 @@ namespace desktop { rtl::OUString itemname = aFileStatus.getFileName(); // append trailing '/' if needed if (newDstUnqPath.lastIndexOf(sal_Unicode('/')) != newDstUnqPath.getLength()-1) - newDstUnqPath += rtl::OUString::createFromAscii("/"); + newDstUnqPath += rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/")); newDstUnqPath += itemname; // recursion err = copy_recursive(newSrcUnqPath, newDstUnqPath); @@ -243,6 +238,11 @@ namespace desktop { 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, Attribute_OwnWrite| Attribute_OwnRead| Attribute_OwnExe); +#endif + // copy data from shared data directory of base installation for (sal_Int32 i=0; pszSrcList[i]!=NULL && pszDstList[i]!=NULL; i++) { @@ -261,21 +261,19 @@ namespace desktop { } try { - OUString sConfigSrvc = OUString::createFromAscii("com.sun.star.configuration.ConfigurationProvider"); - OUString sAccessSrvc = OUString::createFromAscii("com.sun.star.configuration.ConfigurationUpdateAccess"); + 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::createFromAscii("NodePath"), makeAny(OUString::createFromAscii("org.openoffice.Setup"))); - //v.Name = OUString::createFromAscii("NodePath"); - //v.Value = makeAny(OUString::createFromAscii("org.openoffice.Setup")); + 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::createFromAscii("Office/ooSetupInstCompleted"), makeAny(sal_True)); + hpset->setHierarchicalPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("Office/ooSetupInstCompleted")), makeAny(sal_True)); Reference< XChangesBatch >(hpset, UNO_QUERY_THROW)->commitChanges(); } catch ( PropertyVetoException& ) @@ -286,7 +284,7 @@ namespace desktop { { OString aMsg("create_user_install(): "); aMsg += OUStringToOString(e.Message, RTL_TEXTENCODING_ASCII_US); - OSL_ENSURE(sal_False, aMsg.getStr()); + OSL_FAIL(aMsg.getStr()); return UserInstall::E_Creation; } diff --git a/desktop/source/app/version.map b/desktop/source/app/version.map index ad52c57cc1..ad52c57cc1 100644..100755 --- a/desktop/source/app/version.map +++ b/desktop/source/app/version.map diff --git a/desktop/source/deployment/deployment.component b/desktop/source/deployment/deployment.component new file mode 100755 index 0000000000..11385c7aa8 --- /dev/null +++ b/desktop/source/deployment/deployment.component @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!--********************************************************************** +* +* 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. +* +**********************************************************************--> + +<component loader="com.sun.star.loader.SharedLibrary" + xmlns="http://openoffice.org/2010/uno-components"> + <implementation name="com.sun.star.comp.deployment.ExtensionManager"> + <service name="com.sun.star.comp.deployment.ExtensionManager"/> + <singleton name="com.sun.star.deployment.ExtensionManager"/> + </implementation> + <implementation name="com.sun.star.comp.deployment.PackageInformationProvider"> + <service name="com.sun.star.comp.deployment.PackageInformationProvider"/> + <singleton name="com.sun.star.deployment.PackageInformationProvider"/> + </implementation> + <implementation name="com.sun.star.comp.deployment.PackageManagerFactory"> + <service name="com.sun.star.comp.deployment.PackageManagerFactory"/> + <singleton name="com.sun.star.deployment.thePackageManagerFactory"/> + </implementation> + <implementation name="com.sun.star.comp.deployment.ProgressLog"> + <service name="com.sun.star.comp.deployment.ProgressLog"/> + </implementation> + <implementation name="com.sun.star.comp.deployment.component.PackageRegistryBackend"> + <service name="com.sun.star.deployment.PackageRegistryBackend"/> + </implementation> + <implementation name="com.sun.star.comp.deployment.configuration.PackageRegistryBackend"> + <service name="com.sun.star.deployment.PackageRegistryBackend"/> + </implementation> + <implementation name="com.sun.star.comp.deployment.executable.PackageRegistryBackend"> + <service name="com.sun.star.deployment.PackageRegistryBackend"/> + </implementation> + <implementation name="com.sun.star.comp.deployment.help.PackageRegistryBackend"> + <service name="com.sun.star.deployment.PackageRegistryBackend"/> + </implementation> + <implementation name="com.sun.star.comp.deployment.script.PackageRegistryBackend"> + <service name="com.sun.star.deployment.PackageRegistryBackend"/> + </implementation> + <implementation name="com.sun.star.comp.deployment.sfwk.PackageRegistryBackend"> + <service name="com.sun.star.deployment.PackageRegistryBackend"/> + </implementation> +</component> diff --git a/desktop/source/deployment/dp_log.cxx b/desktop/source/deployment/dp_log.cxx index bb58770c4c..e8afda6542 100644 --- a/desktop/source/deployment/dp_log.cxx +++ b/desktop/source/deployment/dp_log.cxx @@ -89,7 +89,7 @@ void ProgressLogImpl::disposing() } catch (Exception & exc) { (void) exc; - OSL_ENSURE( 0, OUStringToOString( + OSL_FAIL( OUStringToOString( exc.Message, RTL_TEXTENCODING_UTF8 ).getStr() ); } } @@ -153,7 +153,7 @@ void ProgressLogImpl::log_write( OString const & text ) } catch (io::IOException & exc) { (void) exc; - OSL_ENSURE( 0, OUStringToOString( + OSL_FAIL( OUStringToOString( exc.Message, RTL_TEXTENCODING_UTF8 ).getStr() ); } } diff --git a/desktop/source/deployment/dp_persmap.cxx b/desktop/source/deployment/dp_persmap.cxx index 410bb01c1a..eb5267ee4a 100644 --- a/desktop/source/deployment/dp_persmap.cxx +++ b/desktop/source/deployment/dp_persmap.cxx @@ -61,7 +61,7 @@ void PersistentMap::throw_rtexc( int err, char const * pmsg ) const buf.append( OUString( msg.getStr(), msg.getLength(), osl_getThreadTextEncoding() ) ); const OUString msg_(buf.makeStringAndClear()); - OSL_ENSURE( 0, rtl::OUStringToOString( + OSL_FAIL( rtl::OUStringToOString( msg_, RTL_TEXTENCODING_UTF8 ).getStr() ); throw RuntimeException( msg_, Reference<XInterface>() ); } @@ -74,7 +74,7 @@ PersistentMap::~PersistentMap() } catch (DbException & exc) { (void) exc; // avoid warnings - OSL_ENSURE( 0, DbEnv::strerror( exc.get_errno() ) ); + OSL_FAIL( DbEnv::strerror( exc.get_errno() ) ); } } @@ -228,15 +228,14 @@ t_string2string_map PersistentMap::getEntries() const if (err != 0) throw_rtexc(err); - ::std::pair<t_string2string_map::iterator, bool > insertion( - ret.insert( t_string2string_map::value_type( - t_string2string_map::value_type( - OString( static_cast< sal_Char const * >( - dbKey.get_data()), - dbKey.get_size() ), - OString( static_cast< sal_Char const * >( - dbData.get_data()), - dbData.get_size() ) ) ) ) ); +#if OSL_DEBUG_LEVEL > 0 + ::std::pair<t_string2string_map::iterator, bool> insertion = +#endif + ret.insert( + t_string2string_map::value_type( + OString( static_cast<sal_Char const*>(dbKey.get_data()), dbKey.get_size() ), + OString( static_cast<sal_Char const*>(dbData.get_data()), dbData.get_size() ) + ) ); OSL_ASSERT( insertion.second ); } err = pcurs->close(); diff --git a/desktop/source/deployment/dp_services.cxx b/desktop/source/deployment/dp_services.cxx index 36e7163f28..b9a8185b2d 100644 --- a/desktop/source/deployment/dp_services.cxx +++ b/desktop/source/deployment/dp_services.cxx @@ -93,27 +93,6 @@ void SAL_CALL component_getImplementationEnvironment( *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME; } -sal_Bool SAL_CALL component_writeInfo( - lang::XMultiServiceFactory * pServiceManager, - registry::XRegistryKey * pRegistryKey ) -{ - return component_writeInfoHelper( - pServiceManager, pRegistryKey, - dp_registry::backend::configuration::serviceDecl, - dp_registry::backend::component::serviceDecl, - dp_registry::backend::help::serviceDecl, - dp_registry::backend::script::serviceDecl, - dp_registry::backend::sfwk::serviceDecl, - dp_registry::backend::executable::serviceDecl, - dp_manager::factory::serviceDecl, - dp_log::serviceDecl, - dp_info::serviceDecl, - dp_manager::serviceDecl) && - dp_manager::factory::singleton_entries( pRegistryKey ) && - dp_info::singleton_entries( pRegistryKey ) && - dp_manager::singleton_entries( pRegistryKey); -} - void * SAL_CALL component_getFactory( sal_Char const * pImplName, lang::XMultiServiceFactory * pServiceManager, diff --git a/desktop/source/deployment/dp_xml.cxx b/desktop/source/deployment/dp_xml.cxx index db787eb578..8bd219c1ed 100644 --- a/desktop/source/deployment/dp_xml.cxx +++ b/desktop/source/deployment/dp_xml.cxx @@ -45,20 +45,6 @@ namespace dp_misc //============================================================================== void xml_parse( - Reference<xml::input::XRoot> const & xRoot, - ::ucbhelper::Content & ucb_content, - Reference<XComponentContext> const & xContext ) -{ - const Any arg(xRoot); - const Reference<xml::sax::XDocumentHandler> xDocHandler( - xContext->getServiceManager()->createInstanceWithArgumentsAndContext( - OUSTR("com.sun.star.xml.input.SaxDocumentHandler"), - Sequence<Any>( &arg, 1 ), xContext ), UNO_QUERY_THROW ); - xml_parse( xDocHandler, ucb_content, xContext ); - } - -//============================================================================== -void xml_parse( Reference<xml::sax::XDocumentHandler> const & xDocHandler, ::ucbhelper::Content & ucb_content, Reference<XComponentContext> const & xContext ) diff --git a/desktop/source/deployment/gui/deploymentgui.component b/desktop/source/deployment/gui/deploymentgui.component new file mode 100755 index 0000000000..d613f482e7 --- /dev/null +++ b/desktop/source/deployment/gui/deploymentgui.component @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!--********************************************************************** +* +* 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. +* +**********************************************************************--> + +<component loader="com.sun.star.loader.SharedLibrary" + xmlns="http://openoffice.org/2010/uno-components"> + <implementation name="com.sun.star.comp.deployment.ui.LicenseDialog"> + <service name="com.sun.star.deployment.ui.LicenseDialog"/> + </implementation> + <implementation name="com.sun.star.comp.deployment.ui.PackageManagerDialog"> + <service name="com.sun.star.deployment.ui.PackageManagerDialog"/> + </implementation> + <implementation name="com.sun.star.comp.deployment.ui.UpdateRequiredDialog"> + <service name="com.sun.star.deployment.ui.UpdateRequiredDialog"/> + </implementation> +</component> diff --git a/desktop/source/deployment/gui/descedit.cxx b/desktop/source/deployment/gui/descedit.cxx index 0291ce5802..4091e89f53 100644 --- a/desktop/source/deployment/gui/descedit.cxx +++ b/desktop/source/deployment/gui/descedit.cxx @@ -61,7 +61,7 @@ void DescriptionEdit::Init() // read-only SetReadOnly(); // no cursor - EnableCursor( FALSE ); + EnableCursor( sal_False ); } // ----------------------------------------------------------------------- diff --git a/desktop/source/deployment/gui/dp_gui.h b/desktop/source/deployment/gui/dp_gui.h index 043a86f1af..043a86f1af 100644..100755 --- a/desktop/source/deployment/gui/dp_gui.h +++ b/desktop/source/deployment/gui/dp_gui.h diff --git a/desktop/source/deployment/gui/dp_gui.hrc b/desktop/source/deployment/gui/dp_gui.hrc index 19b2faf129..aa856c4ab6 100755 --- a/desktop/source/deployment/gui/dp_gui.hrc +++ b/desktop/source/deployment/gui/dp_gui.hrc @@ -1,7 +1,7 @@ /************************************************************************* * * 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 @@ -35,7 +35,7 @@ #define RID_DLG_EXTENSION_MANAGER RID_DEPLOYMENT_GUI_START #define RID_DLG_UPDATE_REQUIRED (RID_DEPLOYMENT_GUI_START + 11) -#define RID_EM_BTN_CLOSE 10 +#define RID_EM_BTN_CLOSE 10 #define RID_EM_BTN_HELP 11 #define RID_EM_BTN_ADD 12 #define RID_EM_BTN_CHECK_UPDATES 13 @@ -57,7 +57,6 @@ #define FL_LICENSE 69 #define FI_LICENSE_ARROW1 60 #define FI_LICENSE_ARROW2 61 -#define IMG_LICENCE_ARROW_HC 62 #define BTN_LICENSE_ACCEPT 63 // local RIDs for "Download and Install" dialog @@ -94,28 +93,27 @@ #define RID_STR_WARNINGBOX_VERSION_GREATER_DIFFERENT_NAMES (RID_DEPLOYMENT_GUI_START + 8) #define RID_WARNINGBOX_INSTALL_EXTENSION (RID_DEPLOYMENT_GUI_START + 9) -#define RID_DLG_UPDATE (RID_DEPLOYMENT_GUI_START + 10) - -#define RID_DLG_UPDATE_CHECKING 1 -#define RID_DLG_UPDATE_THROBBER 2 -#define RID_DLG_UPDATE_UPDATE 3 -#define RID_DLG_UPDATE_UPDATES 4 -#define RID_DLG_UPDATE_ALL 5 -#define RID_DLG_UPDATE_DESCRIPTION 6 -#define RID_DLG_UPDATE_DESCRIPTIONS 7 -#define RID_DLG_UPDATE_LINE 8 -#define RID_DLG_UPDATE_HELP 9 -#define RID_DLG_UPDATE_OK 10 -#define RID_DLG_UPDATE_CANCEL 11 -#define RID_DLG_UPDATE_NORMALALERT 12 -#define RID_DLG_UPDATE_HIGHCONTRASTALERT 13 -#define RID_DLG_UPDATE_ERROR 14 -#define RID_DLG_UPDATE_NONE 15 -#define RID_DLG_UPDATE_NOINSTALLABLE 16 -#define RID_DLG_UPDATE_FAILURE 17 -#define RID_DLG_UPDATE_UNKNOWNERROR 18 -#define RID_DLG_UPDATE_NODESCRIPTION 19 -#define RID_DLG_UPDATE_NOINSTALL 20 +#define RID_DLG_UPDATE (RID_DEPLOYMENT_GUI_START + 10) + +#define RID_DLG_UPDATE_CHECKING 1 +#define RID_DLG_UPDATE_THROBBER 2 +#define RID_DLG_UPDATE_UPDATE 3 +#define RID_DLG_UPDATE_UPDATES 4 +#define RID_DLG_UPDATE_ALL 5 +#define RID_DLG_UPDATE_DESCRIPTION 6 +#define RID_DLG_UPDATE_DESCRIPTIONS 7 +#define RID_DLG_UPDATE_LINE 8 +#define RID_DLG_UPDATE_HELP 9 +#define RID_DLG_UPDATE_OK 10 +#define RID_DLG_UPDATE_CLOSE 11 +#define RID_DLG_UPDATE_NORMALALERT 12 +#define RID_DLG_UPDATE_ERROR 14 +#define RID_DLG_UPDATE_NONE 15 +#define RID_DLG_UPDATE_NOINSTALLABLE 16 +#define RID_DLG_UPDATE_FAILURE 17 +#define RID_DLG_UPDATE_UNKNOWNERROR 18 +#define RID_DLG_UPDATE_NODESCRIPTION 19 +#define RID_DLG_UPDATE_NOINSTALL 20 #define RID_DLG_UPDATE_NODEPENDENCY 21 #define RID_DLG_UPDATE_NODEPENDENCY_CUR_VER 22 #define RID_DLG_UPDATE_NOPERMISSION 23 @@ -123,23 +121,24 @@ #define RID_DLG_UPDATE_BROWSERBASED 25 #define RID_DLG_UPDATE_PUBLISHER_LABEL 26 #define RID_DLG_UPDATE_PUBLISHER_LINK 27 -#define RID_DLG_UPDATE_RELEASENOTES_LABEL 28 -#define RID_DLG_UPDATE_RELEASENOTES_LINK 29 +#define RID_DLG_UPDATE_RELEASENOTES_LABEL 28 +#define RID_DLG_UPDATE_RELEASENOTES_LINK 29 #define RID_DLG_UPDATE_NOUPDATE 30 #define RID_DLG_UPDATE_VERSION 31 +#define RID_DLG_UPDATE_IGNORE 32 +#define RID_DLG_UPDATE_ENABLE 33 +#define RID_DLG_UPDATE_IGNORE_ALL 34 +#define RID_DLG_UPDATE_IGNORED_UPDATE 35 + #define RID_DLG_UPDATEINSTALL (RID_DEPLOYMENT_GUI_START + 20) #define RID_INFOBOX_UPDATE_SHARED_EXTENSION (RID_DEPLOYMENT_GUI_START + 21) #define RID_IMG_WARNING (RID_DEPLOYMENT_GUI_START+56) -#define RID_IMG_WARNING_HC (RID_DEPLOYMENT_GUI_START+57) #define RID_IMG_LOCKED (RID_DEPLOYMENT_GUI_START+58) -#define RID_IMG_LOCKED_HC (RID_DEPLOYMENT_GUI_START+59) #define RID_IMG_EXTENSION (RID_DEPLOYMENT_GUI_START+60) -#define RID_IMG_EXTENSION_HC (RID_DEPLOYMENT_GUI_START+61) #define RID_IMG_SHARED (RID_DEPLOYMENT_GUI_START+62) -#define RID_IMG_SHARED_HC (RID_DEPLOYMENT_GUI_START+63) #define RID_STR_ADD_PACKAGES (RID_DEPLOYMENT_GUI_START+70) @@ -163,6 +162,7 @@ #define RID_STR_NO_ADMIN_PRIVILEGE (RID_DEPLOYMENT_GUI_START+95) #define RID_STR_ERROR_MISSING_DEPENDENCIES (RID_DEPLOYMENT_GUI_START+96) #define RID_STR_ERROR_MISSING_LICENSE (RID_DEPLOYMENT_GUI_START+97) +#define RID_STR_SHOW_LICENSE_CMD (RID_DEPLOYMENT_GUI_START+98) #define WARNINGBOX_CONCURRENTINSTANCE (RID_DEPLOYMENT_GUI_START+100) @@ -172,6 +172,7 @@ #define RID_WARNINGBOX_REMOVE_SHARED_EXTENSION (RID_DEPLOYMENT_GUI_START+104) #define RID_WARNINGBOX_ENABLE_SHARED_EXTENSION (RID_DEPLOYMENT_GUI_START+105) #define RID_WARNINGBOX_DISABLE_SHARED_EXTENSION (RID_DEPLOYMENT_GUI_START+106) +#define RID_DLG_SHOW_LICENSE (RID_DEPLOYMENT_GUI_START+107) #define RID_DLG_LICENSE RID_DEPLOYMENT_LICENSE_START diff --git a/desktop/source/deployment/gui/dp_gui_autoscrolledit.cxx b/desktop/source/deployment/gui/dp_gui_autoscrolledit.cxx index c00123fb91..fae0f3022a 100644 --- a/desktop/source/deployment/gui/dp_gui_autoscrolledit.cxx +++ b/desktop/source/deployment/gui/dp_gui_autoscrolledit.cxx @@ -47,7 +47,6 @@ AutoScrollEdit::AutoScrollEdit( Window* pParent, const ResId& rResId ) ScrollBar* pScroll = GetVScrollBar(); if (pScroll) pScroll->Hide(); -// SetLeftMargin( 0 ); StartListening( *GetTextEngine() ); } @@ -60,7 +59,7 @@ void AutoScrollEdit::Notify( SfxBroadcaster&, const SfxHint& rHint ) { if ( rHint.IsA( TYPE(TextHint) ) ) { - ULONG nId = ((const TextHint&)rHint).GetId(); + sal_uLong nId = ((const TextHint&)rHint).GetId(); if ( nId == TEXT_HINT_VIEWSCROLLED ) { ScrollBar* pScroll = GetVScrollBar(); diff --git a/desktop/source/deployment/gui/dp_gui_backend.src b/desktop/source/deployment/gui/dp_gui_backend.src index 343d75df6a..b002bf2408 100644 --- a/desktop/source/deployment/gui/dp_gui_backend.src +++ b/desktop/source/deployment/gui/dp_gui_backend.src @@ -33,11 +33,6 @@ Image RID_IMG_DEF_PACKAGE_BUNDLE ImageBitmap = Bitmap { File = "sx03256.bmp"; }; MASKCOLOR }; -Image RID_IMG_DEF_PACKAGE_BUNDLE_HC -{ - ImageBitmap = Bitmap { File = "sxh03256.bmp"; }; - MASKCOLOR -}; // script, dialog: Image RID_IMG_SCRIPTLIB @@ -45,22 +40,12 @@ Image RID_IMG_SCRIPTLIB ImageBitmap = Bitmap { File = "im30820.bmp"; }; MASKCOLOR }; -Image RID_IMG_SCRIPTLIB_HC -{ - ImageBitmap = Bitmap { File = "imh30820.bmp"; }; - MASKCOLOR -}; Image RID_IMG_DIALOGLIB { ImageBitmap = Bitmap { File = "dialogfolder_16.bmp"; }; MASKCOLOR }; -Image RID_IMG_DIALOGLIB_HC -{ - ImageBitmap = Bitmap { File = "dialogfolder_16_h.bmp"; }; - MASKCOLOR -}; // configuration: Image RID_IMG_CONF_XML @@ -68,11 +53,6 @@ Image RID_IMG_CONF_XML ImageBitmap = Bitmap { File = "xml_16.bmp"; }; MASKCOLOR }; -Image RID_IMG_CONF_XML_HC -{ - ImageBitmap = Bitmap { File = "xml_16_h.bmp"; }; - MASKCOLOR -}; // component, typelib: Image RID_IMG_COMPONENT @@ -80,52 +60,27 @@ Image RID_IMG_COMPONENT ImageBitmap = Bitmap { File = "component_16.bmp"; }; MASKCOLOR }; -Image RID_IMG_COMPONENT_HC -{ - ImageBitmap = Bitmap { File = "component_16_h.bmp"; }; - MASKCOLOR -}; Image RID_IMG_JAVA_COMPONENT { ImageBitmap = Bitmap { File = "javacomponent_16.bmp"; }; MASKCOLOR }; -Image RID_IMG_JAVA_COMPONENT_HC -{ - ImageBitmap = Bitmap { File = "javacomponent_16_h.bmp"; }; - MASKCOLOR -}; Image RID_IMG_TYPELIB { ImageBitmap = Bitmap { File = "library_16.bmp"; }; MASKCOLOR }; -Image RID_IMG_TYPELIB_HC -{ - ImageBitmap = Bitmap { File = "library_16_h.bmp"; }; - MASKCOLOR -}; Image RID_IMG_JAVA_TYPELIB { ImageBitmap = Bitmap { File = "javalibrary_16.bmp"; }; MASKCOLOR }; -Image RID_IMG_JAVA_TYPELIB_HC -{ - ImageBitmap = Bitmap { File = "javalibrary_16_h.bmp"; }; - MASKCOLOR -}; Image RID_IMG_HELP { ImageBitmap = Bitmap { File = "commandimagelist/sc_helperdialog.bmp"; }; MASKCOLOR }; -Image RID_IMG_HELP_HC -{ - ImageBitmap = Bitmap { File = "commandimagelist/sch_helperdialog.bmp"; }; - MASKCOLOR -}; diff --git a/desktop/source/deployment/gui/dp_gui_dependencydialog.src b/desktop/source/deployment/gui/dp_gui_dependencydialog.src index 80b584f894..1e5d273943 100644 --- a/desktop/source/deployment/gui/dp_gui_dependencydialog.src +++ b/desktop/source/deployment/gui/dp_gui_dependencydialog.src @@ -34,6 +34,7 @@ #define LOCAL_LIST_HEIGHT (6 * RSC_BS_CHARHEIGHT) ModalDialog RID_DLG_DEPENDENCIES { + HelpID = "desktop:ModalDialog:RID_DLG_DEPENDENCIES"; Size = MAP_APPFONT( (RSC_SP_DLG_INNERBORDER_LEFT + LOCAL_WIDTH + RSC_SP_DLG_INNERBORDER_RIGHT), @@ -52,6 +53,7 @@ ModalDialog RID_DLG_DEPENDENCIES { NoLabel = TRUE; }; ListBox RID_DLG_DEPENDENCIES_LIST { + HelpID = "desktop:ListBox:RID_DLG_DEPENDENCIES:RID_DLG_DEPENDENCIES_LIST"; Pos = MAP_APPFONT( RSC_SP_DLG_INNERBORDER_LEFT, (RSC_SP_DLG_INNERBORDER_TOP + LOCAL_TEXT_HEIGHT + diff --git a/desktop/source/deployment/gui/dp_gui_dialog.src b/desktop/source/deployment/gui/dp_gui_dialog.src index db2e09769d..12b6acb847 100755..100644 --- a/desktop/source/deployment/gui/dp_gui_dialog.src +++ b/desktop/source/deployment/gui/dp_gui_dialog.src @@ -1,7 +1,7 @@ /************************************************************************* * * 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 @@ -31,27 +31,33 @@ String RID_STR_ADD_PACKAGES { Text [ en-US ] = "Add Extension(s)"; }; + String RID_CTX_ITEM_REMOVE { Text [ en-US ] = "~Remove"; }; + String RID_CTX_ITEM_ENABLE { Text [ en-US ] = "~Enable"; }; + String RID_CTX_ITEM_DISABLE { Text [ en-US ] = "~Disable"; }; + String RID_CTX_ITEM_CHECK_UPDATE { Text [ en-US ] = "~Update..."; }; + String RID_CTX_ITEM_OPTIONS { Text [ en-US ] = "~Options..."; }; + String RID_STR_ADDING_PACKAGES { Text [ en-US ] = "Adding %EXTENSION_NAME"; @@ -119,11 +125,16 @@ String RID_STR_ERROR_MISSING_LICENSE Text [ en-US ] = "This extension is disabled because you haven't accepted the license yet.\n"; }; +String RID_STR_SHOW_LICENSE_CMD +{ + Text [ en-US ] = "Show license"; +}; + // Dialog layout // --------------------------------------------------- // row 1 | multi line edit // --------------------------------------------------- -// row 2 | fixed text +// row 2 | fixed text // --------------------------------------------------- // row 3 | img | fixed text | fixed text | button // ---------------------------------------------------- @@ -131,7 +142,7 @@ String RID_STR_ERROR_MISSING_LICENSE // --------------------------------------------------- // row 5 |fixed line // --------------------------------------------------- -// row 6 | | |button | button +// row 6 | | |button | button // --------------------------------------------------- // | col 1 | col 2 | col3 | col4 | col5 @@ -169,6 +180,7 @@ String RID_STR_ERROR_MISSING_LICENSE ModalDialog RID_DLG_LICENSE { + HelpID = "desktop:ModalDialog:RID_DLG_LICENSE"; Text [ en-US ] = "Extension Software License Agreement"; Size = MAP_APPFONT(LIC_DLG_WIDTH, LIC_DLG_HEIGHT); @@ -177,10 +189,10 @@ ModalDialog RID_DLG_LICENSE Moveable = TRUE; Closeable = TRUE; Sizeable = FALSE; -// Hide = TRUE; MultiLineEdit ML_LICENSE { + HelpID = "desktop:MultiLineEdit:RID_DLG_LICENSE:ML_LICENSE"; Pos = MAP_APPFONT(COL1_X, ROW1_Y); Size = MAP_APPFONT(BODYWIDTH, ROW1_HEIGHT); Border = TRUE; @@ -195,14 +207,16 @@ ModalDialog RID_DLG_LICENSE WordBreak = TRUE; NoLabel = TRUE; Text [ en-US ] = "Please follow these steps to proceed with the installation of the extension:"; - }; + }; + FixedText FT_LICENSE_BODY_1 { Pos = MAP_APPFONT(COL2_X, ROW3_Y); Size = MAP_APPFONT( COL2_WIDTH, ROW3_HEIGHT ); NoLabel = TRUE; Text [ en-US ] = "1."; - }; + }; + //spans col3 + col4 FixedText FT_LICENSE_BODY_1_TXT { @@ -211,14 +225,16 @@ ModalDialog RID_DLG_LICENSE WordBreak = TRUE; NoLabel = TRUE; Text [ en-US ] = "Read the complete License Agreement. Use the scroll bar or the \'Scroll Down\' button in this dialog to view the entire license text."; - }; + }; + FixedText FT_LICENSE_BODY_2 { Pos = MAP_APPFONT(COL2_X, ROW4_Y); Size = MAP_APPFONT(COL2_WIDTH, ROW4_HEIGHT); NoLabel = TRUE; Text [ en-US ] = "2."; - }; + }; + FixedText FT_LICENSE_BODY_2_TXT { Pos = MAP_APPFONT(COL3_X, ROW4_Y); @@ -226,22 +242,25 @@ ModalDialog RID_DLG_LICENSE WordBreak = TRUE; NoLabel = TRUE; Text [ en-US ] = "Accept the License Agreement for the extension by pressing the \'Accept\' button."; - - }; + + }; + PushButton PB_LICENSE_DOWN { + HelpID = "desktop:PushButton:RID_DLG_LICENSE:PB_LICENSE_DOWN"; TabStop = TRUE ; Pos = MAP_APPFONT(COL5_X , ROW3_Y) ; Size = MAP_APPFONT(RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT) ; Text [ en-US ] = "~Scroll Down"; - + }; + FixedLine FL_LICENSE { Pos = MAP_APPFONT ( 0, ROW5_Y) ; Size = MAP_APPFONT ( LIC_DLG_WIDTH, ROW5_HEIGHT ) ; }; - + FixedImage FI_LICENSE_ARROW1 { Pos = MAP_APPFONT (COL1_X, ROW3_Y) ; @@ -263,13 +282,7 @@ ModalDialog RID_DLG_LICENSE MASKCOLOR }; }; - - Image IMG_LICENCE_ARROW_HC - { - ImageBitmap = Bitmap { File = "sch06300.png"; }; - MASKCOLOR - }; - + OKButton BTN_LICENSE_ACCEPT { Pos = MAP_APPFONT(COL4_X, ROW6_Y); @@ -290,6 +303,35 @@ ModalDialog RID_DLG_LICENSE }; +ModalDialog RID_DLG_SHOW_LICENSE +{ + Text [ en-US ] = "Extension Software License Agreement"; + Size = MAP_APPFONT( 300, 200 ); + OutputSize = TRUE; + SVLook = TRUE; + Moveable = TRUE; + Closeable = TRUE; + Sizeable = TRUE; + + MultiLineEdit ML_LICENSE + { + Pos = MAP_APPFONT( 5, 5 ); + Size = MAP_APPFONT( 300 - 10, 200 - 15 - RSC_CD_PUSHBUTTON_HEIGHT ); + Border = TRUE; + VScroll = TRUE; + ReadOnly = TRUE; + }; + + OKButton RID_EM_BTN_CLOSE + { + TabStop = TRUE; + DefButton = TRUE; + Text [ en-US ] = "Close"; + Pos = MAP_APPFONT( (300-RSC_CD_PUSHBUTTON_WIDTH)/2, 200 - 5 - RSC_CD_PUSHBUTTON_HEIGHT ); + Size = MAP_APPFONT( RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT ); + }; +}; + WarningBox RID_WARNINGBOX_INSTALL_EXTENSION { diff --git a/desktop/source/deployment/gui/dp_gui_dialog2.cxx b/desktop/source/deployment/gui/dp_gui_dialog2.cxx index 53628fb854..7aa8decb6f 100644 --- a/desktop/source/deployment/gui/dp_gui_dialog2.cxx +++ b/desktop/source/deployment/gui/dp_gui_dialog2.cxx @@ -40,8 +40,10 @@ #include "dp_gui_theextmgr.hxx" #include "dp_gui_extensioncmdqueue.hxx" #include "dp_misc.h" +#include "dp_ucb.h" #include "dp_update.hxx" #include "dp_identifier.hxx" +#include "dp_descriptioninfoset.hxx" #include "vcl/ctrl.hxx" #include "vcl/menu.hxx" @@ -119,7 +121,8 @@ enum MENU_COMMAND CMD_REMOVE = 1, CMD_ENABLE, CMD_DISABLE, - CMD_UPDATE + CMD_UPDATE, + CMD_SHOW_LICENSE }; class ExtBoxWithBtns_Impl : public ExtensionBox_Impl @@ -207,8 +210,6 @@ ExtBoxWithBtns_Impl::~ExtBoxWithBtns_Impl() } //------------------------------------------------------------------------------ -//------------------------------------------------------------------------------ -//------------------------------------------------------------------------------ const Size ExtBoxWithBtns_Impl::GetMinOutputSizePixel() const { Size aMinSize( ExtensionBox_Impl::GetMinOutputSizePixel() ); @@ -225,13 +226,10 @@ const Size ExtBoxWithBtns_Impl::GetMinOutputSizePixel() const // ----------------------------------------------------------------------- void ExtBoxWithBtns_Impl::RecalcAll() { - ExtensionBox_Impl::RecalcAll(); - const sal_Int32 nActive = getSelIndex(); if ( nActive != EXTENSION_LISTBOX_ENTRY_NOTFOUND ) { - SetButtonPos( GetEntryRect( nActive ) ); SetButtonStatus( GetEntryData( nActive) ); } else @@ -240,6 +238,11 @@ void ExtBoxWithBtns_Impl::RecalcAll() m_pEnableBtn->Hide(); m_pRemoveBtn->Hide(); } + + ExtensionBox_Impl::RecalcAll(); + + if ( nActive != EXTENSION_LISTBOX_ENTRY_NOTFOUND ) + SetButtonPos( GetEntryRect( nActive ) ); } @@ -364,28 +367,29 @@ bool ExtBoxWithBtns_Impl::HandleTabKey( bool bReverse ) // ----------------------------------------------------------------------- MENU_COMMAND ExtBoxWithBtns_Impl::ShowPopupMenu( const Point & rPos, const long nPos ) { - if ( ( nPos >= 0 ) && ( nPos < (long) getItemCount() ) ) - { - if ( ! GetEntryData( nPos )->m_bLocked ) - { - PopupMenu aPopup; + if ( nPos >= (long) getItemCount() ) + return CMD_NONE; - aPopup.InsertItem( CMD_UPDATE, DialogHelper::getResourceString( RID_CTX_ITEM_CHECK_UPDATE ) ); + PopupMenu aPopup; - if ( GetEntryData( nPos )->m_bUser ) - { - if ( GetEntryData( nPos )->m_eState == REGISTERED ) - aPopup.InsertItem( CMD_DISABLE, DialogHelper::getResourceString( RID_CTX_ITEM_DISABLE ) ); - else if ( GetEntryData( nPos )->m_eState != NOT_AVAILABLE ) - aPopup.InsertItem( CMD_ENABLE, DialogHelper::getResourceString( RID_CTX_ITEM_ENABLE ) ); - } + aPopup.InsertItem( CMD_UPDATE, DialogHelper::getResourceString( RID_CTX_ITEM_CHECK_UPDATE ) ); - aPopup.InsertItem( CMD_REMOVE, DialogHelper::getResourceString( RID_CTX_ITEM_REMOVE ) ); - - return (MENU_COMMAND) aPopup.Execute( this, rPos ); + if ( ! GetEntryData( nPos )->m_bLocked ) + { + if ( GetEntryData( nPos )->m_bUser ) + { + if ( GetEntryData( nPos )->m_eState == REGISTERED ) + aPopup.InsertItem( CMD_DISABLE, DialogHelper::getResourceString( RID_CTX_ITEM_DISABLE ) ); + else if ( GetEntryData( nPos )->m_eState != NOT_AVAILABLE ) + aPopup.InsertItem( CMD_ENABLE, DialogHelper::getResourceString( RID_CTX_ITEM_ENABLE ) ); } + aPopup.InsertItem( CMD_REMOVE, DialogHelper::getResourceString( RID_CTX_ITEM_REMOVE ) ); } - return CMD_NONE; + + if ( GetEntryData( nPos )->m_sLicenseText.Len() ) + aPopup.InsertItem( CMD_SHOW_LICENSE, DialogHelper::getResourceString( RID_STR_SHOW_LICENSE_CMD ) ); + + return (MENU_COMMAND) aPopup.Execute( this, rPos ); } //------------------------------------------------------------------------------ @@ -410,6 +414,12 @@ void ExtBoxWithBtns_Impl::MouseButtonDown( const MouseEvent& rMEvt ) break; case CMD_REMOVE: m_pParent->removePackage( GetEntryData( nPos )->m_xPackage ); break; + case CMD_SHOW_LICENSE: + { + ShowLicenseDialog aLicenseDlg( m_pParent, GetEntryData( nPos )->m_xPackage ); + aLicenseDlg.Execute(); + break; + } } } else if ( rMEvt.IsLeft() ) @@ -431,7 +441,7 @@ long ExtBoxWithBtns_Impl::Notify( NotifyEvent& rNEvt ) { const KeyEvent* pKEvt = rNEvt.GetKeyEvent(); KeyCode aKeyCode = pKEvt->GetKeyCode(); - USHORT nKeyCode = aKeyCode.GetCode(); + sal_uInt16 nKeyCode = aKeyCode.GetCode(); if ( nKeyCode == KEY_TAB ) bHandled = HandleTabKey( aKeyCode.IsShift() ); @@ -558,14 +568,14 @@ DialogHelper::~DialogHelper() } //------------------------------------------------------------------------------ -ResId DialogHelper::getResId( USHORT nId ) +ResId DialogHelper::getResId( sal_uInt16 nId ) { const SolarMutexGuard guard; return ResId( nId, *DeploymentGuiResMgr::get() ); } //------------------------------------------------------------------------------ -String DialogHelper::getResourceString( USHORT id ) +String DialogHelper::getResourceString( sal_uInt16 id ) { // init with non-acquired solar mutex: BrandName::get(); @@ -589,7 +599,7 @@ bool DialogHelper::IsSharedPkgMgr( const uno::Reference< deployment::XPackage > //------------------------------------------------------------------------------ bool DialogHelper::continueOnSharedExtension( const uno::Reference< deployment::XPackage > &xPackage, Window *pParent, - const USHORT nResID, + const sal_uInt16 nResID, bool &bHadWarning ) { if ( !bHadWarning && IsSharedPkgMgr( xPackage ) ) @@ -658,8 +668,8 @@ bool DialogHelper::installForAllUsers( bool &bInstallForAll ) const sMsgText.SearchAndReplaceAllAscii( "%PRODUCTNAME", BrandName::get() ); aQuery.SetMessText( sMsgText ); - USHORT nYesBtnID = aQuery.GetButtonId( 0 ); - USHORT nNoBtnID = aQuery.GetButtonId( 1 ); + sal_uInt16 nYesBtnID = aQuery.GetButtonId( 0 ); + sal_uInt16 nNoBtnID = aQuery.GetButtonId( 1 ); if ( nYesBtnID != BUTTONDIALOG_BUTTON_NOTFOUND ) aQuery.SetButtonText( nYesBtnID, getResourceString( RID_STR_INSTALL_FOR_ME ) ); @@ -929,7 +939,7 @@ uno::Sequence< OUString > ExtMgrDialog::raiseAddPicker() xFilterManager->appendFilter( iPos->first, iPos->second ); } catch (lang::IllegalArgumentException & exc) { - OSL_ENSURE( 0, ::rtl::OUStringToOString( + OSL_FAIL( ::rtl::OUStringToOString( exc.Message, RTL_TEXTENCODING_UTF8 ).getStr() ); (void) exc; } @@ -948,7 +958,6 @@ uno::Sequence< OUString > ExtMgrDialog::raiseAddPicker() //------------------------------------------------------------------------------ IMPL_LINK( ExtMgrDialog, HandleCancelBtn, void*, EMPTYARG ) { - // m_dialog->m_cmdEnv->m_aborted = true; if ( m_xAbortChannel.is() ) { try @@ -957,7 +966,7 @@ IMPL_LINK( ExtMgrDialog, HandleCancelBtn, void*, EMPTYARG ) } catch ( uno::RuntimeException & ) { - OSL_ENSURE( 0, "### unexpected RuntimeException!" ); + OSL_FAIL( "### unexpected RuntimeException!" ); } } return 1; @@ -1106,7 +1115,7 @@ IMPL_LINK( ExtMgrDialog, TimeOutHdl, Timer*, EMPTYARG ) } if ( m_aProgressBar.IsVisible() ) - m_aProgressBar.SetValue( (USHORT) m_nProgress ); + m_aProgressBar.SetValue( (sal_uInt16) m_nProgress ); m_aTimeoutTimer.Start(); } @@ -1154,12 +1163,11 @@ void ExtMgrDialog::Resize() if( IsNativeControlSupported( CTRL_PROGRESS, PART_ENTIRE_CONTROL ) ) { ImplControlValue aValue; - bool bNativeOK; Rectangle aControlRegion( Point( 0, 0 ), m_aProgressBar.GetSizePixel() ); Rectangle aNativeControlRegion, aNativeContentRegion; - if( (bNativeOK = GetNativeControlRegion( CTRL_PROGRESS, PART_ENTIRE_CONTROL, aControlRegion, + if( GetNativeControlRegion( CTRL_PROGRESS, PART_ENTIRE_CONTROL, aControlRegion, CTRL_STATE_ENABLED, aValue, rtl::OUString(), - aNativeControlRegion, aNativeContentRegion ) ) != FALSE ) + aNativeControlRegion, aNativeContentRegion ) != sal_False ) { nProgressHeight = aNativeControlRegion.GetHeight(); } @@ -1196,7 +1204,7 @@ long ExtMgrDialog::Notify( NotifyEvent& rNEvt ) { const KeyEvent* pKEvt = rNEvt.GetKeyEvent(); KeyCode aKeyCode = pKEvt->GetKeyCode(); - USHORT nKeyCode = aKeyCode.GetCode(); + sal_uInt16 nKeyCode = aKeyCode.GetCode(); if ( nKeyCode == KEY_TAB ) { @@ -1223,7 +1231,7 @@ long ExtMgrDialog::Notify( NotifyEvent& rNEvt ) } //------------------------------------------------------------------------------ -BOOL ExtMgrDialog::Close() +sal_Bool ExtMgrDialog::Close() { bool bRet = m_pManager->queryTermination(); if ( bRet ) @@ -1364,7 +1372,6 @@ bool UpdateRequiredDialog::enablePackage( const uno::Reference< deployment::XPac //------------------------------------------------------------------------------ IMPL_LINK( UpdateRequiredDialog, HandleCancelBtn, void*, EMPTYARG ) { - // m_dialog->m_cmdEnv->m_aborted = true; if ( m_xAbortChannel.is() ) { try @@ -1373,7 +1380,7 @@ IMPL_LINK( UpdateRequiredDialog, HandleCancelBtn, void*, EMPTYARG ) } catch ( uno::RuntimeException & ) { - OSL_ENSURE( 0, "### unexpected RuntimeException!" ); + OSL_FAIL( "### unexpected RuntimeException!" ); } } return 1; @@ -1545,7 +1552,7 @@ IMPL_LINK( UpdateRequiredDialog, TimeOutHdl, Timer*, EMPTYARG ) } if ( m_aProgressBar.IsVisible() ) - m_aProgressBar.SetValue( (USHORT) m_nProgress ); + m_aProgressBar.SetValue( (sal_uInt16) m_nProgress ); m_aTimeoutTimer.Start(); } @@ -1599,12 +1606,11 @@ void UpdateRequiredDialog::Resize() if( IsNativeControlSupported( CTRL_PROGRESS, PART_ENTIRE_CONTROL ) ) { ImplControlValue aValue; - bool bNativeOK; Rectangle aControlRegion( Point( 0, 0 ), m_aProgressBar.GetSizePixel() ); Rectangle aNativeControlRegion, aNativeContentRegion; - if( (bNativeOK = GetNativeControlRegion( CTRL_PROGRESS, PART_ENTIRE_CONTROL, aControlRegion, + if( GetNativeControlRegion( CTRL_PROGRESS, PART_ENTIRE_CONTROL, aControlRegion, CTRL_STATE_ENABLED, aValue, rtl::OUString(), - aNativeControlRegion, aNativeContentRegion ) ) != FALSE ) + aNativeControlRegion, aNativeContentRegion ) != sal_False ) { nProgressHeight = aNativeControlRegion.GetHeight(); } @@ -1642,7 +1648,7 @@ short UpdateRequiredDialog::Execute() //------------------------------------------------------------------------------ // VCL::Dialog -BOOL UpdateRequiredDialog::Close() +sal_Bool UpdateRequiredDialog::Close() { ::osl::MutexGuard aGuard( m_aMutex ); @@ -1682,7 +1688,7 @@ bool UpdateRequiredDialog::isEnabled( const uno::Reference< deployment::XPackage catch ( uno::RuntimeException & ) { throw; } catch ( uno::Exception & exc) { (void) exc; - OSL_ENSURE( 0, ::rtl::OUStringToOString( exc.Message, RTL_TEXTENCODING_UTF8 ).getStr() ); + OSL_FAIL( ::rtl::OUStringToOString( exc.Message, RTL_TEXTENCODING_UTF8 ).getStr() ); bRegistered = false; } @@ -1748,6 +1754,42 @@ void UpdateRequiredDialog::disableAllEntries() m_aCloseBtn.SetText( m_sCloseText ); } +//------------------------------------------------------------------------------ +// ShowLicenseDialog +//------------------------------------------------------------------------------ +ShowLicenseDialog::ShowLicenseDialog( Window * pParent, + const uno::Reference< deployment::XPackage > &xPackage ) : + ModalDialog( pParent, DialogHelper::getResId( RID_DLG_SHOW_LICENSE ) ), + m_aLicenseText( this, DialogHelper::getResId( ML_LICENSE ) ), + m_aCloseBtn( this, DialogHelper::getResId( RID_EM_BTN_CLOSE ) ) +{ + FreeResource(); + + OUString aText = xPackage->getLicenseText(); + m_aLicenseText.SetText( aText ); +} + +//------------------------------------------------------------------------------ +ShowLicenseDialog::~ShowLicenseDialog() +{} + +//------------------------------------------------------------------------------ +void ShowLicenseDialog::Resize() +{ + Size aTotalSize( GetOutputSizePixel() ); + Size aTextSize( aTotalSize.Width() - RSC_SP_DLG_INNERBORDER_LEFT - RSC_SP_DLG_INNERBORDER_RIGHT, + aTotalSize.Height() - RSC_SP_DLG_INNERBORDER_TOP - 2*RSC_SP_DLG_INNERBORDER_BOTTOM + - m_aCloseBtn.GetSizePixel().Height() ); + + m_aLicenseText.SetPosSizePixel( Point( RSC_SP_DLG_INNERBORDER_LEFT, RSC_SP_DLG_INNERBORDER_TOP ), + aTextSize ); + + Point aBtnPos( (aTotalSize.Width() - m_aCloseBtn.GetSizePixel().Width())/2, + aTotalSize.Height() - RSC_SP_DLG_INNERBORDER_BOTTOM + - m_aCloseBtn.GetSizePixel().Height() ); + m_aCloseBtn.SetPosPixel( aBtnPos ); +} + //================================================================================= // UpdateRequiredDialogService //================================================================================= @@ -1778,8 +1820,6 @@ sal_Int16 UpdateRequiredDialogService::execute() throw ( uno::RuntimeException ) } //------------------------------------------------------------------------------ -//------------------------------------------------------------------------------ -//------------------------------------------------------------------------------ SelectedPackage::~SelectedPackage() {} } //namespace dp_gui diff --git a/desktop/source/deployment/gui/dp_gui_dialog2.hxx b/desktop/source/deployment/gui/dp_gui_dialog2.hxx index bb8c9785d9..03b8839d23 100644 --- a/desktop/source/deployment/gui/dp_gui_dialog2.hxx +++ b/desktop/source/deployment/gui/dp_gui_dialog2.hxx @@ -36,6 +36,7 @@ #include "svtools/fixedhyper.hxx" #include "svtools/prgsbar.hxx" +#include "svtools/svmedit.hxx" #include "osl/conditn.hxx" #include "osl/mutex.hxx" @@ -63,7 +64,7 @@ class DialogHelper { ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > m_xContext; Dialog* m_pVCLWindow; - ULONG m_nEventID; + sal_uLong m_nEventID; bool m_bIsBusy; public: @@ -88,12 +89,12 @@ public: virtual void prepareChecking() = 0; virtual void checkEntries() = 0; - static ResId getResId( USHORT nId ); - static String getResourceString( USHORT id ); + static ResId getResId( sal_uInt16 nId ); + static String getResourceString( sal_uInt16 id ); static bool IsSharedPkgMgr( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &); static bool continueOnSharedExtension( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &, Window *pParent, - const USHORT nResID, + const sal_uInt16 nResID, bool &bHadWarning ); void setBusy( const bool bBusy ) { m_bIsBusy = bBusy; } @@ -149,7 +150,7 @@ public: virtual void Resize(); virtual long Notify( NotifyEvent& rNEvt ); - virtual BOOL Close(); + virtual sal_Bool Close(); virtual void showProgress( bool bStart ); virtual void updateProgress( const ::rtl::OUString &rText, @@ -221,8 +222,7 @@ public: virtual short Execute(); virtual void Resize(); - virtual BOOL Close(); -// virtual long Notify( NotifyEvent& rNEvt ); + virtual sal_Bool Close(); virtual void showProgress( bool bStart ); virtual void updateProgress( const ::rtl::OUString &rText, @@ -247,6 +247,20 @@ public: }; //============================================================================== +class ShowLicenseDialog : public ModalDialog +{ + MultiLineEdit m_aLicenseText; + OKButton m_aCloseBtn; + +public: + ShowLicenseDialog( Window * pParent, + const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage ); + virtual ~ShowLicenseDialog(); + + virtual void Resize(); +}; + +//============================================================================== class UpdateRequiredDialogService : public ::cppu::WeakImplHelper1< ::com::sun::star::ui::dialogs::XExecutableDialog > { ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > const m_xComponentContext; diff --git a/desktop/source/deployment/gui/dp_gui_dialog2.src b/desktop/source/deployment/gui/dp_gui_dialog2.src index b74a802ceb..296928abfb 100644 --- a/desktop/source/deployment/gui/dp_gui_dialog2.src +++ b/desktop/source/deployment/gui/dp_gui_dialog2.src @@ -1,7 +1,7 @@ /************************************************************************* * * 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 @@ -43,6 +43,7 @@ ModelessDialog RID_DLG_EXTENSION_MANAGER PushButton RID_EM_BTN_ADD { + HelpID = "desktop:PushButton:RID_DLG_EXTENSION_MANAGER:RID_EM_BTN_ADD"; TabStop = TRUE; Text [ en-US ] = "~Add..."; Size = MAP_APPFONT(RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT ); @@ -50,6 +51,7 @@ ModelessDialog RID_DLG_EXTENSION_MANAGER PushButton RID_EM_BTN_CHECK_UPDATES { + HelpID = "desktop:PushButton:RID_DLG_EXTENSION_MANAGER:RID_EM_BTN_CHECK_UPDATES"; TabStop = TRUE; Text [ en-US ] = "Check for ~Updates..."; Size = MAP_APPFONT(RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT ); @@ -131,6 +133,7 @@ ModalDialog RID_DLG_UPDATE_REQUIRED PushButton RID_EM_BTN_CHECK_UPDATES { + HelpID = "desktop:PushButton:RID_DLG_UPDATE_REQUIRED:RID_EM_BTN_CHECK_UPDATES"; TabStop = TRUE; Text [ en-US ] = "Check for ~Updates..."; Size = MAP_APPFONT(RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT ); @@ -138,6 +141,7 @@ ModalDialog RID_DLG_UPDATE_REQUIRED PushButton RID_EM_BTN_CLOSE { + HelpID = "desktop:PushButton:RID_DLG_UPDATE_REQUIRED:RID_EM_BTN_CLOSE"; TabStop = TRUE; DefButton = TRUE; Text [ en-US ] = "Disable all"; @@ -158,41 +162,21 @@ Image RID_IMG_WARNING ImageBitmap = Bitmap { File = "caution_16.png"; }; }; -Image RID_IMG_WARNING_HC -{ - ImageBitmap = Bitmap { File = "caution_16_h.png"; }; -}; - Image RID_IMG_LOCKED { ImageBitmap = Bitmap { File = "lock_16.png"; }; }; -Image RID_IMG_LOCKED_HC -{ - ImageBitmap = Bitmap { File = "lock_16_h.png"; }; -}; - Image RID_IMG_SHARED { ImageBitmap = Bitmap { File = "shared_16.png"; }; }; -Image RID_IMG_SHARED_HC -{ - ImageBitmap = Bitmap { File = "shared_16_h.png"; }; -}; - Image RID_IMG_EXTENSION { ImageBitmap = Bitmap { File = "extension_32.png"; }; }; -Image RID_IMG_EXTENSION_HC -{ - ImageBitmap = Bitmap { File = "extension_32_h.png"; }; -}; - QueryBox RID_QUERYBOX_INSTALL_FOR_ALL { Buttons = WB_YES_NO_CANCEL; @@ -205,7 +189,7 @@ QueryBox RID_QUERYBOX_INSTALL_FOR_ALL // --------------------------------------------------- // row 1 | multi line edit // --------------------------------------------------- -// row 2 | fixed text +// row 2 | fixed text // --------------------------------------------------- // row 3 | img | fixed text | fixed text | button // ---------------------------------------------------- @@ -213,7 +197,7 @@ QueryBox RID_QUERYBOX_INSTALL_FOR_ALL // --------------------------------------------------- // row 5 |fixed line // --------------------------------------------------- -// row 6 | | |button | button +// row 6 | | |button | button // --------------------------------------------------- // | col 1 | col 2 | col3 | col4 | col5 diff --git a/desktop/source/deployment/gui/dp_gui_extensioncmdqueue.cxx b/desktop/source/deployment/gui/dp_gui_extensioncmdqueue.cxx index 3674759f6f..973e430bd3 100644 --- a/desktop/source/deployment/gui/dp_gui_extensioncmdqueue.cxx +++ b/desktop/source/deployment/gui/dp_gui_extensioncmdqueue.cxx @@ -102,9 +102,10 @@ #endif #ifdef WNT -#include "tools/prewin.h" +#define GradientStyle_RECT BLA_GradientStyle_RECT +#include <windows.h> #include <objbase.h> -#include "tools/postwin.h" +#undef GradientStyle_RECT #endif @@ -261,6 +262,8 @@ private: virtual void execute(); virtual void SAL_CALL onTerminated(); + void _insert(const TExtensionCmd& rExtCmd); + void _addExtension( ::rtl::Reference< ProgressCmdEnv > &rCmdEnv, const OUString &rPackageURL, const OUString &rRepository, @@ -648,57 +651,30 @@ void ExtensionCmdQueue::Thread::addExtension( const ::rtl::OUString &rExtensionU const ::rtl::OUString &rRepository, const bool bWarnUser ) { - ::osl::MutexGuard aGuard( m_mutex ); - - //If someone called stop then we do not add the extension -> game over! - if ( m_bStopped ) - return; - if ( rExtensionURL.getLength() ) { TExtensionCmd pEntry( new ExtensionCmd( ExtensionCmd::ADD, rExtensionURL, rRepository, bWarnUser ) ); - - m_queue.push( pEntry ); - m_eInput = START; - m_wakeup.set(); + _insert( pEntry ); } } //------------------------------------------------------------------------------ void ExtensionCmdQueue::Thread::removeExtension( const uno::Reference< deployment::XPackage > &rPackage ) { - ::osl::MutexGuard aGuard( m_mutex ); - - //If someone called stop then we do not remove the extension -> game over! - if ( m_bStopped ) - return; - if ( rPackage.is() ) { TExtensionCmd pEntry( new ExtensionCmd( ExtensionCmd::REMOVE, rPackage ) ); - - m_queue.push( pEntry ); - m_eInput = START; - m_wakeup.set(); + _insert( pEntry ); } } //------------------------------------------------------------------------------ void ExtensionCmdQueue::Thread::acceptLicense( const uno::Reference< deployment::XPackage > &rPackage ) { - ::osl::MutexGuard aGuard( m_mutex ); - - //If someone called stop then we do not remove the extension -> game over! - if ( m_bStopped ) - return; - if ( rPackage.is() ) { TExtensionCmd pEntry( new ExtensionCmd( ExtensionCmd::ACCEPT_LICENSE, rPackage ) ); - - m_queue.push( pEntry ); - m_eInput = START; - m_wakeup.set(); + _insert( pEntry ); } } @@ -706,20 +682,12 @@ void ExtensionCmdQueue::Thread::acceptLicense( const uno::Reference< deployment: void ExtensionCmdQueue::Thread::enableExtension( const uno::Reference< deployment::XPackage > &rPackage, const bool bEnable ) { - ::osl::MutexGuard aGuard( m_mutex ); - - //If someone called stop then we do not remove the extension -> game over! - if ( m_bStopped ) - return; - if ( rPackage.is() ) { TExtensionCmd pEntry( new ExtensionCmd( bEnable ? ExtensionCmd::ENABLE : ExtensionCmd::DISABLE, rPackage ) ); - m_queue.push( pEntry ); - m_eInput = START; - m_wakeup.set(); + _insert( pEntry ); } } @@ -727,16 +695,8 @@ void ExtensionCmdQueue::Thread::enableExtension( const uno::Reference< deploymen void ExtensionCmdQueue::Thread::checkForUpdates( const std::vector<uno::Reference<deployment::XPackage > > &vExtensionList ) { - ::osl::MutexGuard aGuard( m_mutex ); - - //If someone called stop then we do not update the extension -> game over! - if ( m_bStopped ) - return; - TExtensionCmd pEntry( new ExtensionCmd( ExtensionCmd::CHECK_FOR_UPDATES, vExtensionList ) ); - m_queue.push( pEntry ); - m_eInput = START; - m_wakeup.set(); + _insert( pEntry ); } //------------------------------------------------------------------------------ @@ -848,12 +808,6 @@ void ExtensionCmdQueue::Thread::execute() break; } } - //catch ( deployment::DeploymentException &) - //{ - //} - //catch ( lang::IllegalArgumentException &) - //{ - //} catch ( ucb::CommandAbortedException & ) { //This exception is thrown when the user clicks cancel on the progressbar. @@ -915,9 +869,6 @@ void ExtensionCmdQueue::Thread::execute() currentCmdEnv->stopProgress(); } //end for - //enable all buttons -// m_pDialog->m_bAddingExtensions = false; -// m_pDialog->updateButtonStates(); #ifdef WNT CoUninitialize(); #endif @@ -944,7 +895,7 @@ void ExtensionCmdQueue::Thread::_addExtension( ::rtl::Reference< ProgressCmdEnv OUString sName; if ( ! (anyTitle >>= sName) ) { - OSL_ENSURE(0, "Could not get file name for extension."); + OSL_FAIL("Could not get file name for extension."); return; } @@ -1013,13 +964,13 @@ void ExtensionCmdQueue::Thread::_checkForUpdates( if ( ( pUpdateDialog->Execute() == RET_OK ) && !vData.empty() ) { - // If there is at least one directly downloadable dialog then we + // If there is at least one directly downloadable extension then we // open the install dialog. ::std::vector< UpdateData > dataDownload; int countWebsiteDownload = 0; typedef std::vector< dp_gui::UpdateData >::const_iterator cit; - for ( cit i = vData.begin(); i < vData.end(); i++ ) + for ( cit i = vData.begin(); i < vData.end(); ++i ) { if ( i->sWebsiteURL.getLength() > 0 ) countWebsiteDownload ++; @@ -1039,7 +990,7 @@ void ExtensionCmdQueue::Thread::_checkForUpdates( //Now start the webbrowser and navigate to the websites where we get the updates if ( RET_OK == nDialogResult ) { - for ( cit i = vData.begin(); i < vData.end(); i++ ) + for ( cit i = vData.begin(); i < vData.end(); ++i ) { if ( m_pDialogHelper && ( i->sWebsiteURL.getLength() > 0 ) ) m_pDialogHelper->openWebBrowser( i->sWebsiteURL, m_pDialogHelper->getWindow()->GetText() ); @@ -1125,6 +1076,19 @@ void ExtensionCmdQueue::Thread::onTerminated() m_bTerminated = true; } +void ExtensionCmdQueue::Thread::_insert(const TExtensionCmd& rExtCmd) +{ + ::osl::MutexGuard aGuard( m_mutex ); + + // If someone called stop then we do not process the command -> game over! + if ( m_bStopped ) + return; + + m_queue.push( rExtCmd ); + m_eInput = START; + m_wakeup.set(); +} + //------------------------------------------------------------------------------ OUString ExtensionCmdQueue::Thread::searchAndReplaceAll( const OUString &rSource, const OUString &rWhat, @@ -1147,8 +1111,6 @@ OUString ExtensionCmdQueue::Thread::searchAndReplaceAll( const OUString &rSource //------------------------------------------------------------------------------ -//------------------------------------------------------------------------------ -//------------------------------------------------------------------------------ ExtensionCmdQueue::ExtensionCmdQueue( DialogHelper * pDialogHelper, TheExtensionManager *pManager, const uno::Reference< uno::XComponentContext > &rContext ) diff --git a/desktop/source/deployment/gui/dp_gui_extlistbox.cxx b/desktop/source/deployment/gui/dp_gui_extlistbox.cxx index 05511135e2..8cdf0a67e2 100644 --- a/desktop/source/deployment/gui/dp_gui_extlistbox.cxx +++ b/desktop/source/deployment/gui/dp_gui_extlistbox.cxx @@ -77,11 +77,12 @@ Entry_Impl::Entry_Impl( const uno::Reference< deployment::XPackage > &xPackage, m_sTitle = xPackage->getDisplayName(); m_sVersion = xPackage->getVersion(); m_sDescription = xPackage->getDescription(); + m_sLicenseText = xPackage->getLicenseText(); beans::StringPair aInfo( m_xPackage->getPublisherInfo() ); m_sPublisher = aInfo.First; m_sPublisherURL = aInfo.Second; - + // get the icons for the package if there are any uno::Reference< graphic::XGraphic > xGraphic = xPackage->getIcon( false ); if ( xGraphic.is() ) @@ -184,13 +185,9 @@ ExtensionBox_Impl::ExtensionBox_Impl( Dialog* pParent, TheExtensionManager *pMan m_nActiveHeight( 0 ), m_nExtraHeight( 2 ), m_aSharedImage( DialogHelper::getResId( RID_IMG_SHARED ) ), - m_aSharedImageHC( DialogHelper::getResId( RID_IMG_SHARED_HC ) ), m_aLockedImage( DialogHelper::getResId( RID_IMG_LOCKED ) ), - m_aLockedImageHC( DialogHelper::getResId( RID_IMG_LOCKED_HC ) ), m_aWarningImage( DialogHelper::getResId( RID_IMG_WARNING ) ), - m_aWarningImageHC( DialogHelper::getResId( RID_IMG_WARNING_HC ) ), m_aDefaultImage( DialogHelper::getResId( RID_IMG_EXTENSION ) ), - m_aDefaultImageHC( DialogHelper::getResId( RID_IMG_EXTENSION_HC ) ), m_pScrollBar( NULL ), m_pManager( pManager ) { @@ -334,7 +331,7 @@ void ExtensionBox_Impl::select( sal_Int32 nIndex ) { const ::osl::MutexGuard aGuard( m_entriesMutex ); checkIndex( nIndex ); - selectEntry( nIndex ); + selectEntry( nIndex ); } //------------------------------------------------------------------------------ @@ -355,7 +352,6 @@ void ExtensionBox_Impl::select( const rtl::OUString & sName ) } //------------------------------------------------------------------------------ -//------------------------------------------------------------------------------ // Title + description void ExtensionBox_Impl::CalcActiveHeight( const long nPos ) { @@ -455,10 +451,10 @@ void ExtensionBox_Impl::DeleteRemoved() void ExtensionBox_Impl::selectEntry( const long nPos ) { //ToDo whe should not use the guard at such a big scope here. - //Currently it is used to gard m_vEntries and m_nActive. m_nActive will be + //Currently it is used to gard m_vEntries and m_nActive. m_nActive will be //modified in this function. //It would be probably best to always use a copy of m_vEntries - //and some other state variables from ExtensionBox_Impl for + //and some other state variables from ExtensionBox_Impl for //the whole painting operation. See issue i86993 ::osl::ClearableMutexGuard guard(m_entriesMutex); @@ -531,9 +527,9 @@ void ExtensionBox_Impl::DrawRow( const Rectangle& rRect, const TEntry_Impl pEntr aPos += Point( TOP_OFFSET, TOP_OFFSET ); Image aImage; if ( ! pEntry->m_aIcon ) - aImage = isHCMode() ? m_aDefaultImageHC : m_aDefaultImage; + aImage = m_aDefaultImage; else - aImage = isHCMode() ? pEntry->m_aIconHC : pEntry->m_aIcon; + aImage = pEntry->m_aIcon; Size aImageSize = aImage.GetSizePixel(); if ( ( aImageSize.Width() <= ICON_WIDTH ) && ( aImageSize.Height() <= ICON_HEIGHT ) ) DrawImage( Point( aPos.X()+((ICON_WIDTH-aImageSize.Width())/2), aPos.Y()+((ICON_HEIGHT-aImageSize.Height())/2) ), aImage ); @@ -639,16 +635,16 @@ void ExtensionBox_Impl::DrawRow( const Rectangle& rRect, const TEntry_Impl pEntr { aPos = rRect.TopRight() + Point( -(RIGHT_ICON_OFFSET + SMALL_ICON_SIZE), TOP_OFFSET ); if ( pEntry->m_bLocked ) - DrawImage( aPos, Size( SMALL_ICON_SIZE, SMALL_ICON_SIZE ), isHCMode() ? m_aLockedImageHC : m_aLockedImage ); + DrawImage( aPos, Size( SMALL_ICON_SIZE, SMALL_ICON_SIZE ), m_aLockedImage ); else - DrawImage( aPos, Size( SMALL_ICON_SIZE, SMALL_ICON_SIZE ), isHCMode() ? m_aSharedImageHC : m_aSharedImage ); + DrawImage( aPos, Size( SMALL_ICON_SIZE, SMALL_ICON_SIZE ), m_aSharedImage ); } if ( ( pEntry->m_eState == AMBIGUOUS ) || pEntry->m_bMissingDeps || pEntry->m_bMissingLic ) { aPos = rRect.TopRight() + Point( -(RIGHT_ICON_OFFSET + SPACE_BETWEEN + 2*SMALL_ICON_SIZE), TOP_OFFSET ); - DrawImage( aPos, Size( SMALL_ICON_SIZE, SMALL_ICON_SIZE ), isHCMode() ? m_aWarningImageHC : m_aWarningImage ); + DrawImage( aPos, Size( SMALL_ICON_SIZE, SMALL_ICON_SIZE ), m_aWarningImage ); } - + SetLineColor( Color( COL_LIGHTGRAY ) ); DrawLine( rRect.BottomLeft(), rRect.BottomRight() ); } @@ -711,7 +707,7 @@ bool ExtensionBox_Impl::HandleTabKey( bool ) } // ----------------------------------------------------------------------- -bool ExtensionBox_Impl::HandleCursorKey( USHORT nKeyCode ) +bool ExtensionBox_Impl::HandleCursorKey( sal_uInt16 nKeyCode ) { if ( m_vEntries.empty() ) return true; @@ -876,7 +872,7 @@ long ExtensionBox_Impl::Notify( NotifyEvent& rNEvt ) { const KeyEvent* pKEvt = rNEvt.GetKeyEvent(); KeyCode aKeyCode = pKEvt->GetKeyCode(); - USHORT nKeyCode = aKeyCode.GetCode(); + sal_uInt16 nKeyCode = aKeyCode.GetCode(); if ( nKeyCode == KEY_TAB ) bHandled = HandleTabKey( aKeyCode.IsShift() ); @@ -989,7 +985,7 @@ long ExtensionBox_Impl::addEntry( const uno::Reference< deployment::XPackage > & } else if ( !m_bInCheckMode ) { - OSL_ENSURE( 0, "ExtensionBox_Impl::addEntry(): Will not add duplicate entries" ); + OSL_FAIL( "ExtensionBox_Impl::addEntry(): Will not add duplicate entries" ); } } @@ -1062,7 +1058,7 @@ void ExtensionBox_Impl::removeEntry( const uno::Reference< deployment::XPackage long nPos = iIndex - m_vEntries.begin(); // Entries mustn't removed here, because they contain a hyperlink control - // which can only be deleted when the thread has the solar mutex. Therefor + // which can only be deleted when the thread has the solar mutex. Therefor // the entry will be moved into the m_vRemovedEntries list which will be // cleared on the next paint event m_vRemovedEntries.push_back( *iIndex ); @@ -1154,7 +1150,7 @@ void ExtensionBox_Impl::checkEntries() nNewPos = nPos; if ( nPos <= m_nActive ) m_nActive += 1; - iIndex++; + ++iIndex; } else { // remove entry from list @@ -1168,7 +1164,7 @@ void ExtensionBox_Impl::checkEntries() } } else - iIndex++; + ++iIndex; } guard.clear(); @@ -1184,11 +1180,6 @@ void ExtensionBox_Impl::checkEntries() Invalidate(); } } -//------------------------------------------------------------------------------ -bool ExtensionBox_Impl::isHCMode() -{ - return (bool)GetSettings().GetStyleSettings().GetHighContrastMode(); -} //------------------------------------------------------------------------------ void ExtensionBox_Impl::SetScrollHdl( const Link& rLink ) diff --git a/desktop/source/deployment/gui/dp_gui_extlistbox.hxx b/desktop/source/deployment/gui/dp_gui_extlistbox.hxx index 4726a0c9e2..9dbbb7d337 100644 --- a/desktop/source/deployment/gui/dp_gui_extlistbox.hxx +++ b/desktop/source/deployment/gui/dp_gui_extlistbox.hxx @@ -2,7 +2,7 @@ /************************************************************************* * * 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 @@ -82,6 +82,7 @@ struct Entry_Impl String m_sPublisher; String m_sPublisherURL; String m_sErrorText; + String m_sLicenseText; Image m_aIcon; Image m_aIconHC; svt::FixedHyperlink *m_pPublisher; @@ -137,22 +138,18 @@ class ExtensionBox_Impl : public ::svt::IExtensionListBox long m_nExtraHeight; Size m_aOutputSize; Image m_aSharedImage; - Image m_aSharedImageHC; Image m_aLockedImage; - Image m_aLockedImageHC; Image m_aWarningImage; - Image m_aWarningImageHC; Image m_aDefaultImage; - Image m_aDefaultImageHC; Link m_aClickHdl; - + ScrollBar *m_pScrollBar; com::sun::star::uno::Reference< ExtensionRemovedListener > m_xRemoveListener; TheExtensionManager *m_pManager; //This mutex is used for synchronizing access to m_vEntries. - //Currently it is used to synchronize adding, removing entries and + //Currently it is used to synchronize adding, removing entries and //functions like getItemName, getItemDescription, etc. to prevent //that m_vEntries is accessed at an invalid index. //ToDo: There are many more places where m_vEntries is read and which may @@ -170,9 +167,8 @@ class ExtensionBox_Impl : public ::svt::IExtensionListBox void SetupScrollBar(); void DrawRow( const Rectangle& rRect, const TEntry_Impl pEntry ); bool HandleTabKey( bool bReverse ); - bool HandleCursorKey( USHORT nKeyCode ); + bool HandleCursorKey( sal_uInt16 nKeyCode ); bool FindEntryPos( const TEntry_Impl pEntry, long nStart, long nEnd, long &nFound ); - bool isHCMode(); void DeleteRemoved(); //----------------- @@ -194,7 +190,7 @@ public: const Size GetMinOutputSizePixel() const; void SetExtraSize( long nSize ) { m_nExtraHeight = nSize; } - TEntry_Impl GetEntryData( long nPos ) { return m_vEntries[ nPos ]; } + TEntry_Impl GetEntryData( long nPos ) { return m_vEntries[ nPos ]; } long GetEntryCount() { return (long) m_vEntries.size(); } Rectangle GetEntryRect( const long nPos ) const; bool HasActive() { return m_bHasActive; } diff --git a/desktop/source/deployment/gui/dp_gui_service.cxx b/desktop/source/deployment/gui/dp_gui_service.cxx index a01b8b309d..cf6dc14463 100644 --- a/desktop/source/deployment/gui/dp_gui_service.cxx +++ b/desktop/source/deployment/gui/dp_gui_service.cxx @@ -66,7 +66,7 @@ public: virtual ~MyApp(); // Application - virtual void Main(); + virtual int Main(); }; //______________________________________________________________________________ @@ -80,11 +80,11 @@ MyApp::MyApp() } //______________________________________________________________________________ -void MyApp::Main() +int MyApp::Main() { + return EXIT_SUCCESS; } -//############################################################################## namespace { @@ -357,14 +357,6 @@ void SAL_CALL component_getImplementationEnvironment( *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME; } -sal_Bool SAL_CALL component_writeInfo( - lang::XMultiServiceFactory * pServiceManager, - registry::XRegistryKey * pRegistryKey ) -{ - return component_writeInfoHelper( - pServiceManager, pRegistryKey, dp_gui::serviceDecl, dp_gui::licenseDecl, dp_gui::updateDecl ); -} - void * SAL_CALL component_getFactory( sal_Char const * pImplName, lang::XMultiServiceFactory * pServiceManager, diff --git a/desktop/source/deployment/gui/dp_gui_shared.hxx b/desktop/source/deployment/gui/dp_gui_shared.hxx index af3a0bd5b9..dcee2863cd 100644 --- a/desktop/source/deployment/gui/dp_gui_shared.hxx +++ b/desktop/source/deployment/gui/dp_gui_shared.hxx @@ -55,7 +55,7 @@ struct BrandName : public ::rtl::StaticWithInit<const ::rtl::OUString, BrandName class DpGuiResId : public ResId { public: - DpGuiResId( USHORT nId ):ResId( nId, *DeploymentGuiResMgr::get() ) {} + DpGuiResId( sal_uInt16 nId ):ResId( nId, *DeploymentGuiResMgr::get() ) {} }; } // namespace dp_gui diff --git a/desktop/source/deployment/gui/dp_gui_system.cxx b/desktop/source/deployment/gui/dp_gui_system.cxx deleted file mode 100644 index 0e6416f161..0000000000 --- a/desktop/source/deployment/gui/dp_gui_system.cxx +++ /dev/null @@ -1,62 +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 "dp_gui_system.hxx" -#ifdef WNT -#define WIN32_LEAN_AND_MEAN -#ifdef _MSC_VER -#pragma warning(push,1) /* disable warnings within system headers */ -#endif -#include <windows.h> -#ifdef _MSC_VER -#pragma warning(pop) -#endif -#endif - -namespace dp_gui { - -//We cannot distinguish Vista and 2008 Server -bool isVista() -{ -#ifdef WNT - OSVERSIONINFO osvi; - ZeroMemory(&osvi, sizeof(OSVERSIONINFO)); - osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); - GetVersionEx(&osvi); - return osvi.dwMajorVersion >= 6; -#else - return false; -#endif -} - -} //namespace dp_gui - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/desktop/source/deployment/gui/dp_gui_system.hxx b/desktop/source/deployment/gui/dp_gui_system.hxx deleted file mode 100644 index 8c8feb43cf..0000000000 --- a/desktop/source/deployment/gui/dp_gui_system.hxx +++ /dev/null @@ -1,40 +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. - * - ************************************************************************/ - -#ifndef INCLUDED_DESKTOP_SOURCE_DEPLOYMENT_GUI_DP_GUI_SYSTEM_HXX -#define INCLUDED_DESKTOP_SOURCE_DEPLOYMENT_GUI_DP_GUI_SYSTEM_HXX - - -/// @HTML -namespace dp_gui { -bool isVista(); - -} -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/desktop/source/deployment/gui/dp_gui_theextmgr.cxx b/desktop/source/deployment/gui/dp_gui_theextmgr.cxx index 564580c520..84e08cbe4e 100644 --- a/desktop/source/deployment/gui/dp_gui_theextmgr.cxx +++ b/desktop/source/deployment/gui/dp_gui_theextmgr.cxx @@ -166,7 +166,7 @@ void TheExtensionManager::SetText( const ::rtl::OUString &rTitle ) } //------------------------------------------------------------------------------ -void TheExtensionManager::ToTop( USHORT nFlags ) +void TheExtensionManager::ToTop( sal_uInt16 nFlags ) { const SolarMutexGuard guard; @@ -361,7 +361,7 @@ PackageState TheExtensionManager::getPackageState( const uno::Reference< deploym } catch ( uno::Exception & exc) { (void) exc; - OSL_ENSURE( 0, ::rtl::OUStringToOString( exc.Message, RTL_TEXTENCODING_UTF8 ).getStr() ); + OSL_FAIL( ::rtl::OUStringToOString( exc.Message, RTL_TEXTENCODING_UTF8 ).getStr() ); return NOT_AVAILABLE; } } diff --git a/desktop/source/deployment/gui/dp_gui_theextmgr.hxx b/desktop/source/deployment/gui/dp_gui_theextmgr.hxx index 13ba06d0b3..6b1deb7ba9 100644 --- a/desktop/source/deployment/gui/dp_gui_theextmgr.hxx +++ b/desktop/source/deployment/gui/dp_gui_theextmgr.hxx @@ -87,7 +87,7 @@ public: void SetText( const ::rtl::OUString &rTitle ); void Show(); - void ToTop( USHORT nFlags ); + void ToTop( sal_uInt16 nFlags ); bool Close(); bool isVisible(); diff --git a/desktop/source/deployment/gui/dp_gui_updatedata.hxx b/desktop/source/deployment/gui/dp_gui_updatedata.hxx index 314f449358..3a43dce5d6 100644 --- a/desktop/source/deployment/gui/dp_gui_updatedata.hxx +++ b/desktop/source/deployment/gui/dp_gui_updatedata.hxx @@ -29,6 +29,7 @@ #define INCLUDED_DP_GUI_UPDATEDATA_HXX #include "sal/config.h" +#include "tools/solar.h" #include "rtl/ustring.hxx" #include "com/sun/star/uno/Reference.hxx" @@ -81,6 +82,10 @@ struct UpdateData //are to be ignored. ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > aUpdateSource; + + // ID to find this entry in the update listbox + sal_uInt16 m_nID; + bool m_bIgnored; }; } diff --git a/desktop/source/deployment/gui/dp_gui_updatedialog.cxx b/desktop/source/deployment/gui/dp_gui_updatedialog.cxx index 91f1aff663..8b73e6bae8 100644 --- a/desktop/source/deployment/gui/dp_gui_updatedialog.cxx +++ b/desktop/source/deployment/gui/dp_gui_updatedialog.cxx @@ -44,14 +44,15 @@ #include "com/sun/star/awt/WindowAttribute.hpp" #include "com/sun/star/awt/WindowClass.hpp" #include "com/sun/star/awt/WindowDescriptor.hpp" -#include "com/sun/star/awt/XThrobber.hpp" #include "com/sun/star/awt/XToolkit.hpp" #include "com/sun/star/awt/XWindow.hpp" #include "com/sun/star/awt/XWindowPeer.hpp" #include "com/sun/star/beans/NamedValue.hpp" #include "com/sun/star/beans/Optional.hpp" #include "com/sun/star/beans/PropertyValue.hpp" +#include "com/sun/star/beans/XPropertySet.hpp" #include "com/sun/star/container/XNameAccess.hpp" +#include "com/sun/star/container/XNameContainer.hpp" #include "com/sun/star/deployment/DeploymentException.hpp" #include "com/sun/star/deployment/UpdateInformationProvider.hpp" #include "com/sun/star/deployment/XPackage.hpp" @@ -63,6 +64,7 @@ #include "com/sun/star/frame/XDispatchProvider.hpp" #include "com/sun/star/lang/IllegalArgumentException.hpp" #include "com/sun/star/lang/XMultiComponentFactory.hpp" +#include "com/sun/star/lang/XSingleServiceFactory.hpp" #include "com/sun/star/system/SystemShellExecuteFlags.hpp" #include "com/sun/star/system/XSystemShellExecute.hpp" #include "com/sun/star/task/XAbortChannel.hpp" @@ -77,6 +79,7 @@ #include "com/sun/star/uno/Sequence.hxx" #include "com/sun/star/uno/XInterface.hpp" #include "com/sun/star/util/URL.hpp" +#include "com/sun/star/util/XChangesBatch.hpp" #include "com/sun/star/util/XURLTransformer.hpp" #include "com/sun/star/xml/dom/XElement.hpp" #include "com/sun/star/xml/dom/XNode.hpp" @@ -121,7 +124,6 @@ #include "dp_gui_updatedata.hxx" #include "dp_gui_updatedialog.hxx" #include "dp_gui_shared.hxx" -#include "dp_gui_system.hxx" class KeyEvent; class MouseEvent; @@ -130,16 +132,23 @@ namespace com { namespace sun { namespace star { namespace uno { class XComponentContext; } } } } -namespace css = ::com::sun::star; - +using namespace ::com::sun::star; using dp_gui::UpdateDialog; namespace { static sal_Unicode const LF = 0x000A; static sal_Unicode const CR = 0x000D; +static const sal_uInt16 CMD_ENABLE_UPDATE = 1; +static const sal_uInt16 CMD_IGNORE_UPDATE = 2; +static const sal_uInt16 CMD_IGNORE_ALL_UPDATES = 3; + +#define OUSTR(x) ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(x) ) + +#define IGNORED_UPDATES OUSTR("/org.openoffice.Office.ExtensionManager/ExtensionUpdateData/IgnoredUpdates") +#define PROPERTY_VERSION OUSTR("Version") -enum Kind { ENABLED_UPDATE, DISABLED_UPDATE, GENERAL_ERROR, SPECIFIC_ERROR }; +enum Kind { ENABLED_UPDATE, DISABLED_UPDATE, SPECIFIC_ERROR }; rtl::OUString confineToParagraph(rtl::OUString const & text) { // Confine arbitrary text to a single paragraph in a dp_gui::AutoScrollEdit. @@ -152,86 +161,64 @@ rtl::OUString confineToParagraph(rtl::OUString const & text) { struct UpdateDialog::DisabledUpdate { rtl::OUString name; - css::uno::Sequence< rtl::OUString > unsatisfiedDependencies; + uno::Sequence< rtl::OUString > unsatisfiedDependencies; // We also want to show release notes and publisher for disabled updates ::com::sun::star::uno::Reference< ::com::sun::star::xml::dom::XNode > aUpdateInfo; + sal_uInt16 m_nID; }; struct UpdateDialog::SpecificError { rtl::OUString name; rtl::OUString message; + sal_uInt16 m_nID; }; -union UpdateDialog::IndexUnion{ - std::vector< dp_gui::UpdateData >::size_type enabledUpdate; - std::vector< UpdateDialog::DisabledUpdate >::size_type disabledUpdate; - std::vector< rtl::OUString >::size_type generalError; - std::vector< UpdateDialog::SpecificError >::size_type specificError; -}; - -struct UpdateDialog::Index { - static std::auto_ptr< UpdateDialog::Index const > newEnabledUpdate( - std::vector< dp_gui::UpdateData >::size_type n); - - static std::auto_ptr< UpdateDialog::Index const > newDisabledUpdate( - std::vector< UpdateDialog::DisabledUpdate >::size_type n); +//------------------------------------------------------------------------------ +struct UpdateDialog::IgnoredUpdate { + rtl::OUString sExtensionID; + rtl::OUString sVersion; + bool bRemoved; - static std::auto_ptr< UpdateDialog::Index const > newGeneralError( - std::vector< rtl::OUString >::size_type n); - - static std::auto_ptr< UpdateDialog::Index const > newSpecificError( - std::vector< UpdateDialog::SpecificError >::size_type n); - - Kind kind; - IndexUnion index; - -private: - explicit Index(Kind theKind); + IgnoredUpdate( const rtl::OUString &rExtensionID, const rtl::OUString &rVersion ); }; -std::auto_ptr< UpdateDialog::Index const > -UpdateDialog::Index::newEnabledUpdate( - std::vector< dp_gui::UpdateData >::size_type n) -{ - UpdateDialog::Index * p = new UpdateDialog::Index(ENABLED_UPDATE); - p->index.enabledUpdate = n; - return std::auto_ptr< UpdateDialog::Index const >(p); -} - -std::auto_ptr< UpdateDialog::Index const > -UpdateDialog::Index::newDisabledUpdate( - std::vector< UpdateDialog::DisabledUpdate >::size_type n) -{ - UpdateDialog::Index * p = new UpdateDialog::Index(DISABLED_UPDATE); - p->index.disabledUpdate = n; - return std::auto_ptr< UpdateDialog::Index const >(p); -} +//------------------------------------------------------------------------------ +UpdateDialog::IgnoredUpdate::IgnoredUpdate( const rtl::OUString &rExtensionID, const rtl::OUString &rVersion ): + sExtensionID( rExtensionID ), + sVersion( rVersion ), + bRemoved( false ) +{} -std::auto_ptr< UpdateDialog::Index const > UpdateDialog::Index::newGeneralError( - std::vector< rtl::OUString >::size_type n) +//------------------------------------------------------------------------------ +struct UpdateDialog::Index { - UpdateDialog::Index * p = new UpdateDialog::Index(GENERAL_ERROR); - p->index.generalError = n; - return std::auto_ptr< UpdateDialog::Index const >(p); -} + Kind m_eKind; + bool m_bIgnored; + sal_uInt16 m_nID; + sal_uInt16 m_nIndex; + rtl::OUString m_aName; -std::auto_ptr< UpdateDialog::Index const > -UpdateDialog::Index::newSpecificError( - std::vector< UpdateDialog::SpecificError >::size_type n) -{ - UpdateDialog::Index * p = new UpdateDialog::Index(SPECIFIC_ERROR); - p->index.specificError = n; - return std::auto_ptr< UpdateDialog::Index const >(p); -} + Index( Kind theKind, sal_uInt16 nID, sal_uInt16 nIndex, const rtl::OUString &rName ); +}; -UpdateDialog::Index::Index(Kind theKind): kind(theKind) {} +//------------------------------------------------------------------------------ +UpdateDialog::Index::Index( Kind theKind, sal_uInt16 nID, sal_uInt16 nIndex, const rtl::OUString &rName ): + m_eKind( theKind ), + m_bIgnored( false ), + m_nID( nID ), + m_nIndex( nIndex ), + m_aName( rName ) +{} +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ class UpdateDialog::Thread: public dp_gui::Thread { public: Thread( - css::uno::Reference< css::uno::XComponentContext > const & context, + uno::Reference< uno::XComponentContext > const & context, UpdateDialog & dialog, - const std::vector< css::uno::Reference< css::deployment::XPackage > > & vExtensionList); + const std::vector< uno::Reference< deployment::XPackage > > & vExtensionList); void stop(); @@ -239,43 +226,20 @@ private: Thread(UpdateDialog::Thread &); // not defined void operator =(UpdateDialog::Thread &); // not defined - struct Entry { - explicit Entry( - css::uno::Reference< css::deployment::XPackage > const & thePackage, - rtl::OUString const & theVersion); - - css::uno::Reference< css::deployment::XPackage > package; - rtl::OUString version; - //Indicates that the extension provides its own update URLs. - //If this is true, then we must not use the default update - //URL to find the update information. - bool bProvidesOwnUpdate; - css::uno::Reference< css::xml::dom::XNode > info; - UpdateDialog::DisabledUpdate disableUpdate; - dp_gui::UpdateData updateData; - }; - - // A multimap in case an extension is installed in "user", "shared" or "bundled" - typedef std::map< rtl::OUString, Entry > Map; - virtual ~Thread(); virtual void execute(); void handleSpecificError( - css::uno::Reference< css::deployment::XPackage > const & package, - css::uno::Any const & exception) const; + uno::Reference< deployment::XPackage > const & package, + uno::Any const & exception) const; - css::uno::Sequence< css::uno::Reference< css::xml::dom::XElement > > + uno::Sequence< uno::Reference< xml::dom::XElement > > getUpdateInformation( - css::uno::Reference< css::deployment::XPackage > const & package, - css::uno::Sequence< rtl::OUString > const & urls, + uno::Reference< deployment::XPackage > const & package, + uno::Sequence< rtl::OUString > const & urls, rtl::OUString const & identifier) const; - void getOwnUpdateInformation( - css::uno::Reference< css::deployment::XPackage > const & package, - Map * map); - ::rtl::OUString getUpdateDisplayString( dp_gui::UpdateData const & data, ::rtl::OUString const & version = ::rtl::OUString()) const; @@ -285,40 +249,40 @@ private: dp_gui::UpdateData & out_data) const; bool update( - UpdateDialog::DisabledUpdate const & du, - dp_gui::UpdateData const & data) const; - - css::uno::Reference< css::uno::XComponentContext > m_context; + UpdateDialog::DisabledUpdate & du, + dp_gui::UpdateData & data) const; + + uno::Reference< uno::XComponentContext > m_context; UpdateDialog & m_dialog; - std::vector< css::uno::Reference< css::deployment::XPackage > > m_vExtensionList; - css::uno::Reference< css::deployment::XUpdateInformationProvider > m_updateInformation; - css::uno::Reference< css::task::XInteractionHandler > m_xInteractionHdl; + std::vector< uno::Reference< deployment::XPackage > > m_vExtensionList; + uno::Reference< deployment::XUpdateInformationProvider > m_updateInformation; + uno::Reference< task::XInteractionHandler > m_xInteractionHdl; // guarded by Application::GetSolarMutex(): - css::uno::Reference< css::task::XAbortChannel > m_abort; + uno::Reference< task::XAbortChannel > m_abort; bool m_stop; }; UpdateDialog::Thread::Thread( - css::uno::Reference< css::uno::XComponentContext > const & context, + uno::Reference< uno::XComponentContext > const & context, UpdateDialog & dialog, - const std::vector< css::uno::Reference< css::deployment::XPackage > > &vExtensionList): + const std::vector< uno::Reference< deployment::XPackage > > &vExtensionList): m_context(context), m_dialog(dialog), m_vExtensionList(vExtensionList), m_updateInformation( - css::deployment::UpdateInformationProvider::create(context)), + deployment::UpdateInformationProvider::create(context)), m_stop(false) { if( m_context.is() ) { - css::uno::Reference< css::lang::XMultiComponentFactory > xServiceManager( m_context->getServiceManager() ); + uno::Reference< lang::XMultiComponentFactory > xServiceManager( m_context->getServiceManager() ); if( xServiceManager.is() ) { - m_xInteractionHdl = css::uno::Reference< css::task::XInteractionHandler > ( + m_xInteractionHdl = uno::Reference< task::XInteractionHandler > ( xServiceManager->createInstanceWithContext( OUSTR( "com.sun.star.task.InteractionHandler" ), m_context), - css::uno::UNO_QUERY ); + uno::UNO_QUERY ); if ( m_xInteractionHdl.is() ) m_updateInformation->setInteractionHandler( m_xInteractionHdl ); } @@ -326,7 +290,7 @@ UpdateDialog::Thread::Thread( } void UpdateDialog::Thread::stop() { - css::uno::Reference< css::task::XAbortChannel > abort; + uno::Reference< task::XAbortChannel > abort; { SolarMutexGuard g; abort = m_abort; @@ -338,21 +302,10 @@ void UpdateDialog::Thread::stop() { m_updateInformation->cancel(); } -UpdateDialog::Thread::Entry::Entry( - css::uno::Reference< css::deployment::XPackage > const & thePackage, - rtl::OUString const & theVersion): - - package(thePackage), - version(theVersion), - bProvidesOwnUpdate(false), - updateData(thePackage) -{ -} - UpdateDialog::Thread::~Thread() { if ( m_xInteractionHdl.is() ) - m_updateInformation->setInteractionHandler( css::uno::Reference< css::task::XInteractionHandler > () ); + m_updateInformation->setInteractionHandler( uno::Reference< task::XInteractionHandler > () ); } void UpdateDialog::Thread::execute() @@ -363,20 +316,20 @@ void UpdateDialog::Thread::execute() return; } } - css::uno::Reference<css::deployment::XExtensionManager> extMgr = - css::deployment::ExtensionManager::get(m_context); + uno::Reference<deployment::XExtensionManager> extMgr = + deployment::ExtensionManager::get(m_context); - std::vector<std::pair<css::uno::Reference<css::deployment::XPackage>, css::uno::Any > > errors; + std::vector<std::pair<uno::Reference<deployment::XPackage>, uno::Any > > errors; dp_misc::UpdateInfoMap updateInfoMap = dp_misc::getOnlineUpdateInfos( m_context, extMgr, m_updateInformation, &m_vExtensionList, errors); - typedef std::vector<std::pair<css::uno::Reference<css::deployment::XPackage>, - css::uno::Any> >::const_iterator ITERROR; - for (ITERROR ite = errors.begin(); ite != errors.end(); ite ++) + typedef std::vector<std::pair<uno::Reference<deployment::XPackage>, + uno::Any> >::const_iterator ITERROR; + for (ITERROR ite = errors.begin(); ite != errors.end(); ++ite ) handleSpecificError(ite->first, ite->second); - for (dp_misc::UpdateInfoMap::iterator i(updateInfoMap.begin()); i != updateInfoMap.end(); i++) + for (dp_misc::UpdateInfoMap::iterator i(updateInfoMap.begin()); i != updateInfoMap.end(); ++i) { dp_misc::UpdateInfo const & info = i->second; UpdateData updateData(info.extension); @@ -391,13 +344,17 @@ void UpdateDialog::Thread::execute() rtl::OUString sVersionUser; rtl::OUString sVersionShared; rtl::OUString sVersionBundled; - css::uno::Sequence< css::uno::Reference< css::deployment::XPackage> > extensions; + uno::Sequence< uno::Reference< deployment::XPackage> > extensions; try { extensions = extMgr->getExtensionsWithSameIdentifier( dp_misc::getIdentifier(info.extension), info.extension->getName(), - css::uno::Reference<css::ucb::XCommandEnvironment>()); - } catch (css::lang::IllegalArgumentException& ) { + uno::Reference<ucb::XCommandEnvironment>()); + } catch (lang::IllegalArgumentException& ) { OSL_ASSERT(0); + continue; + } catch (css::ucb::CommandFailedException& ) { + OSL_ASSERT(0); + continue; } OSL_ASSERT(extensions.getLength() == 3); if (extensions[0].is() ) @@ -414,7 +371,7 @@ void UpdateDialog::Thread::execute() dp_misc::UPDATE_SOURCE sourceShared = dp_misc::isUpdateSharedExtension( bSharedReadOnly, sVersionShared, sVersionBundled, sOnlineVersion); - css::uno::Reference<css::deployment::XPackage> updateSource; + uno::Reference<deployment::XPackage> updateSource; if (sourceUser != dp_misc::UPDATE_SOURCE_NONE) { if (sourceUser == dp_misc::UPDATE_SOURCE_SHARED) @@ -453,13 +410,13 @@ void UpdateDialog::Thread::execute() //Parameter package can be null void UpdateDialog::Thread::handleSpecificError( - css::uno::Reference< css::deployment::XPackage > const & package, - css::uno::Any const & exception) const + uno::Reference< deployment::XPackage > const & package, + uno::Any const & exception) const { UpdateDialog::SpecificError data; if (package.is()) data.name = package->getDisplayName(); - css::uno::Exception e; + uno::Exception e; if (exception >>= e) { data.message = e.Message; } @@ -501,7 +458,7 @@ void UpdateDialog::Thread::handleSpecificError( /** out_data will only be filled if all dependencies are ok. */ void UpdateDialog::Thread::prepareUpdateData( - css::uno::Reference< css::xml::dom::XNode > const & updateInfo, + uno::Reference< xml::dom::XNode > const & updateInfo, UpdateDialog::DisabledUpdate & out_du, dp_gui::UpdateData & out_data) const { @@ -509,7 +466,7 @@ void UpdateDialog::Thread::prepareUpdateData( return; dp_misc::DescriptionInfoset infoset(m_context, updateInfo); OSL_ASSERT(infoset.getVersion().getLength() != 0); - css::uno::Sequence< css::uno::Reference< css::xml::dom::XElement > > ds( + uno::Sequence< uno::Reference< xml::dom::XElement > > ds( dp_misc::Dependencies::check(infoset)); out_du.aUpdateInfo = updateInfo; @@ -532,8 +489,8 @@ void UpdateDialog::Thread::prepareUpdateData( } bool UpdateDialog::Thread::update( - UpdateDialog::DisabledUpdate const & du, - dp_gui::UpdateData const & data) const + UpdateDialog::DisabledUpdate & du, + dp_gui::UpdateData & data) const { bool ret = false; if (du.unsatisfiedDependencies.getLength() == 0) @@ -555,18 +512,18 @@ bool UpdateDialog::Thread::update( // UpdateDialog ---------------------------------------------------------- UpdateDialog::UpdateDialog( - css::uno::Reference< css::uno::XComponentContext > const & context, + uno::Reference< uno::XComponentContext > const & context, Window * parent, - const std::vector<css::uno::Reference< css::deployment::XPackage > > &vExtensionList, + const std::vector<uno::Reference< deployment::XPackage > > &vExtensionList, std::vector< dp_gui::UpdateData > * updateData): ModalDialog(parent,DpGuiResId(RID_DLG_UPDATE)), m_context(context), m_checking(this, DpGuiResId(RID_DLG_UPDATE_CHECKING)), + m_throbber(this, DpGuiResId(RID_DLG_UPDATE_THROBBER)), m_update(this, DpGuiResId(RID_DLG_UPDATE_UPDATE)), m_updates( *this, DpGuiResId(RID_DLG_UPDATE_UPDATES), - Image(DpGuiResId(RID_DLG_UPDATE_NORMALALERT)), - Image(DpGuiResId(RID_DLG_UPDATE_HIGHCONTRASTALERT))), + Image(DpGuiResId(RID_DLG_UPDATE_NORMALALERT))), m_all(this, DpGuiResId(RID_DLG_UPDATE_ALL)), m_description(this, DpGuiResId(RID_DLG_UPDATE_DESCRIPTION)), m_PublisherLabel(this, DpGuiResId(RID_DLG_UPDATE_PUBLISHER_LABEL)), @@ -577,7 +534,7 @@ UpdateDialog::UpdateDialog( m_line(this, DpGuiResId(RID_DLG_UPDATE_LINE)), m_help(this, DpGuiResId(RID_DLG_UPDATE_HELP)), m_ok(this, DpGuiResId(RID_DLG_UPDATE_OK)), - m_cancel(this, DpGuiResId(RID_DLG_UPDATE_CANCEL)), + m_close(this, DpGuiResId(RID_DLG_UPDATE_CLOSE)), m_error(String(DpGuiResId(RID_DLG_UPDATE_ERROR))), m_none(String(DpGuiResId(RID_DLG_UPDATE_NONE))), m_noInstallable(String(DpGuiResId(RID_DLG_UPDATE_NOINSTALLABLE))), @@ -589,105 +546,116 @@ UpdateDialog::UpdateDialog( m_noDependencyCurVer(String(DpGuiResId(RID_DLG_UPDATE_NODEPENDENCY_CUR_VER))), m_browserbased(String(DpGuiResId(RID_DLG_UPDATE_BROWSERBASED))), m_version(String(DpGuiResId(RID_DLG_UPDATE_VERSION))), + m_ignoredUpdate(String(DpGuiResId(RID_DLG_UPDATE_IGNORED_UPDATE))), m_updateData(*updateData), m_thread( new UpdateDialog::Thread( context, *this, vExtensionList)), m_nFirstLineDelta(0), - m_nOneLineMissing(0) + m_nOneLineMissing(0), + m_nLastID(1), + m_bModified( false ) // TODO: check! // , // m_extensionManagerDialog(extensionManagerDialog) { OSL_ASSERT(updateData != NULL); - m_xExtensionManager = css::deployment::ExtensionManager::get( context ); + m_xExtensionManager = deployment::ExtensionManager::get( context ); - css::uno::Reference< css::awt::XToolkit > toolkit; + uno::Reference< awt::XToolkit > toolkit; try { - toolkit = css::uno::Reference< css::awt::XToolkit >( - (css::uno::Reference< css::lang::XMultiComponentFactory >( + toolkit = uno::Reference< awt::XToolkit >( + (uno::Reference< lang::XMultiComponentFactory >( m_context->getServiceManager(), - css::uno::UNO_QUERY_THROW)-> + uno::UNO_QUERY_THROW)-> createInstanceWithContext( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.awt.Toolkit")), m_context)), - css::uno::UNO_QUERY_THROW); - } catch (css::uno::RuntimeException &) { + uno::UNO_QUERY_THROW); + } catch (uno::RuntimeException &) { throw; - } catch (css::uno::Exception & e) { - throw css::uno::RuntimeException(e.Message, e.Context); - } - Control c(this, DpGuiResId(RID_DLG_UPDATE_THROBBER)); - Point pos(c.GetPosPixel()); - Size size(c.GetSizePixel()); - try { - m_throbber = css::uno::Reference< css::awt::XThrobber >( - toolkit->createWindow( - css::awt::WindowDescriptor( - css::awt::WindowClass_SIMPLE, - rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Throbber")), - GetComponentInterface(), 0, - css::awt::Rectangle( - pos.X(), pos.Y(), size.Width(), size.Height()), - css::awt::WindowAttribute::SHOW)), - css::uno::UNO_QUERY_THROW); - } catch (css::lang::IllegalArgumentException & e) { - throw css::uno::RuntimeException(e.Message, e.Context); + } catch (uno::Exception & e) { + throw uno::RuntimeException(e.Message, e.Context); } m_updates.SetSelectHdl(LINK(this, UpdateDialog, selectionHandler)); m_all.SetToggleHdl(LINK(this, UpdateDialog, allHandler)); m_ok.SetClickHdl(LINK(this, UpdateDialog, okHandler)); - m_cancel.SetClickHdl(LINK(this, UpdateDialog, cancelHandler)); + m_close.SetClickHdl(LINK(this, UpdateDialog, closeHandler)); if ( ! dp_misc::office_is_running()) m_help.Disable(); FreeResource(); initDescription(); + getIgnoredUpdates(); } -UpdateDialog::~UpdateDialog() { - for (USHORT i = 0; i < m_updates.getItemCount(); ++i) { - delete static_cast< UpdateDialog::Index const * >( - m_updates.GetEntryData(i)); +//------------------------------------------------------------------------------ +UpdateDialog::~UpdateDialog() +{ + storeIgnoredUpdates(); + + for ( std::vector< UpdateDialog::Index* >::iterator i( m_ListboxEntries.begin() ); i != m_ListboxEntries.end(); ++i ) + { + delete (*i); + } + for ( std::vector< UpdateDialog::IgnoredUpdate* >::iterator i( m_ignoredUpdates.begin() ); i != m_ignoredUpdates.end(); ++i ) + { + delete (*i); } } -BOOL UpdateDialog::Close() { +//------------------------------------------------------------------------------ +sal_Bool UpdateDialog::Close() { m_thread->stop(); return ModalDialog::Close(); } short UpdateDialog::Execute() { - m_throbber->start(); + m_throbber.start(); m_thread->launch(); return ModalDialog::Execute(); } -UpdateDialog::CheckListBox::CheckListBox( - UpdateDialog & dialog, ResId const & resource, - Image const & normalStaticImage, Image const & highContrastStaticImage): - SvxCheckListBox( - &dialog, resource, normalStaticImage, highContrastStaticImage), +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +UpdateDialog::CheckListBox::CheckListBox( UpdateDialog & dialog, ResId const & resource, + Image const & normalStaticImage ): + SvxCheckListBox( &dialog, resource, normalStaticImage ), + m_ignoreUpdate( String( DpGuiResId( RID_DLG_UPDATE_IGNORE ) ) ), + m_ignoreAllUpdates( String( DpGuiResId( RID_DLG_UPDATE_IGNORE_ALL ) ) ), + m_enableUpdate( String( DpGuiResId( RID_DLG_UPDATE_ENABLE ) ) ), m_dialog(dialog) {} +//------------------------------------------------------------------------------ UpdateDialog::CheckListBox::~CheckListBox() {} -USHORT UpdateDialog::CheckListBox::getItemCount() const { - ULONG i = GetEntryCount(); - OSL_ASSERT(i <= std::numeric_limits< USHORT >::max()); - return sal::static_int_cast< USHORT >(i); +//------------------------------------------------------------------------------ +sal_uInt16 UpdateDialog::CheckListBox::getItemCount() const { + sal_uLong i = GetEntryCount(); + OSL_ASSERT(i <= std::numeric_limits< sal_uInt16 >::max()); + return sal::static_int_cast< sal_uInt16 >(i); } -void UpdateDialog::CheckListBox::MouseButtonDown(MouseEvent const & event) { +//------------------------------------------------------------------------------ +void UpdateDialog::CheckListBox::MouseButtonDown( MouseEvent const & event ) +{ // When clicking on a selected entry in an SvxCheckListBox, the entry's // checkbox is toggled on mouse button down: - SvxCheckListBox::MouseButtonDown(event); + SvxCheckListBox::MouseButtonDown( event ); + + if ( event.IsRight() ) + { + handlePopupMenu( event.GetPosPixel() ); + } + m_dialog.enableOk(); } +//------------------------------------------------------------------------------ void UpdateDialog::CheckListBox::MouseButtonUp(MouseEvent const & event) { // When clicking on an entry's checkbox in an SvxCheckListBox, the entry's // checkbox is toggled on mouse button up: @@ -700,25 +668,82 @@ void UpdateDialog::CheckListBox::KeyInput(KeyEvent const & event) { m_dialog.enableOk(); } -void UpdateDialog::insertItem( - rtl::OUString const & name, USHORT position, - std::auto_ptr< UpdateDialog::Index const > index, SvLBoxButtonKind kind) +//------------------------------------------------------------------------------ +void UpdateDialog::CheckListBox::handlePopupMenu( const Point &rPos ) { - m_updates.InsertEntry( - name, position, - const_cast< void * >(static_cast< void const * >(index.release())), - kind); - //TODO #i72487#: UpdateDialog::Index potentially leaks as the exception - // behavior of SvxCheckListBox::InsertEntry is unspecified + SvListEntry *pData = GetEntry( rPos ); + + if ( pData ) + { + sal_uInt16 nEntryPos = GetSelectEntryPos(); + UpdateDialog::Index * p = static_cast< UpdateDialog::Index * >( GetEntryData( nEntryPos ) ); + + if ( ( p->m_eKind == ENABLED_UPDATE ) || ( p->m_eKind == DISABLED_UPDATE ) ) + { + PopupMenu aPopup; + + if ( p->m_bIgnored ) + aPopup.InsertItem( CMD_ENABLE_UPDATE, m_enableUpdate ); + else + { + aPopup.InsertItem( CMD_IGNORE_UPDATE, m_ignoreUpdate ); + aPopup.InsertItem( CMD_IGNORE_ALL_UPDATES, m_ignoreAllUpdates ); + } + + sal_uInt16 aCmd = aPopup.Execute( this, rPos ); + if ( ( aCmd == CMD_IGNORE_UPDATE ) || ( aCmd == CMD_IGNORE_ALL_UPDATES ) ) + { + p->m_bIgnored = true; + if ( p->m_eKind == ENABLED_UPDATE ) + { + RemoveEntry( nEntryPos ); + m_dialog.addAdditional( p, SvLBoxButtonKind_disabledCheckbox ); + } + if ( aCmd == CMD_IGNORE_UPDATE ) + m_dialog.setIgnoredUpdate( p, true, false ); + else + m_dialog.setIgnoredUpdate( p, true, true ); + // TODO: reselect entry to display new description! + } + else if ( aCmd == CMD_ENABLE_UPDATE ) + { + p->m_bIgnored = false; + if ( p->m_eKind == ENABLED_UPDATE ) + { + RemoveEntry( nEntryPos ); + m_dialog.insertItem( p, SvLBoxButtonKind_enabledCheckbox ); + } + m_dialog.setIgnoredUpdate( p, false, false ); + } + } + } +} + +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +sal_uInt16 UpdateDialog::insertItem( UpdateDialog::Index *pEntry, SvLBoxButtonKind kind ) +{ + m_updates.InsertEntry( pEntry->m_aName, LISTBOX_APPEND, static_cast< void * >( pEntry ), kind ); + + for ( sal_uInt16 i = m_updates.getItemCount(); i != 0 ; ) + { + i -= 1; + UpdateDialog::Index const * p = static_cast< UpdateDialog::Index const * >( m_updates.GetEntryData( i ) ); + if ( p == pEntry ) + return i; + } + OSL_ASSERT(0); + return 0; } -void UpdateDialog::addAdditional( - rtl::OUString const & name, USHORT position, - std::auto_ptr< UpdateDialog::Index const > index, SvLBoxButtonKind kind) +//------------------------------------------------------------------------------ +void UpdateDialog::addAdditional( UpdateDialog::Index * index, SvLBoxButtonKind kind ) { m_all.Enable(); - if (m_all.IsChecked()) { - insertItem(name, position, index, kind); + if (m_all.IsChecked()) + { + insertItem( index, kind ); m_update.Enable(); m_updates.Enable(); m_description.Enable(); @@ -726,60 +751,80 @@ void UpdateDialog::addAdditional( } } -void UpdateDialog::addEnabledUpdate( - rtl::OUString const & name, dp_gui::UpdateData const & data) +//------------------------------------------------------------------------------ +void UpdateDialog::addEnabledUpdate( rtl::OUString const & name, + dp_gui::UpdateData & data ) { - std::vector< dp_gui::UpdateData >::size_type n = m_enabledUpdates.size(); - m_enabledUpdates.push_back(data); - insertItem( - name, sal::static_int_cast< USHORT >(n), - UpdateDialog::Index::newEnabledUpdate(n), - SvLBoxButtonKind_enabledCheckbox); - // position overflow is rather harmless - m_updates.CheckEntryPos(sal::static_int_cast< USHORT >(n)); - //TODO #i72487#: fragile computation; insertItem should instead return - // pos + sal_uInt16 nIndex = sal::static_int_cast< sal_uInt16 >( m_enabledUpdates.size() ); + UpdateDialog::Index *pEntry = new UpdateDialog::Index( ENABLED_UPDATE, m_nLastID, nIndex, name ); + + data.m_nID = m_nLastID; + m_nLastID += 1; + + m_enabledUpdates.push_back( data ); + m_ListboxEntries.push_back( pEntry ); + + if ( ! isIgnoredUpdate( pEntry ) ) + { + sal_uInt16 nPos = insertItem( pEntry, SvLBoxButtonKind_enabledCheckbox ); + m_updates.CheckEntryPos( nPos ); + } + else + addAdditional( pEntry, SvLBoxButtonKind_disabledCheckbox ); + m_update.Enable(); m_updates.Enable(); m_description.Enable(); m_descriptions.Enable(); } -void UpdateDialog::addDisabledUpdate(UpdateDialog::DisabledUpdate const & data) +//------------------------------------------------------------------------------ +void UpdateDialog::addDisabledUpdate( UpdateDialog::DisabledUpdate & data ) { - std::vector< UpdateDialog::DisabledUpdate >::size_type n = - m_disabledUpdates.size(); - m_disabledUpdates.push_back(data); - addAdditional( - data.name, sal::static_int_cast< USHORT >(m_enabledUpdates.size() + n), - UpdateDialog::Index::newDisabledUpdate(n), - SvLBoxButtonKind_disabledCheckbox); - // position overflow is rather harmless + sal_uInt16 nIndex = sal::static_int_cast< sal_uInt16 >( m_disabledUpdates.size() ); + UpdateDialog::Index *pEntry = new UpdateDialog::Index( DISABLED_UPDATE, m_nLastID, nIndex, data.name ); + + data.m_nID = m_nLastID; + m_nLastID += 1; + + m_disabledUpdates.push_back( data ); + m_ListboxEntries.push_back( pEntry ); + + isIgnoredUpdate( pEntry ); + addAdditional( pEntry, SvLBoxButtonKind_disabledCheckbox ); } -void UpdateDialog::addSpecificError(UpdateDialog::SpecificError const & data) { - std::vector< UpdateDialog::SpecificError >::size_type n = - m_specificErrors.size(); - m_specificErrors.push_back(data); - addAdditional( - data.name, LISTBOX_APPEND, UpdateDialog::Index::newSpecificError(n), - SvLBoxButtonKind_staticImage); +//------------------------------------------------------------------------------ +void UpdateDialog::addSpecificError( UpdateDialog::SpecificError & data ) +{ + sal_uInt16 nIndex = sal::static_int_cast< sal_uInt16 >( m_specificErrors.size() ); + UpdateDialog::Index *pEntry = new UpdateDialog::Index( DISABLED_UPDATE, m_nLastID, nIndex, data.name ); + + data.m_nID = m_nLastID; + m_nLastID += 1; + + m_specificErrors.push_back( data ); + m_ListboxEntries.push_back( pEntry ); + + addAdditional( pEntry, SvLBoxButtonKind_staticImage); } void UpdateDialog::checkingDone() { m_checking.Hide(); - m_throbber->stop(); - css::uno::Reference< css::awt::XWindow >( - m_throbber, css::uno::UNO_QUERY_THROW)->setVisible(false); + m_throbber.stop(); + m_throbber.Hide(); if (m_updates.getItemCount() == 0) { clearDescription(); m_description.Enable(); m_descriptions.Enable(); - showDescription( - ( m_disabledUpdates.empty() && m_generalErrors.empty() && m_specificErrors.empty() ) - ? m_none : m_noInstallable, false ); + + if ( m_disabledUpdates.empty() && m_specificErrors.empty() && m_ignoredUpdates.empty() ) + showDescription( m_none, false ); + else + showDescription( m_noInstallable, false ); } + enableOk(); } @@ -791,7 +836,7 @@ void UpdateDialog::enableOk() { // ********************************************************************************* void UpdateDialog::createNotifyJob( bool bPrepareOnly, - css::uno::Sequence< css::uno::Sequence< rtl::OUString > > &rItemList ) + uno::Sequence< uno::Sequence< rtl::OUString > > &rItemList ) { if ( !dp_misc::office_is_running() ) return; @@ -799,51 +844,51 @@ void UpdateDialog::createNotifyJob( bool bPrepareOnly, // notify update check job try { - css::uno::Reference< css::lang::XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory() ); - css::uno::Reference< css::lang::XMultiServiceFactory > xConfigProvider( + uno::Reference< lang::XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory() ); + uno::Reference< lang::XMultiServiceFactory > xConfigProvider( xFactory->createInstance( OUSTR( "com.sun.star.configuration.ConfigurationProvider" )), - css::uno::UNO_QUERY_THROW); + uno::UNO_QUERY_THROW); - css::beans::PropertyValue aProperty; + beans::PropertyValue aProperty; aProperty.Name = OUSTR( "nodepath" ); - aProperty.Value = css::uno::makeAny( OUSTR("org.openoffice.Office.Addons/AddonUI/OfficeHelp/UpdateCheckJob") ); + aProperty.Value = uno::makeAny( OUSTR("org.openoffice.Office.Addons/AddonUI/OfficeHelp/UpdateCheckJob") ); - css::uno::Sequence< css::uno::Any > aArgumentList( 1 ); - aArgumentList[0] = css::uno::makeAny( aProperty ); + uno::Sequence< uno::Any > aArgumentList( 1 ); + aArgumentList[0] = uno::makeAny( aProperty ); - css::uno::Reference< css::container::XNameAccess > xNameAccess( + uno::Reference< container::XNameAccess > xNameAccess( xConfigProvider->createInstanceWithArguments( OUSTR("com.sun.star.configuration.ConfigurationAccess"), aArgumentList ), - css::uno::UNO_QUERY_THROW ); + uno::UNO_QUERY_THROW ); - css::util::URL aURL; + util::URL aURL; xNameAccess->getByName(OUSTR("URL")) >>= aURL.Complete; - css::uno::Reference < css::util::XURLTransformer > xTransformer( xFactory->createInstance( OUSTR( "com.sun.star.util.URLTransformer" ) ), - css::uno::UNO_QUERY_THROW ); + uno::Reference < util::XURLTransformer > xTransformer( xFactory->createInstance( OUSTR( "com.sun.star.util.URLTransformer" ) ), + uno::UNO_QUERY_THROW ); xTransformer->parseStrict(aURL); - css::uno::Reference < css::frame::XDesktop > xDesktop( xFactory->createInstance( OUSTR( "com.sun.star.frame.Desktop" ) ), - css::uno::UNO_QUERY_THROW ); - css::uno::Reference< css::frame::XDispatchProvider > xDispatchProvider( xDesktop->getCurrentFrame(), - css::uno::UNO_QUERY_THROW ); - css::uno::Reference< css::frame::XDispatch > xDispatch = xDispatchProvider->queryDispatch(aURL, rtl::OUString(), 0); + uno::Reference < frame::XDesktop > xDesktop( xFactory->createInstance( OUSTR( "com.sun.star.frame.Desktop" ) ), + uno::UNO_QUERY_THROW ); + uno::Reference< frame::XDispatchProvider > xDispatchProvider( xDesktop->getCurrentFrame(), + uno::UNO_QUERY_THROW ); + uno::Reference< frame::XDispatch > xDispatch = xDispatchProvider->queryDispatch(aURL, rtl::OUString(), 0); if( xDispatch.is() ) { - css::uno::Sequence< css::beans::PropertyValue > aPropList(2); + uno::Sequence< beans::PropertyValue > aPropList(2); aProperty.Name = OUSTR( "updateList" ); - aProperty.Value = css::uno::makeAny( rItemList ); + aProperty.Value = uno::makeAny( rItemList ); aPropList[0] = aProperty; aProperty.Name = OUSTR( "prepareOnly" ); - aProperty.Value = css::uno::makeAny( bPrepareOnly ); + aProperty.Value = uno::makeAny( bPrepareOnly ); aPropList[1] = aProperty; xDispatch->dispatch(aURL, aPropList ); } } - catch( const css::uno::Exception& e ) + catch( const uno::Exception& e ) { dp_misc::TRACE( OUSTR("Caught exception: ") + e.Message + OUSTR("\n thread terminated.\n\n")); @@ -856,26 +901,26 @@ void UpdateDialog::notifyMenubar( bool bPrepareOnly, bool bRecheckOnly ) if ( !dp_misc::office_is_running() ) return; - css::uno::Sequence< css::uno::Sequence< rtl::OUString > > aItemList; - sal_Int32 nCount = 0; + uno::Sequence< uno::Sequence< rtl::OUString > > aItemList; if ( ! bRecheckOnly ) { + sal_Int32 nCount = 0; for ( sal_Int16 i = 0; i < m_updates.getItemCount(); ++i ) { - css::uno::Sequence< rtl::OUString > aItem(2); + uno::Sequence< rtl::OUString > aItem(2); UpdateDialog::Index const * p = static_cast< UpdateDialog::Index const * >(m_updates.GetEntryData(i)); - if ( p->kind == ENABLED_UPDATE ) + if ( p->m_eKind == ENABLED_UPDATE ) { - dp_gui::UpdateData aUpdData = m_enabledUpdates[ p->index.enabledUpdate ]; + dp_gui::UpdateData aUpdData = m_enabledUpdates[ p->m_nIndex ]; aItem[0] = dp_misc::getIdentifier( aUpdData.aInstalledPackage ); dp_misc::DescriptionInfoset aInfoset( m_context, aUpdData.aUpdateInfo ); aItem[1] = aInfoset.getVersion(); } - else if ( p->kind == DISABLED_UPDATE ) + else if ( p->m_eKind == DISABLED_UPDATE ) continue; else continue; @@ -885,6 +930,8 @@ void UpdateDialog::notifyMenubar( bool bPrepareOnly, bool bRecheckOnly ) nCount += 1; } } + + storeIgnoredUpdates(); createNotifyJob( bPrepareOnly, aItemList ); } @@ -958,17 +1005,17 @@ void UpdateDialog::clearDescription() m_descriptions.SetPosSizePixel( m_aFirstLinePos, m_aFirstLineSize ); } -bool UpdateDialog::showDescription(css::uno::Reference< css::xml::dom::XNode > const & aUpdateInfo) +bool UpdateDialog::showDescription(uno::Reference< xml::dom::XNode > const & aUpdateInfo) { dp_misc::DescriptionInfoset infoset(m_context, aUpdateInfo); return showDescription(infoset.getLocalizedPublisherNameAndURL(), infoset.getLocalizedReleaseNotesURL()); } -bool UpdateDialog::showDescription(css::uno::Reference< css::deployment::XPackage > const & aExtension) +bool UpdateDialog::showDescription(uno::Reference< deployment::XPackage > const & aExtension) { OSL_ASSERT(aExtension.is()); - css::beans::StringPair pubInfo = aExtension->getPublisherInfo(); + beans::StringPair pubInfo = aExtension->getPublisherInfo(); return showDescription(std::make_pair(pubInfo.First, pubInfo.Second), OUSTR("")); } @@ -1031,16 +1078,163 @@ bool UpdateDialog::showDescription( const String& rDescription, bool bWithPublis return true; } -bool UpdateDialog::isReadOnly( const css::uno::Reference< css::deployment::XPackage > &xPackage ) const +//------------------------------------------------------------------------------ +void UpdateDialog::getIgnoredUpdates() { - if ( m_xExtensionManager.is() && xPackage.is() ) + uno::Reference< lang::XMultiServiceFactory > xConfig( m_context->getServiceManager()->createInstanceWithContext( + OUSTR("com.sun.star.configuration.ConfigurationProvider"), m_context ), uno::UNO_QUERY_THROW); + beans::NamedValue aValue( OUSTR("nodepath"), uno::Any( IGNORED_UPDATES ) ); + uno::Sequence< uno::Any > args(1); + args[0] <<= aValue; + + uno::Reference< container::XNameAccess > xNameAccess( xConfig->createInstanceWithArguments( OUSTR("com.sun.star.configuration.ConfigurationAccess"), args), uno::UNO_QUERY_THROW ); + uno::Sequence< rtl::OUString > aElementNames = xNameAccess->getElementNames(); + + for ( sal_Int32 i = 0; i < aElementNames.getLength(); i++ ) { - return m_xExtensionManager->isReadOnlyRepository( xPackage->getRepositoryName() ); + ::rtl::OUString aIdentifier = aElementNames[i]; + ::rtl::OUString aVersion; + + uno::Any aPropValue( uno::Reference< beans::XPropertySet >( xNameAccess->getByName( aIdentifier ), uno::UNO_QUERY_THROW )->getPropertyValue( PROPERTY_VERSION ) ); + aPropValue >>= aVersion; + IgnoredUpdate *pData = new IgnoredUpdate( aIdentifier, aVersion ); + m_ignoredUpdates.push_back( pData ); + } +} + +//------------------------------------------------------------------------------ +void UpdateDialog::storeIgnoredUpdates() +{ + if ( m_bModified && ( m_ignoredUpdates.size() != 0 ) ) + { + uno::Reference< lang::XMultiServiceFactory > xConfig( m_context->getServiceManager()->createInstanceWithContext( + OUSTR("com.sun.star.configuration.ConfigurationProvider"), m_context ), uno::UNO_QUERY_THROW ); + beans::NamedValue aValue( OUSTR("nodepath"), uno::Any( IGNORED_UPDATES ) ); + uno::Sequence< uno::Any > args(1); + args[0] <<= aValue; + + uno::Reference< container::XNameContainer > xNameContainer( xConfig->createInstanceWithArguments( + OUSTR("com.sun.star.configuration.ConfigurationUpdateAccess"), args ), uno::UNO_QUERY_THROW ); + + for ( std::vector< UpdateDialog::IgnoredUpdate* >::iterator i( m_ignoredUpdates.begin() ); i != m_ignoredUpdates.end(); ++i ) + { + if ( xNameContainer->hasByName( (*i)->sExtensionID ) ) + { + if ( (*i)->bRemoved ) + xNameContainer->removeByName( (*i)->sExtensionID ); + else + uno::Reference< beans::XPropertySet >( xNameContainer->getByName( (*i)->sExtensionID ), uno::UNO_QUERY_THROW )->setPropertyValue( PROPERTY_VERSION, uno::Any( (*i)->sVersion ) ); + } + else if ( ! (*i)->bRemoved ) + { + uno::Reference< beans::XPropertySet > elem( uno::Reference< lang::XSingleServiceFactory >( xNameContainer, uno::UNO_QUERY_THROW )->createInstance(), uno::UNO_QUERY_THROW ); + elem->setPropertyValue( PROPERTY_VERSION, uno::Any( (*i)->sVersion ) ); + xNameContainer->insertByName( (*i)->sExtensionID, uno::Any( elem ) ); + } + } + + uno::Reference< util::XChangesBatch > xChangesBatch( xNameContainer, uno::UNO_QUERY ); + if ( xChangesBatch.is() && xChangesBatch->hasPendingChanges() ) + xChangesBatch->commitChanges(); + } + + m_bModified = false; +} + +//------------------------------------------------------------------------------ +bool UpdateDialog::isIgnoredUpdate( UpdateDialog::Index * index ) +{ + bool bIsIgnored = false; + + if ( m_ignoredUpdates.size() != 0 ) + { + rtl::OUString aExtensionID; + rtl::OUString aVersion; + + if ( index->m_eKind == ENABLED_UPDATE ) + { + dp_gui::UpdateData aUpdData = m_enabledUpdates[ index->m_nIndex ]; + aExtensionID = dp_misc::getIdentifier( aUpdData.aInstalledPackage ); + aVersion = aUpdData.updateVersion; + } + else if ( index->m_eKind == DISABLED_UPDATE ) + { + DisabledUpdate &rData = m_disabledUpdates[ index->m_nIndex ]; + dp_misc::DescriptionInfoset aInfoset( m_context, rData.aUpdateInfo ); + ::boost::optional< ::rtl::OUString > aID( aInfoset.getIdentifier() ); + if ( aID ) + aExtensionID = *aID; + aVersion = aInfoset.getVersion(); + } + + for ( std::vector< UpdateDialog::IgnoredUpdate* >::iterator i( m_ignoredUpdates.begin() ); i != m_ignoredUpdates.end(); ++i ) + { + if ( (*i)->sExtensionID == aExtensionID ) + { + if ( ( (*i)->sVersion.getLength() == 0 ) || ( (*i)->sVersion == aVersion ) ) + { + bIsIgnored = true; + index->m_bIgnored = true; + } + else // when we find another update of an ignored version, we will remove the old one to keep the ignored list small + (*i)->bRemoved = true; + break; + } + } + } + + return bIsIgnored; +} + +//------------------------------------------------------------------------------ +void UpdateDialog::setIgnoredUpdate( UpdateDialog::Index *pIndex, bool bIgnore, bool bIgnoreAll ) +{ + rtl::OUString aExtensionID; + rtl::OUString aVersion; + + m_bModified = true; + + if ( pIndex->m_eKind == ENABLED_UPDATE ) + { + dp_gui::UpdateData aUpdData = m_enabledUpdates[ pIndex->m_nIndex ]; + aExtensionID = dp_misc::getIdentifier( aUpdData.aInstalledPackage ); + if ( !bIgnoreAll ) + aVersion = aUpdData.updateVersion; + } + else if ( pIndex->m_eKind == DISABLED_UPDATE ) + { + DisabledUpdate &rData = m_disabledUpdates[ pIndex->m_nIndex ]; + dp_misc::DescriptionInfoset aInfoset( m_context, rData.aUpdateInfo ); + ::boost::optional< ::rtl::OUString > aID( aInfoset.getIdentifier() ); + if ( aID ) + aExtensionID = *aID; + if ( !bIgnoreAll ) + aVersion = aInfoset.getVersion(); + } + + if ( aExtensionID.getLength() ) + { + bool bFound = false; + for ( std::vector< UpdateDialog::IgnoredUpdate* >::iterator i( m_ignoredUpdates.begin() ); i != m_ignoredUpdates.end(); ++i ) + { + if ( (*i)->sExtensionID == aExtensionID ) + { + (*i)->sVersion = aVersion; + (*i)->bRemoved = !bIgnore; + bFound = true; + break; + } + } + if ( bIgnore && !bFound ) + { + IgnoredUpdate *pData = new IgnoredUpdate( aExtensionID, aVersion ); + m_ignoredUpdates.push_back( pData ); + } } - else - return true; } +//------------------------------------------------------------------------------ + IMPL_LINK(UpdateDialog, selectionHandler, void *, EMPTYARG) { rtl::OUStringBuffer b; @@ -1049,42 +1243,37 @@ IMPL_LINK(UpdateDialog, selectionHandler, void *, EMPTYARG) m_updates.GetEntryData(m_updates.GetSelectEntryPos())); clearDescription(); - if (p != NULL) + if ( p != NULL ) { - //When the index is greater or equal than the amount of enabled updates then the "Show all" - //button is probably checked. Then we show first all enabled and then the disabled - //updates. - USHORT pos = m_updates.GetSelectEntryPos(); - const std::vector< dp_gui::UpdateData >::size_type sizeEnabled = - m_enabledUpdates.size(); - const std::vector< UpdateDialog::DisabledUpdate >::size_type sizeDisabled = - m_disabledUpdates.size(); - if (pos < sizeEnabled) - { - if (m_enabledUpdates[pos].aUpdateSource.is()) - bInserted = showDescription(m_enabledUpdates[pos].aUpdateSource); - else - bInserted = showDescription(m_enabledUpdates[pos].aUpdateInfo); - } - else if (pos >= sizeEnabled - && pos < (sizeEnabled + sizeDisabled)) - bInserted = showDescription(m_disabledUpdates[pos - sizeEnabled].aUpdateInfo); + sal_uInt16 pos = p->m_nIndex; - switch (p->kind) + switch (p->m_eKind) { case ENABLED_UPDATE: { - b.append(m_noDescription); + if ( m_enabledUpdates[ pos ].aUpdateSource.is() ) + bInserted = showDescription( m_enabledUpdates[ pos ].aUpdateSource ); + else + bInserted = showDescription( m_enabledUpdates[ pos ].aUpdateInfo ); + + if ( p->m_bIgnored ) + b.append( m_ignoredUpdate ); + break; } case DISABLED_UPDATE: { - UpdateDialog::DisabledUpdate & data = m_disabledUpdates[ - p->index.disabledUpdate]; + bInserted = showDescription( m_disabledUpdates[pos].aUpdateInfo ); + + if ( p->m_bIgnored ) + b.append( m_ignoredUpdate ); + + UpdateDialog::DisabledUpdate & data = m_disabledUpdates[ pos ]; if (data.unsatisfiedDependencies.getLength() != 0) { // create error string for version mismatch ::rtl::OUString sVersion( RTL_CONSTASCII_USTRINGPARAM("%VERSION") ); + ::rtl::OUString sProductName( RTL_CONSTASCII_USTRINGPARAM("%PRODUCTNAME") ); sal_Int32 nPos = m_noDependencyCurVer.indexOf( sVersion ); if ( nPos >= 0 ) { @@ -1092,7 +1281,17 @@ IMPL_LINK(UpdateDialog, selectionHandler, void *, EMPTYARG) ::rtl::Bootstrap::expandMacros(sCurVersion); m_noDependencyCurVer = m_noDependencyCurVer.replaceAt( nPos, sVersion.getLength(), sCurVersion ); } - + nPos = m_noDependencyCurVer.indexOf( sProductName ); + if ( nPos >= 0 ) + { + m_noDependencyCurVer = m_noDependencyCurVer.replaceAt( nPos, sProductName.getLength(), BrandName::get() ); + } + nPos = m_noDependency.indexOf( sProductName ); + if ( nPos >= 0 ) + { + m_noDependency = m_noDependency.replaceAt( nPos, sProductName.getLength(), BrandName::get() ); + } + b.append(m_noInstall); b.append(LF); b.append(m_noDependency); @@ -1113,23 +1312,12 @@ IMPL_LINK(UpdateDialog, selectionHandler, void *, EMPTYARG) } break; } - case GENERAL_ERROR: - { - rtl::OUString & msg = m_generalErrors[p->index.generalError]; - b.append(m_failure); - b.append(LF); - b.append(msg.getLength() == 0 ? m_unknownError : msg); - break; - } case SPECIFIC_ERROR: { - UpdateDialog::SpecificError & data = m_specificErrors[ - p->index.specificError]; + UpdateDialog::SpecificError & data = m_specificErrors[ pos ]; b.append(m_failure); b.append(LF); - b.append( - data.message.getLength() == 0 - ? m_unknownError : data.message); + b.append( data.message.getLength() == 0 ? m_unknownError : data.message ); break; } default: @@ -1138,56 +1326,37 @@ IMPL_LINK(UpdateDialog, selectionHandler, void *, EMPTYARG) } } + if ( b.getLength() == 0 ) + b.append( m_noDescription ); + showDescription( b.makeStringAndClear(), bInserted ); return 0; } -IMPL_LINK(UpdateDialog, allHandler, void *, EMPTYARG) { - if (m_all.IsChecked()) { +IMPL_LINK(UpdateDialog, allHandler, void *, EMPTYARG) +{ + if (m_all.IsChecked()) + { m_update.Enable(); m_updates.Enable(); m_description.Enable(); m_descriptions.Enable(); - std::vector< UpdateDialog::DisabledUpdate >::size_type n1 = 0; - for (std::vector< UpdateDialog::DisabledUpdate >::iterator i( - m_disabledUpdates.begin()); - i != m_disabledUpdates.end(); ++i) - { - insertItem( - i->name, LISTBOX_APPEND, - UpdateDialog::Index::newDisabledUpdate(n1++), - SvLBoxButtonKind_disabledCheckbox); - } - std::vector< rtl::OUString >::size_type n2 = 0; - for (std::vector< rtl::OUString >::iterator i(m_generalErrors.begin()); - i != m_generalErrors.end(); ++i) + + for (std::vector< UpdateDialog::Index* >::iterator i( m_ListboxEntries.begin() ); + i != m_ListboxEntries.end(); ++i ) { - insertItem( - m_error, LISTBOX_APPEND, - UpdateDialog::Index::newGeneralError(n2++), - SvLBoxButtonKind_staticImage); + if ( (*i)->m_bIgnored || ( (*i)->m_eKind != ENABLED_UPDATE ) ) + insertItem( (*i), SvLBoxButtonKind_disabledCheckbox ); } - std::vector< UpdateDialog::SpecificError >::size_type n3 = 0; - for (std::vector< UpdateDialog::SpecificError >::iterator i( - m_specificErrors.begin()); - i != m_specificErrors.end(); ++i) + } + else + { + for ( sal_uInt16 i = 0; i < m_updates.getItemCount(); ) { - insertItem( - i->name, LISTBOX_APPEND, - UpdateDialog::Index::newSpecificError(n3++), - SvLBoxButtonKind_staticImage); - } - } else { - for (USHORT i = 0; i < m_updates.getItemCount();) { - UpdateDialog::Index const * p = - static_cast< UpdateDialog::Index const * >( - m_updates.GetEntryData(i)); - if (p->kind != ENABLED_UPDATE) { + UpdateDialog::Index const * p = static_cast< UpdateDialog::Index const * >( m_updates.GetEntryData(i) ); + if ( p->m_bIgnored || ( p->m_eKind != ENABLED_UPDATE ) ) + { m_updates.RemoveEntry(i); - //TODO #i72487#: UpdateDialog::Index potentially leaks as - // SvxCheckListBox::RemoveEntry's exception behavior is - // unspecified - delete p; } else { ++i; } @@ -1217,16 +1386,15 @@ IMPL_LINK(UpdateDialog, okHandler, void *, EMPTYARG) OSL_ASSERT(i->aInstalledPackage.is()); //If the user has no write access to the shared folder then the update //for a shared extension is disable, that is it cannot be in m_enabledUpdates -// OSL_ASSERT(isReadOnly(i->aInstalledPackage) == sal_False); } - for (USHORT i = 0; i < m_updates.getItemCount(); ++i) { + for (sal_uInt16 i = 0; i < m_updates.getItemCount(); ++i) { UpdateDialog::Index const * p = static_cast< UpdateDialog::Index const * >( m_updates.GetEntryData(i)); - if (p->kind == ENABLED_UPDATE && m_updates.IsChecked(i)) { - m_updateData.push_back(m_enabledUpdates[p->index.enabledUpdate]); + if (p->m_eKind == ENABLED_UPDATE && m_updates.IsChecked(i)) { + m_updateData.push_back( m_enabledUpdates[ p->m_nIndex ] ); } } @@ -1234,7 +1402,7 @@ IMPL_LINK(UpdateDialog, okHandler, void *, EMPTYARG) return 0; } -IMPL_LINK(UpdateDialog, cancelHandler, void *, EMPTYARG) { +IMPL_LINK(UpdateDialog, closeHandler, void *, EMPTYARG) { m_thread->stop(); EndDialog(RET_CANCEL); return 0; @@ -1250,15 +1418,15 @@ IMPL_LINK( UpdateDialog, hyperlink_clicked, svt::FixedHyperlink*, pHyperlink ) try { - css::uno::Reference< css::system::XSystemShellExecute > xSystemShellExecute( + uno::Reference< com::sun::star::system::XSystemShellExecute > xSystemShellExecute( m_context->getServiceManager()->createInstanceWithContext( OUSTR( "com.sun.star.system.SystemShellExecute" ), - m_context), css::uno::UNO_QUERY_THROW); - //throws css::lang::IllegalArgumentException, css::system::SystemShellExecuteException + m_context), uno::UNO_QUERY_THROW); + //throws lang::IllegalArgumentException, system::SystemShellExecuteException xSystemShellExecute->execute( - sURL, ::rtl::OUString(), css::system::SystemShellExecuteFlags::DEFAULTS); + sURL, ::rtl::OUString(), com::sun::star::system::SystemShellExecuteFlags::DEFAULTS); } - catch (css::uno::Exception& ) + catch (uno::Exception& ) { } diff --git a/desktop/source/deployment/gui/dp_gui_updatedialog.hxx b/desktop/source/deployment/gui/dp_gui_updatedialog.hxx index a9a8bcf716..d8fc455600 100644 --- a/desktop/source/deployment/gui/dp_gui_updatedialog.hxx +++ b/desktop/source/deployment/gui/dp_gui_updatedialog.hxx @@ -45,6 +45,7 @@ #include "vcl/dialog.hxx" #include "vcl/fixed.hxx" #include <svtools/fixedhyper.hxx> +#include <vcl/throbber.hxx> #include "descedit.hxx" #include "dp_gui_updatedata.hxx" @@ -58,7 +59,6 @@ class ResId; class Window; namespace com { namespace sun { namespace star { - namespace awt { class XThrobber; } namespace deployment { class XExtensionManager; class XPackage; } namespace uno { class XComponentContext; } @@ -97,7 +97,7 @@ public: ~UpdateDialog(); - virtual BOOL Close(); + virtual sal_Bool Close(); virtual short Execute(); @@ -111,8 +111,7 @@ private: struct DisabledUpdate; struct SpecificError; - union IndexUnion; - friend union IndexUnion; + struct IgnoredUpdate; struct Index; friend struct Index; class Thread; @@ -122,49 +121,47 @@ private: public: CheckListBox( UpdateDialog & dialog, ResId const & resource, - Image const & normalStaticImage, - Image const & highContrastStaticImage); + Image const & normalStaticImage); virtual ~CheckListBox(); - USHORT getItemCount() const; + sal_uInt16 getItemCount() const; private: CheckListBox(UpdateDialog::CheckListBox &); // not defined void operator =(UpdateDialog::CheckListBox &); // not defined virtual void MouseButtonDown(MouseEvent const & event); - virtual void MouseButtonUp(MouseEvent const & event); - virtual void KeyInput(KeyEvent const & event); + void handlePopupMenu( const Point &rPos ); + + rtl::OUString m_ignoreUpdate; + rtl::OUString m_ignoreAllUpdates; + rtl::OUString m_enableUpdate; UpdateDialog & m_dialog; }; friend class CheckListBox; - void insertItem( - rtl::OUString const & name, USHORT position, - std::auto_ptr< UpdateDialog::Index const > index, - SvLBoxButtonKind kind); + sal_uInt16 insertItem( UpdateDialog::Index *pIndex, SvLBoxButtonKind kind ); + void addAdditional( UpdateDialog::Index *pIndex, SvLBoxButtonKind kind ); + bool isIgnoredUpdate( UpdateDialog::Index *pIndex ); + void setIgnoredUpdate( UpdateDialog::Index *pIndex, bool bIgnore, bool bIgnoreAll ); - void addAdditional( - rtl::OUString const & name, USHORT position, - std::auto_ptr< UpdateDialog::Index const > index, - SvLBoxButtonKind kind); - - void addEnabledUpdate( - rtl::OUString const & name, dp_gui::UpdateData const & data); - - void addDisabledUpdate(UpdateDialog::DisabledUpdate const & data); - void addSpecificError(UpdateDialog::SpecificError const & data); + void addEnabledUpdate( rtl::OUString const & name, dp_gui::UpdateData & data ); + void addDisabledUpdate( UpdateDialog::DisabledUpdate & data ); + void addSpecificError( UpdateDialog::SpecificError & data ); void checkingDone(); void enableOk(); + void getIgnoredUpdates(); + void storeIgnoredUpdates(); + void initDescription(); void clearDescription(); bool showDescription(::com::sun::star::uno::Reference< @@ -179,13 +176,13 @@ private: DECL_LINK(selectionHandler, void *); DECL_LINK(allHandler, void *); DECL_LINK(okHandler, void *); - DECL_LINK(cancelHandler, void *); + DECL_LINK(closeHandler, void *); DECL_LINK(hyperlink_clicked, svt::FixedHyperlink *); com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext > m_context; FixedText m_checking; - com::sun::star::uno::Reference< com::sun::star::awt::XThrobber > m_throbber; + Throbber m_throbber; FixedText m_update; UpdateDialog::CheckListBox m_updates; CheckBox m_all; @@ -198,7 +195,7 @@ private: FixedLine m_line; HelpButton m_help; PushButton m_ok; - CancelButton m_cancel; + PushButton m_close; rtl::OUString m_error; rtl::OUString m_none; rtl::OUString m_noInstallable; @@ -210,18 +207,22 @@ private: rtl::OUString m_noDependencyCurVer; rtl::OUString m_browserbased; rtl::OUString m_version; + rtl::OUString m_ignoredUpdate; std::vector< dp_gui::UpdateData > m_enabledUpdates; std::vector< UpdateDialog::DisabledUpdate > m_disabledUpdates; - std::vector< rtl::OUString > m_generalErrors; std::vector< UpdateDialog::SpecificError > m_specificErrors; + std::vector< UpdateDialog::IgnoredUpdate* > m_ignoredUpdates; + std::vector< Index* > m_ListboxEntries; std::vector< dp_gui::UpdateData > & m_updateData; rtl::Reference< UpdateDialog::Thread > m_thread; ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XExtensionManager > m_xExtensionManager; - Point m_aFirstLinePos; - Size m_aFirstLineSize; - long m_nFirstLineDelta; - long m_nOneLineMissing; + Point m_aFirstLinePos; + Size m_aFirstLineSize; + long m_nFirstLineDelta; + long m_nOneLineMissing; + sal_uInt16 m_nLastID; + bool m_bModified; }; } diff --git a/desktop/source/deployment/gui/dp_gui_updatedialog.src b/desktop/source/deployment/gui/dp_gui_updatedialog.src index 59539d55c1..c8f7a26c1e 100644 --- a/desktop/source/deployment/gui/dp_gui_updatedialog.src +++ b/desktop/source/deployment/gui/dp_gui_updatedialog.src @@ -60,11 +60,11 @@ ModalDialog RID_DLG_UPDATE { Right = TRUE; NoLabel = TRUE; }; - Control RID_DLG_UPDATE_THROBBER { + FixedImage RID_DLG_UPDATE_THROBBER { Pos = MAP_APPFONT( RSC_SP_DLG_INNERBORDER_LEFT + LOCAL_WIDTH - RSC_CD_FIXEDTEXT_HEIGHT, RSC_SP_DLG_INNERBORDER_TOP); - Size = MAP_APPFONT(RSC_CD_FIXEDTEXT_HEIGHT, RSC_CD_FIXEDTEXT_HEIGHT); + Size = MAP_APPFONT(RSC_CD_FIXEDTEXT_HEIGHT, RSC_CD_FIXEDTEXT_HEIGHT + 1); }; FixedText RID_DLG_UPDATE_UPDATE { Disable = TRUE; @@ -86,6 +86,7 @@ ModalDialog RID_DLG_UPDATE { TabStop = TRUE; }; CheckBox RID_DLG_UPDATE_ALL { + HelpID = "desktop:CheckBox:RID_DLG_UPDATE:RID_DLG_UPDATE_ALL"; Disable = TRUE; Pos = MAP_APPFONT( RSC_SP_DLG_INNERBORDER_LEFT, @@ -150,6 +151,7 @@ ModalDialog RID_DLG_UPDATE { Text[en-US] = "Release Notes"; }; MultiLineEdit RID_DLG_UPDATE_DESCRIPTIONS { + HelpID = "desktop:MultiLineEdit:RID_DLG_UPDATE:RID_DLG_UPDATE_DESCRIPTIONS"; Disable = TRUE; Border = TRUE; Pos = MAP_APPFONT( @@ -183,6 +185,7 @@ ModalDialog RID_DLG_UPDATE { Size = MAP_APPFONT(RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT); }; PushButton RID_DLG_UPDATE_OK { + HelpID = "desktop:PushButton:RID_DLG_UPDATE:RID_DLG_UPDATE_OK"; Disable = TRUE; Pos = MAP_APPFONT( (RSC_SP_DLG_INNERBORDER_LEFT + LOCAL_WIDTH - RSC_CD_PUSHBUTTON_WIDTH - @@ -196,7 +199,7 @@ ModalDialog RID_DLG_UPDATE { Text[en-US] = "~Install"; DefButton = TRUE; }; - CancelButton RID_DLG_UPDATE_CANCEL { + PushButton RID_DLG_UPDATE_CLOSE { Pos = MAP_APPFONT( RSC_SP_DLG_INNERBORDER_LEFT + LOCAL_WIDTH - RSC_CD_PUSHBUTTON_WIDTH, (RSC_SP_DLG_INNERBORDER_TOP + RSC_CD_FIXEDTEXT_HEIGHT + @@ -205,6 +208,7 @@ ModalDialog RID_DLG_UPDATE { RSC_SP_CTRL_DESC_Y + LOCAL_LIST_HEIGHT2 + RSC_SP_FLGR_SPACE_Y + RSC_CD_FIXEDLINE_HEIGHT + RSC_SP_FLGR_SPACE_Y)); Size = MAP_APPFONT(RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT); + Text[en-US] = "Close"; }; Image RID_DLG_UPDATE_NORMALALERT { @@ -212,11 +216,6 @@ ModalDialog RID_DLG_UPDATE { File = "caution_12.png"; }; }; - Image RID_DLG_UPDATE_HIGHCONTRASTALERT { - ImageBitmap = Bitmap { - File = "caution_12_h.png"; - }; - }; String RID_DLG_UPDATE_ERROR { Text[en-US] = "Error"; }; @@ -224,7 +223,7 @@ ModalDialog RID_DLG_UPDATE { Text[en-US] = "No new updates are available."; }; String RID_DLG_UPDATE_NOINSTALLABLE { - Text[en-US] = "No installable updates are available. To see all updates, mark the check box 'Show all updates'."; + Text[en-US] = "No installable updates are available. To see ignored or disabled updates, mark the check box 'Show all updates'."; }; String RID_DLG_UPDATE_FAILURE { Text[en-US] = "An error occurred:"; @@ -233,24 +232,35 @@ ModalDialog RID_DLG_UPDATE { Text[en-US] = "Unknown error."; }; String RID_DLG_UPDATE_NODESCRIPTION { - Text[en-US] = "No descriptions available for this extension."; + Text[en-US] = "No more details are available for this update."; }; String RID_DLG_UPDATE_NOINSTALL { Text[en-US] = "The extension cannot be updated because:"; }; String RID_DLG_UPDATE_NODEPENDENCY { - Text[en-US] = "Required OpenOffice.org version doesn't match:"; + Text[en-US] = "Required %PRODUCTNAME version doesn't match:"; }; String RID_DLG_UPDATE_NODEPENDENCY_CUR_VER { - Text[en-US] = "You have OpenOffice.org %VERSION"; + Text[en-US] = "You have %PRODUCTNAME %VERSION"; }; String RID_DLG_UPDATE_BROWSERBASED { Text[en-US] = "browser based update"; }; - String RID_DLG_UPDATE_VERSION { Text[en-US] = "Version"; }; + String RID_DLG_UPDATE_IGNORE { + Text[en-US] = "Ignore this Update"; + }; + String RID_DLG_UPDATE_IGNORE_ALL { + Text[en-US] = "Ignore all Updates"; + }; + String RID_DLG_UPDATE_ENABLE { + Text[en-US] = "Enable Updates"; + }; + String RID_DLG_UPDATE_IGNORED_UPDATE { + Text[en-US] = "This update will be ignored.\n"; + }; }; WarningBox RID_WARNINGBOX_UPDATE_SHARED_EXTENSION diff --git a/desktop/source/deployment/gui/dp_gui_updateinstalldialog.cxx b/desktop/source/deployment/gui/dp_gui_updateinstalldialog.cxx index cfc42aa8d8..ad2baa5d6a 100644 --- a/desktop/source/deployment/gui/dp_gui_updateinstalldialog.cxx +++ b/desktop/source/deployment/gui/dp_gui_updateinstalldialog.cxx @@ -262,14 +262,14 @@ UpdateInstallDialog::UpdateInstallDialog( m_xExtensionManager = css::deployment::ExtensionManager::get( xCtx ); m_cancel.SetClickHdl(LINK(this, UpdateInstallDialog, cancelHandler)); - m_mle_info.EnableCursor(FALSE); + m_mle_info.EnableCursor(sal_False); if ( ! dp_misc::office_is_running()) m_help.Disable(); } UpdateInstallDialog::~UpdateInstallDialog() {} -BOOL UpdateInstallDialog::Close() +sal_Bool UpdateInstallDialog::Close() { m_thread->stop(); return ModalDialog::Close(); @@ -377,7 +377,7 @@ void UpdateInstallDialog::Thread::downloadExtensions() sal_uInt16 count = 0; typedef std::vector<UpdateData>::iterator It; - for (It i = m_aVecUpdateData.begin(); i != m_aVecUpdateData.end(); i++) + for (It i = m_aVecUpdateData.begin(); i != m_aVecUpdateData.end(); ++i) { UpdateData & curData = *i; @@ -471,7 +471,7 @@ void UpdateInstallDialog::Thread::installExtensions() sal_uInt16 count = 0; typedef std::vector<UpdateData>::iterator It; - for (It i = m_aVecUpdateData.begin(); i != m_aVecUpdateData.end(); i++, count++) + for (It i = m_aVecUpdateData.begin(); i != m_aVecUpdateData.end(); ++i, ++count) { //update the name of the extension which is to be installed { @@ -487,8 +487,6 @@ void UpdateInstallDialog::Thread::installExtensions() } m_dialog.m_ft_extension_name.SetText(i->aInstalledPackage->getDisplayName()); } -// TimeValue v = {1, 0}; -// osl::Thread::wait(v); bool bError = false; bool bLicenseDeclined = false; cssu::Reference<css::deployment::XPackage> xExtension; diff --git a/desktop/source/deployment/gui/dp_gui_updateinstalldialog.hxx b/desktop/source/deployment/gui/dp_gui_updateinstalldialog.hxx index a23488bfbf..390e55f9d0 100644 --- a/desktop/source/deployment/gui/dp_gui_updateinstalldialog.hxx +++ b/desktop/source/deployment/gui/dp_gui_updateinstalldialog.hxx @@ -80,7 +80,7 @@ public: ~UpdateInstallDialog(); - BOOL Close(); + sal_Bool Close(); virtual short Execute(); private: diff --git a/desktop/source/deployment/gui/dp_gui_updateinstalldialog.src b/desktop/source/deployment/gui/dp_gui_updateinstalldialog.src index 7c43817754..a3ded83be1 100644 --- a/desktop/source/deployment/gui/dp_gui_updateinstalldialog.src +++ b/desktop/source/deployment/gui/dp_gui_updateinstalldialog.src @@ -90,6 +90,7 @@ ModalDialog RID_DLG_UPDATEINSTALL { }; MultiLineEdit RID_DLG_UPDATE_INSTALL_INFO { + HelpID = "desktop:MultiLineEdit:RID_DLG_UPDATEINSTALL:RID_DLG_UPDATE_INSTALL_INFO"; Pos = MAP_APPFONT( RSC_SP_DLG_INNERBORDER_LEFT, RSC_SP_DLG_INNERBORDER_TOP + RSC_CD_FIXEDTEXT_HEIGHT + diff --git a/desktop/source/deployment/gui/license_dialog.cxx b/desktop/source/deployment/gui/license_dialog.cxx index 9fd55d2938..907fb66890 100644 --- a/desktop/source/deployment/gui/license_dialog.cxx +++ b/desktop/source/deployment/gui/license_dialog.cxx @@ -2,7 +2,7 @@ /************************************************************************* * * 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 @@ -63,7 +63,7 @@ namespace dp_gui { class LicenseView : public MultiLineEdit, public SfxListener { - BOOL mbEndReached; + sal_Bool mbEndReached; Link maEndReachedHdl; Link maScrolledHdl; @@ -73,9 +73,9 @@ public: void ScrollDown( ScrollType eScroll ); - BOOL IsEndReached() const; - BOOL EndReached() const { return mbEndReached; } - void SetEndReached( BOOL bEnd ) { mbEndReached = bEnd; } + sal_Bool IsEndReached() const; + sal_Bool EndReached() const { return mbEndReached; } + void SetEndReached( sal_Bool bEnd ) { mbEndReached = bEnd; } void SetEndReachedHdl( const Link& rHdl ) { maEndReachedHdl = rHdl; } const Link& GetAutocompleteHdl() const { return maEndReachedHdl; } @@ -90,7 +90,7 @@ protected: }; struct LicenseDialogImpl : public ModalDialog -{ +{ cssu::Reference<cssu::XComponentContext> m_xComponentContext; FixedText m_ftHead; FixedText m_ftBody1; @@ -146,20 +146,20 @@ void LicenseView::ScrollDown( ScrollType eScroll ) pScroll->DoScrollAction( eScroll ); } -BOOL LicenseView::IsEndReached() const +sal_Bool LicenseView::IsEndReached() const { - BOOL bEndReached; + sal_Bool bEndReached; ExtTextView* pView = GetTextView(); ExtTextEngine* pEdit = GetTextEngine(); - ULONG nHeight = pEdit->GetTextHeight(); + sal_uLong nHeight = pEdit->GetTextHeight(); Size aOutSize = pView->GetWindow()->GetOutputSizePixel(); Point aBottom( 0, aOutSize.Height() ); - if ( (ULONG) pView->GetDocPos( aBottom ).Y() >= nHeight - 1 ) - bEndReached = TRUE; + if ( (sal_uLong) pView->GetDocPos( aBottom ).Y() >= nHeight - 1 ) + bEndReached = sal_True; else - bEndReached = FALSE; + bEndReached = sal_False; return bEndReached; } @@ -168,8 +168,8 @@ void LicenseView::Notify( SfxBroadcaster&, const SfxHint& rHint ) { if ( rHint.IsA( TYPE(TextHint) ) ) { - BOOL bLastVal = EndReached(); - ULONG nId = ((const TextHint&)rHint).GetId(); + sal_Bool bLastVal = EndReached(); + sal_uLong nId = ((const TextHint&)rHint).GetId(); if ( nId == TEXT_HINT_PARAINSERTED ) { @@ -215,13 +215,6 @@ LicenseDialogImpl::LicenseDialogImpl( { - if (GetSettings().GetStyleSettings().GetHighContrastMode()) - { - // high contrast mode needs other images - m_fiArrow1.SetImage(Image(DpGuiResId(IMG_LICENCE_ARROW_HC))); - m_fiArrow2.SetImage(Image(DpGuiResId(IMG_LICENCE_ARROW_HC))); - } - FreeResource(); m_acceptButton.SetUniqueId(UID_BTN_LICENSE_ACCEPT); diff --git a/desktop/source/deployment/gui/license_dialog.hxx b/desktop/source/deployment/gui/license_dialog.hxx index 7e7a8592e6..ec63ffbfbb 100644 --- a/desktop/source/deployment/gui/license_dialog.hxx +++ b/desktop/source/deployment/gui/license_dialog.hxx @@ -45,7 +45,6 @@ namespace dp_gui { class LicenseDialog : public ::cppu::WeakImplHelper1<ui::dialogs::XExecutableDialog> -// task::XJobExecutor> { Reference<XComponentContext> const m_xComponentContext; Reference<awt::XWindow> /* const */ m_parent; @@ -63,10 +62,6 @@ public: virtual void SAL_CALL setTitle( OUString const & title ) throw (RuntimeException); virtual sal_Int16 SAL_CALL execute() throw (RuntimeException); - - //// XJobExecutor - //virtual void SAL_CALL trigger( OUString const & event ) - // throw (RuntimeException); }; } #endif diff --git a/desktop/source/deployment/gui/makefile.mk b/desktop/source/deployment/gui/makefile.mk index 52092a077a..73ca837925 100644..100755 --- a/desktop/source/deployment/gui/makefile.mk +++ b/desktop/source/deployment/gui/makefile.mk @@ -30,7 +30,6 @@ PRJ = ..$/..$/.. PRJNAME = desktop TARGET = deploymentgui ENABLE_EXCEPTIONS = TRUE -#USE_DEFFILE = TRUE NO_BSYMBOLIC = TRUE USE_PCH := ENABLE_PCH := @@ -55,7 +54,6 @@ SLOFILES = \ $(SLO)$/dp_gui_updatedialog.obj \ $(SLO)$/dp_gui_updateinstalldialog.obj \ $(SLO)$/dp_gui_autoscrolledit.obj \ - $(SLO)$/dp_gui_system.obj \ $(SLO)$/dp_gui_extensioncmdqueue.obj \ $(SLO)$/descedit.obj @@ -88,8 +86,6 @@ SHL1LIBS = $(SLB)$/$(TARGET).lib SHL1DEF = $(MISC)$/$(SHL1TARGET).def DEF1NAME = $(SHL1TARGET) -#DEFLIB1NAME = $(TARGET) -#DEF1DEPN = SRS1NAME = $(TARGET) SRC1FILES = \ @@ -107,3 +103,11 @@ RESLIB1IMAGES= $(PRJ)$/res .INCLUDE : target.mk + +ALLTAR : $(MISC)/deploymentgui.component + +$(MISC)/deploymentgui.component .ERRREMOVE : \ + $(SOLARENV)/bin/createcomponent.xslt deploymentgui.component + $(XSLTPROC) --nonet --stringparam uri \ + '$(COMPONENTPREFIX_BASIS_NATIVE)$(SHL1TARGETN:f)' -o $@ \ + $(SOLARENV)/bin/createcomponent.xslt deploymentgui.component diff --git a/desktop/source/deployment/inc/db.hxx b/desktop/source/deployment/inc/db.hxx index 4f144667a9..3fa3d22679 100644 --- a/desktop/source/deployment/inc/db.hxx +++ b/desktop/source/deployment/inc/db.hxx @@ -28,6 +28,8 @@ #ifndef BERKELEYDBPROXY_DB_HXX_ #define BERKELEYDBPROXY_DB_HXX_ +#include <boost/noncopyable.hpp> + #ifdef SYSTEM_DB #include <db.h> #else @@ -43,26 +45,12 @@ extern "C" { typedef void (*db_free_fcn_type)(void *); } - namespace berkeleydbproxy { class DbEnv; class Dbc; class Dbt; - namespace db_internal - { - class Noncopyable - { - // not implemented - Noncopyable(const Noncopyable&); - void operator=(const Noncopyable&); - protected: - Noncopyable() {} - ~Noncopyable() {} - }; - } - class DESKTOP_DEPLOYMENTMISC_DLLPUBLIC DbException { rtl::OString what_; @@ -78,7 +66,7 @@ namespace berkeleydbproxy { }; - class DESKTOP_DEPLOYMENTMISC_DLLPUBLIC DbEnv : db_internal::Noncopyable + class DESKTOP_DEPLOYMENTMISC_DLLPUBLIC DbEnv : boost::noncopyable { friend class Db; @@ -89,7 +77,7 @@ namespace berkeleydbproxy { static char *strerror(int); }; - class DESKTOP_DEPLOYMENTMISC_DLLPUBLIC Db : db_internal::Noncopyable + class DESKTOP_DEPLOYMENTMISC_DLLPUBLIC Db : boost::noncopyable { private: DB* m_pDBP; @@ -116,7 +104,7 @@ namespace berkeleydbproxy { int cursor(DB_TXN *txnid, Dbc **cursorp, u_int32_t flags); }; - class DESKTOP_DEPLOYMENTMISC_DLLPUBLIC Dbc : db_internal::Noncopyable + class DESKTOP_DEPLOYMENTMISC_DLLPUBLIC Dbc : boost::noncopyable { friend class Db; friend class Dbt; @@ -156,20 +144,4 @@ namespace berkeleydbproxy { } #endif - - - - - - - - - - - - - - - - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/desktop/source/deployment/inc/dp_dependencies.hxx b/desktop/source/deployment/inc/dp_dependencies.hxx index 2e57c06275..f31d5f3084 100644 --- a/desktop/source/deployment/inc/dp_dependencies.hxx +++ b/desktop/source/deployment/inc/dp_dependencies.hxx @@ -29,6 +29,7 @@ #ifndef INCLUDED_DESKTOP_SOURCE_DEPLOYMENT_INC_DP_DEPENDENCIES_HXX #define INCLUDED_DESKTOP_SOURCE_DEPLOYMENT_INC_DP_DEPENDENCIES_HXX +#include "unotools/configmgr.hxx" #include "sal/config.h" #include "com/sun/star/uno/Reference.hxx" #include "com/sun/star/uno/Sequence.hxx" @@ -44,6 +45,14 @@ namespace rtl { class OUString; } namespace dp_misc { +struct BrandName : public ::rtl::StaticWithInit<const ::rtl::OUString, BrandName> { + const ::rtl::OUString operator () () { + return ::utl::ConfigManager::GetDirectConfigProperty( + ::utl::ConfigManager::PRODUCTNAME ).get< ::rtl::OUString >(); + } +}; + + /** Dependency handling. */ diff --git a/desktop/source/deployment/inc/dp_interact.h b/desktop/source/deployment/inc/dp_interact.h index 3aca761c2d..3aca761c2d 100644..100755 --- a/desktop/source/deployment/inc/dp_interact.h +++ b/desktop/source/deployment/inc/dp_interact.h diff --git a/desktop/source/deployment/inc/dp_misc.h b/desktop/source/deployment/inc/dp_misc.h index bbf6d5274b..bbf6d5274b 100644..100755 --- a/desktop/source/deployment/inc/dp_misc.h +++ b/desktop/source/deployment/inc/dp_misc.h diff --git a/desktop/source/deployment/inc/dp_misc.mk b/desktop/source/deployment/inc/dp_misc.mk index 829a6bb96b..829a6bb96b 100644..100755 --- a/desktop/source/deployment/inc/dp_misc.mk +++ b/desktop/source/deployment/inc/dp_misc.mk diff --git a/desktop/source/deployment/inc/dp_persmap.h b/desktop/source/deployment/inc/dp_persmap.h index b1597f3bb5..8af038413a 100644..100755 --- a/desktop/source/deployment/inc/dp_persmap.h +++ b/desktop/source/deployment/inc/dp_persmap.h @@ -31,14 +31,14 @@ #include "rtl/ustring.hxx" #include "db.hxx" -#include <hash_map> +#include <boost/unordered_map.hpp> using namespace berkeleydbproxy; namespace dp_misc { -typedef ::std::hash_map< +typedef ::boost::unordered_map< ::rtl::OString, ::rtl::OString, ::rtl::OStringHash > t_string2string_map; //============================================================================== diff --git a/desktop/source/deployment/inc/dp_resource.h b/desktop/source/deployment/inc/dp_resource.h index 96fd049207..bd3a4fac82 100644..100755 --- a/desktop/source/deployment/inc/dp_resource.h +++ b/desktop/source/deployment/inc/dp_resource.h @@ -40,12 +40,12 @@ namespace dp_misc { //============================================================================== -ResId getResId( USHORT id ); +ResId getResId( sal_uInt16 id ); //============================================================================== -DESKTOP_DEPLOYMENTMISC_DLLPUBLIC String getResourceString( USHORT id ); +DESKTOP_DEPLOYMENTMISC_DLLPUBLIC String getResourceString( sal_uInt16 id ); -template <typename Unique, USHORT id> +template <typename Unique, sal_uInt16 id> struct StaticResourceString : public ::rtl::StaticWithInit<const ::rtl::OUString, Unique> { const ::rtl::OUString operator () () { return getResourceString(id); } diff --git a/desktop/source/deployment/inc/dp_ucb.h b/desktop/source/deployment/inc/dp_ucb.h index c2fcdcd7e0..c2fcdcd7e0 100644..100755 --- a/desktop/source/deployment/inc/dp_ucb.h +++ b/desktop/source/deployment/inc/dp_ucb.h diff --git a/desktop/source/deployment/inc/dp_xml.h b/desktop/source/deployment/inc/dp_xml.h index 376df332fb..376df332fb 100644..100755 --- a/desktop/source/deployment/inc/dp_xml.h +++ b/desktop/source/deployment/inc/dp_xml.h diff --git a/desktop/source/deployment/makefile.mk b/desktop/source/deployment/makefile.mk index 6d83a5c100..877379ad73 100644..100755 --- a/desktop/source/deployment/makefile.mk +++ b/desktop/source/deployment/makefile.mk @@ -30,7 +30,6 @@ PRJ = ..$/.. PRJNAME = desktop TARGET = deployment ENABLE_EXCEPTIONS = TRUE -#USE_DEFFILE = TRUE NO_BSYMBOLIC = TRUE .IF "$(GUI)"=="OS2" @@ -110,3 +109,11 @@ RESLIB1SRSFILES += $(SRS)$/deployment_misc.srs .INCLUDE : target.mk + +ALLTAR : $(MISC)/deployment.component + +$(MISC)/deployment.component .ERRREMOVE : $(SOLARENV)/bin/createcomponent.xslt \ + deployment.component + $(XSLTPROC) --nonet --stringparam uri \ + '$(COMPONENTPREFIX_BASIS_NATIVE)$(SHL1TARGETN:f)' -o $@ \ + $(SOLARENV)/bin/createcomponent.xslt deployment.component diff --git a/desktop/source/deployment/manager/dp_activepackages.cxx b/desktop/source/deployment/manager/dp_activepackages.cxx index 950e46174d..94a16f6230 100644 --- a/desktop/source/deployment/manager/dp_activepackages.cxx +++ b/desktop/source/deployment/manager/dp_activepackages.cxx @@ -41,7 +41,7 @@ #include "rtl/uri.h" #include "rtl/uri.hxx" #include "rtl/ustring.hxx" -#include <hash_map> +#include <boost/unordered_map.hpp> #include "dp_identifier.hxx" #include "dp_persmap.h" diff --git a/desktop/source/deployment/manager/dp_commandenvironments.cxx b/desktop/source/deployment/manager/dp_commandenvironments.cxx index ba32b30898..f8237f3549 100644 --- a/desktop/source/deployment/manager/dp_commandenvironments.cxx +++ b/desktop/source/deployment/manager/dp_commandenvironments.cxx @@ -223,7 +223,6 @@ void LicenseCommandEnv::handle( } //================================================================================ -//================================================================================ NoLicenseCommandEnv::NoLicenseCommandEnv( css::uno::Reference< css::task::XInteractionHandler> const & handler): @@ -250,11 +249,6 @@ void NoLicenseCommandEnv::handle( handle_(approve, abort, xRequest); } -// SilentCheckPrerequisitesCommandEnv::SilentCheckPrerequisitesCommandEnv( -// css::uno::Reference< css::task::XInteractionHandler> const & handler): -// BaseCommandEnv(handler) -// { -// } SilentCheckPrerequisitesCommandEnv::SilentCheckPrerequisitesCommandEnv() { } @@ -287,33 +281,7 @@ void SilentCheckPrerequisitesCommandEnv::handle( m_UnknownException = request; } } -// NoExceptionCommandEnv::NoExceptionCommandEnv( -// css::uno::Reference< css::task::XInteractionHandler> const & handler, -// css::uno::Type const & type): -// BaseCommandEnv(handler), -// m_type(type) -// { -// } -// // XInteractionHandler -// void NoExceptionCommandEnv::handle( -// Reference< task::XInteractionRequest> const & xRequest ) -// throw (uno::RuntimeException) -// { -// uno::Any request( xRequest->getRequest() ); -// OSL_ASSERT( request.getValueTypeClass() == uno::TypeClass_EXCEPTION ); - -// deployment::LicenseException licExc; - -// bool approve = false; -// bool abort = false; - -// if (request.getValueType() == m_type) -// { -// approve = true; -// } -// handle_(approve, abort, xRequest); -// } - -} // namespace dp_manager + +} /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/desktop/source/deployment/manager/dp_commandenvironments.hxx b/desktop/source/deployment/manager/dp_commandenvironments.hxx index da64628792..59349c469a 100644 --- a/desktop/source/deployment/manager/dp_commandenvironments.hxx +++ b/desktop/source/deployment/manager/dp_commandenvironments.hxx @@ -100,7 +100,7 @@ private: ::rtl::OUString m_repository; bool m_bSuppressLicense; public: - LicenseCommandEnv(){}; + LicenseCommandEnv() : m_bSuppressLicense(false) {}; LicenseCommandEnv( css::uno::Reference< css::task::XInteractionHandler> const & handler, bool bSuppressLicense, @@ -154,22 +154,6 @@ public: css::uno::Any m_UnknownException; }; -// class NoExceptionCommandEnv : public BaseCommandEnv -// { -// css::uno::Type m_type; -// public: -// NoExceptionCommandEnv::NoExceptionCommandEnv(){}; -// NoExceptionCommandEnv::NoExceptionCommandEnv( -// css::uno::Reference< css::task::XInteractionHandler> const & handler, -// css::uno::Type const & type); - -// // XInteractionHandler -// virtual void SAL_CALL handle( -// css::uno::Reference<css::task::XInteractionRequest > const & xRequest ) -// throw (css::uno::RuntimeException); - -// }; - } #endif diff --git a/desktop/source/deployment/manager/dp_extensionmanager.cxx b/desktop/source/deployment/manager/dp_extensionmanager.cxx index 11b38cdc88..e2fe27e12d 100644 --- a/desktop/source/deployment/manager/dp_extensionmanager.cxx +++ b/desktop/source/deployment/manager/dp_extensionmanager.cxx @@ -65,7 +65,7 @@ #include "boost/bind.hpp" #include <list> -#include <hash_map> +#include <boost/unordered_map.hpp> #include <algorithm> namespace deploy = com::sun::star::deployment; @@ -78,8 +78,6 @@ namespace beans = com::sun::star::beans; namespace util = com::sun::star::util; namespace css = com::sun::star; -//#define OUSTR(s) rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(s)) - using ::com::sun::star::uno::Reference; using ::rtl::OUString; @@ -90,7 +88,6 @@ struct CompIdentifiers bool operator() (::std::vector<Reference<deploy::XPackage> > const & a, ::std::vector<Reference<deploy::XPackage> > const & b) { - if (getName(a).compareTo(getName(b)) < 0) return true; return false; @@ -170,7 +167,7 @@ ExtensionRemoveGuard::~ExtensionRemoveGuard() } } -} //end namespace +} namespace dp_manager { @@ -181,13 +178,9 @@ ExtensionManager::ExtensionManager( Reference< uno::XComponentContext > const& x ::cppu::WeakComponentImplHelper1< css::deployment::XExtensionManager >(getMutex()), m_xContext( xContext ) { - Reference<deploy::XPackageManagerFactory> xPackageManagerFactory( - deploy::thePackageManagerFactory::get(m_xContext)); - m_userRepository = xPackageManagerFactory->getPackageManager(OUSTR("user")); - m_sharedRepository = xPackageManagerFactory->getPackageManager(OUSTR("shared")); - m_bundledRepository = xPackageManagerFactory->getPackageManager(OUSTR("bundled")); - m_tmpRepository = xPackageManagerFactory->getPackageManager(OUSTR("tmp")); - + m_xPackageManagerFactory = deploy::thePackageManagerFactory::get(m_xContext); + OSL_ASSERT(m_xPackageManagerFactory.is()); + m_repositoryNames.push_back(OUSTR("user")); m_repositoryNames.push_back(OUSTR("shared")); m_repositoryNames.push_back(OUSTR("bundled")); @@ -199,6 +192,23 @@ ExtensionManager::~ExtensionManager() { } +Reference<deploy::XPackageManager> ExtensionManager::getUserRepository() +{ + return m_xPackageManagerFactory->getPackageManager(OUSTR("user")); +} +Reference<deploy::XPackageManager> ExtensionManager::getSharedRepository() +{ + return m_xPackageManagerFactory->getPackageManager(OUSTR("shared")); +} +Reference<deploy::XPackageManager> ExtensionManager::getBundledRepository() +{ + return m_xPackageManagerFactory->getPackageManager(OUSTR("bundled")); +} +Reference<deploy::XPackageManager> ExtensionManager::getTmpRepository() +{ + return m_xPackageManagerFactory->getPackageManager(OUSTR("tmp")); +} + Reference<task::XAbortChannel> ExtensionManager::createAbortChannel() throw (uno::RuntimeException) { @@ -211,11 +221,11 @@ ExtensionManager::getPackageManager(::rtl::OUString const & repository) { Reference<deploy::XPackageManager> xPackageManager; if (repository.equals(OUSTR("user"))) - xPackageManager = m_userRepository; + xPackageManager = getUserRepository(); else if (repository.equals(OUSTR("shared"))) - xPackageManager = m_sharedRepository; + xPackageManager = getSharedRepository(); else if (repository.equals(OUSTR("bundled"))) - xPackageManager = m_bundledRepository; + xPackageManager = getBundledRepository(); else throw lang::IllegalArgumentException( OUSTR("No valid repository name provided."), @@ -227,7 +237,7 @@ ExtensionManager::getPackageManager(::rtl::OUString const & repository) Enters the XPackage objects into a map. They must be all from the same repository. The value type of the map is a vector, where each vector represents an extension with a particular identifier. The first member - is represents the user extension, the second the shared extension and the + represents the user extension, the second the shared extension and the third the bundled extension. */ void ExtensionManager::addExtensionsToMap( @@ -266,8 +276,8 @@ void ExtensionManager::addExtensionsToMap( /* returns a list containing extensions with the same identifier from - all repositories (user, shared, bundled) If one repository does not - have this extension, then the list contains an empty Referenc. The list + all repositories (user, shared, bundled). If one repository does not + have this extension, then the list contains an empty Reference. The list is ordered according to the priority of the repostories: 1. user 2. shared @@ -283,29 +293,21 @@ void ExtensionManager::addExtensionsToMap( { ::std::list<Reference<deploy::XPackage> > extensionList; - try - { //will throw an exception if the extension does not exist - extensionList.push_back(m_userRepository->getDeployedPackage( - identifier, fileName, Reference<ucb::XCommandEnvironment>())); - } catch(lang::IllegalArgumentException &) + Reference<deploy::XPackageManager> lRepos[] = { + getUserRepository(), getSharedRepository(), getBundledRepository() }; + for (int i(0); i != SAL_N_ELEMENTS(lRepos); ++i) { - extensionList.push_back(Reference<deploy::XPackage>()); - } - try - { - extensionList.push_back(m_sharedRepository->getDeployedPackage( - identifier, fileName, Reference<ucb::XCommandEnvironment>())); - } catch (lang::IllegalArgumentException &) - { - extensionList.push_back(Reference<deploy::XPackage>()); - } - try - { - extensionList.push_back(m_bundledRepository->getDeployedPackage( - identifier, fileName, Reference<ucb::XCommandEnvironment>())); - } catch (lang::IllegalArgumentException &) - { - extensionList.push_back(Reference<deploy::XPackage>()); + Reference<deploy::XPackage> xPackage; + try + { + xPackage = lRepos[i]->getDeployedPackage( + identifier, fileName, Reference<ucb::XCommandEnvironment>()); + } + catch(lang::IllegalArgumentException &) + { + // thrown if the extension does not exist in this repository + } + extensionList.push_back(xPackage); } OSL_ASSERT(extensionList.size() == 3); return extensionList; @@ -503,7 +505,7 @@ Reference<deploy::XPackage> ExtensionManager::backupExtension( if (xOldExtension.is()) { - xBackup = m_tmpRepository->addPackage( + xBackup = getTmpRepository()->addPackage( xOldExtension->getURL(), uno::Sequence<beans::NamedValue>(), OUString(), Reference<task::XAbortChannel>(), tmpCmdEnv); @@ -524,7 +526,7 @@ uno::Sequence< Reference<deploy::XPackageTypeInfo> > ExtensionManager::getSupportedPackageTypes() throw (uno::RuntimeException) { - return m_userRepository->getSupportedPackageTypes(); + return getUserRepository()->getSupportedPackageTypes(); } //Do some necessary checks and user interaction. This function does not //aquire the extension manager mutex and that mutex must not be aquired @@ -644,9 +646,9 @@ Reference<deploy::XPackage> ExtensionManager::addExtension( //Determine the repository to use Reference<deploy::XPackageManager> xPackageManager; if (repository.equals(OUSTR("user"))) - xPackageManager = m_userRepository; + xPackageManager = getUserRepository(); else if (repository.equals(OUSTR("shared"))) - xPackageManager = m_sharedRepository; + xPackageManager = getSharedRepository(); else throw lang::IllegalArgumentException( OUSTR("No valid repository name provided."), @@ -659,7 +661,7 @@ Reference<deploy::XPackage> ExtensionManager::addExtension( getTempExtension(url, xAbortChannel, xCmdEnv); //Make sure the extension is removed from the tmp repository in case //of an exception - ExtensionRemoveGuard tmpExtensionRemoveGuard(xTmpExtension, m_tmpRepository); + ExtensionRemoveGuard tmpExtensionRemoveGuard(xTmpExtension, getTmpRepository()); const OUString sIdentifier = dp_misc::getIdentifier(xTmpExtension); const OUString sFileName = xTmpExtension->getName(); Reference<deploy::XPackage> xOldExtension; @@ -703,8 +705,8 @@ Reference<deploy::XPackage> ExtensionManager::addExtension( //the xTmpExtension //no command environment supplied, only this class shall interact //with the user! - xExtensionBackup = m_tmpRepository->importExtension( - xOldExtension, Reference<task::XAbortChannel>(), + xExtensionBackup = getTmpRepository()->importExtension( + xOldExtension, Reference<task::XAbortChannel>(), Reference<ucb::XCommandEnvironment>()); tmpExtensionRemoveGuard.reset(xExtensionBackup); //xTmpExtension will later be used to check the dependencies @@ -720,7 +722,7 @@ Reference<deploy::XPackage> ExtensionManager::addExtension( } //check again dependencies but prevent user interaction, //We can disregard the license, because the user must have already - //accepted it, whe we called checkPrerequisites the first time + //accepted it, when we called checkPrerequisites the first time SilentCheckPrerequisitesCommandEnv * pSilentCommandEnv = new SilentCheckPrerequisitesCommandEnv(); Reference<ucb::XCommandEnvironment> silentCommandEnv(pSilentCommandEnv); @@ -856,9 +858,9 @@ void ExtensionManager::removeExtension( { //Determine the repository to use if (repository.equals(OUSTR("user"))) - xPackageManager = m_userRepository; + xPackageManager = getUserRepository(); else if (repository.equals(OUSTR("shared"))) - xPackageManager = m_sharedRepository; + xPackageManager = getSharedRepository(); else throw lang::IllegalArgumentException( OUSTR("No valid repository name provided."), @@ -917,8 +919,8 @@ void ExtensionManager::removeExtension( identifier, fileName, bUserDisabled, false, Reference<task::XAbortChannel>(), tmpCmdEnv); - - m_tmpRepository->removePackage( + + getTmpRepository()->removePackage( dp_misc::getIdentifier(xExtensionBackup), xExtensionBackup->getName(), xAbortChannel, xCmdEnv); fireModified(); @@ -931,7 +933,7 @@ void ExtensionManager::removeExtension( } if (xExtensionBackup.is()) - m_tmpRepository->removePackage( + getTmpRepository()->removePackage( dp_misc::getIdentifier(xExtensionBackup), xExtensionBackup->getName(), xAbortChannel, xCmdEnv); } @@ -1158,20 +1160,20 @@ uno::Sequence< uno::Sequence<Reference<deploy::XPackage> > > id2extensions mapExt; uno::Sequence<Reference<deploy::XPackage> > userExt = - m_userRepository->getDeployedPackages(xAbort, xCmdEnv); + getUserRepository()->getDeployedPackages(xAbort, xCmdEnv); addExtensionsToMap(mapExt, userExt, OUSTR("user")); uno::Sequence<Reference<deploy::XPackage> > sharedExt = - m_sharedRepository->getDeployedPackages(xAbort, xCmdEnv); + getSharedRepository()->getDeployedPackages(xAbort, xCmdEnv); addExtensionsToMap(mapExt, sharedExt, OUSTR("shared")); uno::Sequence<Reference<deploy::XPackage> > bundledExt = - m_bundledRepository->getDeployedPackages(xAbort, xCmdEnv); + getBundledRepository()->getDeployedPackages(xAbort, xCmdEnv); addExtensionsToMap(mapExt, bundledExt, OUSTR("bundled")); //copy the values of the map to a vector for sorting ::std::vector< ::std::vector<Reference<deploy::XPackage> > > vecExtensions; id2extensions::const_iterator mapIt = mapExt.begin(); - for (;mapIt != mapExt.end(); mapIt++) + for (;mapIt != mapExt.end(); ++mapIt) vecExtensions.push_back(mapIt->second); //sort the element according to the identifier @@ -1234,7 +1236,7 @@ void ExtensionManager::reinstallDeployedExtensions( const OUString id = dp_misc::getIdentifier(extensions[ pos ]); const OUString fileName = extensions[ pos ]->getName(); OSL_ASSERT(id.getLength()); - activateExtension(id, fileName, false, false, xAbortChannel, xCmdEnv ); + activateExtension(id, fileName, false, true, xAbortChannel, xCmdEnv ); } catch (lang::DisposedException &) { @@ -1258,6 +1260,64 @@ void ExtensionManager::reinstallDeployedExtensions( } } +/** Works on the bundled repository. That is using the variables + BUNDLED_EXTENSIONS and BUNDLED_EXTENSIONS_USER. + */ +void ExtensionManager::synchronizeBundledPrereg( + Reference<task::XAbortChannel> const & xAbortChannel, + Reference<ucb::XCommandEnvironment> const & xCmdEnv ) + throw (deploy::DeploymentException, + uno::RuntimeException) +{ + try + { + String sSynchronizingBundled(StrSyncRepository::get()); + sSynchronizingBundled.SearchAndReplaceAllAscii( "%NAME", OUSTR("bundled")); + dp_misc::ProgressLevel progressBundled(xCmdEnv, sSynchronizingBundled); + + Reference<deploy::XPackageManagerFactory> xPackageManagerFactory( + deploy::thePackageManagerFactory::get(m_xContext)); + + Reference<deploy::XPackageManager> xMgr = + xPackageManagerFactory->getPackageManager(OUSTR("bundled_prereg")); + xMgr->synchronize(xAbortChannel, xCmdEnv); + progressBundled.update(OUSTR("\n\n")); + + uno::Sequence<Reference<deploy::XPackage> > extensions = xMgr->getDeployedPackages( + xAbortChannel, xCmdEnv); + try + { + for (sal_Int32 i = 0; i < extensions.getLength(); i++) + { + extensions[i]->registerPackage(true, xAbortChannel, xCmdEnv); + } + } + catch (...) + { + OSL_ASSERT(0); + } + OUString lastSyncBundled(RTL_CONSTASCII_USTRINGPARAM( + "$BUNDLED_EXTENSIONS_PREREG/lastsynchronized")); + writeLastModified(lastSyncBundled, xCmdEnv); + + } catch (deploy::DeploymentException& ) { + throw; + } catch (ucb::CommandFailedException & ) { + throw; + } catch (ucb::CommandAbortedException & ) { + throw; + } catch (lang::IllegalArgumentException &) { + throw; + } catch (uno::RuntimeException &) { + throw; + } catch (...) { + uno::Any exc = ::cppu::getCaughtException(); + throw deploy::DeploymentException( + OUSTR("Extension Manager: exception in synchronize"), + static_cast<OWeakObject*>(this), exc); + } +} + sal_Bool ExtensionManager::synchronize( Reference<task::XAbortChannel> const & xAbortChannel, Reference<ucb::XCommandEnvironment> const & xCmdEnv ) @@ -1275,13 +1335,13 @@ sal_Bool ExtensionManager::synchronize( String sSynchronizingShared(StrSyncRepository::get()); sSynchronizingShared.SearchAndReplaceAllAscii( "%NAME", OUSTR("shared")); dp_misc::ProgressLevel progressShared(xCmdEnv, sSynchronizingShared); - bModified = m_sharedRepository->synchronize(xAbortChannel, xCmdEnv); + bModified = getSharedRepository()->synchronize(xAbortChannel, xCmdEnv); progressShared.update(OUSTR("\n\n")); String sSynchronizingBundled(StrSyncRepository::get()); sSynchronizingBundled.SearchAndReplaceAllAscii( "%NAME", OUSTR("bundled")); dp_misc::ProgressLevel progressBundled(xCmdEnv, sSynchronizingBundled); - bModified |= m_bundledRepository->synchronize(xAbortChannel, xCmdEnv); + bModified |= getBundledRepository()->synchronize(xAbortChannel, xCmdEnv); progressBundled.update(OUSTR("\n\n")); //Always determine the active extension. This is necessary for the @@ -1308,7 +1368,7 @@ sal_Bool ExtensionManager::synchronize( { //We catch the exception, so we can write the lastmodified file //so we will no repeat this everytime OOo starts. - OSL_ENSURE(0, "Extensions Manager: synchronize"); + OSL_FAIL("Extensions Manager: synchronize"); } OUString lastSyncBundled(RTL_CONSTASCII_USTRINGPARAM( "$BUNDLED_EXTENSIONS_USER/lastsynchronized")); @@ -1408,7 +1468,7 @@ Reference<deploy::XPackage> ExtensionManager::getTempExtension( { Reference<ucb::XCommandEnvironment> tmpCmdEnvA(new TmpRepositoryCommandEnv()); - Reference<deploy::XPackage> xTmpPackage = m_tmpRepository->addPackage( + Reference<deploy::XPackage> xTmpPackage = getTmpRepository()->addPackage( url, uno::Sequence<beans::NamedValue>(),OUString(), xAbortChannel, tmpCmdEnvA); if (!xTmpPackage.is()) { @@ -1439,8 +1499,6 @@ sal_Bool ExtensionManager::isReadOnlyRepository(::rtl::OUString const & reposito return getPackageManager(repository)->isReadOnly(); } //------------------------------------------------------------------------------ -//------------------------------------------------------------------------------ -//------------------------------------------------------------------------------ namespace sdecl = comphelper::service_decl; sdecl::class_<ExtensionManager> servicePIP; @@ -1466,7 +1524,7 @@ bool singleton_entries( } catch (registry::InvalidRegistryException & exc) { (void) exc; // avoid warnings - OSL_ENSURE( 0, ::rtl::OUStringToOString( + OSL_FAIL( ::rtl::OUStringToOString( exc.Message, RTL_TEXTENCODING_UTF8 ).getStr() ); return false; } diff --git a/desktop/source/deployment/manager/dp_extensionmanager.hxx b/desktop/source/deployment/manager/dp_extensionmanager.hxx index 8677f960ef..7adcf0a201 100644 --- a/desktop/source/deployment/manager/dp_extensionmanager.hxx +++ b/desktop/source/deployment/manager/dp_extensionmanager.hxx @@ -45,7 +45,7 @@ namespace css = ::com::sun::star; namespace dp_manager { -typedef ::std::hash_map< +typedef ::boost::unordered_map< ::rtl::OUString, ::std::vector<css::uno::Reference<css::deployment::XPackage> >, ::rtl::OUStringHash > id2extensions; @@ -200,6 +200,12 @@ public: css::lang::IllegalArgumentException, css::uno::RuntimeException); + virtual void SAL_CALL synchronizeBundledPrereg( + css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel, + css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv ) + throw (css::deployment::DeploymentException, + css::uno::RuntimeException); + virtual css::uno::Sequence<css::uno::Reference<css::deployment::XPackage> > SAL_CALL getExtensionsWithUnacceptedLicenses( ::rtl::OUString const & repository, @@ -224,12 +230,8 @@ private: }; css::uno::Reference< css::uno::XComponentContext> m_xContext; - - css::uno::Reference<css::deployment::XPackageManager> m_userRepository; - css::uno::Reference<css::deployment::XPackageManager> m_sharedRepository; - css::uno::Reference<css::deployment::XPackageManager> m_bundledRepository; - css::uno::Reference<css::deployment::XPackageManager> m_tmpRepository; - + css::uno::Reference<css::deployment::XPackageManagerFactory> m_xPackageManagerFactory; + //only to be used within addExtension ::osl::Mutex m_addMutex; /* contains the names of all repositories (except tmp) in order of there @@ -238,6 +240,11 @@ private: */ ::std::list< ::rtl::OUString > m_repositoryNames; + css::uno::Reference<css::deployment::XPackageManager> getUserRepository(); + css::uno::Reference<css::deployment::XPackageManager> getSharedRepository(); + css::uno::Reference<css::deployment::XPackageManager> getBundledRepository(); + css::uno::Reference<css::deployment::XPackageManager> getTmpRepository(); + bool isUserDisabled(::rtl::OUString const & identifier, ::rtl::OUString const & filename); diff --git a/desktop/source/deployment/manager/dp_informationprovider.cxx b/desktop/source/deployment/manager/dp_informationprovider.cxx index 6aaf3739e2..c3e915b108 100644 --- a/desktop/source/deployment/manager/dp_informationprovider.cxx +++ b/desktop/source/deployment/manager/dp_informationprovider.cxx @@ -41,9 +41,8 @@ #include "com/sun/star/lang/XServiceInfo.hpp" #include "com/sun/star/registry/XRegistryKey.hpp" #include "com/sun/star/task/XAbortChannel.hpp" -#include "com/sun/star/ucb/CommandFailedException.hpp" -#include "com/sun/star/ucb/XCommandEnvironment.hpp" #include "com/sun/star/uno/XComponentContext.hpp" +#include "com/sun/star/ucb/XCommandEnvironment.hpp" #include "com/sun/star/xml/dom/XElement.hpp" #include "com/sun/star/xml/dom/XNode.hpp" @@ -72,9 +71,8 @@ namespace xml = com::sun::star::xml ; namespace dp_info { class PackageInformationProvider : - public ::cppu::WeakImplHelper3< deployment::XPackageInformationProvider, - css_ucb::XCommandEnvironment, - task::XInteractionHandler > + public ::cppu::WeakImplHelper1< deployment::XPackageInformationProvider > + { public: PackageInformationProvider( uno::Reference< uno::XComponentContext >const& xContext); @@ -83,16 +81,6 @@ class PackageInformationProvider : static uno::Sequence< rtl::OUString > getServiceNames(); static rtl::OUString getImplName(); - // XInteractionHandler - virtual void SAL_CALL handle( const uno::Reference< task::XInteractionRequest >& Request ) - throw( uno::RuntimeException ); - // XCommandEnvironment - virtual uno::Reference< task::XInteractionHandler > SAL_CALL getInteractionHandler() - throw ( uno::RuntimeException ) { return static_cast<task::XInteractionHandler*>(this); }; - - virtual uno::Reference< css_ucb::XProgressHandler > SAL_CALL getProgressHandler() - throw ( uno::RuntimeException ) { return uno::Reference< css_ucb::XProgressHandler >(); }; - // XPackageInformationProvider virtual rtl::OUString SAL_CALL getPackageLocation( const rtl::OUString& extensionId ) throw ( uno::RuntimeException ); @@ -126,17 +114,6 @@ PackageInformationProvider::~PackageInformationProvider() } //------------------------------------------------------------------------------ -void SAL_CALL PackageInformationProvider::handle( uno::Reference< task::XInteractionRequest > const & rRequest) - throw (uno::RuntimeException) -{ - uno::Sequence< uno::Reference< task::XInteractionContinuation > > xContinuations = rRequest->getContinuations(); - if ( xContinuations.getLength() == 1 ) - { - xContinuations[0]->select(); - } -} - -//------------------------------------------------------------------------------ rtl::OUString PackageInformationProvider::getPackageLocation( const rtl::OUString & repository, const rtl::OUString& _rExtensionId ) @@ -151,7 +128,7 @@ rtl::OUString PackageInformationProvider::getPackageLocation( xManager->getDeployedExtensions( repository, uno::Reference< task::XAbortChannel >(), - static_cast < XCommandEnvironment *> (this) ) ); + uno::Reference< css_ucb::XCommandEnvironment > () ) ); for ( int pos = packages.getLength(); pos--; ) { @@ -173,8 +150,6 @@ rtl::OUString PackageInformationProvider::getPackageLocation( } //------------------------------------------------------------------------------ -//------------------------------------------------------------------------------ -//------------------------------------------------------------------------------ rtl::OUString SAL_CALL PackageInformationProvider::getPackageLocation( const rtl::OUString& _sExtensionId ) @@ -241,7 +216,7 @@ PackageInformationProvider::isUpdateAvailable( const rtl::OUString& _sExtensionI } int nCount = 0; - for (dp_misc::UpdateInfoMap::iterator i(updateInfoMap.begin()); i != updateInfoMap.end(); i++) + for (dp_misc::UpdateInfoMap::iterator i(updateInfoMap.begin()); i != updateInfoMap.end(); ++i) { dp_misc::UpdateInfo const & info = i->second; @@ -321,7 +296,7 @@ uno::Sequence< uno::Sequence< rtl::OUString > > SAL_CALL PackageInformationProvi const uno::Sequence< uno::Sequence< uno::Reference<deployment::XPackage > > > allExt = mgr->getAllExtensions( uno::Reference< task::XAbortChannel >(), - static_cast < XCommandEnvironment *> (this) ); + uno::Reference< css_ucb::XCommandEnvironment > () ); uno::Sequence< uno::Sequence< rtl::OUString > > retList; @@ -356,8 +331,6 @@ uno::Sequence< uno::Sequence< rtl::OUString > > SAL_CALL PackageInformationProvi //------------------------------------------------------------------------------ -//------------------------------------------------------------------------------ -//------------------------------------------------------------------------------ namespace sdecl = comphelper::service_decl; sdecl::class_<PackageInformationProvider> servicePIP; @@ -383,7 +356,7 @@ bool singleton_entries( } catch (registry::InvalidRegistryException & exc) { (void) exc; // avoid warnings - OSL_ENSURE( 0, ::rtl::OUStringToOString( + OSL_FAIL( ::rtl::OUStringToOString( exc.Message, RTL_TEXTENCODING_UTF8 ).getStr() ); return false; } diff --git a/desktop/source/deployment/manager/dp_manager.cxx b/desktop/source/deployment/manager/dp_manager.cxx index 3b7432ae80..17b65f1ded 100644 --- a/desktop/source/deployment/manager/dp_manager.cxx +++ b/desktop/source/deployment/manager/dp_manager.cxx @@ -64,6 +64,7 @@ #include "com/sun/star/ucb/UnsupportedCommandException.hpp" #include "boost/bind.hpp" #include "tools/urlobj.hxx" +#include "unotools/tempfile.hxx" #include "osl/file.hxx" #include <vector> @@ -371,6 +372,24 @@ Reference<deployment::XPackageManager> PackageManagerImpl::create( //No stamp file. We assume that bundled is always readonly. It must not be //modified from ExtensionManager but only by the installer } + else if (context.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("bundled_prereg") )) { + //This is a bundled repository but the registration data + //is in the brand layer: share/prereg + //It is special because the registration data are copied at the first startup + //into the user installation. The processed help and xcu files are not + //copied. Instead the backenddb.xml for the help backend references the help + //by using $BUNDLED_EXTENSION_PREREG instead $BUNDLED_EXTENSIONS_USER. The + //configmgr.ini also used $BUNDLED_EXTENSIONS_PREREG to refer to the xcu file + //which contain the replacement for %origin%. + that->m_activePackages = OUSTR( + "vnd.sun.star.expand:$BUNDLED_EXTENSIONS"); + that->m_registrationData = OUSTR( + "vnd.sun.star.expand:$BUNDLED_EXTENSIONS_PREREG"); + that->m_registryCache = OUSTR( + "vnd.sun.star.expand:$BUNDLED_EXTENSIONS_PREREG/registry"); + logFile = OUSTR( + "vnd.sun.star.expand:$BUNDLED_EXTENSIONS_PREREG/log.txt"); + } else if (context.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("tmp") )) { that->m_activePackages = OUSTR( "vnd.sun.star.expand:$TMP_EXTENSIONS/extensions"); @@ -603,7 +622,7 @@ OUString PackageManagerImpl::detectMediaType( if (throw_exc) throw; (void) exc; - OSL_ENSURE( 0, ::rtl::OUStringToOString( + OSL_FAIL( ::rtl::OUStringToOString( exc.Message, RTL_TEXTENCODING_UTF8 ).getStr() ); } } @@ -619,21 +638,12 @@ OUString PackageManagerImpl::insertToActivationLayer( ::ucbhelper::Content sourceContent(sourceContent_); Reference<XCommandEnvironment> xCmdEnv( sourceContent.getCommandEnvironment() ); - OUString destFolder, tempEntry; - if (::osl::File::createTempFile( - m_activePackages_expanded.getLength() == 0 - ? 0 : &m_activePackages_expanded, - 0, &tempEntry ) != ::osl::File::E_None) - throw RuntimeException( - OUSTR("::osl::File::createTempFile() failed!"), 0 ); - if (m_activePackages_expanded.getLength() == 0) { - destFolder = tempEntry; - } - else { - tempEntry = tempEntry.copy( tempEntry.lastIndexOf( '/' ) + 1 ); - // tweak user|share to macrofied url: - destFolder = makeURL( m_activePackages, tempEntry ); - } + + String baseDir(m_activePackages_expanded); + ::utl::TempFile aTemp(&baseDir, sal_False); + OUString tempEntry = aTemp.GetURL(); + tempEntry = tempEntry.copy(tempEntry.lastIndexOf('/') + 1); + OUString destFolder = makeURL( m_activePackages, tempEntry); destFolder += OUSTR("_"); // prepare activation folder: @@ -950,6 +960,8 @@ void PackageManagerImpl::removePackage( contentRemoved.writeStream( xData, true /* replace existing */ ); } m_activePackagesDB->erase( id, fileName ); // to be removed upon next start + //remove any cached data hold by the backend + m_xRegistry->packageRemoved(xPackage->getURL(), xPackage->getPackageType()->getMediaType()); } try_dispose( xPackage ); @@ -990,7 +1002,8 @@ OUString PackageManagerImpl::getDeployPath( ActivePackages::Data const & data ) //The bundled extensions are not contained in an additional folder //with a unique name. data.temporaryName contains already the //UTF8 encoded folder name. See PackageManagerImpl::synchronize - if (!m_context.equals(OUSTR("bundled"))) + if (!m_context.equals(OUSTR("bundled")) + && !m_context.equals(OUSTR("bundled_prereg"))) { buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("_/") ); buf.append( ::rtl::Uri::encode( data.fileName, rtl_UriCharClassPchar, @@ -1076,13 +1089,13 @@ PackageManagerImpl::getDeployedPackages_( catch (lang::IllegalArgumentException & exc) { // ignore (void) exc; // avoid warnings - OSL_ENSURE( 0, ::rtl::OUStringToOString( + OSL_FAIL( ::rtl::OUStringToOString( exc.Message, RTL_TEXTENCODING_UTF8 ).getStr() ); } catch (deployment::DeploymentException& exc) { // ignore (void) exc; // avoid warnings - OSL_ENSURE( 0, ::rtl::OUStringToOString( + OSL_FAIL( ::rtl::OUStringToOString( exc.Message, RTL_TEXTENCODING_UTF8 ).getStr() ); } } @@ -1261,7 +1274,7 @@ bool PackageManagerImpl::synchronizeRemovedExtensions( typedef ActivePackages::Entries::const_iterator ITActive; bool bShared = m_context.equals(OUSTR("shared")); - for (ITActive i = id2temp.begin(); i != id2temp.end(); i++) + for (ITActive i = id2temp.begin(); i != id2temp.end(); ++i) { try { @@ -1305,7 +1318,7 @@ bool PackageManagerImpl::synchronizeRemovedExtensions( //There may be another extensions at the same place dp_misc::DescriptionInfoset infoset = dp_misc::getDescriptionInfoset(url); - OSL_ENSURE(infoset.hasDescription(), + OSL_ENSURE(infoset.hasDescription() && infoset.getIdentifier(), "Extension Manager: bundled and shared extensions " "must have an identifer and a version"); if (infoset.hasDescription() && @@ -1342,6 +1355,8 @@ bool PackageManagerImpl::synchronizeAddedExtensions( Reference<css::ucb::XCommandEnvironment> const & xCmdEnv) { bool bModified = false; + OSL_ASSERT(!m_context.equals(OUSTR("user"))); + ActivePackages::Entries id2temp( m_activePackagesDB->getEntries() ); //check if the folder exist at all. The shared extension folder //may not exist for a normal user. @@ -1367,8 +1382,8 @@ bool PackageManagerImpl::synchronizeAddedExtensions( //The temporary folders of user and shared have an '_' at then end. //But the name in ActivePackages.temporaryName is saved without. OUString title2 = title; - bool bNotBundled = !m_context.equals(OUSTR("bundled")); - if (bNotBundled) + bool bShared = m_context.equals(OUSTR("shared")); + if (bShared) { OSL_ASSERT(title2[title2.getLength() -1] == '_'); title2 = title2.copy(0, title2.getLength() -1); @@ -1390,7 +1405,7 @@ bool PackageManagerImpl::synchronizeAddedExtensions( // an added extension OUString url(m_activePackages_expanded + OUSTR("/") + titleEncoded); OUString sExtFolder; - if (bNotBundled) //that is, shared + if (bShared) //that is, shared { //Check if the extension was not "deleted" already which is indicated //by a xxx.tmpremoved file @@ -1412,7 +1427,7 @@ bool PackageManagerImpl::synchronizeAddedExtensions( ActivePackages::Data dbData; dbData.temporaryName = titleEncoded; - if (bNotBundled) + if (bShared) dbData.fileName = sExtFolder; else dbData.fileName = title; @@ -1497,7 +1512,7 @@ Sequence< Reference<deployment::XPackage> > PackageManagerImpl::getExtensionsWit ActivePackages::Entries::const_iterator i = id2temp.begin(); bool bShared = m_context.equals(OUSTR("shared")); - for (; i != id2temp.end(); i++ ) + for (; i != id2temp.end(); ++i ) { //Get the database entry ActivePackages::Data const & dbData = i->second; @@ -1604,7 +1619,6 @@ sal_Int32 PackageManagerImpl::checkPrerequisites( } } -//############################################################################## //______________________________________________________________________________ PackageManagerImpl::CmdEnvWrapperImpl::~CmdEnvWrapperImpl() diff --git a/desktop/source/deployment/manager/dp_manager.h b/desktop/source/deployment/manager/dp_manager.h index fa4a9078ac..fa4a9078ac 100644..100755 --- a/desktop/source/deployment/manager/dp_manager.h +++ b/desktop/source/deployment/manager/dp_manager.h diff --git a/desktop/source/deployment/manager/dp_manager.hrc b/desktop/source/deployment/manager/dp_manager.hrc index 3dd89f57cf..3dd89f57cf 100644..100755 --- a/desktop/source/deployment/manager/dp_manager.hrc +++ b/desktop/source/deployment/manager/dp_manager.hrc diff --git a/desktop/source/deployment/manager/dp_managerfac.cxx b/desktop/source/deployment/manager/dp_managerfac.cxx index ccbaadcb8a..b2e51599d9 100644 --- a/desktop/source/deployment/manager/dp_managerfac.cxx +++ b/desktop/source/deployment/manager/dp_managerfac.cxx @@ -55,7 +55,7 @@ class PackageManagerFactoryImpl : private MutexHolder, public t_pmfac_helper Reference<deployment::XPackageManager> m_xUserMgr; Reference<deployment::XPackageManager> m_xSharedMgr; Reference<deployment::XPackageManager> m_xBundledMgr; - typedef ::std::hash_map< + typedef ::boost::unordered_map< OUString, WeakReference<deployment::XPackageManager>, ::rtl::OUStringHash > t_string2weakref; t_string2weakref m_managers; @@ -99,7 +99,7 @@ bool singleton_entries( } catch (registry::InvalidRegistryException & exc) { (void) exc; // avoid warnings - OSL_ENSURE( 0, ::rtl::OUStringToOString( + OSL_FAIL( ::rtl::OUStringToOString( exc.Message, RTL_TEXTENCODING_UTF8 ).getStr() ); return false; } diff --git a/desktop/source/deployment/manager/makefile.mk b/desktop/source/deployment/manager/makefile.mk index 4dc6405e34..4dc6405e34 100644..100755 --- a/desktop/source/deployment/manager/makefile.mk +++ b/desktop/source/deployment/manager/makefile.mk diff --git a/desktop/source/deployment/misc/db.cxx b/desktop/source/deployment/misc/db.cxx index ce403181ab..e3f64063e8 100644 --- a/desktop/source/deployment/misc/db.cxx +++ b/desktop/source/deployment/misc/db.cxx @@ -152,7 +152,6 @@ int Db::del(Dbt *key, u_int32_t flags) if ((err = db->del(db, 0, key, flags)) != 0) { // DB_NOTFOUND is a "normal" return, so should not be // thrown as an error - // if (err != DB_NOTFOUND) { db_internal::check_error(err, "Db::del"); return (err); diff --git a/desktop/source/deployment/misc/dp_dependencies.cxx b/desktop/source/deployment/misc/dp_dependencies.cxx index 345e4c248b..5c945df6b2 100644 --- a/desktop/source/deployment/misc/dp_dependencies.cxx +++ b/desktop/source/deployment/misc/dp_dependencies.cxx @@ -57,13 +57,25 @@ namespace css = ::com::sun::star; static char const xmlNamespace[] = "http://openoffice.org/extensions/description/2006"; -bool satisfiesMinimalVersion(::rtl::OUString const & version) { - ::rtl::OUString v( +bool +lcl_versionIsNot(dp_misc::Order i_eOrder, ::rtl::OUString const& i_rVersion) +{ + ::rtl::OUString aVersion( RTL_CONSTASCII_USTRINGPARAM( "${$OOO_BASE_DIR/program/" SAL_CONFIGFILE("version") ":Version:OOOPackageVersion}")); - ::rtl::Bootstrap::expandMacros(v); - return ::dp_misc::compareVersions(v, version) != ::dp_misc::LESS; + ::rtl::Bootstrap::expandMacros(aVersion); + return ::dp_misc::compareVersions(aVersion, i_rVersion) != i_eOrder; +} + +bool satisfiesMinimalVersion(::rtl::OUString const& i_rVersion) +{ + return lcl_versionIsNot(dp_misc::LESS, i_rVersion); +} + +bool satisfiesMaximalVersion(::rtl::OUString const& i_rVersion) +{ + return lcl_versionIsNot(dp_misc::GREATER, i_rVersion); } } @@ -81,14 +93,14 @@ check(::dp_misc::DescriptionInfoset const & infoset) { unsatisfied(n); ::sal_Int32 unsat = 0; for (::sal_Int32 i = 0; i < n; ++i) { - static char const minimalVersion[] = "OpenOffice.org-minimal-version"; + static rtl::OUString const minimalVersion( + RTL_CONSTASCII_USTRINGPARAM("OpenOffice.org-minimal-version")); css::uno::Reference< css::xml::dom::XElement > e( deps->item(i), css::uno::UNO_QUERY_THROW); bool sat = false; if (e->getNamespaceURI().equalsAsciiL( RTL_CONSTASCII_STRINGPARAM(xmlNamespace)) - && e->getTagName().equalsAsciiL( - RTL_CONSTASCII_STRINGPARAM(minimalVersion))) + && (e->getTagName() == minimalVersion)) { sat = satisfiesMinimalVersion( e->getAttribute( @@ -99,28 +111,18 @@ check(::dp_misc::DescriptionInfoset const & infoset) { RTL_CONSTASCII_STRINGPARAM( "OpenOffice.org-maximal-version"))) { - ::rtl::OUString v( - RTL_CONSTASCII_USTRINGPARAM( - "${$OOO_BASE_DIR/program/" SAL_CONFIGFILE("version") - ":Version:OOOBaseVersion}")); - ::rtl::Bootstrap::expandMacros(v); - sat = - ::dp_misc::compareVersions( - v, + sat = satisfiesMaximalVersion( e->getAttribute( - ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("value")))) - != ::dp_misc::GREATER; + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("value")))); } else if (e->hasAttributeNS( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(xmlNamespace)), - ::rtl::OUString( - RTL_CONSTASCII_USTRINGPARAM(minimalVersion)))) + minimalVersion)) { sat = satisfiesMinimalVersion( e->getAttributeNS( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(xmlNamespace)), - ::rtl::OUString( - RTL_CONSTASCII_USTRINGPARAM(minimalVersion)))); + minimalVersion)); } if (!sat) { unsatisfied[unsat++] = e; @@ -135,6 +137,7 @@ check(::dp_misc::DescriptionInfoset const & infoset) { ::rtl::OUString sReason; ::rtl::OUString sValue; ::rtl::OUString sVersion(RTL_CONSTASCII_USTRINGPARAM("%VERSION")); + ::rtl::OUString sProductName(RTL_CONSTASCII_USTRINGPARAM("%PRODUCTNAME")); if ( dependency->getNamespaceURI().equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( xmlNamespace ) ) && dependency->getTagName().equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "OpenOffice.org-minimal-version" ) ) ) @@ -164,6 +167,9 @@ check(::dp_misc::DescriptionInfoset const & infoset) { sal_Int32 nPos = sReason.indexOf( sVersion ); if ( nPos >= 0 ) sReason = sReason.replaceAt( nPos, sVersion.getLength(), sValue ); + nPos = sReason.indexOf( sProductName ); + if ( nPos >= 0 ) + sReason = sReason.replaceAt( nPos, sProductName.getLength(), BrandName::get() ); return sReason; } diff --git a/desktop/source/deployment/misc/dp_descriptioninfoset.cxx b/desktop/source/deployment/misc/dp_descriptioninfoset.cxx index 0efc0ae091..f42f2365a1 100644 --- a/desktop/source/deployment/misc/dp_descriptioninfoset.cxx +++ b/desktop/source/deployment/misc/dp_descriptioninfoset.cxx @@ -128,7 +128,7 @@ class ExtensionDescription public: /**throws an exception if the description.xml is not available, cannot be read, does not contain the expected data, - or any other error occured. Therefore it shoult only be used with + or any other error occurred. Therefore it shoult only be used with new extensions. Throws com::sun::star::uno::RuntimeException, @@ -167,7 +167,6 @@ class FileDoesNotExistFilter css::task::XInteractionHandler > { - //css::uno::Reference<css::task::XInteractionHandler> m_xHandler; bool m_bExist; css::uno::Reference< css::ucb::XCommandEnvironment > m_xCommandEnv; diff --git a/desktop/source/deployment/misc/dp_misc.cxx b/desktop/source/deployment/misc/dp_misc.cxx index f0ac23d2fb..fd607888e1 100644 --- a/desktop/source/deployment/misc/dp_misc.cxx +++ b/desktop/source/deployment/misc/dp_misc.cxx @@ -160,7 +160,7 @@ bool compareExtensionFolderWithLastSynchronizedFile( } else if (err1 != ::osl::File::E_None) { - OSL_ENSURE(0, "Cannot access extension folder"); + OSL_FAIL("Cannot access extension folder"); return true; //sync just in case } @@ -174,7 +174,7 @@ bool compareExtensionFolderWithLastSynchronizedFile( } else if (err2 != ::osl::File::E_None) { - OSL_ENSURE(0, "Cannot access file lastsynchronized"); + OSL_FAIL("Cannot access file lastsynchronized"); return true; //sync just in case } @@ -389,7 +389,7 @@ bool office_is_running() } else { - OSL_ENSURE(0, "NOT osl_Process_E_None "); + OSL_FAIL("NOT osl_Process_E_None "); //if osl_getExecutable file than we take the risk of creating a pipe ret = existsOfficePipe(); } @@ -419,7 +419,7 @@ oslProcess raiseProcess( case osl_Process_E_NotFound: throw RuntimeException( OUSTR("image not found!"), 0 ); case osl_Process_E_TimedOut: - throw RuntimeException( OUSTR("timout occured!"), 0 ); + throw RuntimeException( OUSTR("timout occurred!"), 0 ); case osl_Process_E_NoPermission: throw RuntimeException( OUSTR("permission denied!"), 0 ); case osl_Process_E_Unknown: diff --git a/desktop/source/deployment/misc/dp_misc.hrc b/desktop/source/deployment/misc/dp_misc.hrc index e5d749fc62..e5d749fc62 100644..100755 --- a/desktop/source/deployment/misc/dp_misc.hrc +++ b/desktop/source/deployment/misc/dp_misc.hrc diff --git a/desktop/source/deployment/misc/dp_misc.src b/desktop/source/deployment/misc/dp_misc.src index 78e87c2078..a6d1441d2a 100644 --- a/desktop/source/deployment/misc/dp_misc.src +++ b/desktop/source/deployment/misc/dp_misc.src @@ -32,9 +32,9 @@ String RID_DEPLYOMENT_DEPENDENCIES_UNKNOWN { }; String RID_DEPLYOMENT_DEPENDENCIES_MIN { - Text[en-US] = "Extensions requires at least OpenOffice.org %VERSION"; + Text[en-US] = "Extension requires at least %PRODUCTNAME %VERSION"; }; String RID_DEPLYOMENT_DEPENDENCIES_MAX { - Text[en-US] = "Extension doesn't support versions greater than: OpenOffice.org %VERSION"; + Text[en-US] = "Extension doesn't support versions greater than: %PRODUCTNAME %VERSION"; }; diff --git a/desktop/source/deployment/misc/dp_platform.cxx b/desktop/source/deployment/misc/dp_platform.cxx index 0e67097df5..8bf9d179d4 100644 --- a/desktop/source/deployment/misc/dp_platform.cxx +++ b/desktop/source/deployment/misc/dp_platform.cxx @@ -38,6 +38,7 @@ #define PLATFORM_ALL "all" #define PLATFORM_WIN_X86 "windows_x86" +#define PLATFORM_WIN_X86_64 "windows_x86_64" #define PLATFORM_LINUX_X86 "linux_x86" #define PLATFORM_LINUX_X86_64 "linux_x86_64" #define PLATFORM_KFREEBSD_X86 "kfreebsd_x86" @@ -70,6 +71,8 @@ #define PLATFORM_OS2_X86 "os2_x86" #define PLATFORM_OPENBSD_X86 "openbsd_x86" #define PLATFORM_OPENBSD_X86_64 "openbsd_x86_64" +#define PLATFORM_DRAGONFLY_X86 "dragonfly_x86" +#define PLATFORM_DRAGONFLY_X86_64 "dragonfly_x86_64" #define PLATFORM_AIX_POWERPC "aix_powerpc" @@ -113,9 +116,7 @@ namespace ::rtl::OUStringBuffer buf; buf.append( StrOperatingSystem::get() ); buf.append( static_cast<sal_Unicode>('_') ); - OUString arch( RTL_CONSTASCII_USTRINGPARAM("$_ARCH") ); - ::rtl::Bootstrap::expandMacros( arch ); - buf.append( arch ); + buf.append( StrCPU::get() ); return buf.makeStringAndClear(); } }; @@ -133,6 +134,8 @@ namespace ret = true; else if (token.equals(OUSTR(PLATFORM_WIN_X86))) ret = checkOSandCPU(OUSTR("Windows"), OUSTR("x86")); + else if (token.equals(OUSTR(PLATFORM_WIN_X86_64))) + ret = checkOSandCPU(OUSTR("Windows"), OUSTR("x86_64")); else if (token.equals(OUSTR(PLATFORM_LINUX_X86))) ret = checkOSandCPU(OUSTR("Linux"), OUSTR("x86")); else if (token.equals(OUSTR(PLATFORM_LINUX_X86_64))) @@ -193,9 +196,13 @@ namespace ret = checkOSandCPU(OUSTR("OpenBSD"), OUSTR("x86")); else if (token.equals(OUSTR(PLATFORM_OPENBSD_X86_64))) ret = checkOSandCPU(OUSTR("OpenBSD"), OUSTR("X86_64")); + else if (token.equals(OUSTR(PLATFORM_DRAGONFLY_X86))) + ret = checkOSandCPU(OUSTR("DragonFly"), OUSTR("x86")); + else if (token.equals(OUSTR(PLATFORM_DRAGONFLY_X86_64))) + ret = checkOSandCPU(OUSTR("DragonFly"), OUSTR("X86_64")); else { - OSL_ENSURE(0, "Extension Manager: The extension supports an unknown platform. " + OSL_FAIL("Extension Manager: The extension supports an unknown platform. " "Check the platform element in the description.xml"); ret = false; } diff --git a/desktop/source/deployment/misc/dp_resource.cxx b/desktop/source/deployment/misc/dp_resource.cxx index eb92eabba3..c8c57ac01d 100644 --- a/desktop/source/deployment/misc/dp_resource.cxx +++ b/desktop/source/deployment/misc/dp_resource.cxx @@ -72,14 +72,14 @@ osl::Mutex s_mutex; } // anon namespace //============================================================================== -ResId getResId( USHORT id ) +ResId getResId( sal_uInt16 id ) { const osl::MutexGuard guard( s_mutex ); return ResId( id, *DeploymentResMgr::get() ); } //============================================================================== -String getResourceString( USHORT id ) +String getResourceString( sal_uInt16 id ) { const osl::MutexGuard guard( s_mutex ); String ret( ResId( id, *DeploymentResMgr::get() ) ); diff --git a/desktop/source/deployment/misc/dp_ucb.cxx b/desktop/source/deployment/misc/dp_ucb.cxx index 170a403ddc..cbfde03cc8 100644 --- a/desktop/source/deployment/misc/dp_ucb.cxx +++ b/desktop/source/deployment/misc/dp_ucb.cxx @@ -161,7 +161,7 @@ bool create_folder( } catch (CommandFailedException &) { // Interaction Handler already handled the error - // that has occured... + // that has occurred... } catch (Exception &) { if (throw_exc) diff --git a/desktop/source/deployment/misc/dp_update.cxx b/desktop/source/deployment/misc/dp_update.cxx index 531409f063..b22c4c5a60 100644 --- a/desktop/source/deployment/misc/dp_update.cxx +++ b/desktop/source/deployment/misc/dp_update.cxx @@ -98,7 +98,7 @@ void getOwnUpdateInfos( bool & out_allFound) { bool allHaveOwnUpdateInformation = true; - for (UpdateInfoMap::iterator i = inout_map.begin(); i != inout_map.end(); i++) + for (UpdateInfoMap::iterator i = inout_map.begin(); i != inout_map.end(); ++i) { OSL_ASSERT(i->second.extension.is()); Sequence<OUString> urls(i->second.extension->getUpdateInformationURLs()); @@ -187,11 +187,9 @@ void getDefaultUpdateInfos( bool containsBundledOnly(Sequence<Reference<deployment::XPackage> > const & sameIdExtensions) { OSL_ASSERT(sameIdExtensions.getLength() == 3); - if (!sameIdExtensions[0].is() && !sameIdExtensions[1].is() && sameIdExtensions[2].is()) - return true; - else - return false; + return !sameIdExtensions[0].is() && !sameIdExtensions[1].is() && sameIdExtensions[2].is(); } + /** Returns true if the list of extensions are bundled extensions and there are no other extensions with the same identifier in the shared or user repository. If extensionList is NULL, then it is checked if there are only bundled extensions. @@ -205,17 +203,12 @@ bool onlyBundledExtensions( if (extensionList) { typedef std::vector<Reference<deployment::XPackage > >::const_iterator CIT; - for (CIT i = extensionList->begin(); i != extensionList->end(); i++) + for (CIT i(extensionList->begin()), aEnd(extensionList->end()); onlyBundled && i != aEnd; ++i) { Sequence<Reference<deployment::XPackage> > seqExt = xExtMgr->getExtensionsWithSameIdentifier( dp_misc::getIdentifier(*i), (*i)->getName(), Reference<ucb::XCommandEnvironment>()); - if (!containsBundledOnly(seqExt)) - { - onlyBundled = false; - break; - } - + onlyBundled = containsBundledOnly(seqExt); } } else @@ -223,13 +216,9 @@ bool onlyBundledExtensions( const uno::Sequence< uno::Sequence< Reference<deployment::XPackage > > > seqAllExt = xExtMgr->getAllExtensions(Reference<task::XAbortChannel>(), Reference<ucb::XCommandEnvironment>()); - for (int pos = seqAllExt.getLength(); pos --; ) + for (int pos(0), nLen(seqAllExt.getLength()); onlyBundled && pos != nLen; ++pos) { - if (!containsBundledOnly(seqAllExt[pos])) - { - onlyBundled = false; - break; - } + onlyBundled = containsBundledOnly(seqAllExt[pos]); } } return onlyBundled; @@ -282,14 +271,6 @@ UPDATE_SOURCE isUpdateUserExtension( retVal = UPDATE_SOURCE_ONLINE; } - //No update for bundled extensions, they are updated only by the setup - //else if (bundledVersion.getLength()) - //{ - // int index = determineHighestVersion( - // OUString(), OUString(), bundledVersion, onlineVersion); - // if (index == 3) - // retVal = UPDATE_SOURCE_ONLINE; - //} } else { @@ -328,14 +309,6 @@ UPDATE_SOURCE isUpdateSharedExtension( else if (index == 3) retVal = UPDATE_SOURCE_ONLINE; } - //No update for bundled extensions, they are updated only by the setup - //else if (bundledVersion.getLength()) - //{ - // int index = determineHighestVersion( - // OUString(), OUString(), bundledVersion, onlineVersion); - // if (index == 3) - // retVal = UPDATE_SOURCE_ONLINE; - //} return retVal; } @@ -403,18 +376,20 @@ UpdateInfoMap getOnlineUpdateInfos( UpdateInfoMap::value_type( dp_misc::getIdentifier(extension), UpdateInfo(extension))); OSL_ASSERT(insertRet.second == true); + (void)insertRet; } } else { typedef std::vector<Reference<deployment::XPackage > >::const_iterator CIT; - for (CIT i = extensionList->begin(); i != extensionList->end(); i++) + for (CIT i = extensionList->begin(); i != extensionList->end(); ++i) { OSL_ASSERT(i->is()); std::pair<UpdateInfoMap::iterator, bool> insertRet = infoMap.insert( UpdateInfoMap::value_type( dp_misc::getIdentifier(*i), UpdateInfo(*i))); OSL_ASSERT(insertRet.second == true); + (void)insertRet; } } diff --git a/desktop/source/deployment/misc/makefile.mk b/desktop/source/deployment/misc/makefile.mk index 3e4bd68cb4..3e4bd68cb4 100644..100755 --- a/desktop/source/deployment/misc/makefile.mk +++ b/desktop/source/deployment/misc/makefile.mk diff --git a/desktop/source/deployment/registry/component/dp_compbackenddb.cxx b/desktop/source/deployment/registry/component/dp_compbackenddb.cxx index 09f06638ec..b103fe46ef 100644 --- a/desktop/source/deployment/registry/component/dp_compbackenddb.cxx +++ b/desktop/source/deployment/registry/component/dp_compbackenddb.cxx @@ -83,26 +83,29 @@ OUString ComponentBackendDb::getKeyElementName() void ComponentBackendDb::addEntry(::rtl::OUString const & url, Data const & data) { try{ - Reference<css::xml::dom::XNode> componentNode = writeKeyElement(url); - writeSimpleElement(OUSTR("java-type-library"), - OUString::valueOf((sal_Bool) data.javaTypeLibrary), - componentNode); - - writeSimpleList( - data.implementationNames, - OUSTR("implementation-names"), - OUSTR("name"), - componentNode); - - writeVectorOfPair( - data.singletons, - OUSTR("singletons"), - OUSTR("item"), - OUSTR("key"), - OUSTR("value"), - componentNode); - - save(); + if (!activateEntry(url)) + { + Reference<css::xml::dom::XNode> componentNode = writeKeyElement(url); + writeSimpleElement(OUSTR("java-type-library"), + OUString::valueOf((sal_Bool) data.javaTypeLibrary), + componentNode); + + writeSimpleList( + data.implementationNames, + OUSTR("implementation-names"), + OUSTR("name"), + componentNode); + + writeVectorOfPair( + data.singletons, + OUSTR("singletons"), + OUSTR("item"), + OUSTR("key"), + OUSTR("value"), + componentNode); + + save(); + } } catch(css::uno::Exception &) { diff --git a/desktop/source/deployment/registry/component/dp_component.cxx b/desktop/source/deployment/registry/component/dp_component.cxx index b1e22d35c0..096d84f502 100644 --- a/desktop/source/deployment/registry/component/dp_component.cxx +++ b/desktop/source/deployment/registry/component/dp_component.cxx @@ -55,7 +55,7 @@ #include "com/sun/star/ucb/NameClash.hpp" #include "com/sun/star/util/XMacroExpander.hpp" #include <list> -#include <hash_map> +#include <boost/unordered_map.hpp> #include <vector> #include <memory> #include <algorithm> @@ -66,6 +66,7 @@ using namespace ::com::sun::star; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::ucb; using ::rtl::OUString; +namespace css = com::sun::star; namespace dp_registry { namespace backend { @@ -122,14 +123,15 @@ class BackendImpl : public ::dp_registry::backend::PackageRegistryBackend BackendImpl * getMyBackend() const; const OUString m_loader; - ComponentBackendDb::Data m_registeredComponentsDb; - + enum reg { REG_UNINIT, REG_VOID, REG_REGISTERED, REG_NOT_REGISTERED, REG_MAYBE_REGISTERED } m_registered; - Reference<loader::XImplementationLoader> getComponentInfo( - t_stringlist * pImplNames, t_stringpairvec * pSingletons, + void getComponentInfo( + ComponentBackendDb::Data * data, + std::vector< css::uno::Reference< css::uno::XInterface > > * + factories, Reference<XComponentContext> const & xContext ); virtual void SAL_CALL disposing(); @@ -161,7 +163,31 @@ class BackendImpl : public ::dp_registry::backend::PackageRegistryBackend OUString const & identifier); }; friend class ComponentPackageImpl; - + + class ComponentsPackageImpl : public ::dp_registry::backend::Package + { + BackendImpl * getMyBackend() const; + + // Package + virtual beans::Optional< beans::Ambiguous<sal_Bool> > isRegistered_( + ::osl::ResettableMutexGuard & guard, + ::rtl::Reference<AbortChannel> const & abortChannel, + Reference<XCommandEnvironment> const & xCmdEnv ); + virtual void processPackage_( + ::osl::ResettableMutexGuard & guard, + bool registerPackage, + bool startup, + ::rtl::Reference<AbortChannel> const & abortChannel, + Reference<XCommandEnvironment> const & xCmdEnv ); + public: + ComponentsPackageImpl( + ::rtl::Reference<PackageRegistryBackend> const & myBackend, + OUString const & url, OUString const & name, + Reference<deployment::XPackageTypeInfo> const & xPackageType, + bool bRemoved, OUString const & identifier); + }; + friend class ComponentsPackageImpl; + class TypelibraryPackageImpl : public ::dp_registry::backend::Package { BackendImpl * getMyBackend() const; @@ -192,18 +218,66 @@ class BackendImpl : public ::dp_registry::backend::PackageRegistryBackend OUString const & identifier); }; friend class TypelibraryPackageImpl; + + /** Serves for unregistering packages that were registered on a + different platform. This can happen if one has remotely mounted + /home, for example. + */ + class OtherPlatformPackageImpl : public ::dp_registry::backend::Package + { + public: + OtherPlatformPackageImpl( + ::rtl::Reference<PackageRegistryBackend> const & myBackend, + OUString const & url, OUString const & name, + Reference<deployment::XPackageTypeInfo> const & xPackageType, + bool bRemoved, OUString const & identifier, OUString const& rPlatform); + + private: + BackendImpl * getMyBackend() const; + + const Reference<registry::XSimpleRegistry> impl_openRDB() const; + const Reference<XInterface> impl_createInstance(OUString const& rService) const; + + // Package + virtual beans::Optional< beans::Ambiguous<sal_Bool> > isRegistered_( + ::osl::ResettableMutexGuard & guard, + ::rtl::Reference<AbortChannel> const & abortChannel, + Reference<XCommandEnvironment> const & xCmdEnv ); + virtual void processPackage_( + ::osl::ResettableMutexGuard & guard, + bool registerPackage, + bool startup, + ::rtl::Reference<AbortChannel> const & abortChannel, + Reference<XCommandEnvironment> const & xCmdEnv ); + + private: + OUString const m_aPlatform; + }; + friend class OtherPlatformPackageImpl; t_stringlist m_jar_typelibs; t_stringlist m_rdb_typelibs; - t_stringlist & getTypelibs( bool jar ) { - return jar ? m_jar_typelibs : m_rdb_typelibs; + t_stringlist m_components; + + enum RcItem { RCITEM_JAR_TYPELIB, RCITEM_RDB_TYPELIB, RCITEM_COMPONENTS }; + + t_stringlist & getRcItemList( RcItem kind ) { + switch (kind) + { + case RCITEM_JAR_TYPELIB: + return m_jar_typelibs; + case RCITEM_RDB_TYPELIB: + return m_rdb_typelibs; + default: // case RCITEM_COMPONENTS + return m_components; + } } bool m_unorc_inited; bool m_unorc_modified; bool bSwitchedRdbFiles; - typedef ::std::hash_map< OUString, Reference<XInterface>, + typedef ::boost::unordered_map< OUString, Reference<XInterface>, ::rtl::OUStringHash > t_string2object; t_string2object m_backendObjects; @@ -218,6 +292,7 @@ class BackendImpl : public ::dp_registry::backend::PackageRegistryBackend const Reference<deployment::XPackageTypeInfo> m_xDynComponentTypeInfo; const Reference<deployment::XPackageTypeInfo> m_xJavaComponentTypeInfo; const Reference<deployment::XPackageTypeInfo> m_xPythonComponentTypeInfo; + const Reference<deployment::XPackageTypeInfo> m_xComponentsTypeInfo; const Reference<deployment::XPackageTypeInfo> m_xRDBTypelibTypeInfo; const Reference<deployment::XPackageTypeInfo> m_xJavaTypelibTypeInfo; Sequence< Reference<deployment::XPackageTypeInfo> > m_typeInfos; @@ -232,8 +307,8 @@ class BackendImpl : public ::dp_registry::backend::PackageRegistryBackend std::auto_ptr<ComponentBackendDb> m_backendDb; void addDataToDb(OUString const & url, ComponentBackendDb::Data const & data); - void deleteDataFromDb(OUString const & url); ComponentBackendDb::Data readDataFromDb(OUString const & url); + void revokeEntryFromDb(OUString const & url); //These rdbs are for writing new service entries. The rdb files are copies @@ -255,14 +330,32 @@ class BackendImpl : public ::dp_registry::backend::PackageRegistryBackend OUString const & id, Reference<XInterface> const & xObject ); void releaseObject( OUString const & id ); - bool addToUnoRc( bool jarFile, OUString const & url, + bool addToUnoRc( RcItem kind, OUString const & url, Reference<XCommandEnvironment> const & xCmdEnv ); - bool removeFromUnoRc( bool jarFile, OUString const & url, + bool removeFromUnoRc( RcItem kind, OUString const & url, Reference<XCommandEnvironment> const & xCmdEnv ); - bool hasInUnoRc( bool jarFile, OUString const & url ); + bool hasInUnoRc( RcItem kind, OUString const & url ); + + css::uno::Reference< css::registry::XRegistryKey > openRegistryKey( + css::uno::Reference< css::registry::XRegistryKey > const & base, + rtl::OUString const & path); + + void extractComponentData( + css::uno::Reference< css::uno::XComponentContext > const & context, + css::uno::Reference< css::registry::XRegistryKey > const & registry, + ComponentBackendDb::Data * data, + std::vector< css::uno::Reference< css::uno::XInterface > > * factories, + css::uno::Reference< css::loader::XImplementationLoader > const * + componentLoader, + rtl::OUString const * componentUrl); + + void componentLiveInsertion( + ComponentBackendDb::Data const & data, + std::vector< css::uno::Reference< css::uno::XInterface > > const & + factories); + + void componentLiveRemoval(ComponentBackendDb::Data const & data); - - public: BackendImpl( Sequence<Any> const & args, Reference<XComponentContext> const & xComponentContext ); @@ -271,6 +364,10 @@ public: virtual Sequence< Reference<deployment::XPackageTypeInfo> > SAL_CALL getSupportedPackageTypes() throw (RuntimeException); + virtual void SAL_CALL packageRemoved(OUString const & url, OUString const & mediaType) + throw (deployment::DeploymentException, + uno::RuntimeException); + using PackageRegistryBackend::disposing; //Will be called from ComponentPackageImpl @@ -292,13 +389,7 @@ BackendImpl::ComponentPackageImpl::ComponentPackageImpl( xPackageType, bRemoved, identifier), m_loader( loader ), m_registered( REG_UNINIT ) -{ - if (bRemoved) - { - m_registeredComponentsDb = getMyBackend()->readDataFromDb(url); - } -} - +{} const Reference<registry::XSimpleRegistry> BackendImpl::ComponentPackageImpl::getRDB() const @@ -357,7 +448,6 @@ BackendImpl * BackendImpl::ComponentPackageImpl::getMyBackend() const //______________________________________________________________________________ void BackendImpl::ComponentPackageImpl::disposing() { -// m_xRemoteContext.clear(); Package::disposing(); } @@ -458,7 +548,6 @@ void BackendImpl::initServiceRdbFiles() m_xComponentContext ), UNO_QUERY_THROW ); m_xCommonRDB->open( makeURL( expandUnoRcUrl(getCachePath()), m_commonRDB ), -// m_readOnly, !m_readOnly ); false, true); } if (m_nativeRDB.getLength() > 0) { @@ -469,7 +558,6 @@ void BackendImpl::initServiceRdbFiles() m_xComponentContext ), UNO_QUERY_THROW ); m_xNativeRDB->open( makeURL( expandUnoRcUrl(getCachePath()), m_nativeRDB ), -// m_readOnly, !m_readOnly ); false, true); } } @@ -520,16 +608,14 @@ BackendImpl::BackendImpl( getPlatformString(), OUSTR("*" SAL_DLLEXTENSION), getResourceString(RID_STR_DYN_COMPONENT), - RID_IMG_COMPONENT, - RID_IMG_COMPONENT_HC ) ), + RID_IMG_COMPONENT) ), m_xJavaComponentTypeInfo( new Package::TypeInfo( OUSTR("application/" "vnd.sun.star.uno-component;" "type=Java"), OUSTR("*.jar"), getResourceString(RID_STR_JAVA_COMPONENT), - RID_IMG_JAVA_COMPONENT, - RID_IMG_JAVA_COMPONENT_HC ) ), + RID_IMG_JAVA_COMPONENT) ), m_xPythonComponentTypeInfo( new Package::TypeInfo( OUSTR("application/" "vnd.sun.star.uno-component;" @@ -537,30 +623,35 @@ BackendImpl::BackendImpl( OUSTR("*.py"), getResourceString( RID_STR_PYTHON_COMPONENT), - RID_IMG_COMPONENT, - RID_IMG_COMPONENT_HC ) ), + RID_IMG_COMPONENT ) ), + m_xComponentsTypeInfo( new Package::TypeInfo( + OUSTR("application/" + "vnd.sun.star.uno-components"), + OUSTR("*.components"), + getResourceString(RID_STR_COMPONENTS), + RID_IMG_COMPONENT ) ), m_xRDBTypelibTypeInfo( new Package::TypeInfo( OUSTR("application/" "vnd.sun.star.uno-typelibrary;" "type=RDB"), OUSTR("*.rdb"), getResourceString(RID_STR_RDB_TYPELIB), - RID_IMG_TYPELIB, RID_IMG_TYPELIB_HC ) ), + RID_IMG_TYPELIB ) ), m_xJavaTypelibTypeInfo( new Package::TypeInfo( OUSTR("application/" "vnd.sun.star.uno-typelibrary;" "type=Java"), OUSTR("*.jar"), getResourceString(RID_STR_JAVA_TYPELIB), - RID_IMG_JAVA_TYPELIB, - RID_IMG_JAVA_TYPELIB_HC ) ), - m_typeInfos( 5 ) + RID_IMG_JAVA_TYPELIB ) ), + m_typeInfos( 6 ) { m_typeInfos[ 0 ] = m_xDynComponentTypeInfo; m_typeInfos[ 1 ] = m_xJavaComponentTypeInfo; m_typeInfos[ 2 ] = m_xPythonComponentTypeInfo; - m_typeInfos[ 3 ] = m_xRDBTypelibTypeInfo; - m_typeInfos[ 4 ] = m_xJavaTypelibTypeInfo; + m_typeInfos[ 3 ] = m_xComponentsTypeInfo; + m_typeInfos[ 4 ] = m_xRDBTypelibTypeInfo; + m_typeInfos[ 5 ] = m_xJavaTypelibTypeInfo; const Reference<XCommandEnvironment> xCmdEnv; @@ -602,12 +693,6 @@ void BackendImpl::addDataToDb( m_backendDb->addEntry(url, data); } -void BackendImpl::deleteDataFromDb(OUString const & url) -{ - if (m_backendDb.get()) - m_backendDb->removeEntry(url); -} - ComponentBackendDb::Data BackendImpl::readDataFromDb(OUString const & url) { ComponentBackendDb::Data data; @@ -616,6 +701,12 @@ ComponentBackendDb::Data BackendImpl::readDataFromDb(OUString const & url) return data; } +void BackendImpl::revokeEntryFromDb(OUString const & url) +{ + if (m_backendDb.get()) + m_backendDb->revokeEntry(url); +} + // XPackageRegistry //______________________________________________________________________________ Sequence< Reference<deployment::XPackageTypeInfo> > @@ -624,6 +715,14 @@ BackendImpl::getSupportedPackageTypes() throw (RuntimeException) return m_typeInfos; } +void BackendImpl::packageRemoved(OUString const & url, OUString const & /*mediaType*/) + throw (deployment::DeploymentException, + uno::RuntimeException) +{ + if (m_backendDb.get()) + m_backendDb->removeEntry(url); +} + // PackageRegistryBackend //______________________________________________________________________________ Reference<deployment::XPackage> BackendImpl::bindPackage_( @@ -698,16 +797,30 @@ Reference<deployment::XPackage> BackendImpl::bindPackage_( INetContentTypeParameter const * param = params.find( ByteString("platform") ); - if (param == 0 || platform_fits( param->m_sValue )) { + bool bPlatformFits(param == 0); + String aPlatform; + if (!bPlatformFits) // platform is specified, we have to check + { + aPlatform = param->m_sValue; + bPlatformFits = platform_fits(aPlatform); + } + // If the package is being removed, do not care whether + // platform fits. We won't be using it anyway. + if (bPlatformFits || bRemoved) { param = params.find( ByteString("type") ); if (param != 0) { String const & value = param->m_sValue; if (value.EqualsIgnoreCaseAscii("native")) { - return new BackendImpl::ComponentPackageImpl( - this, url, name, m_xDynComponentTypeInfo, - OUSTR("com.sun.star.loader.SharedLibrary"), - bRemoved, identifier); + if (bPlatformFits) + return new BackendImpl::ComponentPackageImpl( + this, url, name, m_xDynComponentTypeInfo, + OUSTR("com.sun.star.loader.SharedLibrary"), + bRemoved, identifier); + else + return new BackendImpl::OtherPlatformPackageImpl( + this, url, name, m_xDynComponentTypeInfo, + bRemoved, identifier, aPlatform); } if (value.EqualsIgnoreCaseAscii("Java")) { return new BackendImpl::ComponentPackageImpl( @@ -725,6 +838,17 @@ Reference<deployment::XPackage> BackendImpl::bindPackage_( } } else if (subType.EqualsIgnoreCaseAscii( + "vnd.sun.star.uno-components")) + { + INetContentTypeParameter const * param = params.find( + ByteString("platform") ); + if (param == 0 || platform_fits( param->m_sValue )) { + return new BackendImpl::ComponentsPackageImpl( + this, url, name, m_xComponentsTypeInfo, bRemoved, + identifier); + } + } + else if (subType.EqualsIgnoreCaseAscii( "vnd.sun.star.uno-typelibrary")) { INetContentTypeParameter const * param = params.find( @@ -752,7 +876,6 @@ Reference<deployment::XPackage> BackendImpl::bindPackage_( static_cast<sal_Int16>(-1) ); } -//############################################################################## //______________________________________________________________________________ void BackendImpl::unorc_verify_init( @@ -817,11 +940,50 @@ void BackendImpl::unorc_verify_init( while (index >= 0); } if (readLine( &line, OUSTR("UNO_SERVICES="), ucb_content, - RTL_TEXTENCODING_UTF8 )) { - sal_Int32 start = sizeof ("UNO_SERVICES=?$ORIGIN/") - 1; - sal_Int32 sep = line.indexOf( ' ', start ); - OSL_ASSERT( sep > 0 ); - m_commonRDB_RO = line.copy( start, sep - start ); + RTL_TEXTENCODING_UTF8 )) + { + // The UNO_SERVICES line always has the BNF form + // "UNO_SERVICES=" + // ("?$ORIGIN/" <common-rdb>)? -- first + // "${$ORIGIN/${_OS}_${_ARCH}rc:UNO_SERVICES}"? -- second + // ("?" ("BUNDLED_EXTENSIONS" | -- third + // "UNO_SHARED_PACKAGES_CACHE" | "UNO_USER_PACKAGES_CACHE") + // ...)* + // so can unambiguously be split into its thre parts: + int state = 1; + for (sal_Int32 i = RTL_CONSTASCII_LENGTH("UNO_SERVICES="); + i >= 0;) + { + rtl::OUString token(line.getToken(0, ' ', i)); + if (token.getLength() != 0) + { + if (state == 1 && + token.matchAsciiL( + RTL_CONSTASCII_STRINGPARAM("?$ORIGIN/"))) + { + m_commonRDB_RO = token.copy( + RTL_CONSTASCII_LENGTH("?$ORIGIN/")); + state = 2; + } + else if (state <= 2 && + token.equalsAsciiL( + RTL_CONSTASCII_STRINGPARAM( + "${$ORIGIN/${_OS}_${_ARCH}rc:" + "UNO_SERVICES}"))) + { + state = 3; + } + else + { + if (token[0] == '?') + { + token = token.copy(1); + } + m_components.push_back(token); + state = 3; + } + } + } } // native rc: @@ -897,16 +1059,27 @@ void BackendImpl::unorc_flush( Reference<XCommandEnvironment> const & xCmdEnv ) OUString sCommonRDB(m_commonRDB.getLength() > 0 ? m_commonRDB : m_commonRDB_RO); OUString sNativeRDB(m_nativeRDB.getLength() > 0 ? m_nativeRDB : m_nativeRDB_RO); - if (sCommonRDB.getLength() > 0 || sNativeRDB.getLength() > 0) + if (sCommonRDB.getLength() > 0 || sNativeRDB.getLength() > 0 || + !m_components.empty()) { - buf.append( RTL_CONSTASCII_STRINGPARAM("UNO_SERVICES=?$ORIGIN/") ); - buf.append( ::rtl::OUStringToOString( - sCommonRDB, RTL_TEXTENCODING_ASCII_US ) ); + buf.append( RTL_CONSTASCII_STRINGPARAM("UNO_SERVICES=") ); + bool space = false; + if (sCommonRDB.getLength() > 0) + { + buf.append( RTL_CONSTASCII_STRINGPARAM("?$ORIGIN/") ); + buf.append( ::rtl::OUStringToOString( + sCommonRDB, RTL_TEXTENCODING_ASCII_US ) ); + space = true; + } if (sNativeRDB.getLength() > 0) { + if (space) + { + buf.append(' '); + } buf.append( RTL_CONSTASCII_STRINGPARAM( - " ${$ORIGIN/${_OS}_${_ARCH}rc:UNO_SERVICES}") ); - buf.append(LF); + "${$ORIGIN/${_OS}_${_ARCH}rc:UNO_SERVICES}") ); + space = true; // write native rc: ::rtl::OStringBuffer buf2; @@ -928,6 +1101,18 @@ void BackendImpl::unorc_flush( Reference<XCommandEnvironment> const & xCmdEnv ) xCmdEnv ); ucb_content.writeStream( xData, true /* replace existing */ ); } + for (t_stringlist::iterator i(m_components.begin()); + i != m_components.end(); ++i) + { + if (space) + { + buf.append(' '); + } + buf.append('?'); + buf.append(rtl::OUStringToOString(*i, RTL_TEXTENCODING_UTF8)); + space = true; + } + buf.append(LF); } // write unorc: @@ -944,13 +1129,13 @@ void BackendImpl::unorc_flush( Reference<XCommandEnvironment> const & xCmdEnv ) } //______________________________________________________________________________ -bool BackendImpl::addToUnoRc( bool jarFile, OUString const & url_, +bool BackendImpl::addToUnoRc( RcItem kind, OUString const & url_, Reference<XCommandEnvironment> const & xCmdEnv ) { const OUString rcterm( dp_misc::makeRcTerm(url_) ); const ::osl::MutexGuard guard( getMutex() ); unorc_verify_init( xCmdEnv ); - t_stringlist & rSet = getTypelibs(jarFile); + t_stringlist & rSet = getRcItemList(kind); if (::std::find( rSet.begin(), rSet.end(), rcterm ) == rSet.end()) { rSet.push_front( rcterm ); // prepend to list, thus overriding // write immediately: @@ -964,13 +1149,13 @@ bool BackendImpl::addToUnoRc( bool jarFile, OUString const & url_, //______________________________________________________________________________ bool BackendImpl::removeFromUnoRc( - bool jarFile, OUString const & url_, + RcItem kind, OUString const & url_, Reference<XCommandEnvironment> const & xCmdEnv ) { const OUString rcterm( dp_misc::makeRcTerm(url_) ); const ::osl::MutexGuard guard( getMutex() ); unorc_verify_init( xCmdEnv ); - getTypelibs(jarFile).remove( rcterm ); + getRcItemList(kind).remove( rcterm ); // write immediately: m_unorc_modified = true; unorc_flush( xCmdEnv ); @@ -979,22 +1164,215 @@ bool BackendImpl::removeFromUnoRc( //______________________________________________________________________________ bool BackendImpl::hasInUnoRc( - bool jarFile, OUString const & url_ ) + RcItem kind, OUString const & url_ ) { const OUString rcterm( dp_misc::makeRcTerm(url_) ); const ::osl::MutexGuard guard( getMutex() ); - t_stringlist const & rSet = getTypelibs(jarFile); + t_stringlist const & rSet = getRcItemList(kind); return ::std::find( rSet.begin(), rSet.end(), rcterm ) != rSet.end(); } +css::uno::Reference< css::registry::XRegistryKey > BackendImpl::openRegistryKey( + css::uno::Reference< css::registry::XRegistryKey > const & base, + rtl::OUString const & path) +{ + OSL_ASSERT(base.is()); + css::uno::Reference< css::registry::XRegistryKey > key(base->openKey(path)); + if (!key.is()) { + throw css::deployment::DeploymentException( + (rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM("missing registry entry ")) + + path + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" under ")) + + base->getKeyName()), + static_cast< OWeakObject * >(this), Any()); + } + return key; +} + +void BackendImpl::extractComponentData( + css::uno::Reference< css::uno::XComponentContext > const & context, + css::uno::Reference< css::registry::XRegistryKey > const & registry, + ComponentBackendDb::Data * data, + std::vector< css::uno::Reference< css::uno::XInterface > > * factories, + css::uno::Reference< css::loader::XImplementationLoader > const * + componentLoader, + rtl::OUString const * componentUrl) +{ + OSL_ASSERT(context.is() && registry.is() && data != 0 && factories != 0); + rtl::OUString registryName(registry->getKeyName()); + sal_Int32 prefix = registryName.getLength(); + if (!registryName.endsWithAsciiL(RTL_CONSTASCII_STRINGPARAM("/"))) { + prefix += RTL_CONSTASCII_LENGTH("/"); + } + css::uno::Sequence< css::uno::Reference< css::registry::XRegistryKey > > + keys(registry->openKeys()); + css::uno::Reference< css::lang::XMultiComponentFactory > smgr( + context->getServiceManager(), css::uno::UNO_QUERY_THROW); + for (sal_Int32 i = 0; i < keys.getLength(); ++i) { + rtl::OUString name(keys[i]->getKeyName().copy(prefix)); + data->implementationNames.push_back(name); + css::uno::Reference< css::registry::XRegistryKey > singletons( + keys[i]->openKey( + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("UNO/SINGLETONS")))); + if (singletons.is()) { + sal_Int32 prefix2 = keys[i]->getKeyName().getLength() + + RTL_CONSTASCII_LENGTH("/UNO/SINGLETONS/"); + css::uno::Sequence< + css::uno::Reference< css::registry::XRegistryKey > > + singletonKeys(singletons->openKeys()); + for (sal_Int32 j = 0; j < singletonKeys.getLength(); ++j) { + data->singletons.push_back( + std::pair< rtl::OUString, rtl::OUString >( + singletonKeys[j]->getKeyName().copy(prefix2), name)); + } + } + css::uno::Reference< css::loader::XImplementationLoader > loader; + if (componentLoader == 0) { + rtl::OUString activator( + openRegistryKey( + keys[i], + rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM("UNO/ACTIVATOR")))-> + getAsciiValue()); + loader.set( + smgr->createInstanceWithContext(activator, context), + css::uno::UNO_QUERY); + if (!loader.is()) { + throw css::deployment::DeploymentException( + (rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM( + "cannot instantiate loader ")) + + activator), + static_cast< OWeakObject * >(this), Any()); + } + } else { + OSL_ASSERT(componentLoader->is()); + loader = *componentLoader; + } + factories->push_back( + loader->activate( + name, rtl::OUString(), + (componentUrl == 0 + ? (openRegistryKey( + keys[i], + rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM("UNO/LOCATION")))-> + getAsciiValue()) + : *componentUrl), + keys[i])); + } +} + +void BackendImpl::componentLiveInsertion( + ComponentBackendDb::Data const & data, + std::vector< css::uno::Reference< css::uno::XInterface > > const & + factories) +{ + css::uno::Reference< css::container::XSet > set( + getComponentContext()->getServiceManager(), css::uno::UNO_QUERY_THROW); + std::vector< css::uno::Reference< css::uno::XInterface > >::const_iterator + factory(factories.begin()); + for (t_stringlist::const_iterator i(data.implementationNames.begin()); + i != data.implementationNames.end(); ++i) + { + try { + set->insert(css::uno::Any(*factory++)); + } catch (container::ElementExistException &) { + OSL_TRACE( + "implementation %s already registered", + rtl::OUStringToOString(*i, RTL_TEXTENCODING_UTF8).getStr()); + } + } + if (!data.singletons.empty()) { + css::uno::Reference< css::container::XNameContainer > + rootContext( + getComponentContext()->getValueByName( + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("_root"))), + css::uno::UNO_QUERY); + if (rootContext.is()) { + for (t_stringpairvec::const_iterator i(data.singletons.begin()); + i != data.singletons.end(); ++i) + { + rtl::OUString name( + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/singletons/")) + + i->first); + try { + rootContext->removeByName( + name + + rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM("/arguments"))); + } catch (container::NoSuchElementException &) {} + try { + rootContext->insertByName( + (name + + rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM("/service"))), + css::uno::Any(i->second)); + } catch (container::ElementExistException &) { + rootContext->replaceByName( + (name + + rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM("/service"))), + css::uno::Any(i->second)); + } + try { + rootContext->insertByName(name, css::uno::Any()); + } catch (container::ElementExistException &) { + OSL_TRACE( + "singleton %s already registered", + rtl::OUStringToOString( + i->first, RTL_TEXTENCODING_UTF8).getStr()); + rootContext->replaceByName(name, css::uno::Any()); + } + } + } + } +} + +void BackendImpl::componentLiveRemoval(ComponentBackendDb::Data const & data) { + css::uno::Reference< css::container::XSet > set( + getComponentContext()->getServiceManager(), css::uno::UNO_QUERY_THROW); + for (t_stringlist::const_iterator i(data.implementationNames.begin()); + i != data.implementationNames.end(); ++i) + { + try { + set->remove(css::uno::Any(*i)); + } catch (css::container::NoSuchElementException &) { + // ignore if factory has not been live deployed + } + } + if (!data.singletons.empty()) { + css::uno::Reference< css::container::XNameContainer > rootContext( + getComponentContext()->getValueByName( + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("_root"))), + css::uno::UNO_QUERY); + if (rootContext.is()) { + for (t_stringpairvec::const_iterator i(data.singletons.begin()); + i != data.singletons.end(); ++i) + { + rtl::OUString name( + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/singletons/")) + + i->first); + try { + rootContext->removeByName( + name + + rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM("/arguments"))); + rootContext->removeByName( + name + + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/service"))); + rootContext->removeByName(name); + } catch (container::NoSuchElementException &) {} + } + } + } +} + //______________________________________________________________________________ void BackendImpl::releaseObject( OUString const & id ) { const ::osl::MutexGuard guard( getMutex() ); - if ( m_backendObjects.erase( id ) != 1 ) - { - OSL_ASSERT( false ); - } + m_backendObjects.erase( id ); } //______________________________________________________________________________ @@ -1077,66 +1455,45 @@ Reference<XComponentContext> raise_uno_process( } //------------------------------------------------------------------------------ -Reference<loader::XImplementationLoader> -BackendImpl::ComponentPackageImpl::getComponentInfo( - t_stringlist * pImplNames, t_stringpairvec * pSingletons, +void BackendImpl::ComponentPackageImpl::getComponentInfo( + ComponentBackendDb::Data * data, + std::vector< css::uno::Reference< css::uno::XInterface > > * factories, Reference<XComponentContext> const & xContext ) { const Reference<loader::XImplementationLoader> xLoader( xContext->getServiceManager()->createInstanceWithContext( m_loader, xContext ), UNO_QUERY ); if (! xLoader.is()) - return Reference<loader::XImplementationLoader>(); + { + throw css::deployment::DeploymentException( + (rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM("cannot instantiate loader ")) + + m_loader), + static_cast< OWeakObject * >(this), Any()); + } // HACK: highly dependent on stoc/source/servicemanager // and stoc/source/implreg implementation which rely on the same // services.rdb format! - + // .../UNO/LOCATION and .../UNO/ACTIVATOR appear not to be written by + // writeRegistryInfo, however, but are knwon, fixed values here, so + // can be passed into extractComponentData + rtl::OUString url(getURL()); const Reference<registry::XSimpleRegistry> xMemReg( xContext->getServiceManager()->createInstanceWithContext( OUSTR("com.sun.star.registry.SimpleRegistry"), xContext ), UNO_QUERY_THROW ); xMemReg->open( OUString() /* in mem */, false, true ); - xLoader->writeRegistryInfo( xMemReg->getRootKey(), OUString(), getURL() ); - - const Sequence< Reference<registry::XRegistryKey> > keys( - xMemReg->getRootKey()->openKeys() ); - for ( sal_Int32 pos = keys.getLength(); pos--; ) - { - Reference<registry::XRegistryKey> const & xImplKey = keys[ pos ]; - const OUString implName( - xImplKey->getKeyName().copy( 1 /*leading slash*/ ) ); - - // check for singletons: - const Reference<registry::XRegistryKey> xSingletonKey( - xImplKey->openKey( OUSTR("UNO/SINGLETONS") ) ); - if (xSingletonKey.is() && xSingletonKey->isValid()) - { - const Sequence< Reference<registry::XRegistryKey> > singletonKeys( - xSingletonKey->openKeys() ); - for ( sal_Int32 i = singletonKeys.getLength(); i--; ) - { - Reference<registry::XRegistryKey> const & xSingleton = - singletonKeys[ i ]; - pSingletons->push_back( - ::std::pair<OUString, OUString>( - xSingleton->getKeyName().copy( - implName.getLength() + - sizeof ("//UNO/SINGLETONS/") - 1 ), - xSingleton->getStringValue() ) ); - } - } - else - { - pImplNames->push_back( implName ); - } - } - - return xLoader; + xLoader->writeRegistryInfo( xMemReg->getRootKey(), OUString(), url ); + getMyBackend()->extractComponentData( + xContext, xMemReg->getRootKey(), data, factories, &xLoader, &url); } // Package //______________________________________________________________________________ +//We could use here BackendImpl::hasActiveEntry. However, this check is just as well. +//And it also shows the problem if another extension has overwritten an implementation +//entry, because it contains the same service implementation beans::Optional< beans::Ambiguous<sal_Bool> > BackendImpl::ComponentPackageImpl::isRegistered_( ::osl::ResettableMutexGuard &, @@ -1222,228 +1579,78 @@ void BackendImpl::ComponentPackageImpl::processPackage_( ::rtl::Reference<AbortChannel> const & abortChannel, Reference<XCommandEnvironment> const & xCmdEnv ) { - BackendImpl * that = getMyBackend(); - - - const bool java = m_loader.equalsAsciiL( - RTL_CONSTASCII_STRINGPARAM("com.sun.star.loader.Java2") ); - const OUString url( getURL() ); - bool isJavaTypelib; - if (m_bRemoved) - isJavaTypelib = m_registeredComponentsDb.javaTypeLibrary; - else - isJavaTypelib = java && - !jarManifestHeaderPresent( url, OUSTR("UNO-Type-Path"), xCmdEnv ); - - ComponentBackendDb::Data data; - data.javaTypeLibrary = isJavaTypelib; - if (doRegisterPackage) - { - Reference <uno::XComponentContext> context(that->getComponentContext()); - if (! startup) - { - context.set( - that->getObject( url ), UNO_QUERY ); - - if (! context.is()) { + BackendImpl * that = getMyBackend(); + rtl::OUString url(getURL()); + if (doRegisterPackage) { + ComponentBackendDb::Data data; + css::uno::Reference< css::uno::XComponentContext > context; + if (startup) { + context = that->getComponentContext(); + } else { + context.set(that->getObject(url), css::uno::UNO_QUERY); + if (!context.is()) { context.set( - that->insertObject( url, raise_uno_process( - that->getComponentContext(), - abortChannel ) ), - UNO_QUERY_THROW ); + that->insertObject( + url, + raise_uno_process( + that->getComponentContext(), abortChannel)), + css::uno::UNO_QUERY_THROW); } } - - const Reference<registry::XSimpleRegistry> xServicesRDB( getRDB() ); - const Reference<registry::XImplementationRegistration> xImplReg( + css::uno::Reference< css::registry::XImplementationRegistration>( context->getServiceManager()->createInstanceWithContext( - OUSTR("com.sun.star.registry.ImplementationRegistration"), - context ), UNO_QUERY_THROW ); - - xImplReg->registerImplementation( m_loader, url, xServicesRDB ); - //only write to unorc if registration was successful. - //It may fail if there is no suitable java. - if (isJavaTypelib) + rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM( + "com.sun.star.registry.ImplementationRegistration")), + context), + css::uno::UNO_QUERY_THROW)->registerImplementation( + m_loader, url, getRDB()); + // Only write to unorc after successful registration; it may fail if + // there is no suitable java + if (m_loader.equalsAsciiL( + RTL_CONSTASCII_STRINGPARAM("com.sun.star.loader.Java2")) && + !jarManifestHeaderPresent(url, OUSTR("UNO-Type-Path"), xCmdEnv)) { - that->addToUnoRc( java, url, xCmdEnv ); + that->addToUnoRc(RCITEM_JAR_TYPELIB, url, xCmdEnv); data.javaTypeLibrary = true; } - - t_stringlist implNames; - t_stringpairvec singletons; - const Reference<loader::XImplementationLoader> xLoader( - getComponentInfo( &implNames, &singletons, context ) ); - data.implementationNames = implNames; - data.singletons = singletons; - - if (!startup) - { - // factories live insertion: - const Reference<container::XSet> xSet( - that->getComponentContext()->getServiceManager(), UNO_QUERY_THROW ); - for ( t_stringlist::const_iterator iPos( implNames.begin() ); - iPos != implNames.end(); ++iPos ) - { - checkAborted( abortChannel ); - OUString const & implName = *iPos; - // activate factory: - const Reference<XInterface> xFactory( - xLoader->activate( - implName, OUString(), url, - xServicesRDB->getRootKey()->openKey( - OUSTR("/IMPLEMENTATIONS/") + implName ) ) ); - try { - xSet->insert( Any(xFactory) ); - } // ignore if factory has already been inserted: - catch (container::ElementExistException &) { - OSL_ENSURE( 0, "### factory already registered?" ); - } - } - - if (! singletons.empty()) - { - // singletons live insertion: - const Reference<container::XNameContainer> xRootContext( - that->getComponentContext()->getValueByName( - OUSTR("_root") ), UNO_QUERY ); - if (xRootContext.is()) - { - for ( t_stringpairvec::const_iterator iPos( - singletons.begin() ); - iPos != singletons.end(); ++iPos ) - { - ::std::pair<OUString, OUString> const & sp = *iPos; - const OUString name( OUSTR("/singletons/") + sp.first ); - // assure no arguments: - try { - xRootContext->removeByName( name + OUSTR("/arguments")); - } catch (container::NoSuchElementException &) {} - // used service: - try { - xRootContext->insertByName( - name + OUSTR("/service"), Any(sp.second) ); - } catch (container::ElementExistException &) { - xRootContext->replaceByName( - name + OUSTR("/service"), Any(sp.second) ); - } - // singleton entry: - try { - xRootContext->insertByName( name, Any() ); - } catch (container::ElementExistException & exc) { - (void) exc; // avoid warnings - OSL_ENSURE( - 0, OUStringToOString( - exc.Message, RTL_TEXTENCODING_UTF8 ).getStr() ); - xRootContext->replaceByName( name, Any() ); - } - } - } - } + std::vector< css::uno::Reference< css::uno::XInterface > > factories; + getComponentInfo(&data, &factories, context); + if (!startup) { + that->componentLiveInsertion(data, factories); } - m_registered = REG_REGISTERED; - getMyBackend()->addDataToDb(url, data); - } - else // revokePackage() - { - // set to VOID during revocation process: + that->addDataToDb(url, data); + } else { // revoke m_registered = REG_VOID; - - //get the remote context. If it does not exist then use the local one - Reference<XComponentContext> xContext( - that->getObject( url ), UNO_QUERY ); - bool bRemoteContext = false; - if (!xContext.is()) - xContext = that->getComponentContext(); - else - bRemoteContext = true; - - t_stringlist implNames; - t_stringpairvec singletons; - if (m_bRemoved) - { - implNames = m_registeredComponentsDb.implementationNames; - singletons = m_registeredComponentsDb.singletons; + ComponentBackendDb::Data data(that->readDataFromDb(url)); + css::uno::Reference< css::uno::XComponentContext > context( + that->getObject(url), css::uno::UNO_QUERY); + bool remoteContext = context.is(); + if (!remoteContext) { + context = that->getComponentContext(); } - else - { - getComponentInfo( &implNames, &singletons, xContext ); + if (!startup) { + that->componentLiveRemoval(data); } - - if (!startup) - { - // factories live removal: - const Reference<container::XSet> xSet( - that->getComponentContext()->getServiceManager(), UNO_QUERY_THROW ); - for ( t_stringlist::const_iterator iPos( implNames.begin() ); - iPos != implNames.end(); ++iPos ) - { - OUString const & implName = *iPos; - try { - xSet->remove( Any(implName) ); - } // ignore if factory has not been live deployed: - catch (container::NoSuchElementException &) { - } - } - - if (! singletons.empty()) - { - // singletons live removal: - const Reference<container::XNameContainer> xRootContext( - that->getComponentContext()->getValueByName( - OUSTR("_root") ), UNO_QUERY ); - if (xRootContext.is()) - { - for ( t_stringpairvec::const_iterator iPos( - singletons.begin() ); - iPos != singletons.end(); ++iPos ) - { - ::std::pair<OUString, OUString> const & sp = *iPos; - const OUString name( OUSTR("/singletons/") + sp.first ); - // arguments: - try { - xRootContext->removeByName( name + OUSTR("/arguments")); - } - catch (container::NoSuchElementException &) {} - // used service: - try { - xRootContext->removeByName( name + OUSTR("/service") ); - } - catch (container::NoSuchElementException &) {} - // singleton entry: - try { - xRootContext->removeByName( name ); - } - catch (container::NoSuchElementException & exc) { - (void) exc; // avoid warnings - OSL_ENSURE( - 0, OUStringToOString( - exc.Message, RTL_TEXTENCODING_UTF8 ).getStr() ); - } - } - } - } + css::uno::Reference< css::registry::XImplementationRegistration >( + context->getServiceManager()->createInstanceWithContext( + rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM( + "com.sun.star.registry.ImplementationRegistration")), + context), + css::uno::UNO_QUERY_THROW)->revokeImplementation(url, getRDB()); + if (data.javaTypeLibrary) { + that->removeFromUnoRc(RCITEM_JAR_TYPELIB, url, xCmdEnv); + } + if (remoteContext) { + that->releaseObject(url); } - - const Reference<registry::XSimpleRegistry> xServicesRDB( getRDB() ); - const Reference<registry::XImplementationRegistration> xImplReg( - xContext->getServiceManager()->createInstanceWithContext( - OUSTR("com.sun.star.registry.ImplementationRegistration"), - xContext ), UNO_QUERY_THROW ); - xImplReg->revokeImplementation( url, xServicesRDB ); - - if (isJavaTypelib) - that->removeFromUnoRc( java, url, xCmdEnv ); - - if (bRemoteContext) - that->releaseObject( url ); - m_registered = REG_NOT_REGISTERED; - getMyBackend()->deleteDataFromDb(url); + getMyBackend()->revokeEntryFromDb(url); } } -//############################################################################## BackendImpl::TypelibraryPackageImpl::TypelibraryPackageImpl( ::rtl::Reference<PackageRegistryBackend> const & myBackend, OUString const & url, OUString const & name, @@ -1481,7 +1688,8 @@ BackendImpl::TypelibraryPackageImpl::isRegistered_( return beans::Optional< beans::Ambiguous<sal_Bool> >( true /* IsPresent */, beans::Ambiguous<sal_Bool>( - that->hasInUnoRc( m_jarFile, getURL() ), + that->hasInUnoRc( + m_jarFile ? RCITEM_JAR_TYPELIB : RCITEM_RDB_TYPELIB, getURL() ), false /* IsAmbiguous */ ) ); } @@ -1547,11 +1755,13 @@ void BackendImpl::TypelibraryPackageImpl::processPackage_( } } - that->addToUnoRc( m_jarFile, url, xCmdEnv ); + that->addToUnoRc( m_jarFile ? RCITEM_JAR_TYPELIB : RCITEM_RDB_TYPELIB, + url, xCmdEnv ); } else // revokePackage() { - that->removeFromUnoRc( m_jarFile, url, xCmdEnv ); + that->removeFromUnoRc( + m_jarFile ? RCITEM_JAR_TYPELIB : RCITEM_RDB_TYPELIB, url, xCmdEnv ); // revoking types at runtime, possible, sensible? if (!m_xTDprov.is()) @@ -1571,6 +1781,201 @@ void BackendImpl::TypelibraryPackageImpl::processPackage_( } } +BackendImpl::OtherPlatformPackageImpl::OtherPlatformPackageImpl( + ::rtl::Reference<PackageRegistryBackend> const & myBackend, + OUString const & url, OUString const & name, + Reference<deployment::XPackageTypeInfo> const & xPackageType, + bool bRemoved, OUString const & identifier, OUString const& rPlatform) + : Package(myBackend, url, name, name, xPackageType, bRemoved, identifier) + , m_aPlatform(rPlatform) +{ + OSL_PRECOND(bRemoved, "this class can only be used for removing packages!"); +} + +BackendImpl * +BackendImpl::OtherPlatformPackageImpl::getMyBackend() const +{ + BackendImpl * pBackend = static_cast<BackendImpl *>(m_myBackend.get()); + if (NULL == pBackend) + { + //Throws a DisposedException + check(); + //We should never get here... + throw RuntimeException( + OUSTR("Failed to get the BackendImpl"), + static_cast<OWeakObject*>(const_cast<OtherPlatformPackageImpl*>(this))); + } + return pBackend; +} + +Reference<registry::XSimpleRegistry> const +BackendImpl::OtherPlatformPackageImpl::impl_openRDB() const +{ + OUString const aRDB(m_aPlatform + OUString(RTL_CONSTASCII_USTRINGPARAM(".rdb"))); + OUString const aRDBPath(makeURL(getMyBackend()->getCachePath(), aRDB)); + + Reference<registry::XSimpleRegistry> xRegistry; + + try + { + xRegistry.set( + impl_createInstance( + OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.registry.SimpleRegistry"))), + UNO_QUERY) + ; + if (xRegistry.is()) + xRegistry->open(expandUnoRcUrl(aRDBPath), false, false); + } + catch (registry::InvalidRegistryException const&) + { + // If the registry does not exist, we do not need to bother at all + xRegistry.set(0); + } + + OSL_POSTCOND(xRegistry.is(), "could not create registry for the package's platform"); + return xRegistry; +} + +Reference<XInterface> const +BackendImpl::OtherPlatformPackageImpl::impl_createInstance(OUString const& rService) +const +{ + Reference<XComponentContext> const xContext(getMyBackend()->getComponentContext()); + OSL_ASSERT(xContext.is()); + Reference<XInterface> xService; + if (xContext.is()) + xService.set(xContext->getServiceManager()->createInstanceWithContext(rService, xContext)); + return xService; +} + +beans::Optional<beans::Ambiguous<sal_Bool> > +BackendImpl::OtherPlatformPackageImpl::isRegistered_( + ::osl::ResettableMutexGuard& /* guard */, + ::rtl::Reference<AbortChannel> const& /* abortChannel */, + Reference<XCommandEnvironment> const& /* xCmdEnv */ ) +{ + return beans::Optional<beans::Ambiguous<sal_Bool> >(sal_True, + beans::Ambiguous<sal_Bool>(sal_True, sal_False)); +} + +void +BackendImpl::OtherPlatformPackageImpl::processPackage_( + ::osl::ResettableMutexGuard& /* guard */, + bool bRegisterPackage, + bool /* bStartup */, + ::rtl::Reference<AbortChannel> const& /* abortChannel */, + Reference<XCommandEnvironment> const& /* xCmdEnv */) +{ + OSL_PRECOND(!bRegisterPackage, "this class can only be used for removing packages!"); + (void) bRegisterPackage; + + OUString const aURL(getURL()); + + Reference<registry::XSimpleRegistry> const xServicesRDB(impl_openRDB()); + Reference<registry::XImplementationRegistration> const xImplReg( + impl_createInstance( + OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.registry.ImplementationRegistration"))), + UNO_QUERY) + ; + if (xImplReg.is() && xServicesRDB.is()) + xImplReg->revokeImplementation(aURL, xServicesRDB); + if (xServicesRDB.is()) + xServicesRDB->close(); + + getMyBackend()->revokeEntryFromDb(aURL); +} + +BackendImpl * BackendImpl::ComponentsPackageImpl::getMyBackend() const +{ + BackendImpl * pBackend = static_cast<BackendImpl *>(m_myBackend.get()); + if (NULL == pBackend) + { + //Throws a DisposedException + check(); + //We should never get here... + throw RuntimeException( + OUSTR("Failed to get the BackendImpl"), + static_cast<OWeakObject*>(const_cast<ComponentsPackageImpl *>(this))); + } + return pBackend; +} + +beans::Optional< beans::Ambiguous<sal_Bool> > +BackendImpl::ComponentsPackageImpl::isRegistered_( + ::osl::ResettableMutexGuard &, + ::rtl::Reference<AbortChannel> const &, + Reference<XCommandEnvironment> const & ) +{ + return beans::Optional< beans::Ambiguous<sal_Bool> >( + true, + beans::Ambiguous<sal_Bool>( + getMyBackend()->hasInUnoRc(RCITEM_COMPONENTS, getURL()), false)); +} + +void BackendImpl::ComponentsPackageImpl::processPackage_( + ::osl::ResettableMutexGuard &, + bool doRegisterPackage, + bool startup, + ::rtl::Reference<AbortChannel> const & abortChannel, + Reference<XCommandEnvironment> const & xCmdEnv ) +{ + BackendImpl * that = getMyBackend(); + rtl::OUString url(getURL()); + if (doRegisterPackage) { + ComponentBackendDb::Data data; + data.javaTypeLibrary = false; + std::vector< css::uno::Reference< css::uno::XInterface > > factories; + css::uno::Reference< css::uno::XComponentContext > context( + that->getObject(url), css::uno::UNO_QUERY); + if (!context.is()) { + context.set( + that->insertObject( + url, + raise_uno_process( + that->getComponentContext(), abortChannel)), + css::uno::UNO_QUERY_THROW); + } + css::uno::Reference< css::registry::XSimpleRegistry > registry( + css::uno::Reference< css::lang::XMultiComponentFactory >( + that->getComponentContext()->getServiceManager(), + css::uno::UNO_SET_THROW)->createInstanceWithContext( + rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM( + "com.sun.star.registry.SimpleRegistry")), + that->getComponentContext()), + css::uno::UNO_QUERY_THROW); + registry->open(expandUnoRcUrl(url), true, false); + getMyBackend()->extractComponentData( + context, + that->openRegistryKey( + registry->getRootKey(), + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("IMPLEMENTATIONS"))), + &data, &factories, 0, 0); + registry->close(); + if (!startup) { + that->componentLiveInsertion(data, factories); + } + that->addDataToDb(url, data); + that->addToUnoRc(RCITEM_COMPONENTS, url, xCmdEnv); + } else { // revoke + that->removeFromUnoRc(RCITEM_COMPONENTS, url, xCmdEnv); + if (!startup) { + that->componentLiveRemoval(that->readDataFromDb(url)); + } + that->releaseObject(url); + that->revokeEntryFromDb(url); + } +} + +BackendImpl::ComponentsPackageImpl::ComponentsPackageImpl( + ::rtl::Reference<PackageRegistryBackend> const & myBackend, + OUString const & url, OUString const & name, + Reference<deployment::XPackageTypeInfo> const & xPackageType, + bool bRemoved, OUString const & identifier) + : Package( myBackend, url, name, name /* display-name */, + xPackageType, bRemoved, identifier) +{} + } // anon namespace namespace sdecl = comphelper::service_decl; diff --git a/desktop/source/deployment/registry/component/dp_component.hrc b/desktop/source/deployment/registry/component/dp_component.hrc index 5e9993ab12..82bb55068d 100644..100755 --- a/desktop/source/deployment/registry/component/dp_component.hrc +++ b/desktop/source/deployment/registry/component/dp_component.hrc @@ -33,6 +33,7 @@ #define RID_STR_DYN_COMPONENT (RID_DEPLOYMENT_COMPONENT_START+10) #define RID_STR_JAVA_COMPONENT (RID_DEPLOYMENT_COMPONENT_START+11) #define RID_STR_PYTHON_COMPONENT (RID_DEPLOYMENT_COMPONENT_START+12) +#define RID_STR_COMPONENTS (RID_DEPLOYMENT_COMPONENT_START+13) #define RID_STR_RDB_TYPELIB (RID_DEPLOYMENT_COMPONENT_START+20) #define RID_STR_JAVA_TYPELIB (RID_DEPLOYMENT_COMPONENT_START+21) diff --git a/desktop/source/deployment/registry/component/dp_component.src b/desktop/source/deployment/registry/component/dp_component.src index 52dfa568eb..1b2a7c3641 100644 --- a/desktop/source/deployment/registry/component/dp_component.src +++ b/desktop/source/deployment/registry/component/dp_component.src @@ -42,6 +42,11 @@ String RID_STR_PYTHON_COMPONENT Text [ en-US ] = "UNO Python Component"; }; +String RID_STR_COMPONENTS +{ + Text [ en-US ] = "UNO Components"; +}; + String RID_STR_RDB_TYPELIB { Text [ en-US ] = "UNO RDB Type Library"; diff --git a/desktop/source/deployment/registry/component/makefile.mk b/desktop/source/deployment/registry/component/makefile.mk index b7ee5c203c..b7ee5c203c 100644..100755 --- a/desktop/source/deployment/registry/component/makefile.mk +++ b/desktop/source/deployment/registry/component/makefile.mk diff --git a/desktop/source/deployment/registry/configuration/dp_configuration.cxx b/desktop/source/deployment/registry/configuration/dp_configuration.cxx index 2688a277f9..d3e8f349fd 100644 --- a/desktop/source/deployment/registry/configuration/dp_configuration.cxx +++ b/desktop/source/deployment/registry/configuration/dp_configuration.cxx @@ -132,16 +132,21 @@ class BackendImpl : public ::dp_registry::backend::PackageRegistryBackend void configmgrini_verify_init( Reference<XCommandEnvironment> const & xCmdEnv ); void configmgrini_flush( Reference<XCommandEnvironment> const & xCmdEnv ); - - bool addToConfigmgrIni( bool isSchema, OUString const & url, + + /* The paramter isURL is false in the case of adding the conf:ini-entry + value from the backend db. This entry already contains the path as it + is used in the configmgr.ini. + */ + bool addToConfigmgrIni( bool isSchema, bool isURL, OUString const & url, Reference<XCommandEnvironment> const & xCmdEnv ); bool removeFromConfigmgrIni( bool isSchema, OUString const & url, Reference<XCommandEnvironment> const & xCmdEnv ); void addDataToDb(OUString const & url, ConfigurationBackendDb::Data const & data); ::boost::optional<ConfigurationBackendDb::Data> readDataFromDb(OUString const & url); - OUString deleteDataFromDb(OUString const & url); - ::std::list<OUString> getAllIniEntries(); + void revokeEntryFromDb(OUString const & url); + bool hasActiveEntry(OUString const & url); + bool activateEntry(OUString const & url); public: BackendImpl( Sequence<Any> const & args, @@ -150,6 +155,9 @@ public: // XPackageRegistry virtual Sequence< Reference<deployment::XPackageTypeInfo> > SAL_CALL getSupportedPackageTypes() throw (RuntimeException); + virtual void SAL_CALL packageRemoved(OUString const & url, OUString const & mediaType) + throw (deployment::DeploymentException, + uno::RuntimeException); using PackageRegistryBackend::disposing; }; @@ -185,13 +193,13 @@ BackendImpl::BackendImpl( "vnd.sun.star.configuration-data"), OUSTR("*.xcu"), getResourceString(RID_STR_CONF_DATA), - RID_IMG_CONF_XML, RID_IMG_CONF_XML_HC ) ), + RID_IMG_CONF_XML ) ), m_xConfSchemaTypeInfo( new Package::TypeInfo( OUSTR("application/" "vnd.sun.star.configuration-schema"), OUSTR("*.xcs"), getResourceString(RID_STR_CONF_SCHEMA), - RID_IMG_CONF_XML, RID_IMG_CONF_XML_HC ) ), + RID_IMG_CONF_XML ) ), m_typeInfos( 2 ) { m_typeInfos[ 0 ] = m_xConfDataTypeInfo; @@ -241,26 +249,24 @@ void BackendImpl::addDataToDb( return data; } -OUString BackendImpl::deleteDataFromDb(OUString const & url) +void BackendImpl::revokeEntryFromDb(OUString const & url) { - OUString url2(url); - if (m_backendDb.get()) { - boost::optional< ConfigurationBackendDb::Data > data( - m_backendDb->getEntry(url)); - if (data) { - url2 = expandUnoRcTerm(data->iniEntry); - } - m_backendDb->removeEntry(url); - } - return url2; + if (m_backendDb.get()) + m_backendDb->revokeEntry(url); } -::std::list<OUString> BackendImpl::getAllIniEntries() +bool BackendImpl::hasActiveEntry(OUString const & url) { if (m_backendDb.get()) - return m_backendDb->getAllIniEntries(); - else - return ::std::list<OUString>(); + return m_backendDb->hasActiveEntry(url); + return false; +} + +bool BackendImpl::activateEntry(OUString const & url) +{ + if (m_backendDb.get()) + return m_backendDb->activateEntry(url); + return false; } @@ -272,6 +278,13 @@ BackendImpl::getSupportedPackageTypes() throw (RuntimeException) { return m_typeInfos; } +void BackendImpl::packageRemoved(OUString const & url, OUString const & /*mediaType*/) + throw (deployment::DeploymentException, + uno::RuntimeException) +{ + if (m_backendDb.get()) + m_backendDb->removeEntry(url); +} // PackageRegistryBackend //______________________________________________________________________________ @@ -342,7 +355,6 @@ Reference<deployment::XPackage> BackendImpl::bindPackage_( static_cast<sal_Int16>(-1) ); } -//############################################################################## //______________________________________________________________________________ void BackendImpl::configmgrini_verify_init( @@ -458,10 +470,10 @@ void BackendImpl::configmgrini_flush( } //______________________________________________________________________________ -bool BackendImpl::addToConfigmgrIni( bool isSchema, OUString const & url_, +bool BackendImpl::addToConfigmgrIni( bool isSchema, bool isURL, OUString const & url_, Reference<XCommandEnvironment> const & xCmdEnv ) { - const OUString rcterm( dp_misc::makeRcTerm(url_) ); + const OUString rcterm( isURL ? dp_misc::makeRcTerm(url_) : url_ ); const ::osl::MutexGuard guard( getMutex() ); configmgrini_verify_init( xCmdEnv ); t_stringlist & rSet = getFiles(isSchema); @@ -506,10 +518,10 @@ bool BackendImpl::removeFromConfigmgrIni( return true; } -//############################################################################## // Package //______________________________________________________________________________ + BackendImpl * BackendImpl::PackageImpl::getMyBackend() const { BackendImpl * pBackend = static_cast<BackendImpl *>(m_myBackend.get()); @@ -535,7 +547,7 @@ BackendImpl::PackageImpl::isRegistered_( const rtl::OUString url(getURL()); bool bReg = false; - if (that->readDataFromDb(getURL())) + if (that->hasActiveEntry(getURL())) bReg = true; if (!bReg) //fallback for user extension registered in berkeley DB @@ -678,38 +690,48 @@ void BackendImpl::PackageImpl::processPackage_( if (doRegisterPackage) { - ConfigurationBackendDb::Data data; - if (!m_isSchema) + if (getMyBackend()->activateEntry(getURL())) { - const OUString sModFolder = that->createFolder(OUString(), xCmdEnv); - bool out_replaced = false; - url = replaceOrigin(url, sModFolder, xCmdEnv, out_replaced); - if (out_replaced) - data.dataUrl = sModFolder; - else - deleteTempFolder(sModFolder); + ::boost::optional<ConfigurationBackendDb::Data> data = that->readDataFromDb(url); + OSL_ASSERT(data); + that->addToConfigmgrIni( m_isSchema, false, data->iniEntry, xCmdEnv ); } - //No need for live-deployment for bundled extension, because OOo - //restarts after installation - if (that->m_eContext != CONTEXT_BUNDLED - && !startup) + else { - if (m_isSchema) + ConfigurationBackendDb::Data data; + if (!m_isSchema) { - com::sun::star::configuration::Update::get( - that->m_xComponentContext)->insertExtensionXcsFile( - that->m_eContext == CONTEXT_SHARED, expandUnoRcUrl(url)); + const OUString sModFolder = that->createFolder(OUString(), xCmdEnv); + bool out_replaced = false; + url = replaceOrigin(url, sModFolder, xCmdEnv, out_replaced); + if (out_replaced) + data.dataUrl = sModFolder; + else + deleteTempFolder(sModFolder); } - else + //No need for live-deployment for bundled extension, because OOo + //restarts after installation + if (that->m_eContext != CONTEXT_BUNDLED + && that->m_eContext != CONTEXT_BUNDLED_PREREG + && !startup) { - com::sun::star::configuration::Update::get( - that->m_xComponentContext)->insertExtensionXcuFile( - that->m_eContext == CONTEXT_SHARED, expandUnoRcUrl(url)); + if (m_isSchema) + { + com::sun::star::configuration::Update::get( + that->m_xComponentContext)->insertExtensionXcsFile( + that->m_eContext == CONTEXT_SHARED, expandUnoRcUrl(url)); + } + else + { + com::sun::star::configuration::Update::get( + that->m_xComponentContext)->insertExtensionXcuFile( + that->m_eContext == CONTEXT_SHARED, expandUnoRcUrl(url)); + } } + that->addToConfigmgrIni( m_isSchema, true, url, xCmdEnv ); + data.iniEntry = dp_misc::makeRcTerm(url); + that->addDataToDb(getURL(), data); } - that->addToConfigmgrIni( m_isSchema, url, xCmdEnv ); - data.iniEntry = dp_misc::makeRcTerm(url); - that->addDataToDb(getURL(), data); } else // revoke { @@ -742,7 +764,7 @@ void BackendImpl::PackageImpl::processPackage_( else deleteTempFolder(sModFolder); } - that->addToConfigmgrIni(schema, url_replaced, xCmdEnv); + that->addToConfigmgrIni(schema, true, url_replaced, xCmdEnv); data.iniEntry = dp_misc::makeRcTerm(url_replaced); that->addDataToDb(url2, data); } @@ -760,12 +782,17 @@ void BackendImpl::PackageImpl::processPackage_( OSL_ASSERT(0); } } - url = that->deleteDataFromDb(url); - if (!m_isSchema) { + + ::boost::optional<ConfigurationBackendDb::Data> data = that->readDataFromDb(url); + //If an xcu file was life deployed then always a data entry is written. + //If the xcu file was already in the configmr.ini then there is also + //a data entry + if (!m_isSchema && data) + { com::sun::star::configuration::Update::get( - that->m_xComponentContext)->removeExtensionXcuFile( - expandUnoRcUrl(url)); + that->m_xComponentContext)->removeExtensionXcuFile(expandUnoRcTerm(data->iniEntry)); } + that->revokeEntryFromDb(url); } } diff --git a/desktop/source/deployment/registry/configuration/dp_configuration.hrc b/desktop/source/deployment/registry/configuration/dp_configuration.hrc index 479f50e20b..479f50e20b 100644..100755 --- a/desktop/source/deployment/registry/configuration/dp_configuration.hrc +++ b/desktop/source/deployment/registry/configuration/dp_configuration.hrc diff --git a/desktop/source/deployment/registry/configuration/dp_configurationbackenddb.cxx b/desktop/source/deployment/registry/configuration/dp_configurationbackenddb.cxx index a0cafe0331..ecc09cb669 100644 --- a/desktop/source/deployment/registry/configuration/dp_configurationbackenddb.cxx +++ b/desktop/source/deployment/registry/configuration/dp_configurationbackenddb.cxx @@ -84,12 +84,15 @@ OUString ConfigurationBackendDb::getKeyElementName() void ConfigurationBackendDb::addEntry(::rtl::OUString const & url, Data const & data) { try{ - Reference<css::xml::dom::XNode> helpNode - = writeKeyElement(url); - - writeSimpleElement(OUSTR("data-url"), data.dataUrl, helpNode); - writeSimpleElement(OUSTR("ini-entry"), data.iniEntry, helpNode); - save(); + if (!activateEntry(url)) + { + Reference<css::xml::dom::XNode> helpNode + = writeKeyElement(url); + + writeSimpleElement(OUSTR("data-url"), data.dataUrl, helpNode); + writeSimpleElement(OUSTR("ini-entry"), data.iniEntry, helpNode); + save(); + } } catch (css::deployment::DeploymentException& ) { @@ -171,13 +174,6 @@ ConfigurationBackendDb::getEntry(::rtl::OUString const & url) } } -::std::list<OUString> ConfigurationBackendDb::getAllIniEntries() -{ - return getOneChildFromAllEntries(OUSTR("ini-entry")); -} - - - } // namespace configuration } // namespace backend } // namespace dp_registry diff --git a/desktop/source/deployment/registry/configuration/dp_configurationbackenddb.hxx b/desktop/source/deployment/registry/configuration/dp_configurationbackenddb.hxx index 7cb02edf55..a652184aec 100644 --- a/desktop/source/deployment/registry/configuration/dp_configurationbackenddb.hxx +++ b/desktop/source/deployment/registry/configuration/dp_configurationbackenddb.hxx @@ -82,7 +82,6 @@ public: ::boost::optional<Data> getEntry(::rtl::OUString const & url); ::std::list< ::rtl::OUString> getAllDataUrls(); - ::std::list< ::rtl::OUString> getAllIniEntries(); }; diff --git a/desktop/source/deployment/registry/configuration/makefile.mk b/desktop/source/deployment/registry/configuration/makefile.mk index 9bcbd50d42..9bcbd50d42 100644..100755 --- a/desktop/source/deployment/registry/configuration/makefile.mk +++ b/desktop/source/deployment/registry/configuration/makefile.mk diff --git a/desktop/source/deployment/registry/dp_backend.cxx b/desktop/source/deployment/registry/dp_backend.cxx index 957c55ef93..67141e7755 100644 --- a/desktop/source/deployment/registry/dp_backend.cxx +++ b/desktop/source/deployment/registry/dp_backend.cxx @@ -40,11 +40,13 @@ #include "ucbhelper/content.hxx" #include "com/sun/star/lang/WrappedTargetRuntimeException.hpp" #include "com/sun/star/deployment/InvalidRemovedParameterException.hpp" +#include "com/sun/star/deployment/thePackageManagerFactory.hpp" #include "com/sun/star/ucb/InteractiveAugmentedIOException.hpp" #include "com/sun/star/ucb/IOErrorCode.hpp" #include "com/sun/star/beans/StringPair.hpp" #include "com/sun/star/sdbc/XResultSet.hpp" #include "com/sun/star/sdbc/XRow.hpp" +#include "unotools/tempfile.hxx" using namespace ::dp_misc; @@ -100,6 +102,8 @@ PackageRegistryBackend::PackageRegistryBackend( m_eContext = CONTEXT_BUNDLED; else if (m_context.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("tmp") )) m_eContext = CONTEXT_TMP; + else if (m_context.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("bundled_prereg") )) + m_eContext = CONTEXT_BUNDLED_PREREG; else if (m_context.matchIgnoreAsciiCaseAsciiL( RTL_CONSTASCII_STRINGPARAM("vnd.sun.star.tdoc:/") )) m_eContext = CONTEXT_DOCUMENT; @@ -122,7 +126,7 @@ void PackageRegistryBackend::check() void PackageRegistryBackend::disposing() { try { - for ( t_string2ref::const_iterator i = m_bound.begin(); i != m_bound.end(); i++) + for ( t_string2ref::const_iterator i = m_bound.begin(); i != m_bound.end(); ++i) i->second->removeEventListener(this); m_bound.clear(); m_xComponentContext.clear(); @@ -223,42 +227,43 @@ OUString PackageRegistryBackend::createFolder( OUString const & relUrl, Reference<ucb::XCommandEnvironment> const & xCmdEnv) { - OUString sDataFolder = makeURL(getCachePath(), relUrl); + const OUString sDataFolder = makeURL(getCachePath(), relUrl); //make sure the folder exist ucbhelper::Content dataContent; ::dp_misc::create_folder(&dataContent, sDataFolder, xCmdEnv); - OUString sDataFolderURL = dp_misc::expandUnoRcUrl(sDataFolder); - - OUString tempEntry; - if (::osl::File::createTempFile( - &sDataFolderURL, 0, &tempEntry ) != ::osl::File::E_None) - throw RuntimeException( - OUSTR("::osl::File::createTempFile() failed!"), 0 ); - tempEntry = tempEntry.copy( tempEntry.lastIndexOf( '/' ) + 1 ); - OUString destFolder= makeURL(sDataFolder, tempEntry) + OUSTR("_"); - ::ucbhelper::Content destFolderContent; - dp_misc::create_folder( &destFolderContent, destFolder, xCmdEnv ); - - return destFolder; + const OUString sDataFolderURL = dp_misc::expandUnoRcUrl(sDataFolder); + const String baseDir(sDataFolder); + const ::utl::TempFile aTemp(&baseDir, sal_True); + const OUString url = aTemp.GetURL(); + return sDataFolder + url.copy(url.lastIndexOf('/')); } +//folderURL can have the extension .tmp or .tmp_ +//Before OOo 3.4 the created a tmp file with osl_createTempFile and +//then created a Folder with a same name and a trailing '_' +//If the folderURL has no '_' then there is no corresponding tmp file. void PackageRegistryBackend::deleteTempFolder( OUString const & folderUrl) { - OSL_ASSERT(folderUrl.getLength() - && folderUrl[folderUrl.getLength() - 1] == '_'); - if (folderUrl.getLength() - && folderUrl[folderUrl.getLength() - 1] == '_') + if (folderUrl.getLength()) { - const OUString tempFile = folderUrl.copy(0, folderUrl.getLength() - 1); erase_path( folderUrl, Reference<XCommandEnvironment>(), false /* no throw: ignore errors */ ); - erase_path( tempFile, Reference<XCommandEnvironment>(), - false /* no throw: ignore errors */ ); + + if (folderUrl[folderUrl.getLength() - 1] == '_') + { + const OUString tempFile = folderUrl.copy(0, folderUrl.getLength() - 1); + erase_path( tempFile, Reference<XCommandEnvironment>(), + false /* no throw: ignore errors */ ); + } } } +//usedFolders can contain folder names which have the extension .tmp or .tmp_ +//Before OOo 3.4 we created a tmp file with osl_createTempFile and +//then created a Folder with a same name and a trailing '_' +//If the folderURL has no '_' then there is no corresponding tmp file. void PackageRegistryBackend::deleteUnusedFolders( OUString const & relUrl, ::std::list< OUString> const & usedFolders) @@ -271,11 +276,11 @@ void PackageRegistryBackend::deleteUnusedFolders( Reference<sdbc::XResultSet> xResultSet( tempFolder.createCursor( Sequence<OUString>( &StrTitle::get(), 1 ), - ::ucbhelper::INCLUDE_DOCUMENTS_ONLY ) ); + ::ucbhelper::INCLUDE_FOLDERS_ONLY ) ); // get all temp directories: ::std::vector<OUString> tempEntries; - char tmp[] = ".tmp"; + const char tmp[] = ".tmp"; while (xResultSet->next()) { @@ -284,21 +289,17 @@ void PackageRegistryBackend::deleteUnusedFolders( xResultSet, UNO_QUERY_THROW )->getString( 1 /* Title */ ) ); - if (title.endsWithAsciiL(tmp, sizeof(tmp) - 1)) + if (title.endsWithAsciiL(RTL_CONSTASCII_STRINGPARAM(tmp))) tempEntries.push_back( makeURLAppendSysPathSegment(sDataFolder, title)); } for ( ::std::size_t pos = 0; pos < tempEntries.size(); ++pos ) { - //usedFolders contains the urls to the folders which have - //a trailing underscore - const OUString tempFolderName = tempEntries[ pos ] + OUSTR("_"); - - if (::std::find( usedFolders.begin(), usedFolders.end(), tempFolderName ) == + if (::std::find( usedFolders.begin(), usedFolders.end(), tempEntries[pos] ) == usedFolders.end()) { - deleteTempFolder(tempFolderName); + deleteTempFolder(tempEntries[pos]); } } } @@ -312,7 +313,6 @@ void PackageRegistryBackend::deleteUnusedFolders( } -//############################################################################## //______________________________________________________________________________ Package::~Package() @@ -524,6 +524,15 @@ OUString Package::getDescription() throw ( } //______________________________________________________________________________ +OUString Package::getLicenseText() throw ( + deployment::ExtensionRemovedException,RuntimeException) +{ + if (m_bRemoved) + throw deployment::ExtensionRemovedException(); + return OUString(); +} + +//______________________________________________________________________________ Sequence<OUString> Package::getUpdateInformationURLs() throw ( deployment::ExtensionRemovedException, RuntimeException) { @@ -627,7 +636,7 @@ beans::Optional< beans::Ambiguous<sal_Bool> > Package::isRegistered( catch (Exception &) { Any exc( ::cppu::getCaughtException() ); throw deployment::DeploymentException( - OUSTR("unexpected exception occured!"), + OUSTR("unexpected exception occurred!"), static_cast<OWeakObject *>(this), exc ); } } @@ -669,7 +678,7 @@ void Package::processPackage_impl( } } catch (RuntimeException &) { - OSL_ENSURE( 0, "### unexpected RuntimeException!" ); + OSL_FAIL( "### unexpected RuntimeException!" ); throw; } catch (CommandFailedException &) { @@ -762,7 +771,6 @@ sal_Bool Package::isRemoved() return m_bRemoved; } -//############################################################################## //______________________________________________________________________________ Package::TypeInfo::~TypeInfo() @@ -797,12 +805,19 @@ OUString Package::TypeInfo::getFileFilter() throw (RuntimeException) } //______________________________________________________________________________ -Any Package::TypeInfo::getIcon( sal_Bool highContrast, sal_Bool smallIcon ) +/************************** + * Get Icon + * + * @param highContrast NOTE: disabled the returning of high contrast icons. + * This bool is a noop now. + * @param smallIcon Return the small version of the icon + */ +Any Package::TypeInfo::getIcon( sal_Bool /*highContrast*/, sal_Bool smallIcon ) throw (RuntimeException) { if (! smallIcon) return Any(); - const sal_uInt16 nIconId = (highContrast ? m_smallIcon_HC : m_smallIcon); + const sal_uInt16 nIconId = m_smallIcon; return Any( &nIconId, getCppuType( static_cast<sal_uInt16 const *>(0) ) ); } diff --git a/desktop/source/deployment/registry/dp_backenddb.cxx b/desktop/source/deployment/registry/dp_backenddb.cxx index 730e848c50..4a84ee97c6 100644 --- a/desktop/source/deployment/registry/dp_backenddb.cxx +++ b/desktop/source/deployment/registry/dp_backenddb.cxx @@ -191,6 +191,74 @@ void BackendDb::removeEntry(::rtl::OUString const & url) removeElement(sExpression.makeStringAndClear()); } +void BackendDb::revokeEntry(::rtl::OUString const & url) +{ + try + { + Reference<css::xml::dom::XElement> entry = Reference<css::xml::dom::XElement>(getKeyElement(url), UNO_QUERY); + if (entry.is()) + { + entry->setAttribute(OUSTR("revoked"), OUSTR("true")); + save(); + } + } + catch(css::uno::Exception &) + { + Any exc( ::cppu::getCaughtException() ); + throw css::deployment::DeploymentException( + OUSTR("Extension Manager: failed to revoke data entry in backend db: ") + + m_urlDb, 0, exc); + } +} + +bool BackendDb::activateEntry(::rtl::OUString const & url) +{ + try + { + bool ret = false; + Reference<css::xml::dom::XElement> entry = Reference<css::xml::dom::XElement>(getKeyElement(url), UNO_QUERY); + if (entry.is()) + { + //no attribute "active" means it is active, that is, registered. + entry->removeAttribute(OUSTR("revoked")); + save(); + ret = true; + } + return ret; + } + catch(css::uno::Exception &) + { + Any exc( ::cppu::getCaughtException() ); + throw css::deployment::DeploymentException( + OUSTR("Extension Manager: failed to revoke data entry in backend db: ") + + m_urlDb, 0, exc); + } +} + +bool BackendDb::hasActiveEntry(::rtl::OUString const & url) +{ + try + { + bool ret = false; + Reference<css::xml::dom::XElement> entry = Reference<css::xml::dom::XElement>(getKeyElement(url), UNO_QUERY); + if (entry.is()) + { + OUString sActive = entry->getAttribute(OUSTR("revoked")); + if (!sActive.equals(OUSTR("true"))) + ret = true; + } + return ret; + + } + catch(css::uno::Exception &) + { + Any exc( ::cppu::getCaughtException() ); + throw css::deployment::DeploymentException( + OUSTR("Extension Manager: failed to determine an active entry in backend db: ") + + m_urlDb, 0, exc); + } +} + Reference<css::xml::dom::XNode> BackendDb::getKeyElement( ::rtl::OUString const & url) { @@ -569,44 +637,43 @@ OUString BackendDb::readSimpleElement( } - -//================================================================================ RegisteredDb::RegisteredDb( Reference<XComponentContext> const & xContext, ::rtl::OUString const & url):BackendDb(xContext, url) { - } void RegisteredDb::addEntry(::rtl::OUString const & url) { try{ - - const OUString sNameSpace = getDbNSName(); - const OUString sPrefix = getNSPrefix(); - const OUString sEntry = getKeyElementName(); - - Reference<css::xml::dom::XDocument> doc = getDocument(); - Reference<css::xml::dom::XNode> root = doc->getFirstChild(); - + if (!activateEntry(url)) + { + const OUString sNameSpace = getDbNSName(); + const OUString sPrefix = getNSPrefix(); + const OUString sEntry = getKeyElementName(); + + Reference<css::xml::dom::XDocument> doc = getDocument(); + Reference<css::xml::dom::XNode> root = doc->getFirstChild(); + #if OSL_DEBUG_LEVEL > 0 - //There must not be yet an entry with the same url - OUString sExpression( - sPrefix + OUSTR(":") + sEntry + OUSTR("[@url = \"") + url + OUSTR("\"]")); - Reference<css::xml::dom::XNode> _extensionNode = - getXPathAPI()->selectSingleNode(root, sExpression); - OSL_ASSERT(! _extensionNode.is()); + //There must not be yet an entry with the same url + OUString sExpression( + sPrefix + OUSTR(":") + sEntry + OUSTR("[@url = \"") + url + OUSTR("\"]")); + Reference<css::xml::dom::XNode> _extensionNode = + getXPathAPI()->selectSingleNode(root, sExpression); + OSL_ASSERT(! _extensionNode.is()); #endif - Reference<css::xml::dom::XElement> helpElement( - doc->createElementNS(sNameSpace, sPrefix + OUSTR(":") + sEntry)); - - helpElement->setAttribute(OUSTR("url"), url); - - Reference<css::xml::dom::XNode> helpNode( - helpElement, UNO_QUERY_THROW); - root->appendChild(helpNode); - - save(); + Reference<css::xml::dom::XElement> helpElement( + doc->createElementNS(sNameSpace, sPrefix + OUSTR(":") + sEntry)); + + helpElement->setAttribute(OUSTR("url"), url); + + Reference<css::xml::dom::XNode> helpNode( + helpElement, UNO_QUERY_THROW); + root->appendChild(helpNode); + + save(); + } } catch(css::uno::Exception &) { @@ -629,14 +696,10 @@ bool RegisteredDb::getEntry(::rtl::OUString const & url) Reference<css::xml::dom::XNode> root = doc->getFirstChild(); Reference<css::xml::xpath::XXPathAPI> xpathApi = getXPathAPI(); - //find the extension element that is to be removed Reference<css::xml::dom::XNode> aNode = xpathApi->selectSingleNode(root, sExpression); - if (!aNode.is()) - { - return false; - } - return true; + + return aNode.is(); } catch(css::uno::Exception &) { @@ -647,7 +710,6 @@ bool RegisteredDb::getEntry(::rtl::OUString const & url) } } - } // namespace backend } // namespace dp_registry diff --git a/desktop/source/deployment/registry/dp_registry.cxx b/desktop/source/deployment/registry/dp_registry.cxx index a90f64b9cb..0b0f91a27f 100644 --- a/desktop/source/deployment/registry/dp_registry.cxx +++ b/desktop/source/deployment/registry/dp_registry.cxx @@ -50,9 +50,9 @@ #include "com/sun/star/util/XUpdatable.hpp" #include "com/sun/star/container/XContentEnumerationAccess.hpp" #include "com/sun/star/deployment/PackageRegistryBackend.hpp" -#include <hash_map> +#include <boost/unordered_map.hpp> #include <set> -#include <hash_set> +#include <boost/unordered_set.hpp> #include <memory> using namespace ::dp_misc; @@ -91,10 +91,10 @@ class PackageRegistryImpl : private MutexHolder, public t_helper return str1.equalsIgnoreAsciiCase( str2 ); } }; - typedef ::std::hash_map< + typedef ::boost::unordered_map< OUString, Reference<deployment::XPackageRegistry>, ci_string_hash, ci_string_equals > t_string2registry; - typedef ::std::hash_map< + typedef ::boost::unordered_map< OUString, OUString, ci_string_hash, ci_string_equals > t_string2string; typedef ::std::set< @@ -136,6 +136,10 @@ public: lang::IllegalArgumentException, RuntimeException); virtual Sequence< Reference<deployment::XPackageTypeInfo> > SAL_CALL getSupportedPackageTypes() throw (RuntimeException); + virtual void SAL_CALL packageRemoved(OUString const & url, OUString const & mediaType) + throw (deployment::DeploymentException, + RuntimeException); + }; //______________________________________________________________________________ @@ -186,11 +190,25 @@ OUString normalizeMediaType( OUString const & mediaType ) //______________________________________________________________________________ +void PackageRegistryImpl::packageRemoved( + ::rtl::OUString const & url, ::rtl::OUString const & mediaType) + throw (css::deployment::DeploymentException, + css::uno::RuntimeException) +{ + const t_string2registry::const_iterator i = + m_mediaType2backend.find(mediaType); + + if (i != m_mediaType2backend.end()) + { + i->second->packageRemoved(url, mediaType); + } +} + void PackageRegistryImpl::insertBackend( Reference<deployment::XPackageRegistry> const & xBackend ) { m_allBackends.insert( xBackend ); - typedef ::std::hash_set<OUString, ::rtl::OUStringHash> t_stringset; + typedef ::boost::unordered_set<OUString, ::rtl::OUStringHash> t_stringset; t_stringset ambiguousFilters; const Sequence< Reference<deployment::XPackageTypeInfo> > packageTypes( @@ -279,7 +297,7 @@ void PackageRegistryImpl::insertBackend( xBackend, UNO_QUERY_THROW )-> getImplementationName() ); buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("\"!") ); - OSL_ENSURE( 0, ::rtl::OUStringToOString( + OSL_FAIL( ::rtl::OUStringToOString( buf.makeStringAndClear(), RTL_TEXTENCODING_UTF8 ) ); } diff --git a/desktop/source/deployment/registry/executable/dp_executable.cxx b/desktop/source/deployment/registry/executable/dp_executable.cxx index eb03c22464..035e21e236 100644 --- a/desktop/source/deployment/registry/executable/dp_executable.cxx +++ b/desktop/source/deployment/registry/executable/dp_executable.cxx @@ -72,6 +72,7 @@ class BackendImpl : public ::dp_registry::backend::PackageRegistryBackend bool getFileAttributes(sal_uInt64& out_Attributes); bool isUrlTargetInExtension(); + public: inline ExecutablePackageImpl( ::rtl::Reference<PackageRegistryBackend> const & myBackend, @@ -84,7 +85,7 @@ class BackendImpl : public ::dp_registry::backend::PackageRegistryBackend }; friend class ExecutablePackageImpl; - typedef ::std::hash_map< OUString, Reference<XInterface>, + typedef ::boost::unordered_map< OUString, Reference<XInterface>, ::rtl::OUStringHash > t_string2object; // PackageRegistryBackend @@ -93,8 +94,8 @@ class BackendImpl : public ::dp_registry::backend::PackageRegistryBackend OUString const & identifier, Reference<XCommandEnvironment> const & xCmdEnv ); void addDataToDb(OUString const & url); - bool isRegisteredInDb(OUString const & url); - void deleteDataFromDb(OUString const & url); + bool hasActiveEntry(OUString const & url); + void revokeEntryFromDb(OUString const & url); Reference<deployment::XPackageTypeInfo> m_xExecutableTypeInfo; std::auto_ptr<ExecutableBackendDb> m_backendDb; @@ -105,6 +106,9 @@ public: // XPackageRegistry virtual Sequence< Reference<deployment::XPackageTypeInfo> > SAL_CALL getSupportedPackageTypes() throw (RuntimeException); + virtual void SAL_CALL packageRemoved(OUString const & url, OUString const & mediaType) + throw (deployment::DeploymentException, + uno::RuntimeException); using PackageRegistryBackend::disposing; }; @@ -118,8 +122,7 @@ BackendImpl::BackendImpl( OUSTR("application/vnd.sun.star.executable"), OUSTR(""), OUSTR("Executable"), - RID_IMG_COMPONENT, - RID_IMG_COMPONENT_HC ) ) + RID_IMG_COMPONENT ) ) { if (!transientMode()) { @@ -135,20 +138,20 @@ void BackendImpl::addDataToDb(OUString const & url) m_backendDb->addEntry(url); } -bool BackendImpl::isRegisteredInDb(OUString const & url) +void BackendImpl::revokeEntryFromDb(OUString const & url) { - bool ret = false; if (m_backendDb.get()) - ret = m_backendDb->getEntry(url); - return ret; + m_backendDb->revokeEntry(url); } -void BackendImpl::deleteDataFromDb(OUString const & url) +bool BackendImpl::hasActiveEntry(OUString const & url) { if (m_backendDb.get()) - m_backendDb->removeEntry(url); + return m_backendDb->hasActiveEntry(url); + return false; } + // XPackageRegistry Sequence< Reference<deployment::XPackageTypeInfo> > BackendImpl::getSupportedPackageTypes() throw (RuntimeException) @@ -157,6 +160,14 @@ BackendImpl::getSupportedPackageTypes() throw (RuntimeException) & m_xExecutableTypeInfo, 1); } +void BackendImpl::packageRemoved(OUString const & url, OUString const & /*mediaType*/) + throw (deployment::DeploymentException, + uno::RuntimeException) +{ + if (m_backendDb.get()) + m_backendDb->removeEntry(url); +} + // PackageRegistryBackend Reference<deployment::XPackage> BackendImpl::bindPackage_( OUString const & url, OUString const & mediaType, sal_Bool bRemoved, @@ -193,7 +204,6 @@ Reference<deployment::XPackage> BackendImpl::bindPackage_( return Reference<deployment::XPackage>(); } -//############################################################################## // Package @@ -218,7 +228,7 @@ BackendImpl::ExecutablePackageImpl::isRegistered_( ::rtl::Reference<dp_misc::AbortChannel> const &, Reference<XCommandEnvironment> const & ) { - bool registered = getMyBackend()->isRegisteredInDb(getURL()); + bool registered = getMyBackend()->hasActiveEntry(getURL()); return beans::Optional< beans::Ambiguous<sal_Bool> >( sal_True /* IsPresent */, beans::Ambiguous<sal_Bool>( @@ -249,7 +259,8 @@ void BackendImpl::ExecutablePackageImpl::processPackage_( else if (getMyBackend()->m_context.equals(OUSTR("shared"))) attributes |= (osl_File_Attribute_OwnExe | osl_File_Attribute_GrpExe | osl_File_Attribute_OthExe); - else if (!getMyBackend()->m_context.equals(OUSTR("bundled"))) + else if (!getMyBackend()->m_context.equals(OUSTR("bundled")) + && !getMyBackend()->m_context.equals(OUSTR("bundled_prereg"))) //Bundled extension are required to be in the properly //installed. That is an executable must have the right flags OSL_ASSERT(0); @@ -262,7 +273,7 @@ void BackendImpl::ExecutablePackageImpl::processPackage_( } else { - getMyBackend()->deleteDataFromDb(getURL()); + getMyBackend()->revokeEntryFromDb(getURL()); } } @@ -278,7 +289,8 @@ bool BackendImpl::ExecutablePackageImpl::isUrlTargetInExtension() sExtensionDir = dp_misc::expandUnoRcTerm(OUSTR("$UNO_USER_PACKAGES_CACHE")); else if (getMyBackend()->m_context.equals(OUSTR("shared"))) sExtensionDir = dp_misc::expandUnoRcTerm(OUSTR("$UNO_SHARED_PACKAGES_CACHE")); - else if (getMyBackend()->m_context.equals(OUSTR("bundled"))) + else if (getMyBackend()->m_context.equals(OUSTR("bundled")) + || getMyBackend()->m_context.equals(OUSTR("bundled_prereg"))) sExtensionDir = dp_misc::expandUnoRcTerm(OUSTR("$BUNDLED_EXTENSIONS")); else OSL_ASSERT(0); @@ -313,7 +325,6 @@ bool BackendImpl::ExecutablePackageImpl::getFileAttributes(sal_uInt64& out_Attri return bSuccess; } -//############################################################################## } // anon namespace diff --git a/desktop/source/deployment/registry/executable/makefile.mk b/desktop/source/deployment/registry/executable/makefile.mk index 81b2baa44e..81b2baa44e 100644..100755 --- a/desktop/source/deployment/registry/executable/makefile.mk +++ b/desktop/source/deployment/registry/executable/makefile.mk diff --git a/desktop/source/deployment/registry/help/dp_help.cxx b/desktop/source/deployment/registry/help/dp_help.cxx index 053929c4b1..6fdc9adaad 100644 --- a/desktop/source/deployment/registry/help/dp_help.cxx +++ b/desktop/source/deployment/registry/help/dp_help.cxx @@ -2,7 +2,7 @@ /************************************************************************* * * 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 @@ -41,7 +41,7 @@ #include "svl/inettype.hxx" #include "unotools/pathoptions.hxx" -#include <l10ntools/compilehelp.hxx> +#include <l10ntools/compilehelp.hxx> #include <com/sun/star/ucb/XSimpleFileAccess.hpp> #include <com/sun/star/util/XMacroExpander.hpp> #include <com/sun/star/uri/XUriReferenceFactory.hpp> @@ -67,8 +67,6 @@ class BackendImpl : public ::dp_registry::backend::PackageRegistryBackend { BackendImpl * getMyBackend() const; -// HelpBackendDb::Data m_dbData; - // Package virtual beans::Optional< beans::Ambiguous<sal_Bool> > isRegistered_( ::osl::ResettableMutexGuard & guard, @@ -81,7 +79,7 @@ class BackendImpl : public ::dp_registry::backend::PackageRegistryBackend ::rtl::Reference<AbortChannel> const & abortChannel, Reference<XCommandEnvironment> const & xCmdEnv ); - bool extensionContainsCompiledHelp(); + public: PackageImpl( ::rtl::Reference<PackageRegistryBackend> const & myBackend, @@ -89,6 +87,8 @@ class BackendImpl : public ::dp_registry::backend::PackageRegistryBackend Reference<deployment::XPackageTypeInfo> const & xPackageType, bool bRemoved, OUString const & identifier); + bool extensionContainsCompiledHelp(); + //XPackage virtual css::beans::Optional< ::rtl::OUString > SAL_CALL getRegistrationDataURL() throw (deployment::ExtensionRemovedException, css::uno::RuntimeException); @@ -101,14 +101,16 @@ class BackendImpl : public ::dp_registry::backend::PackageRegistryBackend sal_Bool bRemoved, OUString const & identifier, Reference<XCommandEnvironment> const & xCmdEnv ); - void implProcessHelp( Reference< deployment::XPackage > xPackage, bool doRegisterPackage, - bool compiledHelp, Reference<ucb::XCommandEnvironment> const & xCmdEnv); + void implProcessHelp( PackageImpl * package, bool doRegisterPackage, + Reference<ucb::XCommandEnvironment> const & xCmdEnv); void implCollectXhpFiles( const rtl::OUString& aDir, std::vector< rtl::OUString >& o_rXhpFileVector ); void addDataToDb(OUString const & url, HelpBackendDb::Data const & data); ::boost::optional<HelpBackendDb::Data> readDataFromDb(OUString const & url); - void deleteDataFromDb(OUString const & url); + bool hasActiveEntry(OUString const & url); + void revokeEntryFromDb(OUString const & url); + bool activateEntry(OUString const & url); Reference< ucb::XSimpleFileAccess > getFileAccess( void ); Reference< ucb::XSimpleFileAccess > m_xSFA; @@ -124,6 +126,10 @@ public: // XPackageRegistry virtual Sequence< Reference<deployment::XPackageTypeInfo> > SAL_CALL getSupportedPackageTypes() throw (RuntimeException); + virtual void SAL_CALL packageRemoved(OUString const & url, OUString const & mediaType) + throw (deployment::DeploymentException, + uno::RuntimeException); + }; //______________________________________________________________________________ @@ -135,7 +141,7 @@ BackendImpl::BackendImpl( OUSTR("application/vnd.sun.star.help"), rtl::OUString(), getResourceString(RID_STR_HELP), - RID_IMG_HELP, RID_IMG_HELP_HC ) ), + RID_IMG_HELP ) ), m_typeInfos( 1 ) { m_typeInfos[ 0 ] = m_xHelpTypeInfo; @@ -163,6 +169,14 @@ BackendImpl::getSupportedPackageTypes() throw (RuntimeException) return m_typeInfos; } +void BackendImpl::packageRemoved(OUString const & url, OUString const & /*mediaType*/) + throw (deployment::DeploymentException, + uno::RuntimeException) +{ + if (m_backendDb.get()) + m_backendDb->removeEntry(url); +} + // PackageRegistryBackend //______________________________________________________________________________ Reference<deployment::XPackage> BackendImpl::bindPackage_( @@ -194,7 +208,7 @@ Reference<deployment::XPackage> BackendImpl::bindPackage_( "vnd.sun.star.help")) { return new PackageImpl( - this, url, name, m_xHelpTypeInfo, bRemoved, + this, url, name, m_xHelpTypeInfo, bRemoved, identifier); } } @@ -221,13 +235,27 @@ void BackendImpl::addDataToDb( return data; } -void BackendImpl::deleteDataFromDb(OUString const & url) +bool BackendImpl::hasActiveEntry(OUString const & url) { if (m_backendDb.get()) - m_backendDb->removeEntry(url); + return m_backendDb->hasActiveEntry(url); + return false; } -//############################################################################## +void BackendImpl::revokeEntryFromDb(OUString const & url) +{ + if (m_backendDb.get()) + m_backendDb->revokeEntry(url); +} + +bool BackendImpl::activateEntry(OUString const & url) +{ + if (m_backendDb.get()) + return m_backendDb->activateEntry(url); + return false; +} + + BackendImpl::PackageImpl::PackageImpl( ::rtl::Reference<PackageRegistryBackend> const & myBackend, OUString const & url, OUString const & name, @@ -236,13 +264,6 @@ BackendImpl::PackageImpl::PackageImpl( : Package( myBackend, url, name, name, xPackageType, bRemoved, identifier) { -// if (bRemoved) -// { -// ::boost::optional<HelpBackendDb::Data> opt = -// getMyBackend()->readDataFromDb(url); -// if (opt) -// m_dbData = *opt; -// } } // Package @@ -250,23 +271,22 @@ BackendImpl * BackendImpl::PackageImpl::getMyBackend() const { BackendImpl * pBackend = static_cast<BackendImpl *>(m_myBackend.get()); if (NULL == pBackend) - { + { //May throw a DisposedException check(); //We should never get here... throw RuntimeException( - OUSTR("Failed to get the BackendImpl"), + OUSTR("Failed to get the BackendImpl"), static_cast<OWeakObject*>(const_cast<PackageImpl *>(this))); } return pBackend; } - bool BackendImpl::PackageImpl::extensionContainsCompiledHelp() { bool bCompiled = true; rtl::OUString aExpandedHelpURL = dp_misc::expandUnoRcUrl(getURL()); - + ::osl::Directory helpFolder(aExpandedHelpURL); if ( helpFolder.open() == ::osl::File::E_None) { @@ -307,11 +327,12 @@ bool BackendImpl::PackageImpl::extensionContainsCompiledHelp() { //Error OSL_ASSERT(0); - bCompiled = false; + bCompiled = false; } } return bCompiled; } + //______________________________________________________________________________ beans::Optional< beans::Ambiguous<sal_Bool> > BackendImpl::PackageImpl::isRegistered_( @@ -322,7 +343,7 @@ BackendImpl::PackageImpl::isRegistered_( BackendImpl * that = getMyBackend(); bool bReg = false; - if (that->readDataFromDb(getURL())) + if (that->hasActiveEntry(getURL())) bReg = true; return beans::Optional< beans::Ambiguous<sal_Bool> >( true, beans::Ambiguous<sal_Bool>( bReg, false ) ); @@ -341,9 +362,7 @@ void BackendImpl::PackageImpl::processPackage_( (void)xCmdEnv; BackendImpl* that = getMyBackend(); - Reference< deployment::XPackage > xThisPackage( this ); - that->implProcessHelp( xThisPackage, doRegisterPackage, - extensionContainsCompiledHelp(), xCmdEnv); + that->implProcessHelp( this, doRegisterPackage, xCmdEnv); } beans::Optional< OUString > BackendImpl::PackageImpl::getRegistrationDataURL() @@ -356,241 +375,238 @@ beans::Optional< OUString > BackendImpl::PackageImpl::getRegistrationDataURL() ::boost::optional<HelpBackendDb::Data> data = getMyBackend()->readDataFromDb(getURL()); - if (data) + if (data && getMyBackend()->hasActiveEntry(getURL())) return beans::Optional<OUString>(true, data->dataUrl); - return beans::Optional<OUString>(true, OUString()); + return beans::Optional<OUString>(true, OUString()); } +static rtl::OUString aSlash(RTL_CONSTASCII_USTRINGPARAM("/")); +static rtl::OUString aHelpStr(RTL_CONSTASCII_USTRINGPARAM("help")); -//############################################################################## - -static rtl::OUString aSlash( rtl::OUString::createFromAscii( "/" ) ); -static rtl::OUString aHelpStr( rtl::OUString::createFromAscii( "help" ) ); - - -void BackendImpl::implProcessHelp -( Reference< deployment::XPackage > xPackage, bool doRegisterPackage, bool compiledHelp, - Reference<ucb::XCommandEnvironment> const & xCmdEnv) +void BackendImpl::implProcessHelp( + PackageImpl * package, bool doRegisterPackage, + Reference<ucb::XCommandEnvironment> const & xCmdEnv) { + Reference< deployment::XPackage > xPackage(package); OSL_ASSERT(xPackage.is()); if (doRegisterPackage) { - HelpBackendDb::Data data; - - if (compiledHelp) + //revive already processed help if possible + if ( !activateEntry(xPackage->getURL())) { + HelpBackendDb::Data data; data.dataUrl = xPackage->getURL(); - } - else - { - const OUString sHelpFolder = createFolder(OUString(), xCmdEnv); - data.dataUrl = sHelpFolder; - - Reference< ucb::XSimpleFileAccess > xSFA = getFileAccess(); - rtl::OUString aHelpURL = xPackage->getURL(); - rtl::OUString aExpandedHelpURL = dp_misc::expandUnoRcUrl( aHelpURL ); - rtl::OUString aName = xPackage->getName(); - if( !xSFA->isFolder( aExpandedHelpURL ) ) + if (!package->extensionContainsCompiledHelp()) { - rtl::OUString aErrStr = getResourceString( RID_STR_HELPPROCESSING_GENERAL_ERROR ); - aErrStr += rtl::OUString::createFromAscii( "No help folder" ); - OWeakObject* oWeakThis = static_cast<OWeakObject *>(this); - throw deployment::DeploymentException( rtl::OUString(), oWeakThis, - makeAny( uno::Exception( aErrStr, oWeakThis ) ) ); - } - - Reference<XComponentContext> const & xContext = getComponentContext(); - Reference< script::XInvocation > xInvocation; - if( xContext.is() ) - { - try - { - xInvocation = Reference< script::XInvocation >( - xContext->getServiceManager()->createInstanceWithContext( rtl::OUString::createFromAscii( - "com.sun.star.help.HelpIndexer" ), xContext ) , UNO_QUERY ); - } - catch (Exception &) + const OUString sHelpFolder = createFolder(OUString(), xCmdEnv); + data.dataUrl = sHelpFolder; + + Reference< ucb::XSimpleFileAccess > xSFA = getFileAccess(); + rtl::OUString aHelpURL = xPackage->getURL(); + rtl::OUString aExpandedHelpURL = dp_misc::expandUnoRcUrl( aHelpURL ); + rtl::OUString aName = xPackage->getName(); + if( !xSFA->isFolder( aExpandedHelpURL ) ) { - // i98680: Survive missing lucene + rtl::OUString aErrStr = getResourceString( RID_STR_HELPPROCESSING_GENERAL_ERROR ); + aErrStr += rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "No help folder" )); + OWeakObject* oWeakThis = static_cast<OWeakObject *>(this); + throw deployment::DeploymentException( rtl::OUString(), oWeakThis, + makeAny( uno::Exception( aErrStr, oWeakThis ) ) ); } - } - - // Scan languages - Sequence< rtl::OUString > aLanguageFolderSeq = xSFA->getFolderContents( aExpandedHelpURL, true ); - sal_Int32 nLangCount = aLanguageFolderSeq.getLength(); - const rtl::OUString* pSeq = aLanguageFolderSeq.getConstArray(); - for( sal_Int32 iLang = 0 ; iLang < nLangCount ; ++iLang ) - { - rtl::OUString aLangURL = pSeq[iLang]; - if( xSFA->isFolder( aLangURL ) ) - { - std::vector< rtl::OUString > aXhpFileVector; - - // calculate jar file URL - sal_Int32 indexStartSegment = aLangURL.lastIndexOf('/'); - // for example "/en" - OUString langFolderURLSegment( - aLangURL.copy( - indexStartSegment + 1, aLangURL.getLength() - indexStartSegment - 1)); - - //create the folder in the "temporary folder" - ::ucbhelper::Content langFolderContent; - const OUString langFolderDest = makeURL(sHelpFolder, langFolderURLSegment); - const OUString langFolderDestExpanded = ::dp_misc::expandUnoRcUrl(langFolderDest); - ::dp_misc::create_folder( - &langFolderContent, - langFolderDest, xCmdEnv); - rtl::OUString aJarFile( - makeURL(sHelpFolder, langFolderURLSegment + aSlash + aHelpStr + - OUSTR(".jar"))); - aJarFile = ::dp_misc::expandUnoRcUrl(aJarFile); - - rtl::OUString aEncodedJarFilePath = rtl::Uri::encode( - aJarFile, rtl_UriCharClassPchar, - rtl_UriEncodeIgnoreEscapes, - RTL_TEXTENCODING_UTF8 ); - rtl::OUString aDestBasePath = rtl::OUString::createFromAscii( "vnd.sun.star.pkg://" ); - aDestBasePath += aEncodedJarFilePath; - aDestBasePath += rtl::OUString::createFromAscii( "/" ); - - sal_Int32 nLenLangFolderURL = aLangURL.getLength() + 1; - - Sequence< rtl::OUString > aSubLangSeq = xSFA->getFolderContents( aLangURL, true ); - sal_Int32 nSubLangCount = aSubLangSeq.getLength(); - const rtl::OUString* pSubLangSeq = aSubLangSeq.getConstArray(); - for( sal_Int32 iSubLang = 0 ; iSubLang < nSubLangCount ; ++iSubLang ) - { - rtl::OUString aSubFolderURL = pSubLangSeq[iSubLang]; - if( !xSFA->isFolder( aSubFolderURL ) ) - continue; - - implCollectXhpFiles( aSubFolderURL, aXhpFileVector ); - - // Copy to package (later: move?) - rtl::OUString aDestPath = aDestBasePath; - rtl::OUString aPureFolderName = aSubFolderURL.copy( nLenLangFolderURL ); - aDestPath += aPureFolderName; - xSFA->copy( aSubFolderURL, aDestPath ); - } - - // Call compiler - sal_Int32 nXhpFileCount = aXhpFileVector.size(); - rtl::OUString* pXhpFiles = new rtl::OUString[nXhpFileCount]; - for( sal_Int32 iXhp = 0 ; iXhp < nXhpFileCount ; ++iXhp ) + Reference<XComponentContext> const & xContext = getComponentContext(); + Reference< script::XInvocation > xInvocation; + if( xContext.is() ) + { + try { - rtl::OUString aXhpFile = aXhpFileVector[iXhp]; - rtl::OUString aXhpRelFile = aXhpFile.copy( nLenLangFolderURL ); - pXhpFiles[iXhp] = aXhpRelFile; + xInvocation = Reference< script::XInvocation >( + xContext->getServiceManager()->createInstanceWithContext( + rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM("com.sun.star.help.HelpIndexer" )), xContext ) , UNO_QUERY ); } - - rtl::OUString aOfficeHelpPath( SvtPathOptions().GetHelpPath() ); - rtl::OUString aOfficeHelpPathFileURL; - ::osl::File::getFileURLFromSystemPath( aOfficeHelpPath, aOfficeHelpPathFileURL ); - - HelpProcessingErrorInfo aErrorInfo; - bool bSuccess = compileExtensionHelp( - aOfficeHelpPathFileURL, aHelpStr, aLangURL, - nXhpFileCount, pXhpFiles, - langFolderDestExpanded, aErrorInfo ); - - if( bSuccess && xInvocation.is() ) + catch (Exception &) { - Sequence<uno::Any> aParamsSeq( 6 ); - - aParamsSeq[0] = uno::makeAny( rtl::OUString::createFromAscii( "-lang" ) ); - - rtl::OUString aLang; - sal_Int32 nLastSlash = aLangURL.lastIndexOf( '/' ); - if( nLastSlash != -1 ) - aLang = aLangURL.copy( nLastSlash + 1 ); - else - aLang = rtl::OUString::createFromAscii( "en" ); - aParamsSeq[1] = uno::makeAny( aLang ); - - aParamsSeq[2] = uno::makeAny( rtl::OUString::createFromAscii( "-mod" ) ); - aParamsSeq[3] = uno::makeAny( rtl::OUString::createFromAscii( "help" ) ); - - aParamsSeq[4] = uno::makeAny( rtl::OUString::createFromAscii( "-zipdir" ) ); - rtl::OUString aSystemPath; - osl::FileBase::getSystemPathFromFileURL( - langFolderDestExpanded, aSystemPath ); - aParamsSeq[5] = uno::makeAny( aSystemPath ); - - Sequence< sal_Int16 > aOutParamIndex; - Sequence< uno::Any > aOutParam; - uno::Any aRet = xInvocation->invoke( rtl::OUString::createFromAscii( "createIndex" ), - aParamsSeq, aOutParamIndex, aOutParam ); + // i98680: Survive missing lucene } - - if( !bSuccess ) + } + + // Scan languages + Sequence< rtl::OUString > aLanguageFolderSeq = xSFA->getFolderContents( aExpandedHelpURL, true ); + sal_Int32 nLangCount = aLanguageFolderSeq.getLength(); + const rtl::OUString* pSeq = aLanguageFolderSeq.getConstArray(); + for( sal_Int32 iLang = 0 ; iLang < nLangCount ; ++iLang ) + { + rtl::OUString aLangURL = pSeq[iLang]; + if( xSFA->isFolder( aLangURL ) ) { - USHORT nErrStrId = 0; - switch( aErrorInfo.m_eErrorClass ) + std::vector< rtl::OUString > aXhpFileVector; + + // calculate jar file URL + sal_Int32 indexStartSegment = aLangURL.lastIndexOf('/'); + // for example "/en" + OUString langFolderURLSegment( + aLangURL.copy( + indexStartSegment + 1, aLangURL.getLength() - indexStartSegment - 1)); + + //create the folder in the "temporary folder" + ::ucbhelper::Content langFolderContent; + const OUString langFolderDest = makeURL(sHelpFolder, langFolderURLSegment); + const OUString langFolderDestExpanded = ::dp_misc::expandUnoRcUrl(langFolderDest); + ::dp_misc::create_folder( + &langFolderContent, + langFolderDest, xCmdEnv); + + rtl::OUString aJarFile( + makeURL(sHelpFolder, langFolderURLSegment + aSlash + aHelpStr + + OUSTR(".jar"))); + aJarFile = ::dp_misc::expandUnoRcUrl(aJarFile); + + rtl::OUString aEncodedJarFilePath = rtl::Uri::encode( + aJarFile, rtl_UriCharClassPchar, + rtl_UriEncodeIgnoreEscapes, + RTL_TEXTENCODING_UTF8 ); + rtl::OUString aDestBasePath = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "vnd.sun.star.zip://" )); + aDestBasePath += aEncodedJarFilePath; + aDestBasePath += rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "/" )); + + sal_Int32 nLenLangFolderURL = aLangURL.getLength() + 1; + + Sequence< rtl::OUString > aSubLangSeq = xSFA->getFolderContents( aLangURL, true ); + sal_Int32 nSubLangCount = aSubLangSeq.getLength(); + const rtl::OUString* pSubLangSeq = aSubLangSeq.getConstArray(); + for( sal_Int32 iSubLang = 0 ; iSubLang < nSubLangCount ; ++iSubLang ) + { + rtl::OUString aSubFolderURL = pSubLangSeq[iSubLang]; + if( !xSFA->isFolder( aSubFolderURL ) ) + continue; + + implCollectXhpFiles( aSubFolderURL, aXhpFileVector ); + + // Copy to package (later: move?) + rtl::OUString aDestPath = aDestBasePath; + rtl::OUString aPureFolderName = aSubFolderURL.copy( nLenLangFolderURL ); + aDestPath += aPureFolderName; + xSFA->copy( aSubFolderURL, aDestPath ); + } + + // Call compiler + sal_Int32 nXhpFileCount = aXhpFileVector.size(); + rtl::OUString* pXhpFiles = new rtl::OUString[nXhpFileCount]; + for( sal_Int32 iXhp = 0 ; iXhp < nXhpFileCount ; ++iXhp ) { - case HELPPROCESSING_GENERAL_ERROR: - case HELPPROCESSING_INTERNAL_ERROR: nErrStrId = RID_STR_HELPPROCESSING_GENERAL_ERROR; break; - case HELPPROCESSING_XMLPARSING_ERROR: nErrStrId = RID_STR_HELPPROCESSING_XMLPARSING_ERROR; break; - default: ; - }; - - rtl::OUString aErrStr; - if( nErrStrId != 0 ) + rtl::OUString aXhpFile = aXhpFileVector[iXhp]; + rtl::OUString aXhpRelFile = aXhpFile.copy( nLenLangFolderURL ); + pXhpFiles[iXhp] = aXhpRelFile; + } + + rtl::OUString aOfficeHelpPath( SvtPathOptions().GetHelpPath() ); + rtl::OUString aOfficeHelpPathFileURL; + ::osl::File::getFileURLFromSystemPath( aOfficeHelpPath, aOfficeHelpPathFileURL ); + + HelpProcessingErrorInfo aErrorInfo; + bool bSuccess = compileExtensionHelp( + aOfficeHelpPathFileURL, aHelpStr, aLangURL, + nXhpFileCount, pXhpFiles, + langFolderDestExpanded, aErrorInfo ); + + if( bSuccess && xInvocation.is() ) { - aErrStr = getResourceString( nErrStrId ); - - // Remoce CR/LF - rtl::OUString aErrMsg( aErrorInfo.m_aErrorMsg ); - sal_Unicode nCR = 13, nLF = 10; - sal_Int32 nSearchCR = aErrMsg.indexOf( nCR ); - sal_Int32 nSearchLF = aErrMsg.indexOf( nLF ); - sal_Int32 nCopy; - if( nSearchCR != -1 || nSearchLF != -1 ) + Sequence<uno::Any> aParamsSeq( 6 ); + + aParamsSeq[0] = uno::makeAny( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "-lang" ) )); + + rtl::OUString aLang; + sal_Int32 nLastSlash = aLangURL.lastIndexOf( '/' ); + if( nLastSlash != -1 ) + aLang = aLangURL.copy( nLastSlash + 1 ); + else + aLang = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "en" )); + aParamsSeq[1] = uno::makeAny( aLang ); + + aParamsSeq[2] = uno::makeAny( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "-mod" ) )); + aParamsSeq[3] = uno::makeAny( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "help" ) )); + + aParamsSeq[4] = uno::makeAny( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "-zipdir" ) )); + rtl::OUString aSystemPath; + osl::FileBase::getSystemPathFromFileURL( + langFolderDestExpanded, aSystemPath ); + aParamsSeq[5] = uno::makeAny( aSystemPath ); + + Sequence< sal_Int16 > aOutParamIndex; + Sequence< uno::Any > aOutParam; + uno::Any aRet = xInvocation->invoke( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "createIndex" )), + aParamsSeq, aOutParamIndex, aOutParam ); + } + + if( !bSuccess ) + { + sal_uInt16 nErrStrId = 0; + switch( aErrorInfo.m_eErrorClass ) { - if( nSearchCR == -1 ) - nCopy = nSearchLF; - else if( nSearchLF == -1 ) - nCopy = nSearchCR; - else - nCopy = ( nSearchCR < nSearchLF ) ? nSearchCR : nSearchLF; - - aErrMsg = aErrMsg.copy( 0, nCopy ); - } - aErrStr += aErrMsg; - if( nErrStrId == RID_STR_HELPPROCESSING_XMLPARSING_ERROR && aErrorInfo.m_aXMLParsingFile.getLength() ) + case HELPPROCESSING_GENERAL_ERROR: + case HELPPROCESSING_INTERNAL_ERROR: nErrStrId = RID_STR_HELPPROCESSING_GENERAL_ERROR; break; + case HELPPROCESSING_XMLPARSING_ERROR: nErrStrId = RID_STR_HELPPROCESSING_XMLPARSING_ERROR; break; + default: ; + }; + + rtl::OUString aErrStr; + if( nErrStrId != 0 ) { - aErrStr += rtl::OUString::createFromAscii( " in " ); - - rtl::OUString aDecodedFile = rtl::Uri::decode( aErrorInfo.m_aXMLParsingFile, - rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8 ); - aErrStr += aDecodedFile; - if( aErrorInfo.m_nXMLParsingLine != -1 ) + aErrStr = getResourceString( nErrStrId ); + + // Remoce CR/LF + rtl::OUString aErrMsg( aErrorInfo.m_aErrorMsg ); + sal_Unicode nCR = 13, nLF = 10; + sal_Int32 nSearchCR = aErrMsg.indexOf( nCR ); + sal_Int32 nSearchLF = aErrMsg.indexOf( nLF ); + sal_Int32 nCopy; + if( nSearchCR != -1 || nSearchLF != -1 ) { - aErrStr += rtl::OUString::createFromAscii( ", line " ); - aErrStr += ::rtl::OUString::valueOf( aErrorInfo.m_nXMLParsingLine ); + if( nSearchCR == -1 ) + nCopy = nSearchLF; + else if( nSearchLF == -1 ) + nCopy = nSearchCR; + else + nCopy = ( nSearchCR < nSearchLF ) ? nSearchCR : nSearchLF; + + aErrMsg = aErrMsg.copy( 0, nCopy ); + } + aErrStr += aErrMsg; + if( nErrStrId == RID_STR_HELPPROCESSING_XMLPARSING_ERROR && aErrorInfo.m_aXMLParsingFile.getLength() ) + { + aErrStr += rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( " in " )); + + rtl::OUString aDecodedFile = rtl::Uri::decode( aErrorInfo.m_aXMLParsingFile, + rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8 ); + aErrStr += aDecodedFile; + if( aErrorInfo.m_nXMLParsingLine != -1 ) + { + aErrStr += rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( ", line " )); + aErrStr += ::rtl::OUString::valueOf( aErrorInfo.m_nXMLParsingLine ); + } } } + + OWeakObject* oWeakThis = static_cast<OWeakObject *>(this); + throw deployment::DeploymentException( rtl::OUString(), oWeakThis, + makeAny( uno::Exception( aErrStr, oWeakThis ) ) ); } - - OWeakObject* oWeakThis = static_cast<OWeakObject *>(this); - throw deployment::DeploymentException( rtl::OUString(), oWeakThis, - makeAny( uno::Exception( aErrStr, oWeakThis ) ) ); } } } + //Writing the data entry replaces writing the flag file. If we got to this + //point the registration was successful. + addDataToDb(xPackage->getURL(), data); } - //Writing the data entry replaces writing the flag file. If we got to this - //point the registration was successful. - addDataToDb(xPackage->getURL(), data); } //if (doRegisterPackage) else { - deleteDataFromDb(xPackage->getURL()); + revokeEntryFromDb(xPackage->getURL()); } } - void BackendImpl::implCollectXhpFiles( const rtl::OUString& aDir, std::vector< rtl::OUString >& o_rXhpFileVector ) { @@ -613,7 +629,7 @@ void BackendImpl::implCollectXhpFiles( const rtl::OUString& aDir, if( nLastDot != -1 ) { rtl::OUString aExt = aURL.copy( nLastDot + 1 ); - if( aExt.equalsIgnoreAsciiCase( rtl::OUString::createFromAscii( "xhp" ) ) ) + if( aExt.equalsIgnoreAsciiCase( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "xhp" )) ) ) o_rXhpFileVector.push_back( aURL ); } } @@ -627,17 +643,17 @@ Reference< ucb::XSimpleFileAccess > BackendImpl::getFileAccess( void ) Reference<XComponentContext> const & xContext = getComponentContext(); if( xContext.is() ) { - m_xSFA = Reference< ucb::XSimpleFileAccess >( + m_xSFA = Reference< ucb::XSimpleFileAccess >( xContext->getServiceManager()->createInstanceWithContext( - rtl::OUString::createFromAscii( "com.sun.star.ucb.SimpleFileAccess" ), + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.ucb.SimpleFileAccess" )), xContext ), UNO_QUERY ); } if( !m_xSFA.is() ) { throw RuntimeException( - ::rtl::OUString::createFromAscii( + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "dp_registry::backend::help::BackendImpl::getFileAccess(), " - "could not instatiate SimpleFileAccess." ), + "could not instatiate SimpleFileAccess." )), Reference< XInterface >() ); } } diff --git a/desktop/source/deployment/registry/help/dp_help.hrc b/desktop/source/deployment/registry/help/dp_help.hrc index 451144813f..451144813f 100644..100755 --- a/desktop/source/deployment/registry/help/dp_help.hrc +++ b/desktop/source/deployment/registry/help/dp_help.hrc diff --git a/desktop/source/deployment/registry/help/dp_helpbackenddb.cxx b/desktop/source/deployment/registry/help/dp_helpbackenddb.cxx index 92ce961de6..45aa70934c 100644 --- a/desktop/source/deployment/registry/help/dp_helpbackenddb.cxx +++ b/desktop/source/deployment/registry/help/dp_helpbackenddb.cxx @@ -84,11 +84,14 @@ OUString HelpBackendDb::getKeyElementName() void HelpBackendDb::addEntry(::rtl::OUString const & url, Data const & data) { try{ - Reference<css::xml::dom::XNode> helpNode - = writeKeyElement(url); - - writeSimpleElement(OUSTR("data-url"), data.dataUrl, helpNode); - save(); + if (!activateEntry(url)) + { + Reference<css::xml::dom::XNode> helpNode + = writeKeyElement(url); + + writeSimpleElement(OUSTR("data-url"), data.dataUrl, helpNode); + save(); + } } catch (css::deployment::DeploymentException& ) { @@ -136,40 +139,9 @@ HelpBackendDb::getEntry(::rtl::OUString const & url) ::std::list<OUString> HelpBackendDb::getAllDataUrls() { - try - { - ::std::list<OUString> listRet; - Reference<css::xml::dom::XDocument> doc = getDocument(); - Reference<css::xml::dom::XNode> root = doc->getFirstChild(); - - Reference<css::xml::xpath::XXPathAPI> xpathApi = getXPathAPI(); - const OUString sPrefix = getNSPrefix(); - OUString sExpression( - sPrefix + OUSTR(":help/") + sPrefix + OUSTR(":data-url/text()")); - Reference<css::xml::dom::XNodeList> nodes = - xpathApi->selectNodeList(root, sExpression); - if (nodes.is()) - { - sal_Int32 length = nodes->getLength(); - for (sal_Int32 i = 0; i < length; i++) - listRet.push_back(nodes->item(i)->getNodeValue()); - } - return listRet; - } - catch (css::deployment::DeploymentException& ) - { - throw; - } - catch(css::uno::Exception &) - { - Any exc( ::cppu::getCaughtException() ); - throw css::deployment::DeploymentException( - OUSTR("Extension Manager: failed to read data entry in help backend db: ") + - m_urlDb, 0, exc); - } + return getOneChildFromAllEntries(OUString(RTL_CONSTASCII_USTRINGPARAM("data-url"))); } - } // namespace help } // namespace backend } // namespace dp_registry diff --git a/desktop/source/deployment/registry/help/dp_helpbackenddb.hxx b/desktop/source/deployment/registry/help/dp_helpbackenddb.hxx index 4a2eb8ec59..4bfa93204c 100644 --- a/desktop/source/deployment/registry/help/dp_helpbackenddb.hxx +++ b/desktop/source/deployment/registry/help/dp_helpbackenddb.hxx @@ -77,6 +77,8 @@ public: void addEntry(::rtl::OUString const & url, Data const & data); ::boost::optional<Data> getEntry(::rtl::OUString const & url); + //must also return the data urls for entries with @activ="false". That is, + //those are currently revoked. ::std::list< ::rtl::OUString> getAllDataUrls(); }; diff --git a/desktop/source/deployment/registry/help/makefile.mk b/desktop/source/deployment/registry/help/makefile.mk index d4934f71a4..d4934f71a4 100644..100755 --- a/desktop/source/deployment/registry/help/makefile.mk +++ b/desktop/source/deployment/registry/help/makefile.mk diff --git a/desktop/source/deployment/registry/inc/dp_backend.h b/desktop/source/deployment/registry/inc/dp_backend.h index 53de2ef1da..656f81ff6d 100644..100755 --- a/desktop/source/deployment/registry/inc/dp_backend.h +++ b/desktop/source/deployment/registry/inc/dp_backend.h @@ -43,7 +43,7 @@ #include "com/sun/star/deployment/XPackageManager.hpp" #include "com/sun/star/deployment/InvalidRemovedParameterException.hpp" #include <memory> -#include <hash_map> +#include <boost/unordered_map.hpp> #include <list> #include "dp_registry.hrc" @@ -56,8 +56,7 @@ namespace css = ::com::sun::star; class PackageRegistryBackend; -char const* const BACKEND_SERVICE_NAME = -"com.sun.star.deployment.PackageRegistryBackend"; +#define BACKEND_SERVICE_NAME "com.sun.star.deployment.PackageRegistryBackend" typedef ::cppu::WeakComponentImplHelper1< css::deployment::XPackage > t_PackageBase; @@ -122,16 +121,16 @@ public: const ::rtl::OUString m_mediaType; const ::rtl::OUString m_fileFilter; const ::rtl::OUString m_shortDescr; - const sal_uInt16 m_smallIcon, m_smallIcon_HC; + const sal_uInt16 m_smallIcon; public: virtual ~TypeInfo(); TypeInfo( ::rtl::OUString const & mediaType, ::rtl::OUString const & fileFilter, ::rtl::OUString const & shortDescr, - sal_uInt16 smallIcon, sal_uInt16 smallIcon_HC ) + sal_uInt16 smallIcon) : m_mediaType(mediaType), m_fileFilter(fileFilter), m_shortDescr(shortDescr), - m_smallIcon(smallIcon), m_smallIcon_HC(smallIcon_HC) + m_smallIcon(smallIcon) {} // XPackageTypeInfo virtual ::rtl::OUString SAL_CALL getMediaType() @@ -238,6 +237,9 @@ public: virtual ::rtl::OUString SAL_CALL getDescription() throw (css::deployment::ExtensionRemovedException, css::uno::RuntimeException); + virtual ::rtl::OUString SAL_CALL getLicenseText() + throw (css::deployment::ExtensionRemovedException, + css::uno::RuntimeException); virtual css::uno::Sequence< ::rtl::OUString > SAL_CALL getUpdateInformationURLs() throw (css::deployment::ExtensionRemovedException, @@ -284,7 +286,7 @@ class PackageRegistryBackend // XPackageManager::getDeployedPackages is called often. This results in a lot //of bindPackage calls which are costly. Therefore we keep hard references in //the map now. - typedef ::std::hash_map< + typedef ::boost::unordered_map< ::rtl::OUString, css::uno::Reference<css::deployment::XPackage>, ::rtl::OUStringHash > t_string2ref; t_string2ref m_bound; @@ -295,9 +297,9 @@ protected: ::rtl::OUString m_context; // currently only for library containers: - enum context { + enum { CONTEXT_UNKNOWN, - CONTEXT_USER, CONTEXT_SHARED,CONTEXT_BUNDLED, CONTEXT_TMP, + CONTEXT_USER, CONTEXT_SHARED,CONTEXT_BUNDLED, CONTEXT_TMP, CONTEXT_BUNDLED_PREREG, CONTEXT_DOCUMENT } m_eContext; bool m_readOnly; @@ -342,6 +344,18 @@ protected: */ static void deleteTempFolder( ::rtl::OUString const & folderUrl); + + ::rtl::OUString getSharedRegistrationDataURL( + css::uno::Reference<css::deployment::XPackage> const & extension, + css::uno::Reference<css::deployment::XPackage> const & item); + + /* The backends must implement this function, which is called + from XPackageRegistry::packageRemoved (also implemented here). + This ensure that the backends clean up their registration data + when an extension was removed. + */ +// virtual void deleteDbEntry( ::rtl::OUString const & url) = 0; + public: @@ -371,6 +385,12 @@ public: css::deployment::InvalidRemovedParameterException, css::ucb::CommandFailedException, css::lang::IllegalArgumentException, css::uno::RuntimeException); + +// virtual void SAL_CALL packageRemoved( +// ::rtl::OUString const & url, ::rtl::OUString const & mediaType) +// throw (css::deployment::DeploymentException, +// css::uno::RuntimeException); + }; } diff --git a/desktop/source/deployment/registry/inc/dp_backenddb.hxx b/desktop/source/deployment/registry/inc/dp_backenddb.hxx index 11dff5a510..2deb1c6e56 100644 --- a/desktop/source/deployment/registry/inc/dp_backenddb.hxx +++ b/desktop/source/deployment/registry/inc/dp_backenddb.hxx @@ -140,14 +140,24 @@ protected: */ virtual ::rtl::OUString getKeyElementName()=0; - - public: BackendDb(css::uno::Reference<css::uno::XComponentContext> const & xContext, ::rtl::OUString const & url); virtual ~BackendDb() {}; void removeEntry(::rtl::OUString const & url); + + /* This is called to write the "revoked" attribute to the entry. + This is done when XPackage::revokePackage is called. + */ + void revokeEntry(::rtl::OUString const & url); + + /* returns false if the entry does not exist yet. + */ + bool activateEntry(::rtl::OUString const & url); + + bool hasActiveEntry(::rtl::OUString const & url); + }; class RegisteredDb: public BackendDb @@ -164,7 +174,6 @@ public: }; - } } #endif diff --git a/desktop/source/deployment/registry/inc/dp_registry.hrc b/desktop/source/deployment/registry/inc/dp_registry.hrc index 7f8124b78d..7f8124b78d 100644..100755 --- a/desktop/source/deployment/registry/inc/dp_registry.hrc +++ b/desktop/source/deployment/registry/inc/dp_registry.hrc diff --git a/desktop/source/deployment/registry/makefile.mk b/desktop/source/deployment/registry/makefile.mk index e45cec272c..e45cec272c 100644..100755 --- a/desktop/source/deployment/registry/makefile.mk +++ b/desktop/source/deployment/registry/makefile.mk diff --git a/desktop/source/deployment/registry/package/dp_extbackenddb.cxx b/desktop/source/deployment/registry/package/dp_extbackenddb.cxx index c3b0c092c0..5f20628dc9 100644 --- a/desktop/source/deployment/registry/package/dp_extbackenddb.cxx +++ b/desktop/source/deployment/registry/package/dp_extbackenddb.cxx @@ -29,7 +29,6 @@ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_desktop.hxx" -#include "rtl/string.h" #include "rtl/bootstrap.hxx" #include "cppuhelper/exc_hlp.hxx" #include "com/sun/star/uno/XComponentContext.hpp" @@ -83,15 +82,19 @@ OUString ExtensionBackendDb::getKeyElementName() void ExtensionBackendDb::addEntry(::rtl::OUString const & url, Data const & data) { try{ - Reference<css::xml::dom::XNode> extensionNodeNode = writeKeyElement(url); - writeVectorOfPair( - data.items, - OUSTR("extension-items"), - OUSTR("item"), - OUSTR("url"), - OUSTR("media-type"), - extensionNodeNode); - save(); + //reactive revoked entry if possible. + if (!activateEntry(url)) + { + Reference<css::xml::dom::XNode> extensionNodeNode = writeKeyElement(url); + writeVectorOfPair( + data.items, + OUSTR("extension-items"), + OUSTR("item"), + OUSTR("url"), + OUSTR("media-type"), + extensionNodeNode); + save(); + } } catch(css::uno::Exception &) { diff --git a/desktop/source/deployment/registry/package/dp_extbackenddb.hxx b/desktop/source/deployment/registry/package/dp_extbackenddb.hxx index ac57bd794e..f25203193a 100644 --- a/desktop/source/deployment/registry/package/dp_extbackenddb.hxx +++ b/desktop/source/deployment/registry/package/dp_extbackenddb.hxx @@ -26,13 +26,14 @@ * ************************************************************************/ - #if ! defined INCLUDED_DP_EXTBACKENDDB_HXX #define INCLUDED_DP_EXTBACKENDDB_HXX -#include "rtl/ustring.hxx" -#include "rtl/string.hxx" +#include <utility> #include <vector> + +#include "rtl/ustring.hxx" + #include "dp_backenddb.hxx" namespace css = ::com::sun::star; @@ -74,11 +75,9 @@ public: ::std::vector< ::std::pair< ::rtl::OUString, ::rtl::OUString> > items; typedef ::std::vector< ::std::pair< ::rtl::OUString, ::rtl::OUString> >::const_iterator ITC_ITEMS; - }; public: - ExtensionBackendDb( css::uno::Reference<css::uno::XComponentContext> const & xContext, ::rtl::OUString const & url); @@ -88,8 +87,6 @@ public: }; - - } } } diff --git a/desktop/source/deployment/registry/package/dp_package.cxx b/desktop/source/deployment/registry/package/dp_package.cxx index b084d87898..1291b8dadb 100755..100644 --- a/desktop/source/deployment/registry/package/dp_package.cxx +++ b/desktop/source/deployment/registry/package/dp_package.cxx @@ -191,6 +191,9 @@ class BackendImpl : public ImplBaseT virtual OUString SAL_CALL getDescription() throw (deployment::ExtensionRemovedException, RuntimeException); + virtual OUString SAL_CALL getLicenseText() + throw (deployment::ExtensionRemovedException, RuntimeException); + virtual void SAL_CALL exportTo( OUString const & destFolderURL, OUString const & newTitle, sal_Int32 nameClashAction, @@ -248,7 +251,7 @@ class BackendImpl : public ImplBaseT void addDataToDb(OUString const & url, ExtensionBackendDb::Data const & data); ExtensionBackendDb::Data readDataFromDb(OUString const & url); - void deleteDataFromDb(OUString const & url); + void revokeEntryFromDb(OUString const & url); // PackageRegistryBackend virtual Reference<deployment::XPackage> bindPackage_( @@ -274,7 +277,10 @@ public: // XPackageRegistry virtual Sequence< Reference<deployment::XPackageTypeInfo> > SAL_CALL getSupportedPackageTypes() throw (RuntimeException); - + virtual void SAL_CALL packageRemoved(OUString const & url, OUString const & mediaType) + throw (deployment::DeploymentException, + uno::RuntimeException); + using ImplBaseT::disposing; }; @@ -301,15 +307,13 @@ BackendImpl::BackendImpl( OUSTR("application/vnd.sun.star.package-bundle"), OUSTR("*.oxt;*.uno.pkg"), getResourceString(RID_STR_PACKAGE_BUNDLE), - RID_IMG_DEF_PACKAGE_BUNDLE, - RID_IMG_DEF_PACKAGE_BUNDLE_HC ) ), + RID_IMG_DEF_PACKAGE_BUNDLE ) ), m_xLegacyBundleTypeInfo( new Package::TypeInfo( OUSTR("application/" "vnd.sun.star.legacy-package-bundle"), OUSTR("*.zip"), m_xBundleTypeInfo->getShortDescription(), - RID_IMG_DEF_PACKAGE_BUNDLE, - RID_IMG_DEF_PACKAGE_BUNDLE_HC ) ), + RID_IMG_DEF_PACKAGE_BUNDLE ) ), m_typeInfos(2) { m_typeInfos[ 0 ] = m_xBundleTypeInfo; @@ -347,7 +351,7 @@ Sequence<OUString> BackendImpl::getSupportedServiceNames() throw (RuntimeException) { return comphelper::makeSequence( - OUString::createFromAscii(BACKEND_SERVICE_NAME) ); + OUString(RTL_CONSTASCII_USTRINGPARAM(BACKEND_SERVICE_NAME)) ); } // XPackageRegistry @@ -358,6 +362,21 @@ BackendImpl::getSupportedPackageTypes() throw (RuntimeException) return m_typeInfos; } +void BackendImpl::packageRemoved(OUString const & url, OUString const & /*mediaType*/) + throw (deployment::DeploymentException, + uno::RuntimeException) +{ + //Notify the backend responsible for processing the different media + //types that this extension was removed. + ExtensionBackendDb::Data data = readDataFromDb(url); + for (ExtensionBackendDb::Data::ITC_ITEMS i = data.items.begin(); i != data.items.end(); i++) + { + m_xRootRegistry->packageRemoved(i->first, i->second); + } + + if (m_backendDb.get()) + m_backendDb->removeEntry(url); +} // PackageRegistryBackend @@ -458,14 +477,13 @@ ExtensionBackendDb::Data BackendImpl::readDataFromDb( return data; } -void BackendImpl::deleteDataFromDb(OUString const & url) +void BackendImpl::revokeEntryFromDb(OUString const & url) { if (m_backendDb.get()) - m_backendDb->removeEntry(url); + m_backendDb->revokeEntry(url); } -//############################################################################## BackendImpl::PackageImpl::PackageImpl( ::rtl::Reference<PackageRegistryBackend> const & myBackend, @@ -703,10 +721,6 @@ bool BackendImpl::PackageImpl::checkDependencies( return true; else return false; - //throw css::deployment::DeploymentException( - // OUSTR("Extension Manager: User declined the license."), - // static_cast<OWeakObject*>(this), - // Any( css::deployment::LicenseException(OUSTR("User declined the license."), 0, m_name, sLicense))); } return true; } catch (css::ucb::CommandFailedException&) { @@ -903,7 +917,7 @@ void BackendImpl::PackageImpl::processPackage_( } catch (Exception &) { - OSL_ENSURE( 0, ::rtl::OUStringToOString( + OSL_FAIL( ::rtl::OUStringToOString( ::comphelper::anyToString( ::cppu::getCaughtException() ), RTL_TEXTENCODING_UTF8 ).getStr() ); @@ -971,7 +985,7 @@ void BackendImpl::PackageImpl::processPackage_( // selected } } - getMyBackend()->deleteDataFromDb(getURL()); + getMyBackend()->revokeEntryFromDb(getURL()); } } @@ -994,7 +1008,7 @@ OUString BackendImpl::PackageImpl::getDescription() } catch ( css::deployment::DeploymentException& ) { - OSL_ENSURE( 0, ::rtl::OUStringToOString( ::comphelper::anyToString( ::cppu::getCaughtException() ), RTL_TEXTENCODING_UTF8 ).getStr() ); + OSL_FAIL( ::rtl::OUStringToOString( ::comphelper::anyToString( ::cppu::getCaughtException() ), RTL_TEXTENCODING_UTF8 ).getStr() ); } } @@ -1004,6 +1018,31 @@ OUString BackendImpl::PackageImpl::getDescription() } //______________________________________________________________________________ +OUString BackendImpl::PackageImpl::getLicenseText() + throw (deployment::ExtensionRemovedException, RuntimeException) +{ + if (m_bRemoved) + throw deployment::ExtensionRemovedException(); + + OUString sLicense; + DescriptionInfoset aInfo = getDescriptionInfoset(); + + ::boost::optional< SimpleLicenseAttributes > aSimplLicAttr = aInfo.getSimpleLicenseAttributes(); + if ( aSimplLicAttr ) + { + OUString aLicenseURL = aInfo.getLocalizedLicenseURL(); + + if ( aLicenseURL.getLength() ) + { + OUString aFullURL = m_url_expanded + OUSTR("/") + aLicenseURL; + sLicense = getTextFromURL( Reference< ucb::XCommandEnvironment >(), aFullURL); + } + } + + return sLicense; +} + +//______________________________________________________________________________ void BackendImpl::PackageImpl::exportTo( OUString const & destFolderURL, OUString const & newTitle, sal_Int32 nameClashAction, Reference<ucb::XCommandEnvironment> const & xCmdEnv ) @@ -1097,14 +1136,14 @@ void BackendImpl::PackageImpl::exportTo( } // xxx todo: think about exception specs: catch (deployment::DeploymentException &) { - OSL_ENSURE( 0, ::rtl::OUStringToOString( + OSL_FAIL( ::rtl::OUStringToOString( ::comphelper::anyToString( ::cppu::getCaughtException() ), RTL_TEXTENCODING_UTF8 ).getStr() ); } catch (lang::IllegalArgumentException & exc) { (void) exc; - OSL_ENSURE( 0, ::rtl::OUStringToOString( + OSL_FAIL( ::rtl::OUStringToOString( exc.Message, RTL_TEXTENCODING_UTF8 ).getStr() ); } @@ -1173,7 +1212,7 @@ void BackendImpl::PackageImpl::exportTo( makeURL( m_url_expanded, OUSTR("META-INF/manifest.xml") ), xCmdEnv, false ) ) { - OSL_ENSURE( 0, "### missing META-INF/manifest.xml file!" ); + OSL_FAIL( "### missing META-INF/manifest.xml file!" ); return; } @@ -1397,7 +1436,7 @@ void BackendImpl::PackageImpl::scanBundle( makeURL( m_url_expanded, OUSTR("META-INF/manifest.xml") ), xCmdEnv, false /* no throw */ )) { - OSL_ENSURE( 0, "### missing META-INF/manifest.xml file!" ); + OSL_FAIL( "### missing META-INF/manifest.xml file!" ); return; } diff --git a/desktop/source/deployment/registry/package/dp_package.hrc b/desktop/source/deployment/registry/package/dp_package.hrc index 0b258a58cd..0b258a58cd 100644..100755 --- a/desktop/source/deployment/registry/package/dp_package.hrc +++ b/desktop/source/deployment/registry/package/dp_package.hrc diff --git a/desktop/source/deployment/registry/package/makefile.mk b/desktop/source/deployment/registry/package/makefile.mk index 203ce176d2..203ce176d2 100644..100755 --- a/desktop/source/deployment/registry/package/makefile.mk +++ b/desktop/source/deployment/registry/package/makefile.mk diff --git a/desktop/source/deployment/registry/script/dp_lib_container.cxx b/desktop/source/deployment/registry/script/dp_lib_container.cxx index 4dc71b7fd9..ccc2b29874 100644 --- a/desktop/source/deployment/registry/script/dp_lib_container.cxx +++ b/desktop/source/deployment/registry/script/dp_lib_container.cxx @@ -29,11 +29,17 @@ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_desktop.hxx" +#include "com/sun/star/uno/XComponentContext.hpp" +#include "com/sun/star/ucb/XCommandEnvironment.hpp" + #include "dp_script.hrc" #include "dp_resource.h" #include "dp_xml.h" #include "dp_lib_container.h" + +#include "rtl/ustring.hxx" #include "ucbhelper/content.hxx" +#include "xmlscript/xmllib_imexp.hxx" using namespace ::dp_misc; diff --git a/desktop/source/deployment/registry/script/dp_lib_container.h b/desktop/source/deployment/registry/script/dp_lib_container.h index b0f29c1e80..009846a3c0 100644..100755 --- a/desktop/source/deployment/registry/script/dp_lib_container.h +++ b/desktop/source/deployment/registry/script/dp_lib_container.h @@ -29,11 +29,20 @@ #if ! defined INCLUDED_DP_LIB_CONTAINER_H #define INCLUDED_DP_LIB_CONTAINER_H -#include "rtl/ustring.hxx" -#include "xmlscript/xmllib_imexp.hxx" -#include "com/sun/star/uno/XComponentContext.hpp" -#include "com/sun/star/ucb/XCommandEnvironment.hpp" +#include <com/sun/star/uno/Reference.hxx> +namespace com { namespace sun { namespace star { + namespace uno { + class XComponentContext; + } + namespace ucb { + class XCommandEnvironment; + } +}}} + +namespace rtl { + class OUString; +} namespace css = ::com::sun::star; diff --git a/desktop/source/deployment/registry/script/dp_script.cxx b/desktop/source/deployment/registry/script/dp_script.cxx index 45fb378f1c..437674a420 100644 --- a/desktop/source/deployment/registry/script/dp_script.cxx +++ b/desktop/source/deployment/registry/script/dp_script.cxx @@ -41,7 +41,6 @@ #include "svl/inettype.hxx" #include "com/sun/star/util/XUpdatable.hpp" #include "com/sun/star/script/XLibraryContainer3.hpp" -#include <com/sun/star/ucb/XSimpleFileAccess.hpp> #include <com/sun/star/util/XMacroExpander.hpp> #include <com/sun/star/uri/XUriReferenceFactory.hpp> #include <memory> @@ -62,7 +61,6 @@ namespace { typedef ::cppu::ImplInheritanceHelper1< ::dp_registry::backend::PackageRegistryBackend, util::XUpdatable > t_helper; -//============================================================================== class BackendImpl : public t_helper { class PackageImpl : public ::dp_registry::backend::Package @@ -102,13 +100,8 @@ class BackendImpl : public t_helper Reference<XCommandEnvironment> const & xCmdEnv ); void addDataToDb(OUString const & url); - void deleteDataFromDb(OUString const & url); - bool isRegisteredInDb(OUString const & url); - - - -// Reference< ucb::XSimpleFileAccess > getFileAccess( void ); -// Reference< ucb::XSimpleFileAccess > m_xSFA; + bool hasActiveEntry(OUString const & url); + void revokeEntryFromDb(OUString const & url); const Reference<deployment::XPackageTypeInfo> m_xBasicLibTypeInfo; const Reference<deployment::XPackageTypeInfo> m_xDialogLibTypeInfo; @@ -124,6 +117,10 @@ public: // XPackageRegistry virtual Sequence< Reference<deployment::XPackageTypeInfo> > SAL_CALL getSupportedPackageTypes() throw (RuntimeException); + virtual void SAL_CALL packageRemoved(OUString const & url, OUString const & mediaType) + throw (deployment::DeploymentException, + uno::RuntimeException); + }; //______________________________________________________________________________ @@ -164,13 +161,13 @@ BackendImpl::BackendImpl( "vnd.sun.star.basic-library"), OUString() /* no file filter */, getResourceString(RID_STR_BASIC_LIB), - RID_IMG_SCRIPTLIB, RID_IMG_SCRIPTLIB_HC ) ), + RID_IMG_SCRIPTLIB) ), m_xDialogLibTypeInfo( new Package::TypeInfo( OUSTR("application/" "vnd.sun.star.dialog-library"), OUString() /* no file filter */, getResourceString(RID_STR_DIALOG_LIB), - RID_IMG_DIALOGLIB, RID_IMG_DIALOGLIB_HC ) ), + RID_IMG_DIALOGLIB) ), m_typeInfos( 2 ) { m_typeInfos[ 0 ] = m_xBasicLibTypeInfo; @@ -192,18 +189,11 @@ void BackendImpl::addDataToDb(OUString const & url) m_backendDb->addEntry(url); } -bool BackendImpl::isRegisteredInDb(OUString const & url) +bool BackendImpl::hasActiveEntry(OUString const & url) { - bool registered = false; if (m_backendDb.get()) - registered = m_backendDb->getEntry(url); - return registered; -} - -void BackendImpl::deleteDataFromDb(OUString const & url) -{ - if (m_backendDb.get()) - m_backendDb->removeEntry(url); + return m_backendDb->hasActiveEntry(url); + return false; } // XUpdatable @@ -220,6 +210,19 @@ BackendImpl::getSupportedPackageTypes() throw (RuntimeException) { return m_typeInfos; } +void BackendImpl::revokeEntryFromDb(OUString const & url) +{ + if (m_backendDb.get()) + m_backendDb->revokeEntry(url); +} + +void BackendImpl::packageRemoved(OUString const & url, OUString const & /*mediaType*/) + throw (deployment::DeploymentException, + uno::RuntimeException) +{ + if (m_backendDb.get()) + m_backendDb->removeEntry(url); +} // PackageRegistryBackend //______________________________________________________________________________ @@ -293,7 +296,6 @@ Reference<deployment::XPackage> BackendImpl::bindPackage_( static_cast<sal_Int16>(-1) ); } -//############################################################################## // Package BackendImpl * BackendImpl::PackageImpl::getMyBackend() const @@ -310,34 +312,83 @@ BackendImpl * BackendImpl::PackageImpl::getMyBackend() const } return pBackend; } -//______________________________________________________________________________ + beans::Optional< beans::Ambiguous<sal_Bool> > BackendImpl::PackageImpl::isRegistered_( - ::osl::ResettableMutexGuard &, - ::rtl::Reference<AbortChannel> const &, - Reference<XCommandEnvironment> const & xCmdEnv ) + ::osl::ResettableMutexGuard & /* guard */, + ::rtl::Reference<AbortChannel> const & /* abortChannel */, + Reference<XCommandEnvironment> const & /* xCmdEnv */ ) { - (void)xCmdEnv; - BackendImpl * that = getMyBackend(); Reference< deployment::XPackage > xThisPackage( this ); - bool registered = that->isRegisteredInDb(getURL()); + bool registered = that->hasActiveEntry(getURL()); return beans::Optional< beans::Ambiguous<sal_Bool> >( true /* IsPresent */, beans::Ambiguous<sal_Bool>( registered, false /* IsAmbiguous */ ) ); } -//______________________________________________________________________________ +void +lcl_maybeRemoveScript( + bool const bExists, + OUString const& rName, + OUString const& rScriptURL, + Reference<css::script::XLibraryContainer3> const& xScriptLibs) +{ + if (bExists && xScriptLibs.is() && xScriptLibs->hasByName(rName)) + { + const OUString sScriptUrl = xScriptLibs->getOriginalLibraryLinkURL(rName); + if (sScriptUrl.equals(rScriptURL)) + xScriptLibs->removeLibrary(rName); + } +} + +bool +lcl_maybeAddScript( + bool const bExists, + OUString const& rName, + OUString const& rScriptURL, + Reference<css::script::XLibraryContainer3> const& xScriptLibs) +{ + if (bExists && xScriptLibs.is()) + { + bool bCanAdd = true; + if (xScriptLibs->hasByName(rName)) + { + const OUString sOriginalUrl = xScriptLibs->getOriginalLibraryLinkURL(rName); + //We assume here that library names in extensions are unique, which may not be the case + //ToDo: If the script exist in another extension, then both extensions must have the + //same id + if (sOriginalUrl.match(OUSTR("vnd.sun.star.expand:$UNO_USER_PACKAGES_CACHE")) + || sOriginalUrl.match(OUSTR("vnd.sun.star.expand:$UNO_SHARED_PACKAGES_CACHE")) + || sOriginalUrl.match(OUSTR("vnd.sun.star.expand:$BUNDLED_EXTENSIONS"))) + { + xScriptLibs->removeLibrary(rName); + bCanAdd = true; + } + else + { + bCanAdd = false; + } + } + + if (bCanAdd) + { + xScriptLibs->createLibraryLink(rName, rScriptURL, false); + return xScriptLibs->hasByName(rName); + } + } + + return false; +} + void BackendImpl::PackageImpl::processPackage_( - ::osl::ResettableMutexGuard &, + ::osl::ResettableMutexGuard & /* guard */, bool doRegisterPackage, bool startup, - ::rtl::Reference<AbortChannel> const &, - Reference<XCommandEnvironment> const & xCmdEnv ) + ::rtl::Reference<AbortChannel> const & /* abortChannel */, + Reference<XCommandEnvironment> const & /* xCmdEnv */ ) { - (void)xCmdEnv; - BackendImpl * that = getMyBackend(); Reference< deployment::XPackage > xThisPackage( this ); @@ -368,7 +419,7 @@ void BackendImpl::PackageImpl::processPackage_( xComponentContext ), UNO_QUERY_THROW ); } } - bool bRegistered = getMyBackend()->isRegisteredInDb(getURL()); + bool bRegistered = getMyBackend()->hasActiveEntry(getURL()); if( !doRegisterPackage ) { //We cannot just call removeLibrary(name) because this could remove a @@ -386,21 +437,10 @@ void BackendImpl::PackageImpl::processPackage_( //we also prevent and live deployment at startup if (!isRemoved() && !startup) { - if (bScript && xScriptLibs.is() && xScriptLibs->hasByName(m_name)) - { - const OUString sScriptUrl = xScriptLibs->getOriginalLibraryLinkURL(m_name); - if (sScriptUrl.equals(m_scriptURL)) - xScriptLibs->removeLibrary(m_name); - } - - if (bDialog && xDialogLibs.is() && xDialogLibs->hasByName(m_dialogName)) - { - const OUString sDialogUrl = xDialogLibs->getOriginalLibraryLinkURL(m_dialogName); - if (sDialogUrl.equals(m_dialogURL)) - xDialogLibs->removeLibrary(m_dialogName); - } + lcl_maybeRemoveScript(bScript, m_name, m_scriptURL, xScriptLibs); + lcl_maybeRemoveScript(bDialog, m_dialogName, m_dialogURL, xDialogLibs); } - getMyBackend()->deleteDataFromDb(getURL()); + getMyBackend()->revokeEntryFromDb(getURL()); return; } } @@ -409,72 +449,14 @@ void BackendImpl::PackageImpl::processPackage_( // Update LibraryContainer bool bScriptSuccess = false; - const bool bReadOnly = false; - bool bDialogSuccess = false; if (!startup) { //If there is a bundled extension, and the user installes the same extension //then the script from the bundled extension must be removed. If this does not work //then live deployment does not work for scripts. - if (bScript && xScriptLibs.is()) - { - bool bCanAdd = true; - if (xScriptLibs->hasByName(m_name)) - { - const OUString sOriginalUrl = xScriptLibs->getOriginalLibraryLinkURL(m_name); - //We assume here that library names in extensions are unique, which may not be the case - //ToDo: If the script exist in another extension, then both extensions must have the - //same id - if (sOriginalUrl.match(OUSTR("vnd.sun.star.expand:$UNO_USER_PACKAGES_CACHE")) - || sOriginalUrl.match(OUSTR("vnd.sun.star.expand:$UNO_SHARED_PACKAGES_CACHE")) - || sOriginalUrl.match(OUSTR("vnd.sun.star.expand:$BUNDLED_EXTENSIONS"))) - { - xScriptLibs->removeLibrary(m_name); - bCanAdd = true; - } - else - { - bCanAdd = false; - } - } - - if (bCanAdd) - { - xScriptLibs->createLibraryLink( m_name, m_scriptURL, bReadOnly ); - bScriptSuccess = xScriptLibs->hasByName( m_name ); - } - } - - - if (bDialog && xDialogLibs.is()) - { - bool bCanAdd = true; - if (xDialogLibs->hasByName(m_dialogName)) - { - const OUString sOriginalUrl = xDialogLibs->getOriginalLibraryLinkURL(m_dialogName); - //We assume here that library names in extensions are unique, which may not be the case - //ToDo: If the script exist in another extension, then both extensions must have the - //same id - if (sOriginalUrl.match(OUSTR("vnd.sun.star.expand:$UNO_USER_PACKAGES_CACHE")) - || sOriginalUrl.match(OUSTR("vnd.sun.star.expand:$UNO_SHARED_PACKAGES_CACHE")) - || sOriginalUrl.match(OUSTR("vnd.sun.star.expand:$BUNDLED_EXTENSIONS"))) - { - xDialogLibs->removeLibrary(m_dialogName); - bCanAdd = true; - } - else - { - bCanAdd = false; - } - } - - if (bCanAdd) - { - xDialogLibs->createLibraryLink( m_dialogName, m_dialogURL, bReadOnly ); - bDialogSuccess = xDialogLibs->hasByName(m_dialogName); - } - } + bScriptSuccess = lcl_maybeAddScript(bScript, m_name, m_scriptURL, xScriptLibs); + bDialogSuccess = lcl_maybeAddScript(bDialog, m_dialogName, m_dialogURL, xDialogLibs); } bool bSuccess = bScript || bDialog; // Something must have happened if( bRunning && !startup) diff --git a/desktop/source/deployment/registry/script/dp_script.hrc b/desktop/source/deployment/registry/script/dp_script.hrc index f5b52f1b1f..f5b52f1b1f 100644..100755 --- a/desktop/source/deployment/registry/script/dp_script.hrc +++ b/desktop/source/deployment/registry/script/dp_script.hrc diff --git a/desktop/source/deployment/registry/script/makefile.mk b/desktop/source/deployment/registry/script/makefile.mk index 708def3580..708def3580 100644..100755 --- a/desktop/source/deployment/registry/script/makefile.mk +++ b/desktop/source/deployment/registry/script/makefile.mk diff --git a/desktop/source/deployment/registry/sfwk/dp_parceldesc.cxx b/desktop/source/deployment/registry/sfwk/dp_parceldesc.cxx index 9d66e80f71..4ac316e785 100644 --- a/desktop/source/deployment/registry/sfwk/dp_parceldesc.cxx +++ b/desktop/source/deployment/registry/sfwk/dp_parceldesc.cxx @@ -99,9 +99,9 @@ ParcelDescDocHandler::startElement( const OUString& aName, aName + OUSTR("\n")); if ( !skipIndex ) { - if ( aName.equals( OUString::createFromAscii( "parcel" ) ) ) + if ( aName.equals( OUString(RTL_CONSTASCII_USTRINGPARAM( "parcel" )) ) ) { - m_sLang = xAttribs->getValueByName( OUString::createFromAscii( "language" ) ); + m_sLang = xAttribs->getValueByName( OUString(RTL_CONSTASCII_USTRINGPARAM( "language" )) ); } ++skipIndex; } diff --git a/desktop/source/deployment/registry/sfwk/dp_sfwk.cxx b/desktop/source/deployment/registry/sfwk/dp_sfwk.cxx index 0e8dc29d53..63b1fb8189 100644 --- a/desktop/source/deployment/registry/sfwk/dp_sfwk.cxx +++ b/desktop/source/deployment/registry/sfwk/dp_sfwk.cxx @@ -89,6 +89,7 @@ class BackendImpl : public ::dp_registry::backend::PackageRegistryBackend OUString const & identifier); // XPackage virtual OUString SAL_CALL getDescription() throw (RuntimeException); + virtual OUString SAL_CALL getLicenseText() throw (RuntimeException); }; friend class PackageImpl; @@ -99,6 +100,7 @@ class BackendImpl : public ::dp_registry::backend::PackageRegistryBackend Reference<XCommandEnvironment> const & xCmdEnv ); const Reference<deployment::XPackageTypeInfo> m_xTypeInfo; + public: BackendImpl( @@ -108,6 +110,9 @@ public: // XPackageRegistry virtual Sequence< Reference<deployment::XPackageTypeInfo> > SAL_CALL getSupportedPackageTypes() throw (RuntimeException); + virtual void SAL_CALL packageRemoved(OUString const & url, OUString const & mediaType) + throw (deployment::DeploymentException, + uno::RuntimeException); }; BackendImpl * BackendImpl::PackageImpl::getMyBackend() const @@ -134,6 +139,12 @@ OUString BackendImpl::PackageImpl::getDescription() throw (RuntimeException) } //______________________________________________________________________________ +OUString BackendImpl::PackageImpl::getLicenseText() throw (RuntimeException) +{ + return Package::getDescription(); +} + +//______________________________________________________________________________ BackendImpl::PackageImpl::PackageImpl( ::rtl::Reference<BackendImpl> const & myBackend, OUString const & url, OUString const & libType, bool bRemoved, @@ -168,50 +179,15 @@ BackendImpl::BackendImpl( OUSTR("application/vnd.sun.star.framework-script"), OUString() /* no file filter */, OUSTR("Scripting Framework Script Library"), - RID_IMG_SCRIPTLIB, RID_IMG_SCRIPTLIB_HC ) ) + RID_IMG_SCRIPTLIB ) ) { if (! transientMode()) { -/* - if (office_is_running()) - { - Reference<XComponentContext> xContext( getComponentContext() ); - m_xScriptLibs.set( - xContext->getServiceManager()->createInstanceWithContext( - OUSTR("com.sun.star." - "script.ApplicationScriptLibraryContainer"), - xContext ), UNO_QUERY_THROW ); - m_xDialogLibs.set( - xContext->getServiceManager()->createInstanceWithContext( - OUSTR("com.sun.star." - "script.ApplicationDialogLibraryContainer"), - xContext ), UNO_QUERY_THROW ); - } - else - { - OUString basic_path( - m_eContext == CONTEXT_USER - ? OUSTR("vnd.sun.star.expand:${$BRAND_BASE_DIR/program/" - SAL_CONFIGFILE("bootstrap") - ":UserInstallation}/user/basic") - : OUSTR("vnd.sun.star.expand:${$BRAND_BASE_DIR/program/" - SAL_CONFIGFILE("bootstrap") - ":BaseInstallation}/share/basic") ); - m_basic_script_libs.reset( - new LibraryContainer( - makeURL( basic_path, OUSTR("script.xlc") ), - getMutex(), - getComponentContext() ) ); - m_dialog_libs.reset( - new LibraryContainer( - makeURL( basic_path, OUSTR("dialog.xlc") ), - getMutex(), - getComponentContext() ) ); - } -*/ } } + + // XPackageRegistry //______________________________________________________________________________ Sequence< Reference<deployment::XPackageTypeInfo> > @@ -220,6 +196,12 @@ BackendImpl::getSupportedPackageTypes() throw (RuntimeException) return Sequence< Reference<deployment::XPackageTypeInfo> >(&m_xTypeInfo, 1); } +void BackendImpl::packageRemoved(OUString const & /*url*/, OUString const & /*mediaType*/) + throw (deployment::DeploymentException, + uno::RuntimeException) +{ +} + // PackageRegistryBackend //______________________________________________________________________________ Reference<deployment::XPackage> BackendImpl::bindPackage_( @@ -256,7 +238,7 @@ Reference<deployment::XPackage> BackendImpl::bindPackage_( { if (subType.EqualsIgnoreCaseAscii("vnd.sun.star.framework-script")) { - OUString lang = OUString::createFromAscii("Script"); + OUString lang = OUString(RTL_CONSTASCII_USTRINGPARAM("Script")); OUString sParcelDescURL = makeURL( url, OUSTR("parcel-descriptor.xml") ); @@ -310,7 +292,6 @@ Reference<deployment::XPackage> BackendImpl::bindPackage_( static_cast<sal_Int16>(-1) ); } -//############################################################################## void BackendImpl::PackageImpl:: initPackageHandler() { @@ -332,6 +313,11 @@ void BackendImpl::PackageImpl:: initPackageHandler() { aContext <<= OUSTR("bundled"); } + else if ( that->m_eContext == CONTEXT_BUNDLED_PREREG ) + { + aContext <<= OUSTR("bundled_prereg"); + } + else { OSL_ASSERT( 0 ); diff --git a/desktop/source/deployment/registry/sfwk/dp_sfwk.hrc b/desktop/source/deployment/registry/sfwk/dp_sfwk.hrc index ed164251cc..ed164251cc 100644..100755 --- a/desktop/source/deployment/registry/sfwk/dp_sfwk.hrc +++ b/desktop/source/deployment/registry/sfwk/dp_sfwk.hrc diff --git a/desktop/source/deployment/registry/sfwk/makefile.mk b/desktop/source/deployment/registry/sfwk/makefile.mk index a052296d5c..a052296d5c 100644..100755 --- a/desktop/source/deployment/registry/sfwk/makefile.mk +++ b/desktop/source/deployment/registry/sfwk/makefile.mk diff --git a/desktop/source/deployment/target.pmk b/desktop/source/deployment/target.pmk index 82b41766b2..82b41766b2 100644..100755 --- a/desktop/source/deployment/target.pmk +++ b/desktop/source/deployment/target.pmk diff --git a/desktop/source/deployment/unopkg/makefile.mk b/desktop/source/deployment/unopkg/makefile.mk index 06b39cd2d0..06b39cd2d0 100644..100755 --- a/desktop/source/deployment/unopkg/makefile.mk +++ b/desktop/source/deployment/unopkg/makefile.mk diff --git a/desktop/source/inc/helpid.hrc b/desktop/source/inc/helpid.hrc index 2435467f76..facdc1f410 100644..100755 --- a/desktop/source/inc/helpid.hrc +++ b/desktop/source/inc/helpid.hrc @@ -28,51 +28,40 @@ #if ! defined INCLUDED_DESKTOP_HELPID_HRC #define INCLUDED_DESKTOP_HELPID_HRC -#include "svl/solar.hrc" +#define HID_PACKAGE_MANAGER "DESKTOP_HID_PACKAGE_MANAGER" +#define HID_PACKAGE_MANAGER_TREELISTBOX "DESKTOP_HID_PACKAGE_MANAGER_TREELISTBOX" +#define HID_PACKAGE_MANAGER_PROGRESS "DESKTOP_HID_PACKAGE_MANAGER_PROGRESS" +#define HID_PACKAGE_MANAGER_PROGRESS_CANCEL "DESKTOP_HID_PACKAGE_MANAGER_PROGRESS_CANCEL" +#define HID_PACKAGE_MANAGER_MENU_ITEM "DESKTOP_HID_PACKAGE_MANAGER_MENU_ITEM" -#define HID_GLOBAL_FALLBACK 0xFFFFFFFF +#define HID_FIRSTSTART_DIALOG "DESKTOP_HID_FIRSTSTART_DIALOG" +#define HID_FIRSTSTART_WELCOME "DESKTOP_HID_FIRSTSTART_WELCOME" +#define HID_FIRSTSTART_LICENSE "DESKTOP_HID_FIRSTSTART_LICENSE" +#define HID_FIRSTSTART_MIGRATION "DESKTOP_HID_FIRSTSTART_MIGRATION" +#define HID_FIRSTSTART_REGISTRATION "DESKTOP_HID_FIRSTSTART_REGISTRATION" +#define HID_FIRSTSTART_USER "DESKTOP_HID_FIRSTSTART_USER" +#define HID_FIRSTSTART_PREV "DESKTOP_HID_FIRSTSTART_PREV" +#define HID_FIRSTSTART_NEXT "DESKTOP_HID_FIRSTSTART_NEXT" +#define HID_FIRSTSTART_CANCEL "DESKTOP_HID_FIRSTSTART_CANCEL" +#define HID_FIRSTSTART_FINISH "DESKTOP_HID_FIRSTSTART_FINISH" +#define UID_FIRSTSTART_HELP "DESKTOP_UID_FIRSTSTART_HELP" +#define UID_BTN_LICENSE_ACCEPT "DESKTOP_UID_BTN_LICENSE_ACCEPT" +#define HID_FIRSTSTART_UPDATE_CHECK "DESKTOP_HID_FIRSTSTART_UPDATE_CHECK" +#define HID_DEPLOYMENT_GUI_UPDATE "DESKTOP_HID_DEPLOYMENT_GUI_UPDATE" +#define HID_DEPLOYMENT_GUI_UPDATEINSTALL "DESKTOP_HID_DEPLOYMENT_GUI_UPDATEINSTALL" +#define HID_DEPLOYMENT_GUI_UPDATE_PUBLISHER "DESKTOP_HID_DEPLOYMENT_GUI_UPDATE_PUBLISHER" +#define HID_DEPLOYMENT_GUI_UPDATE_RELEASENOTES "DESKTOP_HID_DEPLOYMENT_GUI_UPDATE_RELEASENOTES" +#define HID_DEPLOYMENT_GUI_UPDATE_AVAILABLE_UPDATES "DESKTOP_HID_DEPLOYMENT_GUI_UPDATE_AVAILABLE_UPDATES" -#define HID_PACKAGE_MANAGER (HID_DESKTOP_START + 0) -#define HID_PACKAGE_MANAGER_TREELISTBOX (HID_DESKTOP_START + 1) -#define HID_PACKAGE_MANAGER_PROGRESS (HID_DESKTOP_START + 2) -#define HID_PACKAGE_MANAGER_PROGRESS_CANCEL (HID_DESKTOP_START + 3) -#define HID_PACKAGE_MANAGER_MENU_ITEM (HID_DESKTOP_START + 4) +#define HID_EXTENSION_MANAGER_LISTBOX "DESKTOP_HID_EXTENSION_MANAGER_LISTBOX" +#define HID_EXTENSION_MANAGER_LISTBOX_OPTIONS "DESKTOP_HID_EXTENSION_MANAGER_LISTBOX_OPTIONS" +#define HID_EXTENSION_MANAGER_LISTBOX_ENABLE "DESKTOP_HID_EXTENSION_MANAGER_LISTBOX_ENABLE" +#define HID_EXTENSION_MANAGER_LISTBOX_DISABLE "DESKTOP_HID_EXTENSION_MANAGER_LISTBOX_DISABLE" +#define HID_EXTENSION_MANAGER_LISTBOX_REMOVE "DESKTOP_HID_EXTENSION_MANAGER_LISTBOX_REMOVE" -#define HID_FIRSTSTART_DIALOG (HID_DESKTOP_START + 5) -#define HID_FIRSTSTART_WELCOME (HID_DESKTOP_START + 6) -#define HID_FIRSTSTART_LICENSE (HID_DESKTOP_START + 7) -#define HID_FIRSTSTART_MIGRATION (HID_DESKTOP_START + 8) -#define HID_FIRSTSTART_REGISTRATION (HID_DESKTOP_START + 9) -#define HID_FIRSTSTART_USER (HID_DESKTOP_START + 10) -#define HID_FIRSTSTART_PREV (HID_DESKTOP_START + 11) -#define HID_FIRSTSTART_NEXT (HID_DESKTOP_START + 12) -#define HID_FIRSTSTART_CANCEL (HID_DESKTOP_START + 13) -#define HID_FIRSTSTART_FINISH (HID_DESKTOP_START + 14) -#define UID_FIRSTSTART_HELP (HID_DESKTOP_START + 15) -#define UID_BTN_LICENSE_ACCEPT (HID_DESKTOP_START + 16) -#define HID_FIRSTSTART_UPDATE_CHECK (HID_DESKTOP_START + 17) -#define HID_DEPLOYMENT_GUI_UPDATE (HID_DESKTOP_START + 18) -#define HID_DEPLOYMENT_GUI_UPDATEINSTALL (HID_DESKTOP_START + 19) -#define HID_DEPLOYMENT_GUI_UPDATE_PUBLISHER (HID_DESKTOP_START + 20) -#define HID_DEPLOYMENT_GUI_UPDATE_RELEASENOTES (HID_DESKTOP_START + 21) -#define HID_DEPLOYMENT_GUI_UPDATE_AVAILABLE_UPDATES (HID_DESKTOP_START + 22) +#define HID_EXTENSION_DEPENDENCIES "DESKTOP_HID_EXTENSION_DEPENDENCIES" -#define HID_EXTENSION_MANAGER_LISTBOX (HID_DESKTOP_START + 23) -#define HID_EXTENSION_MANAGER_LISTBOX_OPTIONS (HID_DESKTOP_START + 24) -#define HID_EXTENSION_MANAGER_LISTBOX_ENABLE (HID_DESKTOP_START + 25) -#define HID_EXTENSION_MANAGER_LISTBOX_DISABLE (HID_DESKTOP_START + 26) -#define HID_EXTENSION_MANAGER_LISTBOX_REMOVE (HID_DESKTOP_START + 27) - -#define HID_EXTENSION_DEPENDENCIES (HID_DESKTOP_START + 28) - -#define HID_PACKAGE_MANAGER_UPD_REQ (HID_DESKTOP_START + 29) - -#define ACT_DESKTOP_HID_END HID_PACKAGE_MANAGER_UPD_REQ - -// check bounds: -#if ACT_DESKTOP_HID_END > HID_DESKTOP_END -#error Resource overflow in #line, #file -#endif +#define HID_PACKAGE_MANAGER_UPD_REQ "DESKTOP_HID_PACKAGE_MANAGER_UPD_REQ" #endif diff --git a/desktop/source/migration/cfgfilter.cxx b/desktop/source/migration/cfgfilter.cxx deleted file mode 100644 index 2e5a20e708..0000000000 --- a/desktop/source/migration/cfgfilter.cxx +++ /dev/null @@ -1,336 +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 "cfgfilter.hxx" - -#include <com/sun/star/beans/NamedValue.hpp> -#include <unotools/textsearch.hxx> - -using namespace rtl; -using namespace com::sun::star; -using namespace com::sun::star::uno; -using namespace com::sun::star::lang; -using namespace com::sun::star::beans; -using namespace com::sun::star::configuration::backend; - -namespace desktop { - -CConfigFilter::CConfigFilter(const strings_v* include, const strings_v* exclude) - : m_pvInclude(include) - , m_pvExclude(exclude) -{ -} - -void SAL_CALL CConfigFilter::initialize(const Sequence< Any >& seqArgs) - throw (Exception) -{ - NamedValue nv; - for (sal_Int32 i=0; i < seqArgs.getLength(); i++) - { - if (seqArgs[i] >>= nv) - { - if (nv.Name.equalsAscii("Source")) - nv.Value >>= m_xSourceLayer; - if (nv.Name.equalsAscii("ComponentName")) - nv.Value >>= m_aCurrentComponent; - } - } - if (m_aCurrentComponent.getLength() == 0) - m_aCurrentComponent = OUString::createFromAscii("unknown.component"); - - if (!m_xSourceLayer.is()) { - throw Exception(); - } - -} - - -void CConfigFilter::pushElement(rtl::OUString aName, sal_Bool bUse) -{ - OUString aPath; - if (!m_elementStack.empty()) { - aPath = m_elementStack.top().path; // or use base path - aPath += OUString::createFromAscii("/"); - } - aPath += aName; - - // create element - element elem; - elem.name = aName; - elem.path = aPath; - elem.use = bUse; - m_elementStack.push(elem); -} - -sal_Bool CConfigFilter::checkCurrentElement() -{ - return m_elementStack.top().use; -} - -sal_Bool CConfigFilter::checkElement(rtl::OUString aName) -{ - - sal_Bool bResult = sal_False; - - // get full pathname for element - OUString aFullPath; - if (!m_elementStack.empty()) - aFullPath = m_elementStack.top().path + OUString::createFromAscii("/"); - - aFullPath += aName; - - // check whether any include patterns patch this path - for (strings_v::const_iterator i_in = m_pvInclude->begin(); - i_in != m_pvInclude->end(); i_in++) - { - // pattern is beginning of path - // or path is a begiing for pattern - if (i_in->match(aFullPath.copy(0, i_in->getLength()>aFullPath.getLength() - ? aFullPath.getLength() : i_in->getLength()), 0)) - { - bResult = sal_True; - break; // one match is enough - } - } - // if match is found, check for exclusion - if (bResult) - { - for (strings_v::const_iterator i_ex = m_pvExclude->begin(); - i_ex != m_pvExclude->end(); i_ex++) - { - if (aFullPath.match(*i_ex, 0)) // pattern is beginning of path - { - bResult = sal_False; - break; // one is enough... - } - } - } - return bResult; -} - -void CConfigFilter::popElement() -{ - m_elementStack.pop(); -} - - -void SAL_CALL CConfigFilter::readData( - const Reference< configuration::backend::XLayerHandler >& layerHandler) - throw ( - com::sun::star::lang::NullPointerException, lang::WrappedTargetException, - com::sun::star::configuration::backend::MalformedDataException) -{ - // when readData is called, the submitted handler will be stored - // in m_xLayerHandler. we will then submit ourself as a handler to - // the SourceLayer in m_xSourceLayer. - // when the source calls our handler functions we will use the patterns that - // where given in the ctor to decide whther they should be relaied to the caller - - if (m_xSourceLayer.is() && layerHandler.is()) - { - m_xLayerHandler = layerHandler; - m_xSourceLayer->readData(Reference<XLayerHandler>(static_cast< XLayerHandler* >(this))); - } else - { - throw NullPointerException(); - } -} - -// XLayerHandler -void SAL_CALL CConfigFilter::startLayer() - throw(::com::sun::star::lang::WrappedTargetException) -{ - m_xLayerHandler->startLayer(); -} - -void SAL_CALL CConfigFilter::endLayer() - throw( - ::com::sun::star::configuration::backend::MalformedDataException, - ::com::sun::star::lang::WrappedTargetException ) -{ - m_xLayerHandler->endLayer(); -} - -void SAL_CALL CConfigFilter::overrideNode( - const OUString& aName, - sal_Int16 aAttributes, - sal_Bool bClear) - throw( - ::com::sun::star::configuration::backend::MalformedDataException, - ::com::sun::star::lang::WrappedTargetException ) -{ - if (checkElement(aName)) - { - m_xLayerHandler->overrideNode(aName, aAttributes, bClear); - pushElement(aName); - } - else - pushElement(aName, sal_False); -} - -void SAL_CALL CConfigFilter::addOrReplaceNode( - const OUString& aName, - sal_Int16 aAttributes) - throw( - ::com::sun::star::configuration::backend::MalformedDataException, - ::com::sun::star::lang::WrappedTargetException ) -{ - if (checkElement(aName)) - { - m_xLayerHandler->addOrReplaceNode(aName, aAttributes); - pushElement(aName); - } - else - pushElement(aName, sal_False); -} - -void SAL_CALL CConfigFilter::addOrReplaceNodeFromTemplate( - const OUString& aName, - const com::sun::star::configuration::backend::TemplateIdentifier& aTemplate, - sal_Int16 aAttributes ) - throw( - ::com::sun::star::configuration::backend::MalformedDataException, - ::com::sun::star::lang::WrappedTargetException ) -{ - if (checkElement(aName)) - { - m_xLayerHandler->addOrReplaceNodeFromTemplate(aName, aTemplate, aAttributes); - pushElement(aName); - } - else - pushElement(aName, sal_False); -} - -void SAL_CALL CConfigFilter::endNode() - throw( - ::com::sun::star::configuration::backend::MalformedDataException, - ::com::sun::star::lang::WrappedTargetException ) -{ - if (checkCurrentElement()) - { - m_xLayerHandler->endNode(); - } - popElement(); -} - -void SAL_CALL CConfigFilter::dropNode( - const OUString& aName ) - throw( - ::com::sun::star::configuration::backend::MalformedDataException, - ::com::sun::star::lang::WrappedTargetException ) -{ - // does not get pushed - if (checkElement(aName)) - { - m_xLayerHandler->dropNode(aName); - } -} - -void SAL_CALL CConfigFilter::overrideProperty( - const OUString& aName, - sal_Int16 aAttributes, - const Type& aType, - sal_Bool bClear ) - throw( - ::com::sun::star::configuration::backend::MalformedDataException, - ::com::sun::star::lang::WrappedTargetException ) -{ - if (checkElement(aName)){ - m_xLayerHandler->overrideProperty(aName, aAttributes, aType, bClear); - pushElement(aName); - } - else - pushElement(aName, sal_False); -} - -void SAL_CALL CConfigFilter::setPropertyValue( - const Any& aValue ) - throw( - ::com::sun::star::configuration::backend::MalformedDataException, - ::com::sun::star::lang::WrappedTargetException ) -{ - if (checkCurrentElement()) - m_xLayerHandler->setPropertyValue(aValue); -} - -void SAL_CALL CConfigFilter::setPropertyValueForLocale( - const Any& aValue, - const OUString& aLocale ) - throw( - ::com::sun::star::configuration::backend::MalformedDataException, - ::com::sun::star::lang::WrappedTargetException ) -{ - if (checkCurrentElement()) - m_xLayerHandler->setPropertyValueForLocale(aValue, aLocale); -} - -void SAL_CALL CConfigFilter::endProperty() - throw( - ::com::sun::star::configuration::backend::MalformedDataException, - ::com::sun::star::lang::WrappedTargetException ) -{ - if (checkCurrentElement()) - { - m_xLayerHandler->endProperty(); - } - popElement(); - -} - -void SAL_CALL CConfigFilter::addProperty( - const rtl::OUString& aName, - sal_Int16 aAttributes, - const Type& aType ) - throw( - ::com::sun::star::configuration::backend::MalformedDataException, - ::com::sun::star::lang::WrappedTargetException ) -{ - if (checkElement(aName)) - m_xLayerHandler->addProperty(aName, aAttributes, aType); -} - -void SAL_CALL CConfigFilter::addPropertyWithValue( - const rtl::OUString& aName, - sal_Int16 aAttributes, - const Any& aValue ) - throw( - ::com::sun::star::configuration::backend::MalformedDataException, - ::com::sun::star::lang::WrappedTargetException ) -{ - // add property with value doesn't push the property - if (checkElement(aName)) - m_xLayerHandler->addPropertyWithValue(aName, aAttributes, aValue); - -} - -} // namespace desktop - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/desktop/source/migration/cfgfilter.hxx b/desktop/source/migration/cfgfilter.hxx deleted file mode 100644 index cec890354e..0000000000 --- a/desktop/source/migration/cfgfilter.hxx +++ /dev/null @@ -1,175 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -#ifndef _DESKTOP_CFGFILTER_HXX_ -#define _DESKTOP_CFGFILTER_HXX_ - -#include <stack> - -#include <sal/types.h> -#include <rtl/ustring.hxx> - -#include <cppuhelper/implbase2.hxx> -#include <cppuhelper/implbase3.hxx> - -#include <com/sun/star/uno/Reference.hxx> -#include <com/sun/star/uno/Any.hxx> -#include <com/sun/star/uno/Type.hxx> - -#include <com/sun/star/lang/XInitialization.hpp> -#include <com/sun/star/configuration/backend/XLayer.hpp> -#include <com/sun/star/configuration/backend/XLayerHandler.hpp> -#include <com/sun/star/configuration/backend/TemplateIdentifier.hpp> - - -#include "migration_impl.hxx" - -#define NS_CSS com::sun::star -#define NS_UNO com::sun::star::uno - - -namespace desktop { - -struct element -{ - rtl::OUString name; - rtl::OUString path; - sal_Bool use; - -}; - -typedef std::stack< element > element_stack; - -// XInitialization: -// -> Source : XLayer -// XLayer -// XLayerHandler -class CConfigFilter : public cppu::WeakImplHelper3< - NS_CSS::configuration::backend::XLayer, - NS_CSS::configuration::backend::XLayerHandler, - NS_CSS::lang::XInitialization> -{ - -private: - NS_UNO::Reference< NS_CSS::configuration::backend::XLayerHandler > m_xLayerHandler; - NS_UNO::Reference< NS_CSS::configuration::backend::XLayer > m_xSourceLayer; - - rtl::OUString m_aCurrentComponent; - - const strings_v *m_pvInclude; - const strings_v *m_pvExclude; - - element_stack m_elementStack; - - void pushElement(rtl::OUString aName, sal_Bool bUse = sal_True); - void popElement(); - sal_Bool checkElement(rtl::OUString aName); - sal_Bool checkCurrentElement(); - -public: - CConfigFilter(const strings_v* include, const strings_v* exclude); - - // XInitialization - virtual void SAL_CALL initialize(const NS_UNO::Sequence< NS_UNO::Any >& seqArgs) - throw (NS_UNO::Exception); - - // XLayer - virtual void SAL_CALL readData( - const NS_UNO::Reference< NS_CSS::configuration::backend::XLayerHandler >& layerHandler) - throw (NS_CSS::lang::NullPointerException, NS_CSS::lang::WrappedTargetException, - NS_CSS::configuration::backend::MalformedDataException); - - // XLayerHandler - virtual void SAL_CALL startLayer() - throw(::com::sun::star::lang::WrappedTargetException); - - virtual void SAL_CALL endLayer() - throw( - ::com::sun::star::configuration::backend::MalformedDataException, - ::com::sun::star::lang::WrappedTargetException ); - - virtual void SAL_CALL overrideNode( - const rtl::OUString& aName, - sal_Int16 aAttributes, - sal_Bool bClear) - throw( - ::com::sun::star::configuration::backend::MalformedDataException, - ::com::sun::star::lang::WrappedTargetException ); - - virtual void SAL_CALL addOrReplaceNode( - const rtl::OUString& aName, - sal_Int16 aAttributes) - throw( - ::com::sun::star::configuration::backend::MalformedDataException, - ::com::sun::star::lang::WrappedTargetException ); - - virtual void SAL_CALL addOrReplaceNodeFromTemplate( - const rtl::OUString& aName, - const NS_CSS::configuration::backend::TemplateIdentifier& aTemplate, - sal_Int16 aAttributes ) - throw( - ::com::sun::star::configuration::backend::MalformedDataException, - ::com::sun::star::lang::WrappedTargetException ); - - virtual void SAL_CALL endNode() - throw( - ::com::sun::star::configuration::backend::MalformedDataException, - ::com::sun::star::lang::WrappedTargetException ); - - virtual void SAL_CALL dropNode( - const rtl::OUString& aName ) - throw( - ::com::sun::star::configuration::backend::MalformedDataException, - ::com::sun::star::lang::WrappedTargetException ); - - virtual void SAL_CALL overrideProperty( - const rtl::OUString& aName, - sal_Int16 aAttributes, - const NS_UNO::Type& aType, - sal_Bool bClear ) - throw( - ::com::sun::star::configuration::backend::MalformedDataException, - ::com::sun::star::lang::WrappedTargetException ); - - virtual void SAL_CALL setPropertyValue( - const NS_UNO::Any& aValue ) - throw( - ::com::sun::star::configuration::backend::MalformedDataException, - ::com::sun::star::lang::WrappedTargetException ); - - virtual void SAL_CALL setPropertyValueForLocale( - const NS_UNO::Any& aValue, - const rtl::OUString& aLocale ) - throw( - ::com::sun::star::configuration::backend::MalformedDataException, - ::com::sun::star::lang::WrappedTargetException ); - - virtual void SAL_CALL endProperty() - throw( - ::com::sun::star::configuration::backend::MalformedDataException, - ::com::sun::star::lang::WrappedTargetException ); - - virtual void SAL_CALL addProperty( - const rtl::OUString& aName, - sal_Int16 aAttributes, - const NS_UNO::Type& aType ) - throw( - ::com::sun::star::configuration::backend::MalformedDataException, - ::com::sun::star::lang::WrappedTargetException ); - - virtual void SAL_CALL addPropertyWithValue( - const rtl::OUString& aName, - sal_Int16 aAttributes, - const NS_UNO::Any& aValue ) - throw( - ::com::sun::star::configuration::backend::MalformedDataException, - ::com::sun::star::lang::WrappedTargetException ); - -}; - -} // namespace desktop -#undef NS_CSS -#undef NS_UNO - -#endif - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/desktop/source/migration/makefile.mk b/desktop/source/migration/makefile.mk index 2624fcda5a..b20b4c5797 100644..100755 --- a/desktop/source/migration/makefile.mk +++ b/desktop/source/migration/makefile.mk @@ -45,8 +45,7 @@ CDEFS+=-I..$/app CDEFS+=-I$(PRJ)/inc SLOFILES = \ - $(SLO)$/migration.obj \ - $(SLO)$/cfgfilter.obj + $(SLO)$/migration.obj # --- Targets ------------------------------------------------------ diff --git a/desktop/source/migration/migration.cxx b/desktop/source/migration/migration.cxx index e66d1269ea..7834b44624 100644 --- a/desktop/source/migration/migration.cxx +++ b/desktop/source/migration/migration.cxx @@ -35,7 +35,6 @@ #include "migration.hxx" #include "migration_impl.hxx" -#include "cfgfilter.hxx" #include <unotools/textsearch.hxx> #include <comphelper/processfactory.hxx> @@ -66,7 +65,6 @@ #include <com/sun/star/ui/XUIConfigurationStorage.hpp> #include <com/sun/star/ui/XUIConfigurationPersistence.hpp> -using namespace rtl; using namespace osl; using namespace std; using namespace com::sun::star::task; @@ -77,6 +75,9 @@ using namespace com::sun::star::container; using com::sun::star::uno::Exception; using namespace com::sun::star; +using ::rtl::OUString; +using ::rtl::OString; + namespace desktop { static const ::rtl::OUString ITEM_DESCRIPTOR_COMMANDURL(RTL_CONSTASCII_USTRINGPARAM("CommandURL")); @@ -111,7 +112,7 @@ static const ::rtl::OUString MIGRATION_STAMP_NAME(RTL_CONSTASCII_USTRINGPARAM("/ { for ( sal_Int32 i = 0; i < aPropSeq.getLength(); i++ ) { - if ( aPropSeq[i].Name.equalsAscii( "Label" )) + if ( aPropSeq[i].Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "Label" ) )) { aPropSeq[i].Value >>= aStr; break; @@ -136,19 +137,6 @@ static const ::rtl::OUString MIGRATION_STAMP_NAME(RTL_CONSTASCII_USTRINGPARAM("/ return sLabel; } -::rtl::OUString stripHotKey( const ::rtl::OUString& str ) -{ - sal_Int32 index = str.indexOf( '~' ); - if ( index == -1 ) - { - return str; - } - else - { - return str.replaceAt( index, 1, ::rtl::OUString() ); - } -} - ::rtl::OUString mapModuleShortNameToIdentifier(const ::rtl::OUString& sShortName) { ::rtl::OUString sIdentifier; @@ -243,9 +231,10 @@ void Migration::migrateSettingsIfNecessary() { OString aMsg("doMigration() exception: "); aMsg += OUStringToOString(e.Message, RTL_TEXTENCODING_ASCII_US); - OSL_ENSURE(sal_False, aMsg.getStr()); + OSL_FAIL(aMsg.getStr()); } OSL_ENSURE(bResult, "Migration has not been successfull"); + (void)bResult; } MigrationImpl::MigrationImpl(const uno::Reference< XMultiServiceFactory >& xFactory) @@ -345,7 +334,7 @@ sal_Bool MigrationImpl::doMigration() OString aMsg("An unexpected exception was thrown during migration"); aMsg += "\nOldVersion: " + OUStringToOString(m_aInfo.productname, RTL_TEXTENCODING_ASCII_US); aMsg += "\nDataPath : " + OUStringToOString(m_aInfo.userdata, RTL_TEXTENCODING_ASCII_US); - OSL_ENSURE(sal_False, aMsg.getStr()); + OSL_FAIL(aMsg.getStr()); } // prevent running the migration multiple times @@ -360,7 +349,7 @@ void MigrationImpl::refresh() if (xRefresh.is()) xRefresh->refresh(); else - OSL_ENSURE(sal_False, "could not get XRefresh interface from default config provider. No refresh done."); + OSL_FAIL("could not get XRefresh interface from default config provider. No refresh done."); } @@ -421,7 +410,7 @@ bool MigrationImpl::readAvailableMigrations(migrations_available& rAvailableMigr // get supported version names uno::Reference< XNameAccess > aMigrationAccess(getConfigAccess("org.openoffice.Setup/Migration/SupportedVersions"), uno::UNO_QUERY_THROW); uno::Sequence< OUString > seqSupportedVersions = aMigrationAccess->getElementNames(); - + const OUString aVersionIdentifiers( RTL_CONSTASCII_USTRINGPARAM( "VersionIdentifiers" )); const OUString aPriorityIdentifier( RTL_CONSTASCII_USTRINGPARAM( "Priority" )); @@ -465,7 +454,6 @@ migrations_vr MigrationImpl::readMigrationSteps(const ::rtl::OUString& rMigratio { // get current migration step theNameAccess->getByName(seqMigrations[i]) >>= tmpAccess; - // tmpStepPtr = new migration_step(); migration_step tmpStep; tmpStep.name = seqMigrations[i]; @@ -592,7 +580,7 @@ sal_Int32 MigrationImpl::findPreferedMigrationProcess(const migrations_available { sal_Int32 nIndex( -1 ); sal_Int32 i( 0 ); - + migrations_available::const_iterator rIter = rAvailableMigrations.begin(); while ( rIter != rAvailableMigrations.end() ) { @@ -635,9 +623,9 @@ strings_vr MigrationImpl::applyPatterns(const strings_v& vSet, const strings_v& end = (xub_StrLen)(i_set->getLength()); if (ts.SearchFrwrd(*i_set, &start, &end)) vrResult->push_back(*i_set); - i_set++; + ++i_set; } - i_pat++; + ++i_pat; } return vrResult; } @@ -674,7 +662,7 @@ strings_vr MigrationImpl::getAllFiles(const OUString& baseURL) const { vrSubResult = getAllFiles(*i); vrResult->insert(vrResult->end(), vrSubResult->begin(), vrSubResult->end()); - i++; + ++i; } } return vrResult; @@ -704,7 +692,7 @@ strings_vr MigrationImpl::compileFileList() vrExclude = applyPatterns(*vrFiles, i_migr->excludeFiles); subtract(*vrInclude, *vrExclude); vrResult->insert(vrResult->end(), vrInclude->begin(), vrInclude->end()); - i_migr++; + ++i_migr; } return vrResult; } @@ -838,9 +826,9 @@ void MigrationImpl::subtract(strings_v& va, const strings_v& vb_c) const break; } else - i_in++; + ++i_in; } - i_ex++; + ++i_ex; } } @@ -871,7 +859,7 @@ uno::Reference< XNameAccess > MigrationImpl::getConfigAccess(const sal_Char* pPa } catch (com::sun::star::uno::Exception& e) { OString aMsg = OUStringToOString(e.Message, RTL_TEXTENCODING_ASCII_US); - OSL_ENSURE(sal_False, aMsg.getStr()); + OSL_FAIL(aMsg.getStr()); } return xNameAccess; } @@ -901,14 +889,14 @@ void MigrationImpl::copyFiles() OString msg("Cannot copy "); msg += OUStringToOString(*i_file, RTL_TEXTENCODING_UTF8) + " to " + OUStringToOString(destName, RTL_TEXTENCODING_UTF8); - OSL_ENSURE(sal_False, msg.getStr()); + OSL_FAIL(msg.getStr()); } - i_file++; + ++i_file; } } else { - OSL_ENSURE(sal_False, "copyFiles: UserInstall does not exist"); + OSL_FAIL("copyFiles: UserInstall does not exist"); } } @@ -957,17 +945,17 @@ void MigrationImpl::runServices() OString aMsg("Execution of migration service failed (Exception caught).\nService: "); aMsg += OUStringToOString(i_mig->service, RTL_TEXTENCODING_ASCII_US) + "\nMessage: "; aMsg += OUStringToOString(e.Message, RTL_TEXTENCODING_ASCII_US); - OSL_ENSURE(sal_False, aMsg.getStr()); + OSL_FAIL(aMsg.getStr()); } catch (...) { OString aMsg("Execution of migration service failed (Exception caught).\nService: "); aMsg += OUStringToOString(i_mig->service, RTL_TEXTENCODING_ASCII_US) + "\nNo message available"; - OSL_ENSURE(sal_False, aMsg.getStr()); + OSL_FAIL(aMsg.getStr()); } } - i_mig++; + ++i_mig; } } diff --git a/desktop/source/migration/migration_impl.hxx b/desktop/source/migration/migration_impl.hxx index d66cabad94..a4619b4c8d 100644 --- a/desktop/source/migration/migration_impl.hxx +++ b/desktop/source/migration/migration_impl.hxx @@ -31,7 +31,7 @@ #include <vector> #include <algorithm> #include <memory> -#include <hash_map> +#include <boost/unordered_map.hpp> #include "migration.hxx" @@ -138,7 +138,7 @@ struct MigrationItem ::rtl::OUString GetPrevSibling() const { return m_sPrevSibling; } }; -typedef ::std::hash_map< ::rtl::OUString, +typedef ::boost::unordered_map< ::rtl::OUString, ::std::vector< MigrationItem >, ::rtl::OUStringHash, ::std::equal_to< ::rtl::OUString > > MigrationHashMap; @@ -196,7 +196,7 @@ class MigrationImpl private: strings_vr m_vrVersions; NS_UNO::Reference< NS_CSS::lang::XMultiServiceFactory > m_xFactory; - + migrations_available m_vMigrationsAvailable; // list of all available migrations migrations_vr m_vrMigrations; // list of all migration specs from config install_info m_aInfo; // info about the version being migrated diff --git a/desktop/source/migration/pages.cxx b/desktop/source/migration/pages.cxx new file mode 100644 index 0000000000..291ec4d8b8 --- /dev/null +++ b/desktop/source/migration/pages.cxx @@ -0,0 +1,671 @@ +/************************************************************************* + * + * 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 "pages.hxx" +#include "wizard.hrc" +#include "wizard.hxx" +#include "migration.hxx" +#include <vcl/msgbox.hxx> +#include <vcl/mnemonic.hxx> +#include <vos/security.hxx> +#include <app.hxx> +#include <rtl/ustring.hxx> +#include <osl/file.hxx> +#include <unotools/bootstrap.hxx> +#include <unotools/configmgr.hxx> +#include <unotools/regoptions.hxx> +#include <unotools/useroptions.hxx> +#include <sfx2/basedlgs.hxx> +#include <comphelper/processfactory.hxx> +#include <com/sun/star/lang/XMultiServiceFactory.hpp> +#include <com/sun/star/lang/XInitialization.hpp> +#include <com/sun/star/frame/XDesktop.hpp> +#include <com/sun/star/beans/XMaterialHolder.hpp> +#include <com/sun/star/beans/NamedValue.hpp> +#include <com/sun/star/container/XNameReplace.hpp> +#include <com/sun/star/task/XJobExecutor.hpp> +#include <comphelper/configurationhelper.hxx> +#include <rtl/bootstrap.hxx> +#include <rtl/ustrbuf.hxx> +#include <osl/file.hxx> +#include <osl/thread.hxx> +#include <unotools/bootstrap.hxx> +#include <tools/config.hxx> + +using namespace rtl; +using namespace osl; +using namespace utl; +using namespace svt; +using namespace com::sun::star; +using namespace com::sun::star::frame; +using namespace com::sun::star::lang; +using namespace com::sun::star::util; +using namespace com::sun::star::beans; +using namespace com::sun::star::uno; +using namespace com::sun::star::container; + +#define UNISTRING(s) rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(s)) + +namespace desktop { + +static void _setBold(FixedText& ft) +{ + Font f = ft.GetControlFont(); + f.SetWeight(WEIGHT_BOLD); + ft.SetControlFont(f); +} + +WelcomePage::WelcomePage( svt::OWizardMachine* parent, const ResId& resid, sal_Bool bLicenseNeedsAcceptance ) + : OWizardPage(parent, resid) + , m_ftHead(this, WizardResId(FT_WELCOME_HEADER)) + , m_ftBody(this, WizardResId(FT_WELCOME_BODY)) + , m_pParent(parent) + , m_bLicenseNeedsAcceptance( bLicenseNeedsAcceptance ) + , bIsEvalVersion(false) + , bNoEvalText(false) +{ + FreeResource(); + + _setBold(m_ftHead); + + checkEval(); + + // check for migration + if (Migration::checkMigration()) + { + String aText(WizardResId(STR_WELCOME_MIGRATION)); + // replace %OLDPRODUCT with found version name + aText.SearchAndReplaceAll( UniString::CreateFromAscii("%OLD_VERSION"), Migration::getOldVersionName()); + m_ftBody.SetText( aText ); + } + else if ( ! m_bLicenseNeedsAcceptance ) + { + String aText(WizardResId(STR_WELCOME_WITHOUT_LICENSE)); + m_ftBody.SetText( aText ); + } +} + + +void WelcomePage::checkEval() +{ + Reference< XMultiServiceFactory > xFactory = ::comphelper::getProcessServiceFactory(); + Reference< XMaterialHolder > xHolder(xFactory->createInstance( + OUString::createFromAscii("com.sun.star.tab.tabreg")), UNO_QUERY); + if (xHolder.is()) { + Any aData = xHolder->getMaterial(); + Sequence < NamedValue > aSeq; + if (aData >>= aSeq) { + bIsEvalVersion = true; + for (int i=0; i< aSeq.getLength(); i++) { + if (aSeq[i].Name.equalsAscii("NoEvalText")) { + aSeq[i].Value >>= bNoEvalText; + } + } + } + } +} + + +void WelcomePage::ActivatePage() +{ + OWizardPage::ActivatePage(); + // this page has no controls, so forwarding to default + // button (next) won't work if we grap focus + // GrabFocus(); +} + +LicensePage::LicensePage( svt::OWizardMachine* parent, const ResId& resid, const rtl::OUString &rLicensePath ) + : OWizardPage(parent, resid) + , m_pParent(parent) + , m_ftHead(this, WizardResId(FT_LICENSE_HEADER)) + , m_ftBody1(this, WizardResId(FT_LICENSE_BODY_1)) + , m_ftBody1Txt(this, WizardResId(FT_LICENSE_BODY_1_TXT)) + , m_ftBody2(this, WizardResId(FT_LICENSE_BODY_2)) + , m_ftBody2Txt(this, WizardResId(FT_LICENSE_BODY_2_TXT)) + , m_mlLicense(this, WizardResId(ML_LICENSE)) + , m_pbDown(this, WizardResId(PB_LICENSE_DOWN)) + , m_bLicenseRead(sal_False) +{ + FreeResource(); + + _setBold(m_ftHead); + + m_mlLicense.SetEndReachedHdl( LINK(this, LicensePage, EndReachedHdl) ); + m_mlLicense.SetScrolledHdl( LINK(this, LicensePage, ScrolledHdl) ); + m_pbDown.SetClickHdl( LINK(this, LicensePage, PageDownHdl) ); + + // We want a automatic repeating page down button + WinBits aStyle = m_pbDown.GetStyle(); + aStyle |= WB_REPEAT; + m_pbDown.SetStyle( aStyle ); + + // replace %PAGEDOWN in text2 with button text + String aText = m_ftBody1Txt.GetText(); + aText.SearchAndReplaceAll( UniString::CreateFromAscii("%PAGEDOWN"), + MnemonicGenerator::EraseAllMnemonicChars(m_pbDown.GetText())); + + m_ftBody1Txt.SetText( aText ); + + // load license text + File aLicenseFile(rLicensePath); + if ( aLicenseFile.open(OpenFlag_Read) == FileBase::E_None) + { + DirectoryItem d; + DirectoryItem::get(rLicensePath, d); + FileStatus fs(FileStatusMask_FileSize); + d.getFileStatus(fs); + sal_uInt64 nBytesRead = 0; + sal_uInt64 nPosition = 0; + sal_uInt32 nBytes = (sal_uInt32)fs.getFileSize(); + sal_Char *pBuffer = new sal_Char[nBytes]; + // FileBase RC r = FileBase::E_None; + while (aLicenseFile.read(pBuffer+nPosition, nBytes-nPosition, nBytesRead) == FileBase::E_None + && nPosition + nBytesRead < nBytes) + { + nPosition += nBytesRead; + } + OUString aLicenseString(pBuffer, nBytes, RTL_TEXTENCODING_UTF8, + OSTRING_TO_OUSTRING_CVTFLAGS | RTL_TEXTTOUNICODE_FLAGS_GLOBAL_SIGNATURE); + delete[] pBuffer; + m_mlLicense.SetText(aLicenseString); + + } +} + +void LicensePage::ActivatePage() +{ + OWizardPage::ActivatePage(); + m_bLicenseRead = m_mlLicense.IsEndReached(); + m_pbDown.GrabFocus(); + updateDialogTravelUI(); +} + +bool LicensePage::canAdvance() const +{ + if (m_mlLicense.IsEndReached()) + const_cast< LicensePage* >( this )->m_pbDown.Disable(); + else + const_cast< LicensePage* >( this )->m_pbDown.Enable(); + + return m_bLicenseRead; +} + +IMPL_LINK( LicensePage, PageDownHdl, PushButton *, EMPTYARG ) +{ + m_mlLicense.ScrollDown( SCROLL_PAGEDOWN ); + return 0; +} + +IMPL_LINK( LicensePage, EndReachedHdl, LicenseView *, EMPTYARG ) +{ + m_bLicenseRead = sal_True; + updateDialogTravelUI(); + return 0; +} + +IMPL_LINK( LicensePage, ScrolledHdl, LicenseView *, EMPTYARG ) +{ + updateDialogTravelUI(); + return 0; +} + + +LicenseView::LicenseView( Window* pParent, const ResId& rResId ) + : MultiLineEdit( pParent, rResId ) +{ + SetLeftMargin( 5 ); + mbEndReached = IsEndReached(); + StartListening( *GetTextEngine() ); +} + +LicenseView::~LicenseView() +{ + maEndReachedHdl = Link(); + maScrolledHdl = Link(); + EndListeningAll(); +} + +void LicenseView::ScrollDown( ScrollType eScroll ) +{ + ScrollBar* pScroll = GetVScrollBar(); + if ( pScroll ) + pScroll->DoScrollAction( eScroll ); +} + +sal_Bool LicenseView::IsEndReached() const +{ + sal_Bool bEndReached; + + ExtTextView* pView = GetTextView(); + ExtTextEngine* pEdit = GetTextEngine(); + sal_uLong nHeight = pEdit->GetTextHeight(); + Size aOutSize = pView->GetWindow()->GetOutputSizePixel(); + Point aBottom( 0, aOutSize.Height() ); + + if ( (sal_uLong) pView->GetDocPos( aBottom ).Y() >= nHeight - 1 ) + bEndReached = sal_True; + else + bEndReached = sal_False; + + return bEndReached; +} + +void LicenseView::Notify( SfxBroadcaster&, const SfxHint& rHint ) +{ + if ( rHint.IsA( TYPE(TextHint) ) ) + { + sal_Bool bLastVal = EndReached(); + sal_uLong nId = ((const TextHint&)rHint).GetId(); + + if ( nId == TEXT_HINT_PARAINSERTED ) + { + if ( bLastVal ) + mbEndReached = IsEndReached(); + } + else if ( nId == TEXT_HINT_VIEWSCROLLED ) + { + if ( ! mbEndReached ) + mbEndReached = IsEndReached(); + maScrolledHdl.Call( this ); + } + + if ( EndReached() && !bLastVal ) + { + maEndReachedHdl.Call( this ); + } + } +} + + + +// ------------------------------------------------------------------- + +class MigrationThread : public ::osl::Thread +{ + public: + MigrationThread(); + + virtual void SAL_CALL run(); + virtual void SAL_CALL onTerminated(); +}; + +MigrationThread::MigrationThread() +{ +} + +void MigrationThread::run() +{ + try + { + Migration::doMigration(); + } + catch ( uno::Exception& ) + { + } +} + +void MigrationThread::onTerminated() +{ +} + +// ------------------------------------------------------------------- + +MigrationPage::MigrationPage( + svt::OWizardMachine* parent, + const ResId& resid, Throbber& i_throbber ) + : OWizardPage(parent, resid) + , m_ftHead(this, WizardResId(FT_MIGRATION_HEADER)) + , m_ftBody(this, WizardResId(FT_MIGRATION_BODY)) + , m_cbMigration(this, WizardResId(CB_MIGRATION)) + , m_rThrobber(i_throbber) + , m_bMigrationDone(sal_False) +{ + FreeResource(); + _setBold(m_ftHead); + + // replace %OLDPRODUCT with found version name + String aText = m_ftBody.GetText(); + aText.SearchAndReplaceAll( UniString::CreateFromAscii("%OLDPRODUCT"), Migration::getOldVersionName()); + m_ftBody.SetText( aText ); +} + +sal_Bool MigrationPage::commitPage( svt::WizardTypes::CommitPageReason _eReason ) +{ + if (_eReason == svt::WizardTypes::eTravelForward && m_cbMigration.IsChecked() && !m_bMigrationDone) + { + GetParent()->EnterWait(); + FirstStartWizard* pWizard = dynamic_cast< FirstStartWizard* >( GetParent() ); + if ( pWizard ) + pWizard->DisableButtonsWhileMigration(); + + m_rThrobber.Show(); + m_rThrobber.start(); + MigrationThread* pMigThread = new MigrationThread(); + pMigThread->create(); + + while ( pMigThread->isRunning() ) + { + Application::Reschedule(); + } + + m_rThrobber.stop(); + GetParent()->LeaveWait(); + // Next state will enable buttons - so no EnableButtons necessary! + m_rThrobber.Hide(); + pMigThread->join(); + delete pMigThread; + m_bMigrationDone = sal_True; + } + else + Migration::cancelMigration(); + return sal_True; +} + +void MigrationPage::ActivatePage() +{ + OWizardPage::ActivatePage(); + GrabFocus(); +} + +UserPage::UserPage( svt::OWizardMachine* parent, const ResId& resid) + : OWizardPage(parent, resid) + , m_ftHead(this, WizardResId(FT_USER_HEADER)) + , m_ftBody(this, WizardResId(FT_USER_BODY)) + , m_ftFirst(this, WizardResId(FT_USER_FIRST)) + , m_edFirst(this, WizardResId(ED_USER_FIRST)) + , m_ftLast(this, WizardResId(FT_USER_LAST)) + , m_edLast(this, WizardResId(ED_USER_LAST)) + , m_ftInitials(this, WizardResId(FT_USER_INITIALS)) + , m_edInitials(this, WizardResId(ED_USER_INITIALS)) + , m_ftFather(this, WizardResId(FT_USER_FATHER)) + , m_edFather(this, WizardResId(ED_USER_FATHER)) + , m_lang(Application::GetSettings().GetUILanguage()) +{ + FreeResource(); + _setBold(m_ftHead); + + // check whether this is a russian version. otherwise + // we'll hide the 'Fathers name' field + SvtUserOptions aUserOpt; + m_edFirst.SetText(aUserOpt.GetFirstName()); + m_edLast.SetText(aUserOpt.GetLastName()); +#if 0 + rtl::OUString aUserName; + vos::OSecurity().getUserName( aUserName ); + aUserOpt.SetID( aUserName ); +#endif + + m_edInitials.SetText(aUserOpt.GetID()); + if (m_lang == LANGUAGE_RUSSIAN) + { + m_ftFather.Show(); + m_edFather.Show(); + m_edFather.SetText(aUserOpt.GetFathersName()); + } +} + +sal_Bool UserPage::commitPage( svt::WizardTypes::CommitPageReason ) +{ + SvtUserOptions aUserOpt; + aUserOpt.SetFirstName(m_edFirst.GetText()); + aUserOpt.SetLastName(m_edLast.GetText()); + aUserOpt.SetID( m_edInitials.GetText()); + + if (m_lang == LANGUAGE_RUSSIAN) + aUserOpt.SetFathersName(m_edFather.GetText()); + + return sal_True; +} + +void UserPage::ActivatePage() +{ + OWizardPage::ActivatePage(); + GrabFocus(); +} + +// ------------------------------------------------------------------- +UpdateCheckPage::UpdateCheckPage( svt::OWizardMachine* parent, const ResId& resid) + : OWizardPage(parent, resid) + , m_ftHead(this, WizardResId(FT_UPDATE_CHECK_HEADER)) + , m_ftBody(this, WizardResId(FT_UPDATE_CHECK_BODY)) + , m_cbUpdateCheck(this, WizardResId(CB_UPDATE_CHECK)) +{ + FreeResource(); + _setBold(m_ftHead); +} + +sal_Bool UpdateCheckPage::commitPage( svt::WizardTypes::CommitPageReason _eReason ) +{ + if ( _eReason == svt::WizardTypes::eTravelForward ) + { + try { + Reference < XNameReplace > xUpdateAccess; + Reference < XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory() ); + + xUpdateAccess = Reference < XNameReplace >( + xFactory->createInstance( UNISTRING( "com.sun.star.setup.UpdateCheckConfig" ) ), UNO_QUERY_THROW ); + + if ( !xUpdateAccess.is() ) + return sal_False; + + sal_Bool bAutoUpdChk = m_cbUpdateCheck.IsChecked(); + xUpdateAccess->replaceByName( UNISTRING("AutoCheckEnabled"), makeAny( bAutoUpdChk ) ); + + Reference< XChangesBatch > xChangesBatch( xUpdateAccess, UNO_QUERY); + if( xChangesBatch.is() && xChangesBatch->hasPendingChanges() ) + xChangesBatch->commitChanges(); + } catch (RuntimeException) + { + } + } + + return sal_True; +} + +void UpdateCheckPage::ActivatePage() +{ + OWizardPage::ActivatePage(); + GrabFocus(); +} + +// ------------------------------------------------------------------- +RegistrationPage::RegistrationPage( Window* pParent, const ResId& rResid ) + : OWizardPage( pParent, rResid ) + , m_ftHeader(this, WizardResId(FT_REGISTRATION_HEADER)) + , m_ftBody(this, WizardResId(FT_REGISTRATION_BODY)) + , m_rbNow(this, WizardResId(RB_REGISTRATION_NOW)) + , m_rbLater(this, WizardResId(RB_REGISTRATION_LATER)) + , m_rbNever(this, WizardResId(RB_REGISTRATION_NEVER)) + , m_flSeparator(this, WizardResId(FL_REGISTRATION)) + , m_ftEnd(this, WizardResId(FT_REGISTRATION_END)) + , m_bNeverVisible( sal_True ) +{ + FreeResource(); + + // another text for OOo + sal_Int32 nOpenSourceContext = 0; + try + { + ::utl::ConfigManager::GetDirectConfigProperty( + ::utl::ConfigManager::OPENSOURCECONTEXT ) >>= nOpenSourceContext; + } + catch( Exception& ) + { + DBG_ERRORFILE( "RegistrationPage::RegistrationPage(): error while getting open source context" ); + } + + if ( nOpenSourceContext > 0 ) + { + String sBodyText( WizardResId( STR_REGISTRATION_OOO ) ); + m_ftBody.SetText( sBodyText ); + } + + // calculate height of body text and rearrange the buttons + Size aSize = m_ftBody.GetSizePixel(); + Size aMinSize = m_ftBody.CalcMinimumSize( aSize.Width() ); + long nTxtH = aMinSize.Height(); + long nCtrlH = aSize.Height(); + long nDelta = ( nCtrlH - nTxtH ); + aSize.Height() -= nDelta; + m_ftBody.SetSizePixel( aSize ); + Window* pWins[] = { &m_rbNow, &m_rbLater, &m_rbNever }; + Window** pCurrent = pWins; + for ( sal_uInt32 i = 0; i < sizeof( pWins ) / sizeof( pWins[ 0 ] ); ++i, ++pCurrent ) + { + Point aNewPos = (*pCurrent)->GetPosPixel(); + aNewPos.Y() -= nDelta; + (*pCurrent)->SetPosPixel( aNewPos ); + } + + _setBold(m_ftHeader); + impl_retrieveConfigurationData(); + updateButtonStates(); +} + +bool RegistrationPage::canAdvance() const +{ + return false; +} + +void RegistrationPage::ActivatePage() +{ + OWizardPage::ActivatePage(); + GrabFocus(); +} + +void RegistrationPage::impl_retrieveConfigurationData() +{ + static ::rtl::OUString PACKAGE = ::rtl::OUString::createFromAscii("org.openoffice.FirstStartWizard"); + static ::rtl::OUString PATH = ::rtl::OUString::createFromAscii("TabPages/Registration/RegistrationOptions/NeverButton"); + static ::rtl::OUString KEY = ::rtl::OUString::createFromAscii("Visible"); + + ::com::sun::star::uno::Any aValue; + try + { + aValue = ::comphelper::ConfigurationHelper::readDirectKey( + ::comphelper::getProcessServiceFactory(), + PACKAGE, + PATH, + KEY, + ::comphelper::ConfigurationHelper::E_READONLY); + } + catch(const ::com::sun::star::uno::Exception&) + { aValue.clear(); } + + aValue >>= m_bNeverVisible; +} + +void RegistrationPage::updateButtonStates() +{ + m_rbNever.Show( m_bNeverVisible ); +} + +sal_Bool RegistrationPage::commitPage( svt::WizardTypes::CommitPageReason _eReason ) +{ + if ( _eReason == svt::WizardTypes::eFinish ) + { + ::utl::RegOptions aOptions; + rtl::OUString aEvent; + + if ( m_rbNow.IsChecked()) + { + aEvent = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "RegistrationRequired" ) ); + } + else if (m_rbLater.IsChecked()) + { + aOptions.activateReminder(7); + // avtivate a reminder job... + } + // aOptions.markSessionDone(); + + try + { + // create the Desktop component which can load components + Reference < XMultiServiceFactory > xFactory = ::comphelper::getProcessServiceFactory(); + if( xFactory.is() ) + { + Reference< com::sun::star::task::XJobExecutor > xProductRegistration( + xFactory->createInstance( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.setup.ProductRegistration" ) ) ), + UNO_QUERY_THROW ); + + // tell it that the user wants to register + xProductRegistration->trigger( aEvent ); + } + } + catch( const Exception& ) + { + } + } + return sal_True; +} + +RegistrationPage::RegistrationMode RegistrationPage::getRegistrationMode() const +{ + RegistrationPage::RegistrationMode eMode = rmNow; + if ( m_rbLater.IsChecked() ) + eMode = rmLater; + else if ( m_rbNever.IsChecked() ) + eMode = rmNever; + return eMode; +} + +void RegistrationPage::prepareSingleMode() +{ + // remove wizard text (hide and cut) + m_flSeparator.Hide(); + m_ftEnd.Hide(); + Size aNewSize = GetSizePixel(); + aNewSize.Height() -= ( aNewSize.Height() - m_flSeparator.GetPosPixel().Y() ); + SetSizePixel( aNewSize ); +} + +bool RegistrationPage::hasReminderDateCome() +{ + return ::utl::RegOptions().hasReminderDateCome(); +} + +void RegistrationPage::executeSingleMode() +{ + // opens the page in a single tabdialog + SfxSingleTabDialog aSingleDlg( NULL, TP_REGISTRATION ); + RegistrationPage* pPage = new RegistrationPage( &aSingleDlg, WizardResId( TP_REGISTRATION ) ); + pPage->prepareSingleMode(); + aSingleDlg.SetPage( pPage ); + aSingleDlg.SetText( pPage->getSingleModeTitle() ); + aSingleDlg.Execute(); + // the registration modes "Now" and "Later" are handled by the page + RegistrationPage::RegistrationMode eMode = pPage->getRegistrationMode(); + if ( eMode == RegistrationPage::rmNow || eMode == RegistrationPage::rmLater ) + pPage->commitPage( WizardTypes::eFinish ); + if ( eMode != RegistrationPage::rmLater ) + ::utl::RegOptions().removeReminder(); +} + +} // namespace desktop diff --git a/desktop/source/migration/pages.hxx b/desktop/source/migration/pages.hxx new file mode 100644 index 0000000000..2f6c2d31a5 --- /dev/null +++ b/desktop/source/migration/pages.hxx @@ -0,0 +1,212 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ + +#ifndef _PAGES_HXX_ +#define _PAGES_HXX_ + +#include <vcl/tabpage.hxx> +#include <vcl/button.hxx> +#include <vcl/dialog.hxx> +#include <vcl/scrbar.hxx> +#include <vcl/throbber.hxx> +#include <svtools/wizardmachine.hxx> +#include <svtools/svmedit.hxx> +#include <svl/lstner.hxx> +#include <svtools/xtextedt.hxx> + +namespace desktop +{ +class WelcomePage : public svt::OWizardPage +{ +private: + FixedText m_ftHead; + FixedText m_ftBody; + svt::OWizardMachine *m_pParent; + sal_Bool m_bLicenseNeedsAcceptance; + enum OEMType + { + OEM_NONE, OEM_NORMAL, OEM_EXTENDED + }; + bool bIsEvalVersion; + bool bNoEvalText; + void checkEval(); + + +public: + WelcomePage( svt::OWizardMachine* parent, const ResId& resid, sal_Bool bLicenseNeedsAcceptance ); +protected: + virtual void ActivatePage(); +}; + +class LicenseView : public MultiLineEdit, public SfxListener +{ + sal_Bool mbEndReached; + Link maEndReachedHdl; + Link maScrolledHdl; + +public: + LicenseView( Window* pParent, const ResId& rResId ); + ~LicenseView(); + + void ScrollDown( ScrollType eScroll ); + + sal_Bool IsEndReached() const; + sal_Bool EndReached() const { return mbEndReached; } + void SetEndReached( sal_Bool bEnd ) { mbEndReached = bEnd; } + + void SetEndReachedHdl( const Link& rHdl ) { maEndReachedHdl = rHdl; } + const Link& GetAutocompleteHdl() const { return maEndReachedHdl; } + + void SetScrolledHdl( const Link& rHdl ) { maScrolledHdl = rHdl; } + const Link& GetScrolledHdl() const { return maScrolledHdl; } + + virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ); + +protected: + using MultiLineEdit::Notify; +}; + +class LicensePage : public svt::OWizardPage +{ +private: + svt::OWizardMachine *m_pParent; + FixedText m_ftHead; + FixedText m_ftBody1; + FixedText m_ftBody1Txt; + FixedText m_ftBody2; + FixedText m_ftBody2Txt; + LicenseView m_mlLicense; + PushButton m_pbDown; + sal_Bool m_bLicenseRead; +public: + LicensePage( svt::OWizardMachine* parent, const ResId& resid, const rtl::OUString &rLicensePath ); +private: + DECL_LINK(PageDownHdl, PushButton*); + DECL_LINK(EndReachedHdl, LicenseView*); + DECL_LINK(ScrolledHdl, LicenseView*); +protected: + virtual bool canAdvance() const; + virtual void ActivatePage(); +}; + +class MigrationPage : public svt::OWizardPage +{ +private: + FixedText m_ftHead; + FixedText m_ftBody; + CheckBox m_cbMigration; + Throbber& m_rThrobber; + sal_Bool m_bMigrationDone; +public: + MigrationPage( svt::OWizardMachine* parent, const ResId& resid, Throbber& i_throbber ); + virtual sal_Bool commitPage( svt::WizardTypes::CommitPageReason _eReason ); + +protected: + virtual void ActivatePage(); +}; + +class UserPage : public svt::OWizardPage +{ +private: + FixedText m_ftHead; + FixedText m_ftBody; + FixedText m_ftFirst; + Edit m_edFirst; + FixedText m_ftLast; + Edit m_edLast; + FixedText m_ftInitials; + Edit m_edInitials; + FixedText m_ftFather; + Edit m_edFather; + LanguageType m_lang; + +public: + UserPage( svt::OWizardMachine* parent, const ResId& resid); + virtual sal_Bool commitPage( svt::WizardTypes::CommitPageReason _eReason ); +protected: + virtual void ActivatePage(); +}; + +class UpdateCheckPage : public svt::OWizardPage +{ +private: + FixedText m_ftHead; + FixedText m_ftBody; + CheckBox m_cbUpdateCheck; +public: + UpdateCheckPage( svt::OWizardMachine* parent, const ResId& resid); + virtual sal_Bool commitPage( svt::WizardTypes::CommitPageReason _eReason ); + +protected: + virtual void ActivatePage(); +}; + + +class RegistrationPage : public svt::OWizardPage +{ +private: + FixedText m_ftHeader; + FixedText m_ftBody; + RadioButton m_rbNow; + RadioButton m_rbLater; + RadioButton m_rbNever; + FixedLine m_flSeparator; + FixedText m_ftEnd; + + sal_Bool m_bNeverVisible; + + void updateButtonStates(); + void impl_retrieveConfigurationData(); + +protected: + virtual bool canAdvance() const; + virtual void ActivatePage(); + + virtual sal_Bool commitPage( svt::WizardTypes::CommitPageReason _eReason ); + +public: + RegistrationPage( Window* parent, const ResId& resid); + + enum RegistrationMode + { + rmNow, // register now + rmLater, // register later + rmNever // register never + }; + + RegistrationMode getRegistrationMode() const; + void prepareSingleMode(); + inline String getSingleModeTitle() const { return m_ftHeader.GetText(); } + + static bool hasReminderDateCome(); + static void executeSingleMode(); +}; + +} // namespace desktop + +#endif // #ifndef _PAGES_HXX_ + diff --git a/desktop/source/migration/services/autocorrmigration.cxx b/desktop/source/migration/services/autocorrmigration.cxx index 1f5290f383..ebf5f256fb 100644 --- a/desktop/source/migration/services/autocorrmigration.cxx +++ b/desktop/source/migration/services/autocorrmigration.cxx @@ -175,7 +175,7 @@ namespace migration ::rtl::OUString sLanguageType = sSourceLocalName.copy( nStart, nEnd - nStart ); ::rtl::OUString sIsoName = MsLangId::convertLanguageToIsoString( (LanguageType) sLanguageType.toInt32() ); ::rtl::OUString sTargetLocalName = sBaseName; - sTargetLocalName += ::rtl::OUString::createFromAscii( "_" ); + sTargetLocalName += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "_" )); sTargetLocalName += sIsoName; sTargetLocalName += sSuffix; ::rtl::OUString sTargetName = sTargetDir + sTargetLocalName; @@ -188,14 +188,14 @@ namespace migration ::rtl::OString aMsg( "AutocorrectionMigration::copyFiles: cannot copy " ); aMsg += ::rtl::OUStringToOString( *aI, RTL_TEXTENCODING_UTF8 ) + " to " + ::rtl::OUStringToOString( sTargetName, RTL_TEXTENCODING_UTF8 ); - OSL_ENSURE( sal_False, aMsg.getStr() ); + OSL_FAIL( aMsg.getStr() ); } ++aI; } } else { - OSL_ENSURE( sal_False, "AutocorrectionMigration::copyFiles: no user installation!" ); + OSL_FAIL( "AutocorrectionMigration::copyFiles: no user installation!" ); } } @@ -242,11 +242,11 @@ namespace migration { beans::NamedValue aValue; *pIter >>= aValue; - if ( aValue.Name.equalsAscii( "UserData" ) ) + if ( aValue.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "UserData" ) ) ) { if ( !(aValue.Value >>= m_sSourceDir) ) { - OSL_ENSURE( false, "AutocorrectionMigration::initialize: argument UserData has wrong type!" ); + OSL_FAIL( "AutocorrectionMigration::initialize: argument UserData has wrong type!" ); } m_sSourceDir += sSourceSubDir; break; diff --git a/desktop/source/migration/services/basicmigration.cxx b/desktop/source/migration/services/basicmigration.cxx index 4ed093cfe4..b3b68e9833 100644 --- a/desktop/source/migration/services/basicmigration.cxx +++ b/desktop/source/migration/services/basicmigration.cxx @@ -177,14 +177,14 @@ namespace migration ::rtl::OString aMsg( "BasicMigration::copyFiles: cannot copy " ); aMsg += ::rtl::OUStringToOString( *aI, RTL_TEXTENCODING_UTF8 ) + " to " + ::rtl::OUStringToOString( sTargetName, RTL_TEXTENCODING_UTF8 ); - OSL_ENSURE( sal_False, aMsg.getStr() ); + OSL_FAIL( aMsg.getStr() ); } ++aI; } } else { - OSL_ENSURE( sal_False, "BasicMigration::copyFiles: no user installation!" ); + OSL_FAIL( "BasicMigration::copyFiles: no user installation!" ); } } @@ -231,11 +231,11 @@ namespace migration { beans::NamedValue aValue; *pIter >>= aValue; - if ( aValue.Name.equalsAscii( "UserData" ) ) + if ( aValue.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "UserData" ) ) ) { if ( !(aValue.Value >>= m_sSourceDir) ) { - OSL_ENSURE( false, "BasicMigration::initialize: argument UserData has wrong type!" ); + OSL_FAIL( "BasicMigration::initialize: argument UserData has wrong type!" ); } m_sSourceDir += sSourceUserBasic; break; diff --git a/desktop/source/migration/services/cexports.cxx b/desktop/source/migration/services/cexports.cxx index 261cf26665..02ff514a0b 100644 --- a/desktop/source/migration/services/cexports.cxx +++ b/desktop/source/migration/services/cexports.cxx @@ -67,13 +67,6 @@ void SAL_CALL component_getImplementationEnvironment( *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME; } -sal_Bool SAL_CALL component_writeInfo( - void * pServiceManager, void * pRegistryKey ) -{ - return ::cppu::component_writeInfoHelper( - pServiceManager, pRegistryKey, entries ); -} - void * SAL_CALL component_getFactory( const sal_Char * pImplName, void * pServiceManager, void * pRegistryKey ) { diff --git a/desktop/source/migration/services/cexportsoo3.cxx b/desktop/source/migration/services/cexportsoo3.cxx index 771c161879..9ffc255de5 100644 --- a/desktop/source/migration/services/cexportsoo3.cxx +++ b/desktop/source/migration/services/cexportsoo3.cxx @@ -52,13 +52,6 @@ void SAL_CALL component_getImplementationEnvironment( *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME; } -sal_Bool SAL_CALL component_writeInfo( - void * pServiceManager, void * pRegistryKey ) -{ - return ::cppu::component_writeInfoHelper( - pServiceManager, pRegistryKey, entries ); -} - void * SAL_CALL component_getFactory( const sal_Char * pImplName, void * pServiceManager, void * pRegistryKey ) { diff --git a/desktop/source/migration/services/cppumaker.mk b/desktop/source/migration/services/cppumaker.mk index 5ab16ed1e3..5ab16ed1e3 100644..100755 --- a/desktop/source/migration/services/cppumaker.mk +++ b/desktop/source/migration/services/cppumaker.mk diff --git a/desktop/source/migration/services/jvmfwk.cxx b/desktop/source/migration/services/jvmfwk.cxx index f6ad3f54bc..c2a3b14edc 100644 --- a/desktop/source/migration/services/jvmfwk.cxx +++ b/desktop/source/migration/services/jvmfwk.cxx @@ -52,6 +52,8 @@ #include <stdio.h> #include "osl/thread.hxx" +using ::rtl::OUString; + #define OUSTR(x) rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( x )) #define SERVICE_NAME "com.sun.star.migration.Java" @@ -61,7 +63,6 @@ #define USER_CLASS_PATH 2 namespace css = com::sun::star; -using namespace rtl; using namespace com::sun::star::uno; using namespace com::sun::star::beans; using namespace com::sun::star::lang; @@ -78,7 +79,7 @@ public: JavaInfo* pData; CJavaInfo(); ~CJavaInfo(); - operator JavaInfo* (); + operator JavaInfo* () const; }; CJavaInfo::CJavaInfo(): pData(NULL) @@ -90,7 +91,7 @@ CJavaInfo::~CJavaInfo() jfw_freeJavaInfo(pData); } -CJavaInfo::operator JavaInfo*() +CJavaInfo::operator JavaInfo*() const { return pData; } @@ -277,7 +278,7 @@ void SAL_CALL JavaMigration::initialize( const css::uno::Sequence< css::uno::Any for(;pIter != pEnd;++pIter) { *pIter >>= aValue; - if (aValue.Name.equalsAscii("OldConfiguration")) + if (aValue.Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("OldConfiguration"))) { sal_Bool bSuccess = aValue.Value >>= aOldConfigValues; OSL_ENSURE(bSuccess == sal_True, "[Service implementation " IMPL_NAME @@ -288,7 +289,7 @@ void SAL_CALL JavaMigration::initialize( const css::uno::Sequence< css::uno::Any const css::beans::NamedValue* pEnd2 = pIter2 + aOldConfigValues.getLength(); for(;pIter2 != pEnd2;++pIter2) { - if ( pIter2->Name.equalsAscii("org.openoffice.Office.Java") ) + if ( pIter2->Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("org.openoffice.Office.Java")) ) { pIter2->Value >>= m_xLayer; break; @@ -296,12 +297,11 @@ void SAL_CALL JavaMigration::initialize( const css::uno::Sequence< css::uno::Any } } } - else if (aValue.Name.equalsAscii("UserData")) + else if (aValue.Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("UserData"))) { if ( !(aValue.Value >>= m_sUserDir) ) { - OSL_ENSURE( - false, + OSL_FAIL( "[Service implementation " IMPL_NAME "] XInitialization::initialize: Argument UserData has wrong type."); } @@ -343,9 +343,9 @@ void JavaMigration::migrateJavarc() { if (jfw_setSelectedJRE(aInfo) != JFW_E_NONE) { - OSL_ENSURE(0, "[Service implementation " IMPL_NAME + OSL_FAIL("[Service implementation " IMPL_NAME "] XJob::execute: jfw_setSelectedJRE failed."); - fprintf(stderr, "\nCannot migrate Java. An error occured.\n"); + fprintf(stderr, "\nCannot migrate Java. An error occurred.\n"); } } else if (err == JFW_E_FAILED_VERSION) @@ -420,9 +420,9 @@ void SAL_CALL JavaMigration::overrideProperty( MalformedDataException, WrappedTargetException ) { - if (aName.equalsAscii("Enable")) + if (aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("Enable"))) m_aStack.push(TElementStack::value_type(aName,ENABLE_JAVA)); - else if (aName.equalsAscii("UserClassPath")) + else if (aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("UserClassPath"))) m_aStack.push(TElementStack::value_type(aName, USER_CLASS_PATH)); } // ----------------------------------------------------------------------------- diff --git a/desktop/source/migration/services/makefile.mk b/desktop/source/migration/services/makefile.mk index 2f3eb9308e..718ac0387c 100644..100755 --- a/desktop/source/migration/services/makefile.mk +++ b/desktop/source/migration/services/makefile.mk @@ -34,6 +34,7 @@ COMP1TYPELIST = migrationoo2 LIBTARGET=NO # --- Settings ----------------------------------------------------- + .INCLUDE : ..$/..$/deployment/inc/dp_misc.mk .INCLUDE : settings.mk DLLPRE = @@ -80,14 +81,13 @@ SHL1STDLIBS= \ SHL1DEPN= SHL1IMPLIB=imigrationoo2 -#SHL1LIBS=$(SLB)$/$(TARGET).lib SHL1DEF=$(MISC)$/$(SHL1TARGET).def DEF1NAME=$(SHL1TARGET) COMP2TYPELIST = migrationoo3 SHL2TARGET=migrationoo3.uno -SHL2VERSIONMAP = migrationoo3.map +SHL2VERSIONMAP = $(SOLARENV)/src/component.map SHL2OBJS= \ $(SLO)$/cexportsoo3.obj \ @@ -108,7 +108,6 @@ SHL2STDLIBS= \ SHL2DEPN= SHL2IMPLIB=imigrationoo3 -#SHL2LIBS=$(SLB)$/$(SHL2TARGET).lib SHL2DEF=$(MISC)$/$(SHL2TARGET).def DEF2NAME=$(SHL2TARGET) @@ -117,3 +116,18 @@ DEF2NAME=$(SHL2TARGET) .INCLUDE : target.mk +ALLTAR : $(MISC)/migrationoo3.component + +$(MISC)/migrationoo3.component .ERRREMOVE : \ + $(SOLARENV)/bin/createcomponent.xslt migrationoo3.component + $(XSLTPROC) --nonet --stringparam uri \ + '$(COMPONENTPREFIX_BASIS_NATIVE)$(SHL2TARGETN:f)' -o $@ \ + $(SOLARENV)/bin/createcomponent.xslt migrationoo3.component + +ALLTAR : $(MISC)/migrationoo2.component + +$(MISC)/migrationoo2.component .ERRREMOVE : \ + $(SOLARENV)/bin/createcomponent.xslt migrationoo2.component + $(XSLTPROC) --nonet --stringparam uri \ + '$(COMPONENTPREFIX_BASIS_NATIVE)$(SHL1TARGETN:f)' -o $@ \ + $(SOLARENV)/bin/createcomponent.xslt migrationoo2.component diff --git a/desktop/source/migration/services/migrationoo2.component b/desktop/source/migration/services/migrationoo2.component new file mode 100755 index 0000000000..2b21ab123b --- /dev/null +++ b/desktop/source/migration/services/migrationoo2.component @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!--********************************************************************** +* +* 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. +* +**********************************************************************--> + +<component loader="com.sun.star.loader.SharedLibrary" + xmlns="http://openoffice.org/2010/uno-components"> + <implementation name="com.sun.star.comp.desktop.migration.Basic"> + <service name="com.sun.star.migration.Basic"/> + </implementation> + <implementation name="com.sun.star.comp.desktop.migration.Wordbooks"> + <service name="com.sun.star.migration.Wordbooks"/> + </implementation> +</component> diff --git a/desktop/source/migration/services/migrationoo2.xml b/desktop/source/migration/services/migrationoo2.xml index 0c77badebc..0c77badebc 100644..100755 --- a/desktop/source/migration/services/migrationoo2.xml +++ b/desktop/source/migration/services/migrationoo2.xml diff --git a/desktop/source/migration/services/migrationoo3.component b/desktop/source/migration/services/migrationoo3.component new file mode 100755 index 0000000000..380c389ab7 --- /dev/null +++ b/desktop/source/migration/services/migrationoo3.component @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!--********************************************************************** +* +* 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. +* +**********************************************************************--> + +<component loader="com.sun.star.loader.SharedLibrary" + xmlns="http://openoffice.org/2010/uno-components"> + <implementation name="com.sun.star.comp.desktop.migration.OOo3Extensions"> + <service name="com.sun.star.migration.Extensions"/> + </implementation> +</component> diff --git a/desktop/source/migration/services/migrationoo3.map b/desktop/source/migration/services/migrationoo3.map deleted file mode 100644 index ac2c3750bf..0000000000 --- a/desktop/source/migration/services/migrationoo3.map +++ /dev/null @@ -1,8 +0,0 @@ -UDK_3_0_0 { - global: - component_getImplementationEnvironment; - component_writeInfo; - component_getFactory; - local: - *; -}; diff --git a/desktop/source/migration/services/oo3extensionmigration.cxx b/desktop/source/migration/services/oo3extensionmigration.cxx index e62cd1e2e2..b904179536 100644 --- a/desktop/source/migration/services/oo3extensionmigration.cxx +++ b/desktop/source/migration/services/oo3extensionmigration.cxx @@ -293,7 +293,7 @@ bool OO3ExtensionMigration::scanDescriptionXml( const ::rtl::OUString& sDescript utl::TextSearch ts(param, LANGUAGE_DONTKNOW); xub_StrLen start = 0; - xub_StrLen end = static_cast<USHORT>(aExtIdentifier.getLength()); + xub_StrLen end = static_cast<sal_uInt16>(aExtIdentifier.getLength()); if (ts.SearchFrwrd(aExtIdentifier, &start, &end)) return false; } @@ -318,7 +318,7 @@ bool OO3ExtensionMigration::scanDescriptionXml( const ::rtl::OUString& sDescript utl::TextSearch ts(param, LANGUAGE_DONTKNOW); xub_StrLen start = 0; - xub_StrLen end = static_cast<USHORT>(sDescriptionXmlURL.getLength()); + xub_StrLen end = static_cast<sal_uInt16>(sDescriptionXmlURL.getLength()); if (ts.SearchFrwrd(sDescriptionXmlURL, &start, &end)) return false; } @@ -415,14 +415,14 @@ void OO3ExtensionMigration::initialize( const Sequence< Any >& aArguments ) thro { beans::NamedValue aValue; *pIter >>= aValue; - if ( aValue.Name.equalsAscii( "UserData" ) ) + if ( aValue.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "UserData" ) ) ) { if ( !(aValue.Value >>= m_sSourceDir) ) { - OSL_ENSURE( false, "ExtensionMigration::initialize: argument UserData has wrong type!" ); + OSL_FAIL( "ExtensionMigration::initialize: argument UserData has wrong type!" ); } } - else if ( aValue.Name.equalsAscii( "ExtensionBlackList" ) ) + else if ( aValue.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "ExtensionBlackList" ) ) ) { Sequence< ::rtl::OUString > aBlackList; if ( (aValue.Value >>= aBlackList ) && ( aBlackList.getLength() > 0 )) @@ -434,28 +434,6 @@ void OO3ExtensionMigration::initialize( const Sequence< Any >& aArguments ) thro } } -// ----------------------------------------------------------------------------- - -TStringVectorPtr getContent( const ::rtl::OUString& rBaseURL ) -{ - TStringVectorPtr aResult( new TStringVector ); - ::osl::Directory aDir( rBaseURL); - if ( aDir.open() == ::osl::FileBase::E_None ) - { - // iterate over directory content - TStringVector aSubDirs; - ::osl::DirectoryItem aItem; - while ( aDir.getNextItem( aItem ) == ::osl::FileBase::E_None ) - { - ::osl::FileStatus aFileStatus( FileStatusMask_Type | FileStatusMask_FileURL ); - if ( aItem.getFileStatus( aFileStatus ) == ::osl::FileBase::E_None ) - aResult->push_back( aFileStatus.getFileURL() ); - } - } - - return aResult; -} - Any OO3ExtensionMigration::execute( const Sequence< beans::NamedValue >& ) throw (lang::IllegalArgumentException, Exception, RuntimeException) { diff --git a/desktop/source/migration/services/wordbookmigration.cxx b/desktop/source/migration/services/wordbookmigration.cxx index 152cded83c..4e93a59936 100644 --- a/desktop/source/migration/services/wordbookmigration.cxx +++ b/desktop/source/migration/services/wordbookmigration.cxx @@ -177,7 +177,7 @@ bool IsUserWordbook( const ::rtl::OUString& rFile ) bRet = true; else { - USHORT nLen; + sal_uInt16 nLen; pStream->Seek (nSniffPos); *pStream >> nLen; if ( nLen < MAX_HEADER_LENGTH ) @@ -224,7 +224,7 @@ bool IsUserWordbook( const ::rtl::OUString& rFile ) ::rtl::OString aMsg( "WordbookMigration::copyFiles: cannot copy " ); aMsg += ::rtl::OUStringToOString( *aI, RTL_TEXTENCODING_UTF8 ) + " to " + ::rtl::OUStringToOString( sTargetName, RTL_TEXTENCODING_UTF8 ); - OSL_ENSURE( sal_False, aMsg.getStr() ); + OSL_FAIL( aMsg.getStr() ); } } ++aI; @@ -232,7 +232,7 @@ bool IsUserWordbook( const ::rtl::OUString& rFile ) } else { - OSL_ENSURE( sal_False, "WordbookMigration::copyFiles: no user installation!" ); + OSL_FAIL( "WordbookMigration::copyFiles: no user installation!" ); } } @@ -279,11 +279,11 @@ bool IsUserWordbook( const ::rtl::OUString& rFile ) { beans::NamedValue aValue; *pIter >>= aValue; - if ( aValue.Name.equalsAscii( "UserData" ) ) + if ( aValue.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "UserData" ) ) ) { if ( !(aValue.Value >>= m_sSourceDir) ) { - OSL_ENSURE( false, "WordbookMigration::initialize: argument UserData has wrong type!" ); + OSL_FAIL( "WordbookMigration::initialize: argument UserData has wrong type!" ); } m_sSourceDir += sSourceSubDir; break; diff --git a/desktop/source/migration/wizard.cxx b/desktop/source/migration/wizard.cxx new file mode 100644 index 0000000000..47f3fcda50 --- /dev/null +++ b/desktop/source/migration/wizard.cxx @@ -0,0 +1,603 @@ +/************************************************************************* + * + * 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 <migration.hxx> +#include "wizard.hxx" +#include "wizard.hrc" +#include "pages.hxx" +#include "app.hxx" + +#include <rtl/ustring.hxx> +#include <rtl/ustrbuf.hxx> +#include <rtl/string.hxx> +#include <rtl/strbuf.hxx> +#include <rtl/bootstrap.hxx> + +#include <comphelper/processfactory.hxx> +#include <tools/date.hxx> +#include <tools/time.hxx> +#include <tools/datetime.hxx> +#include <osl/file.hxx> +#include <osl/time.h> +#include <osl/module.hxx> +#include <unotools/bootstrap.hxx> +#include <vcl/msgbox.hxx> + +#include <com/sun/star/uno/Any.hxx> +#include <com/sun/star/uno/Sequence.hxx> +#include <com/sun/star/beans/NamedValue.hpp> +#include <com/sun/star/beans/XPropertySet.hpp> +#include <com/sun/star/beans/XPropertyState.hpp> +#include <com/sun/star/frame/XDesktop.hpp> +#include <com/sun/star/lang/XMultiServiceFactory.hpp> +#include <com/sun/star/lang/XInitialization.hpp> +#include <com/sun/star/lang/XComponent.hpp> +#include <com/sun/star/util/XChangesBatch.hpp> +#include <com/sun/star/container/XNameReplace.hpp> +#include <com/sun/star/awt/WindowDescriptor.hpp> +#include <com/sun/star/awt/WindowAttribute.hpp> + +using namespace svt; +using namespace rtl; +using namespace osl; +using namespace utl; +using namespace com::sun::star; +using namespace com::sun::star::uno; +using namespace com::sun::star::lang; +using namespace com::sun::star::beans; +using namespace com::sun::star::util; +using namespace com::sun::star::container; + +#define UNISTRING(s) rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(s)) + +namespace desktop +{ + +const FirstStartWizard::WizardState FirstStartWizard::STATE_WELCOME = 0; +const FirstStartWizard::WizardState FirstStartWizard::STATE_LICENSE = 1; +const FirstStartWizard::WizardState FirstStartWizard::STATE_MIGRATION = 2; +const FirstStartWizard::WizardState FirstStartWizard::STATE_USER = 3; +const FirstStartWizard::WizardState FirstStartWizard::STATE_UPDATE_CHECK = 4; +const FirstStartWizard::WizardState FirstStartWizard::STATE_REGISTRATION = 5; + +static sal_Int32 getBuildId() +{ + ::rtl::OUString aDefault; + ::rtl::OUString aBuildIdData = utl::Bootstrap::getBuildIdData( aDefault ); + sal_Int32 nBuildId( 0 ); + sal_Int32 nIndex1 = aBuildIdData.indexOf(':'); + sal_Int32 nIndex2 = aBuildIdData.indexOf(')'); + if (( nIndex1 > 0 ) && ( nIndex2 > 0 ) && ( nIndex2-1 > nIndex1+1 )) + { + ::rtl::OUString aBuildId = aBuildIdData.copy( nIndex1+1, nIndex2-nIndex1-1 ); + nBuildId = aBuildId.toInt32(); + } + return nBuildId; +} + +WizardResId::WizardResId( sal_uInt16 nId ) : + ResId( nId, *FirstStartWizard::GetResManager() ) +{ +} + +ResMgr *FirstStartWizard::pResMgr = 0; + +ResMgr *FirstStartWizard::GetResManager() +{ + if ( !FirstStartWizard::pResMgr ) + { + String aMgrName = String::CreateFromAscii( "dkt" ); + FirstStartWizard::pResMgr = ResMgr::CreateResMgr( OUStringToOString( aMgrName, RTL_TEXTENCODING_UTF8 )); + } + return FirstStartWizard::pResMgr; +} + +FirstStartWizard::FirstStartWizard( Window* pParent, sal_Bool bLicenseNeedsAcceptance, const rtl::OUString &rLicensePath ) + :RoadmapWizard( pParent, WizardResId(DLG_FIRSTSTART_WIZARD), + WZB_NEXT|WZB_PREVIOUS|WZB_FINISH|WZB_CANCEL|WZB_HELP) + ,m_bOverride(sal_False) + ,m_aDefaultPath(0) + ,m_aMigrationPath(0) + ,m_bDone(sal_False) + ,m_bLicenseNeedsAcceptance( bLicenseNeedsAcceptance ) + ,m_bLicenseWasAccepted(sal_False) + ,m_bAutomaticUpdChk(sal_True) + ,m_aThrobber(this, WizardResId(CTRL_THROBBER)) + ,m_aLicensePath( rLicensePath ) +{ + FreeResource(); + // --- +// enableState(STATE_USER, sal_False); +// enableState(STATE_REGISTRATION, sal_False); + + Size aTPSize(TP_WIDTH, TP_HEIGHT); + SetPageSizePixel(LogicToPixel(aTPSize, MAP_APPFONT)); + + //set help id + m_pPrevPage->SetHelpId(HID_FIRSTSTART_PREV); + m_pNextPage->SetHelpId(HID_FIRSTSTART_NEXT); + m_pCancel->SetHelpId(HID_FIRSTSTART_CANCEL); + m_pFinish->SetHelpId(HID_FIRSTSTART_FINISH); + // m_pHelp->SetUniqueId(UID_FIRSTSTART_HELP); + m_pHelp->Hide(); + m_pHelp->Disable(); + + // save button lables + m_sNext = m_pNextPage->GetText(); + m_sCancel = m_pCancel->GetText(); + + // save cancel click handler + m_lnkCancel = m_pCancel->GetClickHdl(); + + m_aDefaultPath = defineWizardPagesDependingFromContext(); + activatePath(m_aDefaultPath, sal_True); + + ActivatePage(); + + // set text of finish putton: + m_pFinish->SetText(String(WizardResId(STR_FINISH))); + // disable "finish button" + enableButtons(WZB_FINISH, sal_False); + defaultButton(WZB_NEXT); +} + +void FirstStartWizard::DisableButtonsWhileMigration() +{ + enableButtons(0xff, sal_False); +} + +::svt::RoadmapWizardTypes::PathId FirstStartWizard::defineWizardPagesDependingFromContext() +{ + ::svt::RoadmapWizardTypes::PathId aDefaultPath = 0; + + sal_Bool bPage_Welcome = sal_True; + sal_Bool bPage_License = sal_True; + sal_Bool bPage_Migration = sal_True; + sal_Bool bPage_User = sal_True; + sal_Bool bPage_UpdateCheck = sal_True; + sal_Bool bPage_Registration = sal_True; + + bPage_License = m_bLicenseNeedsAcceptance; + bPage_Migration = Migration::checkMigration(); + bPage_UpdateCheck = showOnlineUpdatePage(); + + WizardPath aPath; + if (bPage_Welcome) + aPath.push_back(STATE_WELCOME); + if (bPage_License) + aPath.push_back(STATE_LICENSE); + if (bPage_Migration) + aPath.push_back(STATE_MIGRATION); + if (bPage_User) + aPath.push_back(STATE_USER); + if (bPage_UpdateCheck) + aPath.push_back(STATE_UPDATE_CHECK); + if (bPage_Registration) + aPath.push_back(STATE_REGISTRATION); + + declarePath(aDefaultPath, aPath); + + // a) If license must be accepted by the user, all direct links + // to wizard tab pages must be disabled. Because such pages + // should be accessible only in case license was accepted ! + // b) But if no license should be shown at all ... + // such direct links can be enabled by default. + sal_Bool bAllowDirectLink = ( ! bPage_License); + + if (bPage_User) + enableState(STATE_USER, bAllowDirectLink); + if (bPage_UpdateCheck) + enableState(STATE_UPDATE_CHECK, bAllowDirectLink); + if (bPage_Migration) + enableState(STATE_MIGRATION, bAllowDirectLink); + if (bPage_Registration) + enableState(STATE_REGISTRATION, bAllowDirectLink); + + return aDefaultPath; +} + +// catch F1 and disable help +long FirstStartWizard::PreNotify( NotifyEvent& rNEvt ) +{ + if( rNEvt.GetType() == EVENT_KEYINPUT ) + { + const KeyCode& rKey = rNEvt.GetKeyEvent()->GetKeyCode(); + if( rKey.GetCode() == KEY_F1 && ! rKey.GetModifier() ) + return sal_True; + } + return RoadmapWizard::PreNotify(rNEvt); +} + + +void FirstStartWizard::enterState(WizardState _nState) +{ + RoadmapWizard::enterState(_nState); + // default state + // all on + enableButtons(0xff, sal_True); + // finish off + enableButtons(WZB_FINISH, sal_False); + // default text + m_pCancel->SetText(m_sCancel); + m_pCancel->SetClickHdl(m_lnkCancel); + m_pNextPage->SetText(m_sNext); + + // default + defaultButton(WZB_NEXT); + + // specialized state + switch (_nState) + { + case STATE_WELCOME: + enableButtons(WZB_PREVIOUS, sal_False); + break; + case STATE_LICENSE: + m_pCancel->SetText(String(WizardResId(STR_LICENSE_DECLINE))); + m_pNextPage->SetText(String(WizardResId(STR_LICENSE_ACCEPT))); + enableButtons(WZB_NEXT, sal_False); + // attach warning dialog to cancel/decline button + m_pCancel->SetClickHdl( LINK(this, FirstStartWizard, DeclineHdl) ); + break; + case STATE_REGISTRATION: + enableButtons(WZB_NEXT, sal_False); + enableButtons(WZB_FINISH, sal_True); + defaultButton(WZB_FINISH); + break; + } + + // focus + +} + +IMPL_LINK( FirstStartWizard, DeclineHdl, PushButton *, EMPTYARG ) +{ + QueryBox aBox(this, WizardResId(QB_ASK_DECLINE)); + sal_Int32 ret = aBox.Execute(); + if ( ret == BUTTON_OK || ret == BUTTON_YES) + { + Close(); + return sal_False; + } + else + return sal_True; +} + + +TabPage* FirstStartWizard::createPage(WizardState _nState) +{ + TabPage *pTabPage = 0; + switch (_nState) + { + case STATE_WELCOME: + pTabPage = new WelcomePage(this, WizardResId(TP_WELCOME), m_bLicenseNeedsAcceptance); + break; + case STATE_LICENSE: + pTabPage = new LicensePage(this, WizardResId(TP_LICENSE), m_aLicensePath); + break; + case STATE_MIGRATION: + pTabPage = new MigrationPage(this, WizardResId(TP_MIGRATION), m_aThrobber); + break; + case STATE_USER: + pTabPage = new UserPage(this, WizardResId(TP_USER)); + break; + case STATE_UPDATE_CHECK: + pTabPage = new UpdateCheckPage(this, WizardResId(TP_UPDATE_CHECK)); + break; + case STATE_REGISTRATION: + pTabPage = new RegistrationPage(this, WizardResId(TP_REGISTRATION)); + break; + } + pTabPage->Show(); + + return pTabPage; +} + +String FirstStartWizard::getStateDisplayName( WizardState _nState ) const +{ + String sName; + switch(_nState) + { + case STATE_WELCOME: + sName = String(WizardResId(STR_STATE_WELCOME)); + break; + case STATE_LICENSE: + sName = String(WizardResId(STR_STATE_LICENSE)); + break; + case STATE_MIGRATION: + sName = String(WizardResId(STR_STATE_MIGRATION)); + break; + case STATE_USER: + sName = String(WizardResId(STR_STATE_USER)); + break; + case STATE_UPDATE_CHECK: + sName = String(WizardResId(STR_STATE_UPDATE_CHECK)); + break; + case STATE_REGISTRATION: + sName = String(WizardResId(STR_STATE_REGISTRATION)); + break; + } + return sName; +} + +sal_Bool FirstStartWizard::prepareLeaveCurrentState( CommitPageReason _eReason ) +{ + // the license acceptance is handled here, because it needs to change the state + // of the roadmap wizard which the page implementation does not know. + if ( + (_eReason == eTravelForward) && + (getCurrentState() == STATE_LICENSE ) && + (m_bLicenseWasAccepted == sal_False ) + ) + { + if (Migration::checkMigration()) + enableState(FirstStartWizard::STATE_MIGRATION, sal_True); + if ( showOnlineUpdatePage() ) + enableState(FirstStartWizard::STATE_UPDATE_CHECK, sal_True); + enableState(FirstStartWizard::STATE_USER, sal_True); + enableState(FirstStartWizard::STATE_REGISTRATION, sal_True); + + storeAcceptDate(); + m_bLicenseWasAccepted = sal_True; + } + + return svt::RoadmapWizard::prepareLeaveCurrentState(_eReason); +} + +sal_Bool FirstStartWizard::leaveState(WizardState) +{ + if (( getCurrentState() == STATE_MIGRATION ) && m_bLicenseWasAccepted ) + { + // Store accept date and patch level now as it has been + // overwritten by the migration process! + storeAcceptDate(); + setPatchLevel(); + } + + return sal_True; +} + +sal_Bool FirstStartWizard::onFinish() +{ + // return sal_True; + if ( svt::RoadmapWizard::onFinish() ) + { +#ifndef OS2 // cannot enable quickstart on first startup, see shutdownicon.cxx comments. + enableQuickstart(); +#endif + disableWizard(); + return sal_True; + } + else + return sal_False; +} + +short FirstStartWizard::Execute() +{ + return svt::RoadmapWizard::Execute(); +} + +static OUString _makeDateTimeString (const DateTime& aDateTime, sal_Bool bUTC = sal_False) +{ + OStringBuffer aDateTimeString; + aDateTimeString.append((sal_Int32)aDateTime.GetYear()); + aDateTimeString.append("-"); + if (aDateTime.GetMonth()<10) aDateTimeString.append("0"); + aDateTimeString.append((sal_Int32)aDateTime.GetMonth()); + aDateTimeString.append("-"); + if (aDateTime.GetDay()<10) aDateTimeString.append("0"); + aDateTimeString.append((sal_Int32)aDateTime.GetDay()); + aDateTimeString.append("T"); + if (aDateTime.GetHour()<10) aDateTimeString.append("0"); + aDateTimeString.append((sal_Int32)aDateTime.GetHour()); + aDateTimeString.append(":"); + if (aDateTime.GetMin()<10) aDateTimeString.append("0"); + aDateTimeString.append((sal_Int32)aDateTime.GetMin()); + aDateTimeString.append(":"); + if (aDateTime.GetSec()<10) aDateTimeString.append("0"); + aDateTimeString.append((sal_Int32)aDateTime.GetSec()); + if (bUTC) aDateTimeString.append("Z"); + + return OStringToOUString(aDateTimeString.makeStringAndClear(), RTL_TEXTENCODING_ASCII_US); +} + +static OUString _getCurrentDateString() +{ + OUString aString; + return _makeDateTimeString(DateTime()); +} + + +static const OUString sConfigSrvc( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.configuration.ConfigurationProvider" ) ); +static const OUString sAccessSrvc( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.configuration.ConfigurationUpdateAccess" ) ); +static const OUString sReadSrvc ( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.configuration.ConfigurationAccess" ) ); + +void FirstStartWizard::storeAcceptDate() +{ + + try { + Reference < XMultiServiceFactory > xFactory = ::comphelper::getProcessServiceFactory(); + // get configuration provider + Reference< XMultiServiceFactory > theConfigProvider = Reference< XMultiServiceFactory >( + xFactory->createInstance(sConfigSrvc), UNO_QUERY_THROW); + Sequence< Any > theArgs(1); + NamedValue v(OUString::createFromAscii("NodePath"), + makeAny(OUString::createFromAscii("org.openoffice.Setup/Office"))); + theArgs[0] <<= v; + Reference< XPropertySet > pset = Reference< XPropertySet >( + theConfigProvider->createInstanceWithArguments(sAccessSrvc, theArgs), UNO_QUERY_THROW); + Any result = pset->getPropertyValue(OUString::createFromAscii("LicenseAcceptDate")); + + OUString aAcceptDate = _getCurrentDateString(); + pset->setPropertyValue(OUString::createFromAscii("LicenseAcceptDate"), makeAny(aAcceptDate)); + Reference< XChangesBatch >(pset, UNO_QUERY_THROW)->commitChanges(); + + // since the license is accepted the local user registry can be cleaned if required + cleanOldOfficeRegKeys(); + } catch (const Exception&) + { + } + +} + +void FirstStartWizard::setPatchLevel() +{ + try { + Reference < XMultiServiceFactory > xFactory = ::comphelper::getProcessServiceFactory(); + // get configuration provider + Reference< XMultiServiceFactory > theConfigProvider = Reference< XMultiServiceFactory >( + xFactory->createInstance(sConfigSrvc), UNO_QUERY_THROW); + Sequence< Any > theArgs(1); + NamedValue v(OUString::createFromAscii("NodePath"), + makeAny(OUString::createFromAscii("org.openoffice.Office.Common/Help/Registration"))); + theArgs[0] <<= v; + Reference< XPropertySet > pset = Reference< XPropertySet >( + theConfigProvider->createInstanceWithArguments(sAccessSrvc, theArgs), UNO_QUERY_THROW); + Any result = pset->getPropertyValue(OUString::createFromAscii("ReminderDate")); + + OUString aPatchLevel( RTL_CONSTASCII_USTRINGPARAM( "Patch" )); + aPatchLevel += OUString::valueOf( getBuildId(), 10 ); + pset->setPropertyValue(OUString::createFromAscii("ReminderDate"), makeAny(aPatchLevel)); + Reference< XChangesBatch >(pset, UNO_QUERY_THROW)->commitChanges(); + } catch (const Exception&) + { + } +} + +#ifdef WNT +typedef int ( __stdcall * CleanCurUserRegProc ) ( wchar_t* ); +#endif + +void FirstStartWizard::cleanOldOfficeRegKeys() +{ +#ifdef WNT + // after the wizard is completed clean OOo1.1.x entries in the current user registry if required + // issue i47658 + + OUString aBaseLocationPath; + OUString aSharedLocationPath; + OUString aInstallMode; + + ::utl::Bootstrap::PathStatus aBaseLocateResult = + ::utl::Bootstrap::locateBaseInstallation( aBaseLocationPath ); + ::utl::Bootstrap::PathStatus aSharedLocateResult = + ::utl::Bootstrap::locateSharedData( aSharedLocationPath ); + aInstallMode = ::utl::Bootstrap::getAllUsersValue( ::rtl::OUString() ); + + // TODO: replace the checking for install mode + if ( aBaseLocateResult == ::utl::Bootstrap::PATH_EXISTS && aSharedLocateResult == ::utl::Bootstrap::PATH_EXISTS + && aInstallMode.equals( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "1" ) ) ) ) + { + ::rtl::OUString aDeregCompletePath = + aBaseLocationPath + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "/program/regcleanold.dll" ) ); + ::rtl::OUString aExecCompletePath = + aSharedLocationPath + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "/regdeinstall/userdeinst.exe" ) ); + + osl::Module aCleanModule( aDeregCompletePath ); + CleanCurUserRegProc pNativeProc = ( CleanCurUserRegProc )( + aCleanModule.getFunctionSymbol( + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CleanCurUserOldSystemRegistry" ) ) ) ); + + if( pNativeProc!=NULL ) + { + ::rtl::OUString aExecCompleteSysPath; + if ( osl::File::getSystemPathFromFileURL( aExecCompletePath, aExecCompleteSysPath ) == FileBase::E_None + && aExecCompleteSysPath.getLength() ) + { + ( *pNativeProc )( (wchar_t*)( aExecCompleteSysPath.getStr() ) ); + } + } + } +#endif +} + +void FirstStartWizard::disableWizard() +{ + + try { + Reference < XMultiServiceFactory > xFactory = ::comphelper::getProcessServiceFactory(); + // get configuration provider + Reference< XMultiServiceFactory > theConfigProvider = Reference< XMultiServiceFactory >( + xFactory->createInstance(sConfigSrvc), UNO_QUERY_THROW); + Sequence< Any > theArgs(1); + NamedValue v(OUString::createFromAscii("NodePath"), + makeAny(OUString::createFromAscii("org.openoffice.Setup/Office"))); + theArgs[0] <<= v; + Reference< XPropertySet > pset = Reference< XPropertySet >( + theConfigProvider->createInstanceWithArguments(sAccessSrvc, theArgs), UNO_QUERY_THROW); + pset->setPropertyValue(OUString::createFromAscii("FirstStartWizardCompleted"), makeAny(sal_True)); + Reference< XChangesBatch >(pset, UNO_QUERY_THROW)->commitChanges(); + } catch (const Exception&) + { + } + +} + + +void FirstStartWizard::enableQuickstart() +{ + sal_Bool bQuickstart( sal_True ); + sal_Bool bAutostart( sal_True ); + Sequence< Any > aSeq( 2 ); + aSeq[0] <<= bQuickstart; + aSeq[1] <<= bAutostart; + + Reference < XInitialization > xQuickstart( ::comphelper::getProcessServiceFactory()->createInstance( + OUString::createFromAscii( "com.sun.star.office.Quickstart" )),UNO_QUERY ); + if ( xQuickstart.is() ) + xQuickstart->initialize( aSeq ); + +} + +sal_Bool FirstStartWizard::showOnlineUpdatePage() +{ + try { + Reference < XNameReplace > xUpdateAccess; + Reference < XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory() ); + + xUpdateAccess = Reference < XNameReplace >( + xFactory->createInstance( UNISTRING( "com.sun.star.setup.UpdateCheckConfig" ) ), UNO_QUERY_THROW ); + + if ( xUpdateAccess.is() ) + { + sal_Bool bAutoUpdChk = sal_False; + Any result = xUpdateAccess->getByName( UNISTRING( "AutoCheckEnabled" ) ); + result >>= bAutoUpdChk; + if ( bAutoUpdChk == sal_False ) + return sal_True; + else + return sal_False; + } + } catch (const Exception&) + { + } + return sal_False; +} + +} diff --git a/desktop/source/migration/wizard.hrc b/desktop/source/migration/wizard.hrc new file mode 100755 index 0000000000..8ba9c89d7e --- /dev/null +++ b/desktop/source/migration/wizard.hrc @@ -0,0 +1,100 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ + +#include "desktop.hrc" +#include "helpid.hrc" + +#define TP_WIDTH 220 +#define TP_HEIGHT 205 + +#define DLG_FIRSTSTART_WIZARD RID_FIRSTSTSTART_START+1 + // FREE +#define TP_WELCOME RID_FIRSTSTSTART_START+3 +#define TP_REGISTRATION RID_FIRSTSTSTART_START+4 +#define TP_MIGRATION RID_FIRSTSTSTART_START+5 +#define TP_USER RID_FIRSTSTSTART_START+6 +#define TP_LICENSE RID_FIRSTSTSTART_START+7 +#define TP_UPDATE_CHECK RID_FIRSTSTSTART_START+8 +#define ERRBOX_REG_NOSYSBROWSER RID_FIRSTSTSTART_START+29 +#define QB_ASK_DECLINE RID_FIRSTSTSTART_START+30 + +// local resIDs + +#define FT_WELCOME_HEADER 1 +#define FT_WELCOME_BODY 2 +#define FT_LICENSE_HEADER 1 +#define FT_LICENSE_BODY_1 2 +#define FT_LICENSE_BODY_1_TXT 3 +#define FT_LICENSE_BODY_2 4 +#define FT_LICENSE_BODY_2_TXT 5 +#define ML_LICENSE 6 +#define PB_LICENSE_DOWN 7 +#define FT_MIGRATION_HEADER 1 +#define FT_MIGRATION_BODY 2 +#define CB_MIGRATION 3 +#define FT_UPDATE_CHECK_HEADER 1 +#define FT_UPDATE_CHECK_BODY 2 +#define CB_UPDATE_CHECK 3 +#define FT_REGISTRATION_HEADER 1 +#define FT_REGISTRATION_BODY 2 +#define FL_REGISTRATION 3 +#define FT_REGISTRATION_END 4 +#define RB_REGISTRATION_NOW 5 +#define RB_REGISTRATION_LATER 6 +#define RB_REGISTRATION_NEVER 7 +#define RB_REGISTRATION_REG 8 +#define IMG_REGISTRATION 9 +#define FT_USER_HEADER 10 +#define FT_USER_BODY 11 +#define FT_USER_FIRST 12 +#define FT_USER_LAST 13 +#define FT_USER_FATHER 14 +#define FT_USER_INITIALS 15 +#define ED_USER_FIRST 16 +#define ED_USER_LAST 17 +#define ED_USER_FATHER 18 +#define ED_USER_INITIALS 19 +#define TR_WAITING 20 +#define CTRL_THROBBER 21 + +// global strings +#define STR_STATE_WELCOME RID_FIRSTSTSTART_START+100 +#define STR_STATE_LICENSE RID_FIRSTSTSTART_START+101 +#define STR_STATE_MIGRATION RID_FIRSTSTSTART_START+102 +#define STR_STATE_REGISTRATION RID_FIRSTSTSTART_START+103 +#define STR_WELCOME_MIGRATION RID_FIRSTSTSTART_START+104 +// FREE RID_FIRSTSTSTART_START+105 +// FREE RID_FIRSTSTSTART_START+106 +#define STR_LICENSE_ACCEPT RID_FIRSTSTSTART_START+107 +#define STR_LICENSE_DECLINE RID_FIRSTSTSTART_START+108 +#define STR_FINISH RID_FIRSTSTSTART_START+109 +#define STR_STATE_USER RID_FIRSTSTSTART_START+110 +// FREE RID_FIRSTSTSTART_START+111 +#define STR_STATE_UPDATE_CHECK RID_FIRSTSTSTART_START+112 +#define STR_WELCOME_WITHOUT_LICENSE RID_FIRSTSTSTART_START+113 +#define STR_REGISTRATION_OOO RID_FIRSTSTSTART_START+114 + diff --git a/desktop/source/migration/wizard.hxx b/desktop/source/migration/wizard.hxx new file mode 100644 index 0000000000..7a9681a30f --- /dev/null +++ b/desktop/source/migration/wizard.hxx @@ -0,0 +1,105 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ + +#ifndef _WIZARD_HXX_ +#define _WIZARD_HXX_ + +#include <rtl/ustring.hxx> +#include <svtools/roadmapwizard.hxx> +#include <vcl/throbber.hxx> +#include <tools/resid.hxx> + +namespace desktop +{ + +class WizardResId : public ResId +{ +public: + WizardResId( sal_uInt16 nId ); +}; + +class FirstStartWizard : public svt::RoadmapWizard +{ + +public: + static const WizardState STATE_WELCOME; + static const WizardState STATE_LICENSE; + static const WizardState STATE_MIGRATION; + static const WizardState STATE_USER; + static const WizardState STATE_UPDATE_CHECK; + static const WizardState STATE_REGISTRATION; + + static ResMgr* pResMgr; + static ResMgr* GetResManager(); + + FirstStartWizard( Window* pParent, sal_Bool bLicenseNeedsAcceptance, const rtl::OUString &rLicensePath ); + + virtual short Execute(); + virtual long PreNotify( NotifyEvent& rNEvt ); + + void DisableButtonsWhileMigration(); + +private: + sal_Bool m_bOverride; + WizardState _currentState; + ::svt::RoadmapWizardTypes::PathId m_aDefaultPath; + ::svt::RoadmapWizardTypes::PathId m_aMigrationPath; + String m_sNext; + String m_sCancel; + sal_Bool m_bDone; + sal_Bool m_bLicenseNeedsAcceptance; + sal_Bool m_bLicenseWasAccepted; + sal_Bool m_bAutomaticUpdChk; + Link m_lnkCancel; + Throbber m_aThrobber; + + rtl::OUString m_aLicensePath; + + void storeAcceptDate(); + void setPatchLevel(); + void disableWizard(); + void enableQuickstart(); + + DECL_LINK(DeclineHdl, PushButton*); + + void cleanOldOfficeRegKeys(); + sal_Bool showOnlineUpdatePage(); + ::svt::RoadmapWizardTypes::PathId defineWizardPagesDependingFromContext(); + +protected: + // from svt::WizardMachine + virtual TabPage* createPage(WizardState _nState); + virtual sal_Bool prepareLeaveCurrentState( CommitPageReason _eReason ); + virtual sal_Bool leaveState(WizardState _nState ); + virtual sal_Bool onFinish(); + virtual void enterState(WizardState _nState); + + // from svt::RoadmapWizard + virtual String getStateDisplayName( WizardState _nState ) const; +}; +} +#endif diff --git a/desktop/source/migration/wizard.src b/desktop/source/migration/wizard.src new file mode 100644 index 0000000000..4f98ce91bb --- /dev/null +++ b/desktop/source/migration/wizard.src @@ -0,0 +1,442 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ + + /* + * encoding for resources: windows-1252 + */ + +#include "wizard.hrc" +#include <svtools/controldims.hrc> + +ModalDialog DLG_FIRSTSTART_WIZARD +{ + Text [ en-US ] = "Welcome to %PRODUCTNAME %PRODUCTVERSION"; + + OutputSize = TRUE ; + SVLook = TRUE ; + Moveable = TRUE ; + Closeable = TRUE ; + Hide = TRUE; + HelpID = HID_FIRSTSTART_DIALOG; + + FixedImage CTRL_THROBBER + { + Pos = MAP_APPFONT( 5, 210 ); + Size = MAP_APPFONT( 11, 11 ); + Hide = TRUE; + }; +}; + +String STR_STATE_WELCOME +{ + Text [ en-US ] = "Welcome"; +}; +String STR_STATE_LICENSE +{ + Text [ en-US ] = "License Agreement"; +}; +String STR_STATE_MIGRATION +{ + Text [ en-US ] = "Personal Data"; +}; +String STR_STATE_USER +{ + Text [ en-US ] = "User name"; +}; + +String STR_STATE_UPDATE_CHECK +{ + Text [ en-US ] = "Online Update"; +}; + +String STR_STATE_REGISTRATION +{ + Text [ en-US ] = "Registration"; +}; + +String STR_WELCOME_MIGRATION +{ + Text [ en-US ] = "This wizard will guide you through the license agreement, the transfer of user data from %OLD_VERSION and the registration of %PRODUCTNAME.\n\nClick 'Next' to continue."; + +}; + +String STR_WELCOME_WITHOUT_LICENSE +{ + Text [ en-US ] = "This wizard will guide you through the registration of %PRODUCTNAME.\n\nClick 'Next' to continue."; +}; + +String STR_FINISH +{ + Text [ en-US ] = "~Finish"; +}; + +String STR_REGISTRATION_OOO +{ + Text [ en-US ] = "You now have the opportunity to support and contribute to the fastest growing open source community in the world.\n\nHelp us prove that %PRODUCTNAME has already gained significant market share by registering.\n\nRegistering is voluntary and without obligation."; +}; + +ErrorBox ERRBOX_REG_NOSYSBROWSER +{ + BUTTONS = WB_OK ; + DEFBUTTON = WB_DEF_OK ; + + Message [ en-US ] = "An error occurred in starting the web browser.\nPlease check the %PRODUCTNAME and web browser settings."; +}; + +QueryBox QB_ASK_DECLINE +{ + Buttons = WB_YES_NO; + DefButton = WB_DEF_NO; + + Message [ en-US ] = "Do you really want to decline?"; +}; + + +#define ROWHEIGHT 8 +#define MARGINLEFT 10 +#define MARGINRIGHT 10 +#define BODYWIDTH TP_WIDTH-MARGINLEFT-MARGINRIGHT +#define MARGINTOP 10 +#define MARGINBOTTOM 2 +#define BODYHEIGHT TP_HEIGHT-MARGINTOP-MARGINBOTTOM +#define INDENT 10 +#define INDENT2 12 + +TabPage TP_WELCOME +{ + SVLook = TRUE ; + Hide = TRUE ; + Size = MAP_APPFONT(TP_WIDTH, TP_HEIGHT); + HelpID = HID_FIRSTSTART_WELCOME; + // bold fixedtext for header + FixedText FT_WELCOME_HEADER + { + NoLabel = TRUE; + Pos = MAP_APPFONT(MARGINRIGHT, MARGINTOP); + Size = MAP_APPFONT( BODYWIDTH, ROWHEIGHT ); + Text [ en-US ] = "Welcome to %PRODUCTNAME %PRODUCTVERSION"; + }; + FixedText FT_WELCOME_BODY + { + NoLabel = TRUE; + Pos = MAP_APPFONT(MARGINLEFT, MARGINTOP + 2*ROWHEIGHT); + Size = MAP_APPFONT( BODYWIDTH, BODYHEIGHT-MARGINTOP - 2*ROWHEIGHT ); + WordBreak = TRUE; + Text [ en-US ] = "This wizard will guide you through the license agreement and the registration of %PRODUCTNAME.\n\nClick 'Next' to continue."; + }; +}; + +TabPage TP_LICENSE +{ + SVLook = TRUE ; + Hide = TRUE ; + Size = MAP_APPFONT(TP_WIDTH, TP_HEIGHT); + HelpID = HID_FIRSTSTART_LICENSE; + FixedText FT_LICENSE_HEADER + { + Pos = MAP_APPFONT(MARGINLEFT, MARGINTOP); + Size = MAP_APPFONT( BODYWIDTH, ROWHEIGHT ); + NoLabel = TRUE; + Text [ en-US ] = "Please follow these steps to accept the license"; + }; + FixedText FT_LICENSE_BODY_1 + { + Pos = MAP_APPFONT(MARGINLEFT, MARGINTOP + 2*ROWHEIGHT); + Size = MAP_APPFONT( INDENT, ROWHEIGHT ); + NoLabel = TRUE; + Text [ en-US ] = "1."; + }; + FixedText FT_LICENSE_BODY_1_TXT + { + Pos = MAP_APPFONT(MARGINLEFT+INDENT, MARGINTOP +2*ROWHEIGHT); + Size = MAP_APPFONT( BODYWIDTH-INDENT, 3*ROWHEIGHT); + WordBreak = TRUE; + NoLabel = TRUE; + Text [ en-US ] = "View the complete License Agreement. Please use the scrollbar or the '%PAGEDOWN' button in this dialog to view the entire license text."; + }; + FixedText FT_LICENSE_BODY_2 + { + Pos = MAP_APPFONT(MARGINLEFT, MARGINTOP + 5*ROWHEIGHT); + Size = MAP_APPFONT(INDENT, ROWHEIGHT ); + NoLabel = TRUE; + Text [ en-US ] = "2."; + }; + FixedText FT_LICENSE_BODY_2_TXT + { + Pos = MAP_APPFONT(MARGINLEFT+INDENT, MARGINTOP + 5*ROWHEIGHT); + Size = MAP_APPFONT( BODYWIDTH-INDENT, 2*ROWHEIGHT); + WordBreak = TRUE; + NoLabel = TRUE; + Text [ en-US ] = "Click 'Accept' to accept the terms of the Agreement."; + }; + MultiLineEdit ML_LICENSE + { + HelpID = "desktop:MultiLineEdit:TP_LICENSE:ML_LICENSE"; + PosSize = MAP_APPFONT (MARGINLEFT+INDENT, MARGINTOP + 8*ROWHEIGHT, BODYWIDTH-INDENT , BODYHEIGHT - 8*ROWHEIGHT - 20-2*MARGINBOTTOM) ; + Border = TRUE; + VScroll = TRUE; + ReadOnly = TRUE; + }; + PushButton PB_LICENSE_DOWN + { + HelpID = "desktop:PushButton:TP_LICENSE:PB_LICENSE_DOWN"; + TabStop = TRUE ; + Pos = MAP_APPFONT ( TP_WIDTH-MARGINRIGHT-50 , TP_HEIGHT-MARGINBOTTOM-18 ) ; + Size = MAP_APPFONT ( 50, 15 ) ; + Text [ en-US ] = "Scroll Do~wn"; + }; +}; + +String STR_LICENSE_ACCEPT +{ + Text [ en-US ] = "~Accept"; +}; +String STR_LICENSE_DECLINE +{ + Text [ en-US ] = "~Decline"; +}; + + +TabPage TP_MIGRATION +{ + SVLook = TRUE ; + Hide = TRUE ; + Size = MAP_APPFONT(TP_WIDTH, TP_HEIGHT); + HelpID = HID_FIRSTSTART_MIGRATION; + + FixedText FT_MIGRATION_HEADER + { + NoLabel = TRUE; + Pos = MAP_APPFONT(MARGINLEFT, MARGINTOP); + Size = MAP_APPFONT( BODYWIDTH, ROWHEIGHT ); + Text [ en-US ] = "Transfer personal data"; + + }; + + FixedText FT_MIGRATION_BODY + { + NoLabel = TRUE; + Pos = MAP_APPFONT(MARGINLEFT, MARGINTOP+ROWHEIGHT*2); + Size = MAP_APPFONT(BODYWIDTH, ROWHEIGHT*8); + WordBreak = TRUE; + Text [ en-US ] = "Most personal data from %OLDPRODUCT installation can be reused in %PRODUCTNAME %PRODUCTVERSION.\n\nIf you do not want to reuse any settings in %PRODUCTNAME %PRODUCTVERSION, unmark the check box."; + + }; + + CheckBox CB_MIGRATION + { + HelpID = "desktop:CheckBox:TP_MIGRATION:CB_MIGRATION"; + Pos = MAP_APPFONT(MARGINLEFT, MARGINTOP+ROWHEIGHT*10); + Size = MAP_APPFONT(BODYWIDTH, ROWHEIGHT*2); + Check = TRUE; + Text [ en-US ] = "Transfer personal data"; + }; +}; + +TabPage TP_UPDATE_CHECK +{ + SVLook = TRUE ; + Hide = TRUE ; + Size = MAP_APPFONT(TP_WIDTH, TP_HEIGHT); + HelpID = HID_FIRSTSTART_UPDATE_CHECK; + + FixedText FT_UPDATE_CHECK_HEADER + { + NoLabel = TRUE; + Pos = MAP_APPFONT(MARGINLEFT, MARGINTOP); + Size = MAP_APPFONT( BODYWIDTH, ROWHEIGHT ); + Text [ en-US ] = "Online Update"; + + }; + + FixedText FT_UPDATE_CHECK_BODY + { + NoLabel = TRUE; + Pos = MAP_APPFONT(MARGINLEFT, MARGINTOP+ROWHEIGHT*2); + Size = MAP_APPFONT(BODYWIDTH, ROWHEIGHT*8); + WordBreak = TRUE; + Text [ en-US ] = "%PRODUCTNAME searches automatically at regular intervals for new versions.\nIn doing so online update does not transfer personal data.\nAs soon as a new version is available, you will be notified.\n\nYou can configure this feature at Tools / Options... / %PRODUCTNAME / Online Update."; + + }; + + CheckBox CB_UPDATE_CHECK + { + HelpID = "desktop:CheckBox:TP_UPDATE_CHECK:CB_UPDATE_CHECK"; + Pos = MAP_APPFONT(MARGINLEFT, MARGINTOP+ROWHEIGHT*10); + Size = MAP_APPFONT(BODYWIDTH, ROWHEIGHT*2); + Check = TRUE; + Text [ en-US ] = "~Check for updates automatically"; + }; +}; + +#define USERINDENT 40 +#define EDHEIGHT 12 +#define INITIALSWIDTH 50 +#define FTADD 2 + +TabPage TP_USER +{ + SVLook = TRUE ; + Hide = TRUE ; + Size = MAP_APPFONT(TP_WIDTH, TP_HEIGHT); + HelpID = HID_FIRSTSTART_USER; + + FixedText FT_USER_HEADER + { + NoLabel = TRUE; + Pos = MAP_APPFONT(MARGINLEFT, MARGINTOP); + Size = MAP_APPFONT( BODYWIDTH, ROWHEIGHT ); + Text [ en-US ] = "Provide your full name and initials below"; + + }; + + FixedText FT_USER_BODY + { + NoLabel = TRUE; + Pos = MAP_APPFONT(MARGINLEFT, MARGINTOP+ROWHEIGHT*2); + Size = MAP_APPFONT(BODYWIDTH, ROWHEIGHT*3); + WordBreak = TRUE; + Text [ en-US ] = "The user name will be used in the document properties, templates and when you record changes made to documents."; + }; + + + FixedText FT_USER_FIRST + { + Pos = MAP_APPFONT(MARGINLEFT, MARGINTOP+ROWHEIGHT*7+FTADD); + Size = MAP_APPFONT(USERINDENT, ROWHEIGHT); + Text [ en-US ] = "~First name"; + }; + Edit ED_USER_FIRST + { + HelpID = "desktop:Edit:TP_USER:ED_USER_FIRST"; + Border = TRUE; + Pos = MAP_APPFONT(MARGINLEFT+USERINDENT, MARGINTOP+ROWHEIGHT*7); + Size = MAP_APPFONT(BODYWIDTH-USERINDENT, EDHEIGHT); + }; + FixedText FT_USER_LAST + { + Pos = MAP_APPFONT(MARGINLEFT, MARGINTOP+ROWHEIGHT*9+FTADD); + Size = MAP_APPFONT(USERINDENT, ROWHEIGHT); + Text [ en-US ] = "~Last name"; + }; + Edit ED_USER_LAST + { + HelpID = "desktop:Edit:TP_USER:ED_USER_LAST"; + Border = TRUE; + Pos = MAP_APPFONT(MARGINLEFT+USERINDENT, MARGINTOP+ROWHEIGHT*9); + Size = MAP_APPFONT(BODYWIDTH-USERINDENT, EDHEIGHT); + }; + FixedText FT_USER_INITIALS + { + Pos = MAP_APPFONT(MARGINLEFT, MARGINTOP+ROWHEIGHT*11+FTADD); + Size = MAP_APPFONT(USERINDENT, ROWHEIGHT); + Text [ en-US ] = "~Initials"; + }; + Edit ED_USER_INITIALS + { + HelpID = "desktop:Edit:TP_USER:ED_USER_INITIALS"; + Border = TRUE; + Pos = MAP_APPFONT(MARGINLEFT+USERINDENT, MARGINTOP+ROWHEIGHT*11); + Size = MAP_APPFONT(INITIALSWIDTH, EDHEIGHT); + }; + + FixedText FT_USER_FATHER + { + Hide = TRUE; + Pos = MAP_APPFONT(MARGINLEFT+USERINDENT+INITIALSWIDTH+10, MARGINTOP+ROWHEIGHT*11+FTADD); + Size = MAP_APPFONT(USERINDENT, ROWHEIGHT); + Text [ en-US ] = "~Father's name"; + }; + Edit ED_USER_FATHER + { + HelpID = "desktop:Edit:TP_USER:ED_USER_FATHER"; + Border = TRUE; + Hide = TRUE; + Pos = MAP_APPFONT(MARGINLEFT+USERINDENT*2+INITIALSWIDTH+10, MARGINTOP+ROWHEIGHT*11); + Size = MAP_APPFONT(BODYWIDTH-10-USERINDENT*2-INITIALSWIDTH, EDHEIGHT); + }; +}; + +#define RB_HEIGHT (RSC_CD_CHECKBOX_HEIGHT+RSC_SP_GRP_SPACE_Y) + +TabPage TP_REGISTRATION +{ + SVLook = TRUE ; + Hide = TRUE ; + Size = MAP_APPFONT(TP_WIDTH, TP_HEIGHT); + HelpID = HID_FIRSTSTART_REGISTRATION; + FixedText FT_REGISTRATION_HEADER + { + NoLabel = TRUE; + Text [ en-US ] = "%PRODUCTNAME Registration"; + Pos = MAP_APPFONT(MARGINLEFT, MARGINRIGHT); + Size = MAP_APPFONT(BODYWIDTH, MARGINRIGHT); + }; + FixedText FT_REGISTRATION_BODY + { + NoLabel = TRUE; + Text [ en-US ] = "You now have the opportunity to register as a %PRODUCTNAME user. Registration is voluntary and is without obligation.\n\nIf you register, we can inform you about new developments concerning this product."; + WordBreak = TRUE; + Pos = MAP_APPFONT(MARGINLEFT, MARGINTOP+ROWHEIGHT*2); + Size = MAP_APPFONT(BODYWIDTH, ROWHEIGHT*8); + }; + RadioButton RB_REGISTRATION_NOW + { + HelpID = "desktop:RadioButton:TP_REGISTRATION:RB_REGISTRATION_NOW"; + Text [ en-US ] = "I want to register ~now"; + Pos = MAP_APPFONT(MARGINLEFT+INDENT2, ROWHEIGHT*12+2); + Size = MAP_APPFONT(BODYWIDTH-INDENT2, RSC_CD_CHECKBOX_HEIGHT); + Check = TRUE; + }; + RadioButton RB_REGISTRATION_LATER + { + HelpID = "desktop:RadioButton:TP_REGISTRATION:RB_REGISTRATION_LATER"; + Text [ en-US ] = "I want to register ~later"; + Pos = MAP_APPFONT(MARGINLEFT+INDENT2, ROWHEIGHT*12+2+RB_HEIGHT); + Size = MAP_APPFONT(BODYWIDTH-INDENT2, RSC_CD_CHECKBOX_HEIGHT); + }; + RadioButton RB_REGISTRATION_NEVER + { + HelpID = "desktop:RadioButton:TP_REGISTRATION:RB_REGISTRATION_NEVER"; + Text [ en-US ] = "I do not want to ~register"; + Pos = MAP_APPFONT(MARGINLEFT+INDENT2, ROWHEIGHT*12+2+RB_HEIGHT*2); + Size = MAP_APPFONT(BODYWIDTH-INDENT2, RSC_CD_CHECKBOX_HEIGHT); + }; + FixedLine FL_REGISTRATION + { + Pos = MAP_APPFONT(MARGINLEFT, TP_HEIGHT-MARGINBOTTOM-ROWHEIGHT*6); + Size = MAP_APPFONT(BODYWIDTH, ROWHEIGHT); + }; + FixedText FT_REGISTRATION_END + { + NoLabel = TRUE; + Text [ en-US ] = "We hope you enjoy working with %PRODUCTNAME.\n\nTo exit the wizard, click 'Finish'."; + Pos = MAP_APPFONT(MARGINLEFT, TP_HEIGHT-MARGINBOTTOM-ROWHEIGHT*4); + Size = MAP_APPFONT(BODYWIDTH, ROWHEIGHT*4); + }; +}; + diff --git a/desktop/source/offacc/acceptor.cxx b/desktop/source/offacc/acceptor.cxx index 1989937597..0b9f33ada3 100644 --- a/desktop/source/offacc/acceptor.cxx +++ b/desktop/source/offacc/acceptor.cxx @@ -69,10 +69,10 @@ Acceptor::Acceptor( const Reference< XMultiServiceFactory >& rFactory ) { m_rSMgr = rFactory; m_rAcceptor = Reference< XAcceptor > (m_rSMgr->createInstance( - rtl::OUString::createFromAscii( "com.sun.star.connection.Acceptor" )), + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.connection.Acceptor" ))), UNO_QUERY ); m_rBridgeFactory = Reference < XBridgeFactory > (m_rSMgr->createInstance( - rtl::OUString::createFromAscii( "com.sun.star.bridge.BridgeFactory" )), + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.bridge.BridgeFactory" ))), UNO_QUERY ); // get component context m_rContext = getComponentContext(m_rSMgr); @@ -174,7 +174,7 @@ void SAL_CALL Acceptor::initialize( const Sequence<Any>& aArguments ) // "<connectString>;<protocol>" sal_Int32 nIndex1 = m_aAcceptString.indexOf( (sal_Unicode) ';' ); if (nIndex1 < 0) throw IllegalArgumentException( - OUString::createFromAscii("Invalid accept-string format"), m_rContext, 1); + OUString(RTL_CONSTASCII_USTRINGPARAM("Invalid accept-string format")), m_rContext, 1); m_aConnectString = m_aAcceptString.copy( 0 , nIndex1 ).trim(); nIndex1++; sal_Int32 nIndex2 = m_aAcceptString.indexOf( (sal_Unicode) ';' , nIndex1 ); @@ -200,7 +200,7 @@ void SAL_CALL Acceptor::initialize( const Sequence<Any>& aArguments ) if (!bOk) { throw IllegalArgumentException( - OUString::createFromAscii("invalid initialization"), m_rContext, 1); + OUString(RTL_CONSTASCII_USTRINGPARAM("invalid initialization")), m_rContext, 1); } } @@ -275,29 +275,17 @@ Reference<XInterface> SAL_CALL AccInstanceProvider::getInstance (const OUString& else if ( aName.compareToAscii("StarOffice.NamingService" ) == 0 ) { Reference< XNamingService > rNamingService( - m_rSMgr->createInstance( OUString::createFromAscii( "com.sun.star.uno.NamingService" )), + m_rSMgr->createInstance( OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.uno.NamingService" ))), UNO_QUERY ); if ( rNamingService.is() ) { rNamingService->registerObject( - OUString::createFromAscii( "StarOffice.ServiceManager" ), m_rSMgr ); + OUString(RTL_CONSTASCII_USTRINGPARAM( "StarOffice.ServiceManager" )), m_rSMgr ); rNamingService->registerObject( - OUString::createFromAscii( "StarOffice.ComponentContext" ), getComponentContext( m_rSMgr )); + OUString(RTL_CONSTASCII_USTRINGPARAM( "StarOffice.ComponentContext" )), getComponentContext( m_rSMgr )); rInstance = rNamingService; } } - /* - else if ( aName.compareToAscii("com.sun.star.ucb.RemoteContentProviderAcceptor" )) - { - Reference< XMultiServiceFactory > rSMgr = ::comphelper::getProcessServiceFactory(); - if ( rSMgr.is() ) { - try { - rInstance = rSMgr->createInstance( sObjectName ); - } - catch (Exception const &) {} - } - } - */ return rInstance; } @@ -315,23 +303,6 @@ component_getImplementationEnvironment(const sal_Char **ppEnvironmentTypeName, u *ppEnvironmentTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME ; } -sal_Bool SAL_CALL -component_writeInfo(void *pServiceManager, void *pRegistryKey) -{ - Reference< XMultiServiceFactory > xMan(reinterpret_cast< XMultiServiceFactory* >(pServiceManager)); - Reference< XRegistryKey > xKey(reinterpret_cast< XRegistryKey* >(pRegistryKey)); - - // register service - ::rtl::OUString aTempStr; - ::rtl::OUString aImpl(RTL_CONSTASCII_USTRINGPARAM("/")); - aImpl += Acceptor::impl_getImplementationName(); - aImpl += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/UNO/SERVICES")); - Reference< XRegistryKey > xNewKey = xKey->createKey(aImpl); - xNewKey->createKey(Acceptor::impl_getSupportedServiceNames()[0]); - - return sal_True; -} - void * SAL_CALL component_getFactory(const sal_Char *pImplementationName, void *pServiceManager, void *) { diff --git a/desktop/source/offacc/makefile.mk b/desktop/source/offacc/makefile.mk index c2d53930b5..809c28414b 100644..100755 --- a/desktop/source/offacc/makefile.mk +++ b/desktop/source/offacc/makefile.mk @@ -60,3 +60,11 @@ SHL1STDLIBS= \ .INCLUDE : target.mk + +ALLTAR : $(MISC)/offacc.component + +$(MISC)/offacc.component .ERRREMOVE : $(SOLARENV)/bin/createcomponent.xslt \ + offacc.component + $(XSLTPROC) --nonet --stringparam uri \ + '$(COMPONENTPREFIX_BASIS_NATIVE)$(SHL1TARGETN:f)' -o $@ \ + $(SOLARENV)/bin/createcomponent.xslt offacc.component diff --git a/desktop/source/offacc/offacc.component b/desktop/source/offacc/offacc.component new file mode 100755 index 0000000000..6f0d4a97a2 --- /dev/null +++ b/desktop/source/offacc/offacc.component @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!--********************************************************************** +* +* 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. +* +**********************************************************************--> + +<component loader="com.sun.star.loader.SharedLibrary" + xmlns="http://openoffice.org/2010/uno-components"> + <implementation name="com.sun.star.office.comp.Acceptor"> + <service name="com.sun.star.office.Acceptor"/> + </implementation> +</component> diff --git a/desktop/source/pagein/file_image.h b/desktop/source/pagein/file_image.h index 4234140027..4234140027 100644..100755 --- a/desktop/source/pagein/file_image.h +++ b/desktop/source/pagein/file_image.h diff --git a/desktop/source/pagein/file_image_unx.c b/desktop/source/pagein/file_image_unx.c index 41d60e8035..41d60e8035 100644..100755 --- a/desktop/source/pagein/file_image_unx.c +++ b/desktop/source/pagein/file_image_unx.c diff --git a/desktop/source/pagein/makefile.mk b/desktop/source/pagein/makefile.mk index 01452a858e..2b02a4d5a4 100644..100755 --- a/desktop/source/pagein/makefile.mk +++ b/desktop/source/pagein/makefile.mk @@ -41,10 +41,18 @@ LIBSALCPPRT=$(0) .INCLUDE .IGNORE : icuversion.mk +.IF "$(OS)"=="MACOSX" + +dummy: + @echo "Pagein disabled for mac" + +.ELSE + # --- Files -------------------------------------------------------- OBJFILES= \ $(OBJ)$/pagein.obj \ + $(OBJ)$/pagein-main.obj \ $(OBJ)$/file_image_unx.obj APP1TARGET=$(TARGET) @@ -72,28 +80,33 @@ UNODLLPOST=.uno$(DLLPOST) DFTDLLPOST=$(DLLPOSTFIX)$(DLLPOST) # Default URELIBPATH=..$/ure-link$/lib +UREMISCPATH=..$/ure-link$/share$/misc $(MISC)$/$(TARGET)-calc : makefile.mk @echo Making: $@ @-echo $(DLLPRE)sc$(DFTDLLPOST) > $@ + @-echo $(DLLPRE)scui$(DFTDLLPOST) >> $@ @-echo $(DLLPRE)svx$(DFTDLLPOST) >> $@ @-echo $(DLLPRE)svxcore$(DFTDLLPOST) >> $@ $(MISC)$/$(TARGET)-draw : makefile.mk @echo Making: $@ @-echo $(DLLPRE)sd$(DFTDLLPOST) > $@ + @-echo $(DLLPRE)sdui$(DFTDLLPOST) >> $@ @-echo $(DLLPRE)svx$(DFTDLLPOST) >> $@ @-echo $(DLLPRE)svxcore$(DFTDLLPOST) >> $@ $(MISC)$/$(TARGET)-impress : makefile.mk @echo Making: $@ @-echo $(DLLPRE)sd$(DFTDLLPOST) > $@ + @-echo $(DLLPRE)sdui$(DFTDLLPOST) >> $@ @-echo $(DLLPRE)svx$(DFTDLLPOST) >> $@ @-echo $(DLLPRE)svxcore$(DFTDLLPOST) >> $@ $(MISC)$/$(TARGET)-writer : makefile.mk @echo Making: $@ @-echo $(DLLPRE)sw$(DFTDLLPOST) > $@ + @-echo $(DLLPRE)swui$(DFTDLLPOST) >> $@ @-echo $(DLLPRE)svx$(DFTDLLPOST) >> $@ @-echo $(DLLPRE)svxcore$(DFTDLLPOST) >> $@ @@ -105,7 +118,7 @@ $(MISC)$/$(TARGET)-common : makefile.mk @-echo $(DLLPRE)icui18n$(ICUDLLPOST) >> $@ @-echo $(DLLPRE)icule$(ICUDLLPOST) >> $@ @-echo $(DLLPRE)icuuc$(ICUDLLPOST) >> $@ - @-echo $(DLLPRE)icudata$(ICUDLLPOST) >> $@ +# @-echo $(DLLPRE)icudata$(ICUDLLPOST) >> $@ - a huge dll, almost none of it used .ENDIF # SYSTEM_ICU # @-echo $(DLLPRE)lng$(DFTDLLPOST) >> $@ @@ -119,9 +132,8 @@ $(MISC)$/$(TARGET)-common : makefile.mk @-echo $(DLLPRE)package2$(DLLPOST) >> $@ @-echo $(DLLPRE)ucpfile1$(DLLPOST) >> $@ @-echo $(DLLPRE)ucb1$(DLLPOST) >> $@ - @-echo $(DLLPRE)configmgr$(DLLPOST) >> $@ + @-echo configmgr$(UNODLLPOST) >> $@ # - @-echo $(DLLPRE)dtrans$(DLLPOST) >> $@ @-echo $(DLLPRE)vclplug_gen$(DFTDLLPOST) >> $@ .IF "$(ENABLE_GTK)" != "" @-echo $(DLLPRE)vclplug_gtk$(DFTDLLPOST) >> $@ @@ -141,14 +153,7 @@ $(MISC)$/$(TARGET)-common : makefile.mk @-echo $(URELIBPATH)$/bootstrap$(UNODLLPOST) >> $@ @-echo $(URELIBPATH)$/$(DLLPRE)reg$(UDKDLLPOST) >> $@ @-echo $(URELIBPATH)$/$(DLLPRE)store$(UDKDLLPOST) >> $@ -.IF "$(USE_SYSTEM_STL)"!="YES" -.IF "$(COMNAME)" == "gcc2" || "$(COMNAME)" == "gcc3" - @-echo $(URELIBPATH)$/$(DLLPRE)stlport_gcc$(DLLPOST) >> $@ -.ENDIF # gcc -.IF "$(COMNAME)" == "sunpro5" - @-echo $(URELIBPATH)$/$(DLLPRE)stlport_sunpro$(DLLPOST) >> $@ -.ENDIF # sunpro5 -.ENDIF # SYSTEM_STL + @-echo $(URELIBPATH)$/reflection$(UNODLLPOST) >> $@ @-echo $(URELIBPATH)$/$(DLLPRE)uno_cppuhelper$(COMID)$(UDKDLLPOST) >> $@ @-echo $(URELIBPATH)$/$(DLLPRE)uno_cppu$(UDKDLLPOST) >> $@ @-echo $(URELIBPATH)$/$(DLLPRE)uno_sal$(UDKDLLPOST) >> $@ @@ -160,6 +165,32 @@ $(MISC)$/$(TARGET)-common : makefile.mk @-echo $(DLLPRE)svl$(DFTDLLPOST) >> $@ @-echo $(DLLPRE)vcl$(DFTDLLPOST) >> $@ @-echo $(DLLPRE)tk$(DFTDLLPOST) >> $@ - @-echo $(DLLPRE)svt$(DFTDLLPOST) >> $@ - @-echo $(DLLPRE)sfx$(DFTDLLPOST) >> $@ - @-echo $(DLLPRE)sofficeapp$(DLLPOST) >> $@ + @-echo $(UREMISCPATH)$/types.rdb >> $@ + @-echo services.rdb >> $@ + @-echo oovbaapi.rdb >> $@ + @-echo deployment$(DLLPOSTFIX)$(UNODLLPOST) >> $@ + @-echo $(DLLPRE)deploymentmisc$(DFTDLLPOST) >> $@ + @-echo $(DLLPRE)ucb1$(DLLPOST) >> $@ + @-echo $(DLLPRE)xstor$(DLLPOST) >> $@ + @-echo $(DLLPRE)package2$(DLLPOST) >> $@ + @-echo $(DLLPRE)filterconfig1$(DLLPOST) >> $@ + @-echo $(DLLPRE)uui$(DFTDLLPOST) >> $@ + @-echo $(DLLPRE)lng$(DFTDLLPOST) >> $@ + @-echo $(DLLPRE)svt$(DFTDLLPOST) >> $@ + @-echo $(DLLPRE)spl$(DFTDLLPOST) >> $@ + @-echo $(DLLPRE)basegfx$(DFTDLLPOST) >> $@ + @-echo $(DLLPRE)avmedia$(DFTDLLPOST) >> $@ + @-echo $(DLLPRE)helplinker$(DFTDLLPOST) >> $@ + @-echo $(DLLPRE)vclplug_gen$(DFTDLLPOST) >> $@ + @-echo $(DLLPRE)icule$(ICUDLLPOST) >> $@ + @-echo sax$(UNODLLPOST) >> $@ + @-echo gconfbe1$(UNODLLPOST) >> $@ + @-echo fsstorage$(UNODLLPOST) >> $@ + @-echo desktopbe1$(UNODLLPOST) >> $@ + @-echo localebe1$(UNODLLPOST) >> $@ + @-echo ucpexpand1$(UNODLLPOST) >> $@ +# stoc bits + @-echo $(DLLPRE)sfx$(DFTDLLPOST) >> $@ + @-echo $(DLLPRE)sofficeapp$(DLLPOST) >> $@ + +.ENDIF
\ No newline at end of file diff --git a/desktop/source/pagein/pagein-main.c b/desktop/source/pagein/pagein-main.c new file mode 100644 index 0000000000..f8fe82ab0a --- /dev/null +++ b/desktop/source/pagein/pagein-main.c @@ -0,0 +1,12 @@ +#include <stdio.h> +/* + * De-coupled to allow pagein to be re-used in the unx + * splash / quick-starter + */ +extern int pagein_execute (int argc, char **argv); + +int main (int argc, char **argv) +{ + return pagein_execute (argc, argv); +} + diff --git a/desktop/source/pagein/pagein.c b/desktop/source/pagein/pagein.c index 15623bfd8d..097b093fe3 100644..100755 --- a/desktop/source/pagein/pagein.c +++ b/desktop/source/pagein/pagein.c @@ -44,7 +44,7 @@ static int do_pagein (const char * filename, size_t * size) if ((result = file_image_pagein (&image)) != 0) { - fprintf (stderr, "file_image_pagein: %s\n", strerror(result)); + fprintf (stderr, "file_image_pagein %s: %s\n", filename, strerror(result)); goto cleanup_and_leave; } @@ -58,8 +58,10 @@ cleanup_and_leave: return (result); } +extern int pagein_execute (int argc, char **argv); + /* main */ -int main (int argc, char **argv) +int pagein_execute (int argc, char **argv) { int i, v = 0; size_t nfiles = 0, nbytes = 0; @@ -92,7 +94,7 @@ int main (int argc, char **argv) case 'L': /* search path */ if (chdir (&(argv[i][2])) == -1) - fprintf (stderr, "chdir: %s\n", strerror(errno)); + fprintf (stderr, "chdir %s: %s\n", &(argv[i][2]), strerror(errno)); break; default: /* ignored */ @@ -102,14 +104,13 @@ int main (int argc, char **argv) /* next argv */ continue; } - if ((argv[i][0] == '@') && ((fp = fopen (argv[i], "r")) == 0)) { char path[1024]; if ((fp = fopen (&(argv[i][1]), "r")) == 0) { - fprintf (stderr, "fopen: %s\n", strerror(errno)); + fprintf (stderr, "fopen %s: %s\n", &(argv[i][1]), strerror(errno)); continue; } while (fgets (path, sizeof(path), fp) != 0) diff --git a/desktop/source/pkgchk/unopkg/makefile.mk b/desktop/source/pkgchk/unopkg/makefile.mk index 8384f1b243..8384f1b243 100644..100755 --- a/desktop/source/pkgchk/unopkg/makefile.mk +++ b/desktop/source/pkgchk/unopkg/makefile.mk diff --git a/desktop/source/pkgchk/unopkg/unopkg_app.cxx b/desktop/source/pkgchk/unopkg/unopkg_app.cxx index de8c13bcf7..2356165235 100644 --- a/desktop/source/pkgchk/unopkg/unopkg_app.cxx +++ b/desktop/source/pkgchk/unopkg/unopkg_app.cxx @@ -222,7 +222,6 @@ void disposeBridges(Reference<css::uno::XComponentContext> ctx) } } -//############################################################################## extern "C" int unopkg_main() { tools::extendApplicationEnvironment(); @@ -380,7 +379,12 @@ extern "C" int unopkg_main() } else if (subCommand.equals(OUSTR("sync"))) { - //sync is private!!!! Only for bundled extensions!!! + //sync is private!!!! Only to be called from setup!!! + //The UserInstallation is diverted to the prereg folder. But only + //the lock file is written! This requires that + //-env:UNO_JAVA_JFW_INSTALL_DATA is passed to javaldx and unopkg otherwise the + //javasettings file is written to the prereg folder. + // //For performance reasons unopkg sync is called during the setup and //creates the registration data for the repository of the bundled //extensions. It is then copied to the user installation during @@ -395,11 +399,22 @@ extern "C" int unopkg_main() //$BUNDLED_EXTENSIONS_USER if (hasNoFolder(OUSTR("$BRAND_BASE_DIR/share/extensions"))) { - removeFolder(OUSTR("$BUNDLED_EXTENSIONS_USER")); + removeFolder(OUSTR("$BUNDLED_EXTENSIONS_PREREG")); //return otherwise we create the registration data again return 0; } - + //redirect the UserInstallation, so we do not create a + //user installation for the admin and we also do not need + //to call unopkg with -env:UserInstallation + ::rtl::Bootstrap::set(OUSTR("UserInstallation"), + OUSTR("$BUNDLED_EXTENSIONS_PREREG/..")); + //Setting UNO_JAVA_JFW_INSTALL_DATA causes the javasettings to be written + //in the office installation. We do not want to create the user data folder + //for the admin. The value must also be set in the unopkg script (Linux, etc.) + //when calling javaldx + ::rtl::Bootstrap::set(OUSTR("UNO_JAVA_JFW_INSTALL_DATA"), + OUSTR("$OOO_BASE_DIR/share/config/javasettingsunopkginstall.xml")); + } xComponentContext = getUNO( @@ -418,6 +433,7 @@ extern "C" int unopkg_main() //prevent the deletion of the registry data folder //synching is done in XExtensionManager.reinstall if (!subcmd_gui && ! subCommand.equals(OUSTR("reinstall")) + && ! subCommand.equals(OUSTR("sync")) && ! dp_misc::office_is_running()) dp_misc::syncRepositories(xCmdEnv); @@ -500,10 +516,9 @@ extern "C" int unopkg_main() //Now prepare the vector which tells what extension has an //unaccepted license vecUnaccepted.resize(vecExtUnaccepted.size() + vec_packages.size()); - ::std::vector<bool>::iterator i_unaccepted = - ::std::fill_n(vecUnaccepted.begin(), - vecExtUnaccepted.size(), true); - ::std::fill_n(i_unaccepted, vec_packages.size(), false); + ::std::fill_n(vecUnaccepted.begin(), vecExtUnaccepted.size(), true); + ::std::fill_n(vecUnaccepted.begin() + vecExtUnaccepted.size(), + vec_packages.size(), false); dp_misc::writeConsole( OUSTR("All deployed ") + repository + OUSTR(" extensions:\n\n")); @@ -613,12 +628,15 @@ extern "C" int unopkg_main() } else if (subCommand.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("sync"))) { - //This sub command may be removed later and is only there to have a - //possibility to start extension synching without any output. - //This is just here so we do not get an error, because of an unknown - //sub-command. We do synching before - //the sub-commands are processed. - + if (! dp_misc::office_is_running()) + { + xExtensionManager->synchronizeBundledPrereg( + Reference<task::XAbortChannel>(), xCmdEnv); + } + else + { + dp_misc::writeConsoleError(OUSTR("\nError: office is running")); + } } else { diff --git a/desktop/source/pkgchk/unopkg/unopkg_cmdenv.cxx b/desktop/source/pkgchk/unopkg/unopkg_cmdenv.cxx index c6d26b1df1..f3d68a0079 100644 --- a/desktop/source/pkgchk/unopkg/unopkg_cmdenv.cxx +++ b/desktop/source/pkgchk/unopkg/unopkg_cmdenv.cxx @@ -155,7 +155,7 @@ CommandEnvironmentImpl::~CommandEnvironmentImpl() } catch (RuntimeException & exc) { (void) exc; - OSL_ENSURE( 0, ::rtl::OUStringToOString( + OSL_FAIL( ::rtl::OUStringToOString( exc.Message, osl_getThreadTextEncoding() ).getStr() ); } } diff --git a/desktop/source/pkgchk/unopkg/unopkg_main.c b/desktop/source/pkgchk/unopkg/unopkg_main.c index 1d5b31d03f..1d5b31d03f 100644..100755 --- a/desktop/source/pkgchk/unopkg/unopkg_main.c +++ b/desktop/source/pkgchk/unopkg/unopkg_main.c diff --git a/desktop/source/pkgchk/unopkg/unopkg_main.h b/desktop/source/pkgchk/unopkg/unopkg_main.h index 694cc41558..694cc41558 100644..100755 --- a/desktop/source/pkgchk/unopkg/unopkg_main.h +++ b/desktop/source/pkgchk/unopkg/unopkg_main.h diff --git a/desktop/source/pkgchk/unopkg/unopkg_misc.cxx b/desktop/source/pkgchk/unopkg/unopkg_misc.cxx index 9b20f57287..1aad5b14c3 100644 --- a/desktop/source/pkgchk/unopkg/unopkg_misc.cxx +++ b/desktop/source/pkgchk/unopkg/unopkg_misc.cxx @@ -105,7 +105,7 @@ OptionInfo const * getOptionInfo( } } } - OSL_ENSURE( 0, ::rtl::OUStringToOString( + OSL_FAIL( ::rtl::OUStringToOString( opt, osl_getThreadTextEncoding() ).getStr() ); return 0; } @@ -177,7 +177,6 @@ bool readArgument( return false; } -//############################################################################## namespace { struct ExecutableDir : public rtl::StaticWithInit< @@ -195,7 +194,7 @@ struct ProcessWorkingDir : public rtl::StaticWithInit< const OUString, ProcessWorkingDir> { const OUString operator () () { OUString workingDir; - tools::getProcessWorkingDir(&workingDir); + tools::getProcessWorkingDir(workingDir); return workingDir; } }; @@ -256,7 +255,6 @@ OUString makeAbsoluteFileUrl( ? abs.copy( 0, abs.getLength() -1 ) : abs; } -//############################################################################## namespace { @@ -369,7 +367,6 @@ void printf_packages( } -//############################################################################## namespace { @@ -629,7 +626,7 @@ void removeFolder(OUString const & folderUrl) dir.close(); ::osl::Directory::remove(url); } - else + else if (rc != osl::File::E_NOENT) { dp_misc::writeConsole( OUSTR("unopkg: Error while removing ") + url + OUSTR("\n")); diff --git a/desktop/source/pkgchk/unopkg/unopkg_shared.h b/desktop/source/pkgchk/unopkg/unopkg_shared.h index 232fbf8f52..cc25e934d6 100644..100755 --- a/desktop/source/pkgchk/unopkg/unopkg_shared.h +++ b/desktop/source/pkgchk/unopkg/unopkg_shared.h @@ -161,7 +161,7 @@ public: { m_bDeinitUCB = true; } - + }; //============================================================================== diff --git a/desktop/source/pkgchk/unopkg/version.map b/desktop/source/pkgchk/unopkg/version.map index 8591bb3b58..8591bb3b58 100644..100755 --- a/desktop/source/pkgchk/unopkg/version.map +++ b/desktop/source/pkgchk/unopkg/version.map diff --git a/desktop/source/registration/com/sun/star/registration/Registration.java b/desktop/source/registration/com/sun/star/registration/Registration.java index 6ac22c7c39..d00ed1dde3 100644..100755 --- a/desktop/source/registration/com/sun/star/registration/Registration.java +++ b/desktop/source/registration/com/sun/star/registration/Registration.java @@ -63,10 +63,6 @@ public class Registration { return xSingleServiceFactory; } - public static boolean __writeRegistryServiceInfo(XRegistryKey regKey) { - return FactoryHelper.writeRegistryServiceInfo(Registration.class.getName(), _serviceName, regKey); - } - static final String _serviceName = "com.sun.star.comp.framework.DoRegistrationJob"; static public class _Registration implements XJob { @@ -315,7 +311,6 @@ public class Registration { out.close(); int returnCode = con.getResponseCode(); -// if (returnCode == HttpURLConnection.HTTP_OK); } catch(java.lang.Exception e) { // IOException and UnknownHostException } diff --git a/desktop/source/registration/com/sun/star/registration/makefile.mk b/desktop/source/registration/com/sun/star/registration/makefile.mk index 9784166eb9..8598022562 100644..100755 --- a/desktop/source/registration/com/sun/star/registration/makefile.mk +++ b/desktop/source/registration/com/sun/star/registration/makefile.mk @@ -53,3 +53,10 @@ CUSTOMMANIFESTFILE = manifest .INCLUDE : target.mk +ALLTAR : $(MISC)/productregistration.jar.component + +$(MISC)/productregistration.jar.component .ERRREMOVE : \ + $(SOLARENV)/bin/createcomponent.xslt productregistration.jar.component + $(XSLTPROC) --nonet --stringparam uri \ + '$(COMPONENTPREFIX_BASIS_JAVA)productregistration.jar' -o $@ \ + $(SOLARENV)/bin/createcomponent.xslt productregistration.jar.component diff --git a/desktop/source/registration/com/sun/star/registration/manifest b/desktop/source/registration/com/sun/star/registration/manifest index 952aaa804e..952aaa804e 100644..100755 --- a/desktop/source/registration/com/sun/star/registration/manifest +++ b/desktop/source/registration/com/sun/star/registration/manifest diff --git a/desktop/source/registration/com/sun/star/registration/productregistration.jar.component b/desktop/source/registration/com/sun/star/registration/productregistration.jar.component new file mode 100755 index 0000000000..c022a98ae0 --- /dev/null +++ b/desktop/source/registration/com/sun/star/registration/productregistration.jar.component @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!--********************************************************************** +* +* 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. +* +**********************************************************************--> + +<component loader="com.sun.star.loader.Java2" + xmlns="http://openoffice.org/2010/uno-components"> + <implementation name="com.sun.star.registration.Registration"> + <service name="com.sun.star.comp.framework.DoRegistrationJob"/> + </implementation> +</component> diff --git a/desktop/source/registration/com/sun/star/servicetag/BrowserSupport.java b/desktop/source/registration/com/sun/star/servicetag/BrowserSupport.java index c475b75dd3..c475b75dd3 100644..100755 --- a/desktop/source/registration/com/sun/star/servicetag/BrowserSupport.java +++ b/desktop/source/registration/com/sun/star/servicetag/BrowserSupport.java diff --git a/desktop/source/registration/com/sun/star/servicetag/Installer.java b/desktop/source/registration/com/sun/star/servicetag/Installer.java index 41d328ca08..41d328ca08 100644..100755 --- a/desktop/source/registration/com/sun/star/servicetag/Installer.java +++ b/desktop/source/registration/com/sun/star/servicetag/Installer.java diff --git a/desktop/source/registration/com/sun/star/servicetag/LinuxSystemEnvironment.java b/desktop/source/registration/com/sun/star/servicetag/LinuxSystemEnvironment.java index f81d935891..786fe3a9fd 100644..100755 --- a/desktop/source/registration/com/sun/star/servicetag/LinuxSystemEnvironment.java +++ b/desktop/source/registration/com/sun/star/servicetag/LinuxSystemEnvironment.java @@ -156,7 +156,6 @@ class LinuxSystemEnvironment extends SystemEnvironment { // reads from dmidecode with the given type and target // returns an empty string if nothing was found or an error occurred - // // Sample output segment: // Handle 0x0001 // DMI type 1, 25 bytes. diff --git a/desktop/source/registration/com/sun/star/servicetag/RegistrationData.java b/desktop/source/registration/com/sun/star/servicetag/RegistrationData.java index 9323e5de7e..9323e5de7e 100644..100755 --- a/desktop/source/registration/com/sun/star/servicetag/RegistrationData.java +++ b/desktop/source/registration/com/sun/star/servicetag/RegistrationData.java diff --git a/desktop/source/registration/com/sun/star/servicetag/RegistrationDocument.java b/desktop/source/registration/com/sun/star/servicetag/RegistrationDocument.java index 4bfa1aa16a..4bfa1aa16a 100644..100755 --- a/desktop/source/registration/com/sun/star/servicetag/RegistrationDocument.java +++ b/desktop/source/registration/com/sun/star/servicetag/RegistrationDocument.java diff --git a/desktop/source/registration/com/sun/star/servicetag/Registry.java b/desktop/source/registration/com/sun/star/servicetag/Registry.java index d1b7607197..57a945285f 100644..100755 --- a/desktop/source/registration/com/sun/star/servicetag/Registry.java +++ b/desktop/source/registration/com/sun/star/servicetag/Registry.java @@ -157,7 +157,6 @@ public class Registry { // $JAVA_HOME/bin/java -cp $TEST_DIR \ // -Dstclient.registry.path=$TEST_DIR/registry.xml \ // SvcTagClient - // // On Windows, the JAVA_HOME and TEST_DIR path could contain // space e.g. c:\Program Files\Java\jdk1.6.0_05\bin\java. // The SVCTAG_STCLIENT_CMD must be set with a list of diff --git a/desktop/source/registration/com/sun/star/servicetag/ServiceTag.java b/desktop/source/registration/com/sun/star/servicetag/ServiceTag.java index cbaf44e1d0..cbaf44e1d0 100644..100755 --- a/desktop/source/registration/com/sun/star/servicetag/ServiceTag.java +++ b/desktop/source/registration/com/sun/star/servicetag/ServiceTag.java diff --git a/desktop/source/registration/com/sun/star/servicetag/SolarisServiceTag.java b/desktop/source/registration/com/sun/star/servicetag/SolarisServiceTag.java index 8378c78e76..8378c78e76 100644..100755 --- a/desktop/source/registration/com/sun/star/servicetag/SolarisServiceTag.java +++ b/desktop/source/registration/com/sun/star/servicetag/SolarisServiceTag.java diff --git a/desktop/source/registration/com/sun/star/servicetag/SolarisSystemEnvironment.java b/desktop/source/registration/com/sun/star/servicetag/SolarisSystemEnvironment.java index a9c094d1af..40d6fa9028 100644..100755 --- a/desktop/source/registration/com/sun/star/servicetag/SolarisSystemEnvironment.java +++ b/desktop/source/registration/com/sun/star/servicetag/SolarisSystemEnvironment.java @@ -309,7 +309,6 @@ class SolarisSystemEnvironment extends SystemEnvironment { // Sample smbios output segment: // ID SIZE TYPE // 1 150 SMB_TYPE_SYSTEM (system information) - // // Manufacturer: Sun Microsystems // Product: Sun Fire X4600 // Version: To Be Filled By O.E.M. diff --git a/desktop/source/registration/com/sun/star/servicetag/SunConnection.java b/desktop/source/registration/com/sun/star/servicetag/SunConnection.java index 9b9c7595ac..9b9c7595ac 100644..100755 --- a/desktop/source/registration/com/sun/star/servicetag/SunConnection.java +++ b/desktop/source/registration/com/sun/star/servicetag/SunConnection.java diff --git a/desktop/source/registration/com/sun/star/servicetag/SysnetRegistryHelper.java b/desktop/source/registration/com/sun/star/servicetag/SysnetRegistryHelper.java index 0f03d0d621..8338b29fa8 100644..100755 --- a/desktop/source/registration/com/sun/star/servicetag/SysnetRegistryHelper.java +++ b/desktop/source/registration/com/sun/star/servicetag/SysnetRegistryHelper.java @@ -113,7 +113,6 @@ public class SysnetRegistryHelper { // $JAVA_HOME/bin/java -cp $TEST_DIR \ // -Dstclient.registry.path=$TEST_DIR/registry.xml \ // SvcTagClient - // // On Windows, the JAVA_HOME and TEST_DIR path could contain // space e.g. c:\Program Files\Java\jdk1.6.0_05\bin\java. // The SVCTAG_STCLIENT_CMD must be set with a list of diff --git a/desktop/source/registration/com/sun/star/servicetag/SystemEnvironment.java b/desktop/source/registration/com/sun/star/servicetag/SystemEnvironment.java index 013c1251bc..013c1251bc 100644..100755 --- a/desktop/source/registration/com/sun/star/servicetag/SystemEnvironment.java +++ b/desktop/source/registration/com/sun/star/servicetag/SystemEnvironment.java diff --git a/desktop/source/registration/com/sun/star/servicetag/UnauthorizedAccessException.java b/desktop/source/registration/com/sun/star/servicetag/UnauthorizedAccessException.java index a6d41e07b3..a6d41e07b3 100644..100755 --- a/desktop/source/registration/com/sun/star/servicetag/UnauthorizedAccessException.java +++ b/desktop/source/registration/com/sun/star/servicetag/UnauthorizedAccessException.java diff --git a/desktop/source/registration/com/sun/star/servicetag/Util.java b/desktop/source/registration/com/sun/star/servicetag/Util.java index c1cb14f7c2..c1cb14f7c2 100644..100755 --- a/desktop/source/registration/com/sun/star/servicetag/Util.java +++ b/desktop/source/registration/com/sun/star/servicetag/Util.java diff --git a/desktop/source/registration/com/sun/star/servicetag/WindowsSystemEnvironment.java b/desktop/source/registration/com/sun/star/servicetag/WindowsSystemEnvironment.java index fd500a8ac8..fd500a8ac8 100644..100755 --- a/desktop/source/registration/com/sun/star/servicetag/WindowsSystemEnvironment.java +++ b/desktop/source/registration/com/sun/star/servicetag/WindowsSystemEnvironment.java diff --git a/desktop/source/registration/com/sun/star/servicetag/makefile.mk b/desktop/source/registration/com/sun/star/servicetag/makefile.mk index 7849646529..7849646529 100644..100755 --- a/desktop/source/registration/com/sun/star/servicetag/makefile.mk +++ b/desktop/source/registration/com/sun/star/servicetag/makefile.mk diff --git a/desktop/source/registration/com/sun/star/servicetag/resources/product_registration.xsd b/desktop/source/registration/com/sun/star/servicetag/resources/product_registration.xsd index 6681a563a0..6681a563a0 100644..100755 --- a/desktop/source/registration/com/sun/star/servicetag/resources/product_registration.xsd +++ b/desktop/source/registration/com/sun/star/servicetag/resources/product_registration.xsd diff --git a/desktop/source/so_comp/evaluation.cxx b/desktop/source/so_comp/evaluation.cxx index 664c0dadb2..aa113b4caf 100644 --- a/desktop/source/so_comp/evaluation.cxx +++ b/desktop/source/so_comp/evaluation.cxx @@ -43,12 +43,13 @@ #include "../app/desktop.hrc" -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::registry; +using ::rtl::OUString; + namespace desktop { static SOEvaluation* pSOEval=0; @@ -145,13 +146,13 @@ rtl::OUString SAL_CALL SOEvaluation::getExactName( const rtl::OUString& rApproxi for (int i=0; i<aSeq.getLength(); i++ ) { NamedValue& rValue = aSeq[i]; - if ( rValue.Name.equalsAscii("expired") ) + if ( rValue.Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("expired")) ) rValue.Value >>= bExpired; - else if (rValue.Name.equalsAscii("title") ) + else if (rValue.Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("title")) ) rValue.Value >>= aEval; } // append eval string to title - aTitle += OUString::createFromAscii(" ") + aEval; + aTitle += OUString(RTL_CONSTASCII_USTRINGPARAM(" ")) + aEval; if ( bExpired ) throw RuntimeException(); } diff --git a/desktop/source/so_comp/makefile.mk b/desktop/source/so_comp/makefile.mk index 590f99518c..4d8d479b96 100644..100755 --- a/desktop/source/so_comp/makefile.mk +++ b/desktop/source/so_comp/makefile.mk @@ -37,11 +37,6 @@ ENABLE_EXCEPTIONS=TRUE .INCLUDE : settings.mk -# --- Define time bomb date. Not active for OOo -------------------- -# --- Change something in evaluation.cxx!!! (e.g. line 313) -# --- You must use the yyyymmdd format!!! -------------------------- -#CDEFS+=-DTIMEBOMB=20050930 - # --- Files -------------------------------------------------------- SLOFILES = $(SLO)$/evaluation.obj \ @@ -75,3 +70,10 @@ SHL1STDLIBS= \ .INCLUDE : target.mk +ALLTAR : $(MISC)/socomp.component + +$(MISC)/socomp.component .ERRREMOVE : $(SOLARENV)/bin/createcomponent.xslt \ + socomp.component + $(XSLTPROC) --nonet --stringparam uri \ + '$(COMPONENTPREFIX_BASIS_NATIVE)$(SHL1TARGETN:f)' -o $@ \ + $(SOLARENV)/bin/createcomponent.xslt socomp.component diff --git a/desktop/source/so_comp/oemjob.cxx b/desktop/source/so_comp/oemjob.cxx index 22bad75af4..d50bab209c 100644 --- a/desktop/source/so_comp/oemjob.cxx +++ b/desktop/source/so_comp/oemjob.cxx @@ -2,7 +2,7 @@ /************************************************************************* * * 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 @@ -43,7 +43,6 @@ #include <com/sun/star/ui/dialogs/ExecutableDialogResults.hpp> #include <com/sun/star/beans/NamedValue.hpp> -using namespace rtl; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::lang; using namespace ::com::sun::star::beans; @@ -51,6 +50,10 @@ using namespace ::com::sun::star::ui::dialogs; using namespace ::com::sun::star::frame; using namespace ::com::sun::star::util; +using ::rtl::OUString; +using ::rtl::OUStringBuffer; +using ::rtl::Bootstrap; + namespace desktop{ char const OEM_PRELOAD_SECTION[] = "Bootstrap"; @@ -89,7 +92,7 @@ Reference< XInterface > SAL_CALL OEMPreloadJob::CreateInstance( return (XComponent*) ( new OEMPreloadJob( rSMgr ) ); } -OEMPreloadJob::OEMPreloadJob( const Reference< XMultiServiceFactory >& xFactory ) : +OEMPreloadJob::OEMPreloadJob( const Reference< XMultiServiceFactory >& xFactory ) : m_aListeners( m_aMutex ), m_xServiceManager( xFactory ) { @@ -118,24 +121,24 @@ void SAL_CALL OEMPreloadJob::removeEventListener( const Reference< XEventListene } // XServiceInfo -::rtl::OUString SAL_CALL OEMPreloadJob::getImplementationName() +::rtl::OUString SAL_CALL OEMPreloadJob::getImplementationName() throw ( RuntimeException ) { return OEMPreloadJob::GetImplementationName(); } -sal_Bool SAL_CALL OEMPreloadJob::supportsService( const ::rtl::OUString& rServiceName ) +sal_Bool SAL_CALL OEMPreloadJob::supportsService( const ::rtl::OUString& rServiceName ) throw ( RuntimeException ) { sal_Int32 nSize = sizeof( interfaces ) / sizeof( const char *); - + for( sal_Int32 i = 0; i < nSize; i++ ) if ( rServiceName.equalsAscii( interfaces[i] )) return sal_True; return sal_False; } -Sequence< ::rtl::OUString > SAL_CALL OEMPreloadJob::getSupportedServiceNames() +Sequence< ::rtl::OUString > SAL_CALL OEMPreloadJob::getSupportedServiceNames() throw ( RuntimeException ) { return OEMPreloadJob::GetSupportedServiceNames(); @@ -151,7 +154,7 @@ throw ( RuntimeException ) { // create OEM preload service dialog Reference <XExecutableDialog> xDialog( m_xServiceManager->createInstance( - OUString::createFromAscii("org.openoffice.comp.preload.OEMPreloadWizard")), + OUString(RTL_CONSTASCII_USTRINGPARAM("org.openoffice.comp.preload.OEMPreloadWizard"))), UNO_QUERY ); if ( xDialog.is() ){ // execute OEM preload dialog and check return value @@ -161,80 +164,44 @@ throw ( RuntimeException ) bCont = sal_True; disableOEMPreloadFlag(); } else { - // user declined... + // user declined... // terminate. - /* - Reference< XDesktop > xDesktop( m_xServiceManager->createInstance( - OUString::createFromAscii("com.sun.star.frame.Desktop")), - UNO_QUERY ); - xDesktop->terminate(); - */ - /* - OUString aName; - OUString aEnvType; - Reference<XFrame> rFrame; - Reference<XModel> rModel; - Reference<XCloseable> rClose; - for (int i=0; i<args.getLength(); i++) - { - if (args[i].Name.equalsAscii("EnvType")) - args[i].Value >>= aEnvType; - else if (args[i].Name.equalsAscii("Frame")) { - args[i].Value >>= rFrame; - rClose = Reference<XCloseable>(rFrame, UNO_QUERY); - } - else if (args[i].Name.equalsAscii("Model")) { - args[i].Value >>= rModel; - rClose = Reference<XCloseable>(rModel, UNO_QUERY); - } - } - if (rClose.is()) rClose->close(sal_True); - */ bCont = sal_False; } } } else { // don't try again bCont = sal_True; - } - /* - NamedValue nv; - nv.Name = OUString::createFromAscii("Deactivate"); - nv.Value <<= bDeactivate; - Sequence<NamedValue> s(1); - s[0] = nv; - */ + } Any r; r <<= bCont; return r; } - static sal_Bool existsURL( OUString const& _sURL ) { using namespace osl; DirectoryItem aDirItem; - + if (_sURL.getLength() != 0) return ( DirectoryItem::get( _sURL, aDirItem ) == DirectoryItem::E_None ); - + return sal_False; } - // locate soffice.ini/.rc file static OUString locateIniFile() { OUString aUserDataPath; OUString aSofficeIniFileURL; - + // Retrieve the default file URL for the soffice.ini/rc Bootstrap().getIniName( aSofficeIniFileURL ); if ( utl::Bootstrap::locateUserData( aUserDataPath ) == utl::Bootstrap::PATH_EXISTS ) { const char CONFIG_DIR[] = "/config"; - + sal_Int32 nIndex = aSofficeIniFileURL.lastIndexOf( '/'); if ( nIndex > 0 ) { @@ -243,11 +210,11 @@ static OUString locateIniFile() aBuffer.appendAscii( CONFIG_DIR ); aBuffer.append( aSofficeIniFileURL.copy( nIndex )); aUserSofficeIniFileURL = aBuffer.makeStringAndClear(); - + if ( existsURL( aUserSofficeIniFileURL )) return aUserSofficeIniFileURL; } - } + } // Fallback try to use the soffice.ini/rc from program folder return aSofficeIniFileURL; } @@ -270,7 +237,7 @@ void OEMPreloadJob::disableOEMPreloadFlag() { OUString aSofficeIniFileURL = locateIniFile(); if ( aSofficeIniFileURL.getLength() > 0 ) - { + { Config aConfig(aSofficeIniFileURL); aConfig.SetGroup( OEM_PRELOAD_SECTION ); aConfig.WriteKey( OEM_PRELOAD, STR_FALSE ); diff --git a/desktop/source/so_comp/services.cxx b/desktop/source/so_comp/services.cxx index c79f36820c..439b73364d 100644 --- a/desktop/source/so_comp/services.cxx +++ b/desktop/source/so_comp/services.cxx @@ -2,7 +2,7 @@ /************************************************************************* * * 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 @@ -42,13 +42,14 @@ #include <string.h> -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::registry; using namespace ::desktop; +using ::rtl::OUString; + static const char* pServices[] = { SOEvaluation::serviceName, @@ -59,7 +60,7 @@ static const char* pServices[] = static const char* pImplementations[] = { SOEvaluation::implementationName, - OEMPreloadJob::implementationName, + OEMPreloadJob::implementationName, NULL }; @@ -72,13 +73,12 @@ static const fProvider pInstanceProviders[] = NULL }; - static const char** pSupportedServices[] = { SOEvaluation::interfaces, OEMPreloadJob::interfaces, NULL -}; +}; static Sequence<OUString> getSupportedServiceNames(int p) { @@ -89,44 +89,18 @@ getSupportedServiceNames(int p) { aSeq[i] = OUString::createFromAscii(names[i]); } return aSeq; -} +} extern "C" { -void SAL_CALL +void SAL_CALL component_getImplementationEnvironment( - const sal_Char** ppEnvironmentTypeName, + const sal_Char** ppEnvironmentTypeName, uno_Environment**) { *ppEnvironmentTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME ; } -sal_Bool SAL_CALL -component_writeInfo( - void* pServiceManager, - void* pRegistryKey) -{ - Reference<XMultiServiceFactory> xMan( - reinterpret_cast< XMultiServiceFactory* >( pServiceManager ) ) ; - Reference<XRegistryKey> xKey( - reinterpret_cast< XRegistryKey* >( pRegistryKey ) ) ; - - // iterate over service names and register them... - OUString aImpl; - const char* pServiceName = NULL; - const char* pImplName = NULL; - for (int i = 0; (pServices[i]!=NULL)&&(pImplementations[i]!=NULL); i++) { - pServiceName= pServices[i]; - pImplName = pImplementations[i]; - aImpl = OUString::createFromAscii("/") - + OUString::createFromAscii(pImplName) - + OUString::createFromAscii("/UNO/SERVICES"); - Reference<XRegistryKey> xNewKey = xKey->createKey(aImpl); - xNewKey->createKey(OUString::createFromAscii(pServiceName)); - } - return sal_True; -} - void* SAL_CALL component_getFactory( const sal_Char* pImplementationName, @@ -137,11 +111,11 @@ component_getFactory( if ( pImplementationName && pServiceManager ) { Reference< XSingleServiceFactory > xFactory; - Reference< XMultiServiceFactory > xServiceManager( + Reference< XMultiServiceFactory > xServiceManager( reinterpret_cast< XMultiServiceFactory* >( pServiceManager ) ) ; - + // search implementation - for (int i = 0; (pImplementations[i]!=NULL); i++) { + for (int i = 0; (pImplementations[i]!=NULL); i++) { if ( strcmp(pImplementations[i], pImplementationName ) == 0 ) { // found implementation xFactory = Reference<XSingleServiceFactory>(cppu::createSingleFactory( diff --git a/desktop/source/so_comp/socomp.component b/desktop/source/so_comp/socomp.component new file mode 100755 index 0000000000..a53035223c --- /dev/null +++ b/desktop/source/so_comp/socomp.component @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!--********************************************************************** +* +* 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. +* +**********************************************************************--> + +<component loader="com.sun.star.loader.SharedLibrary" + xmlns="http://openoffice.org/2010/uno-components"> + <implementation name="com.sun.star.comp.desktop.Evaluation"> + <service name="com.sun.star.office.Evaluation"/> + </implementation> + <implementation name="com.sun.star.comp.desktop.OEMPreloadJob"> + <service name="com.sun.star.office.OEMPreloadJob"/> + </implementation> +</component> diff --git a/desktop/source/splash/makefile.mk b/desktop/source/splash/makefile.mk index 01f1287bc7..8db499d7c9 100644..100755 --- a/desktop/source/splash/makefile.mk +++ b/desktop/source/splash/makefile.mk @@ -44,8 +44,7 @@ SLOFILES = $(SLO)$/splash.obj \ SHL1DEPN= makefile.mk SHL1OBJS= $(SLOFILES) \ - $(SLO)$/migration.obj \ - $(SLO)$/cfgfilter.obj + $(SLO)$/migration.obj SHL1TARGET=$(TARGET)$(DLLPOSTFIX) @@ -71,3 +70,11 @@ SHL1STDLIBS= \ # --- Targets ------------------------------------------------------ .INCLUDE : target.mk + +ALLTAR : $(MISC)/spl.component + +$(MISC)/spl.component .ERRREMOVE : $(SOLARENV)/bin/createcomponent.xslt \ + spl.component + $(XSLTPROC) --nonet --stringparam uri \ + '$(COMPONENTPREFIX_BASIS_NATIVE)$(SHL1TARGETN:f)' -o $@ \ + $(SOLARENV)/bin/createcomponent.xslt spl.component diff --git a/desktop/source/splash/services_spl.cxx b/desktop/source/splash/services_spl.cxx index adcf9c1a5f..39fd09774e 100644 --- a/desktop/source/splash/services_spl.cxx +++ b/desktop/source/splash/services_spl.cxx @@ -2,7 +2,7 @@ /************************************************************************* * * 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 @@ -37,14 +37,14 @@ #include "splash.hxx" - -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::registry; using namespace ::desktop; +using ::rtl::OUString; + static const char* pServices[] = { SplashScreen::serviceName, @@ -65,12 +65,11 @@ static const fProvider pInstanceProviders[] = NULL }; - static const char** pSupportedServices[] = { SplashScreen::interfaces, NULL -}; +}; static Sequence<OUString> getSupportedServiceNames(int p) { @@ -81,44 +80,18 @@ getSupportedServiceNames(int p) { aSeq[i] = OUString::createFromAscii(names[i]); } return aSeq; -} +} extern "C" { -void SAL_CALL +void SAL_CALL component_getImplementationEnvironment( - const sal_Char** ppEnvironmentTypeName, + const sal_Char** ppEnvironmentTypeName, uno_Environment**) { *ppEnvironmentTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME ; } -sal_Bool SAL_CALL -component_writeInfo( - void* pServiceManager, - void* pRegistryKey) -{ - Reference<XMultiServiceFactory> xMan( - reinterpret_cast< XMultiServiceFactory* >( pServiceManager ) ) ; - Reference<XRegistryKey> xKey( - reinterpret_cast< XRegistryKey* >( pRegistryKey ) ) ; - - // iterate over service names and register them... - OUString aImpl; - const char* pServiceName = NULL; - const char* pImplName = NULL; - for (int i = 0; (pServices[i]!=NULL)&&(pImplementations[i]!=NULL); i++) { - pServiceName= pServices[i]; - pImplName = pImplementations[i]; - aImpl = OUString::createFromAscii("/") - + OUString::createFromAscii(pImplName) - + OUString::createFromAscii("/UNO/SERVICES"); - Reference<XRegistryKey> xNewKey = xKey->createKey(aImpl); - xNewKey->createKey(OUString::createFromAscii(pServiceName)); - } - return sal_True; -} - void* SAL_CALL component_getFactory( const sal_Char* pImplementationName, @@ -129,11 +102,11 @@ component_getFactory( if ( pImplementationName && pServiceManager ) { Reference< XSingleServiceFactory > xFactory; - Reference< XMultiServiceFactory > xServiceManager( + Reference< XMultiServiceFactory > xServiceManager( reinterpret_cast< XMultiServiceFactory* >( pServiceManager ) ) ; - + // search implementation - for (int i = 0; (pImplementations[i]!=NULL); i++) { + for (int i = 0; (pImplementations[i]!=NULL); i++) { if ( strcmp(pImplementations[i], pImplementationName ) == 0 ) { // found implementation xFactory = Reference<XSingleServiceFactory>(cppu::createSingleFactory( diff --git a/desktop/source/splash/spl.component b/desktop/source/splash/spl.component new file mode 100755 index 0000000000..2caecf5c0e --- /dev/null +++ b/desktop/source/splash/spl.component @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!--********************************************************************** +* +* 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. +* +**********************************************************************--> + +<component loader="com.sun.star.loader.SharedLibrary" + xmlns="http://openoffice.org/2010/uno-components"> + <implementation name="com.sun.star.comp.desktop.FirstStart"> + <service name="com.sun.star.task.Job"/> + </implementation> + <implementation name="com.sun.star.office.comp.SplashScreen"> + <service name="com.sun.star.office.SplashScreen"/> + </implementation> +</component> diff --git a/desktop/source/splash/splash.cxx b/desktop/source/splash/splash.cxx index 57e96829e1..2934ae400c 100644 --- a/desktop/source/splash/splash.cxx +++ b/desktop/source/splash/splash.cxx @@ -102,7 +102,7 @@ void SAL_CALL SplashScreen::start(const OUString&, sal_Int32 nRange) _bProgressEnd = sal_False; SolarMutexGuard aSolarGuard; if ( _eBitmapMode == BM_FULLSCREEN ) - ShowFullScreenMode( TRUE ); + ShowFullScreenMode( sal_True ); Show(); Paint(Rectangle()); Flush(); @@ -129,7 +129,7 @@ void SAL_CALL SplashScreen::reset() if (_bVisible && !_bProgressEnd ) { if ( _eBitmapMode == BM_FULLSCREEN ) - ShowFullScreenMode( TRUE ); + ShowFullScreenMode( sal_True ); Show(); updateStatus(); } @@ -146,7 +146,7 @@ void SAL_CALL SplashScreen::setText(const OUString& rText) if (_bVisible && !_bProgressEnd) { if ( _eBitmapMode == BM_FULLSCREEN ) - ShowFullScreenMode( TRUE ); + ShowFullScreenMode( sal_True ); Show(); updateStatus(); } @@ -162,7 +162,7 @@ void SAL_CALL SplashScreen::setValue(sal_Int32 nValue) SolarMutexGuard aSolarGuard; if (_bVisible && !_bProgressEnd) { if ( _eBitmapMode == BM_FULLSCREEN ) - ShowFullScreenMode( TRUE ); + ShowFullScreenMode( sal_True ); Show(); if (nValue >= _iMax) _iProgress = _iMax; else _iProgress = nValue; @@ -254,9 +254,7 @@ void SplashScreen::updateStatus() { if (!_bVisible || _bProgressEnd) return; if (!_bPaintProgress) _bPaintProgress = sal_True; - //_bPaintBitmap=sal_False; Paint(Rectangle()); - //_bPaintBitmap=sal_True; Flush(); } @@ -265,7 +263,6 @@ IMPL_LINK( SplashScreen, AppEventListenerHdl, VclWindowEvent *, inEvent ) { if ( inEvent != 0 ) { - // Paint( Rectangle() ); switch ( inEvent->GetId() ) { case VCLEVENT_WINDOW_SHOW: @@ -321,40 +318,36 @@ void SplashScreen::loadConfig() if ( sProgressFrameColor.getLength() ) { - UINT8 nRed = 0; - UINT8 nGreen = 0; - UINT8 nBlue = 0; + sal_uInt8 nRed = 0; sal_Int32 idx = 0; sal_Int32 temp = sProgressFrameColor.getToken( 0, ',', idx ).toInt32(); if ( idx != -1 ) { - nRed = static_cast< UINT8 >( temp ); + nRed = static_cast< sal_uInt8 >( temp ); temp = sProgressFrameColor.getToken( 0, ',', idx ).toInt32(); } if ( idx != -1 ) { - nGreen = static_cast< UINT8 >( temp ); - nBlue = static_cast< UINT8 >( sProgressFrameColor.getToken( 0, ',', idx ).toInt32() ); + sal_uInt8 nGreen = static_cast< sal_uInt8 >( temp ); + sal_uInt8 nBlue = static_cast< sal_uInt8 >( sProgressFrameColor.getToken( 0, ',', idx ).toInt32() ); _cProgressFrameColor = Color( nRed, nGreen, nBlue ); } } if ( sProgressBarColor.getLength() ) { - UINT8 nRed = 0; - UINT8 nGreen = 0; - UINT8 nBlue = 0; + sal_uInt8 nRed = 0; sal_Int32 idx = 0; sal_Int32 temp = sProgressBarColor.getToken( 0, ',', idx ).toInt32(); if ( idx != -1 ) { - nRed = static_cast< UINT8 >( temp ); + nRed = static_cast< sal_uInt8 >( temp ); temp = sProgressBarColor.getToken( 0, ',', idx ).toInt32(); } if ( idx != -1 ) { - nGreen = static_cast< UINT8 >( temp ); - nBlue = static_cast< UINT8 >( sProgressBarColor.getToken( 0, ',', idx ).toInt32() ); + sal_uInt8 nGreen = static_cast< sal_uInt8 >( temp ); + sal_uInt8 nBlue = static_cast< sal_uInt8 >( sProgressBarColor.getToken( 0, ',', idx ).toInt32() ); _cProgressBarColor = Color( nRed, nGreen, nBlue ); } } @@ -411,8 +404,7 @@ void SplashScreen::SetScreenBitmap(BitmapEx &rBitmap) aStrBuf.append( "intro_" ); if ( _sAppName.getLength() > 0 ) { - aStrBuf.append( OString( _sAppName, _sAppName.getLength(), - RTL_TEXTENCODING_UTF8 ) ); + aStrBuf.append( OUStringToOString(_sAppName, RTL_TEXTENCODING_UTF8) ); aStrBuf.append( "_" ); } aResBuf.append( OString::valueOf( nWidth )); @@ -420,12 +412,12 @@ void SplashScreen::SetScreenBitmap(BitmapEx &rBitmap) aResBuf.append( OString::valueOf( nHeight )); aStrBuf.append( aResBuf.getStr() ); - if (Application::LoadBrandBitmap (aStrBuf.makeStringAndClear(), rBitmap)) + if (Application::LoadBrandBitmap (aStrBuf.makeStringAndClear().getStr(), rBitmap)) return; aStrBuf.append( "intro_" ); aStrBuf.append( aResBuf.getStr() ); - if (Application::LoadBrandBitmap (aResBuf.makeStringAndClear(), rBitmap)) + if (Application::LoadBrandBitmap (aResBuf.makeStringAndClear().getStr(), rBitmap)) return; Application::LoadBrandBitmap ("intro", rBitmap); @@ -507,7 +499,7 @@ void SplashScreen::Paint( const Rectangle&) if(!_bVisible) return; //native drawing - BOOL bNativeOK = FALSE; + sal_Bool bNativeOK = sal_False; // in case of native controls we need to draw directly to the window if( _bNativeProgress && IsNativeControlSupported( CTRL_INTROPROGRESS, PART_ENTIRE_CONTROL ) ) @@ -528,7 +520,7 @@ void SplashScreen::Paint( const Rectangle&) } if( (bNativeOK = DrawNativeControl( CTRL_INTROPROGRESS, PART_ENTIRE_CONTROL, aDrawRect, - CTRL_STATE_ENABLED, aValue, _sProgressText )) != FALSE ) + CTRL_STATE_ENABLED, aValue, _sProgressText )) != sal_False ) { return; } @@ -552,12 +544,7 @@ void SplashScreen::Paint( const Rectangle&) _vdev.DrawRect(Rectangle(_tlx+_barspace, _tly+_barspace, _tlx+_barspace+length, _tly+_barheight-_barspace)); _vdev.DrawText( Rectangle(_tlx, _tly+_barheight+5, _tlx+_barwidth, _tly+_barheight+5+20), _sProgressText, TEXT_DRAW_CENTER ); } - Size aSize = GetOutputSizePixel(); - Size bSize = _vdev.GetOutputSizePixel(); - //_vdev.Flush(); - //_vdev.DrawOutDev(Point(), GetOutputSize(), Point(), GetOutputSize(), *((IntroWindow*)this) ); DrawOutDev(Point(), GetOutputSizePixel(), Point(), _vdev.GetOutputSizePixel(), _vdev ); - //Flush(); } |