diff options
Diffstat (limited to 'extensions/source/update/check/updatecheck.cxx')
-rw-r--r-- | extensions/source/update/check/updatecheck.cxx | 462 |
1 files changed, 231 insertions, 231 deletions
diff --git a/extensions/source/update/check/updatecheck.cxx b/extensions/source/update/check/updatecheck.cxx index ccfcda6157cb..310d585649e8 100644 --- a/extensions/source/update/check/updatecheck.cxx +++ b/extensions/source/update/check/updatecheck.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 @@ -101,17 +101,17 @@ rtl::OUString getReleaseNote(const UpdateInfo& rInfo, sal_uInt8 pos, bool autoDo } else if( (pos == iter->Pos2) && ((1 == iter->Pos) || (2 == iter->Pos)) && autoDownloadEnabled ) return iter->URL2; - + ++iter; } - - return rtl::OUString(); + + return rtl::OUString(); } //------------------------------------------------------------------------------ -namespace -{ +namespace +{ static inline rtl::OUString getBuildId() { @@ -149,14 +149,14 @@ rtl::OUString getImageFromFileName(const rtl::OUString& aFile) { aUnpackPath = aUnpackPath.copy( 0, lastIndex+1 ); aUnpackPath += UNISTRING( "unpack_update" ); - } - + } + oslFileHandle hOut = NULL; oslProcess hProcess = NULL; - + rtl::OUString aSystemPath; osl::File::getSystemPathFromFileURL(aFile, aSystemPath); - + oslProcessError rc = osl_executeProcess_WithRedirectedIO( aUnpackPath.pData, // [in] Image name &aSystemPath.pData, 1, // [in] Arguments @@ -167,12 +167,12 @@ rtl::OUString getImageFromFileName(const rtl::OUString& aFile) &hProcess, // [out] Process handle NULL, &hOut, NULL // [out] File handles for redirected I/O ); - + if( osl_Process_E_None == rc ) { oslProcessInfo aInfo; aInfo.Size = sizeof(oslProcessInfo); - + if( osl_Process_E_None == osl_getProcessInfo(hProcess, osl_Process_EXITCODE, &aInfo) ) { if( 0 == aInfo.Code ) @@ -180,7 +180,7 @@ rtl::OUString getImageFromFileName(const rtl::OUString& aFile) sal_Char szBuffer[4096]; sal_uInt64 nBytesRead = 0; const sal_uInt64 nBytesToRead = sizeof(szBuffer) - 1; - + rtl::OUString aImageName; while( osl_File_E_None == osl_readFile(hOut, szBuffer, nBytesToRead, &nBytesRead) ) { @@ -188,26 +188,26 @@ rtl::OUString getImageFromFileName(const rtl::OUString& aFile) do { *pc = '\0'; --pc; - } + } while( ('\n' == *pc) || ('\r' == *pc) ); - + aImageName += rtl::OUString(szBuffer, pc - szBuffer + 1, osl_getThreadTextEncoding()); if( nBytesRead < nBytesToRead ) break; } - + if( osl::FileBase::E_None == osl::FileBase::getFileURLFromSystemPath(aImageName, aImageName) ) return aImageName; } } - + osl_closeFile(hOut); osl_freeProcessHandle(hProcess); } - } + } #endif - + return aFile; } @@ -219,15 +219,15 @@ static uno::Reference< beans::XPropertySet > createMenuBarUI( const uno::Reference< task::XJob >& xJob) { if( !xContext.is() ) - throw uno::RuntimeException( + throw uno::RuntimeException( UNISTRING( "UpdateCheckJob: empty component context" ), uno::Reference< uno::XInterface > () ); uno::Reference< lang::XMultiComponentFactory > xServiceManager(xContext->getServiceManager()); if( !xServiceManager.is() ) - throw uno::RuntimeException( + throw uno::RuntimeException( UNISTRING( "UpdateCheckJob: unable to obtain service manager from component context" ), uno::Reference< uno::XInterface > () ); - uno::Reference< beans::XPropertySet > xMenuBarUI = + uno::Reference< beans::XPropertySet > xMenuBarUI = uno::Reference< beans::XPropertySet > ( xServiceManager->createInstanceWithContext( UNISTRING( "com.sun.star.setup.UpdateCheckUI" ), xContext ), uno::UNO_QUERY_THROW); @@ -244,7 +244,7 @@ static uno::Reference< beans::XPropertySet > createMenuBarUI( typedef sal_Bool (* OnlineCheckFunc) (); class UpdateCheckThread : public WorkerThread -{ +{ public: UpdateCheckThread( osl::Condition& rCondition, @@ -266,17 +266,17 @@ protected: private: /* Used to avoid dialup login windows (on platforms we know how to double this) */ - inline bool hasInternetConnection() const + inline bool hasInternetConnection() const { if(m_pHasInternetConnection != NULL ) return (sal_True == m_pHasInternetConnection()); return true; } - + /* Creates a new instance of UpdateInformationProvider and returns this instance */ inline uno::Reference<deployment::XUpdateInformationProvider> createProvider() - { - osl::MutexGuard aGuard(m_aMutex); + { + osl::MutexGuard aGuard(m_aMutex); m_xProvider = deployment::UpdateInformationProvider::create(m_xContext); return m_xProvider; }; @@ -288,19 +288,19 @@ private: /* Releases the remembered instance of UpdateInformationProvider if any */ inline void clearProvider() { osl::MutexGuard aGuard(m_aMutex); m_xProvider.clear(); }; - + osl::Mutex m_aMutex; osl::Module m_aModule; - + protected: osl::Condition& m_aCondition; private: -// const +// const OnlineCheckFunc m_pHasInternetConnection; - const uno::Reference<uno::XComponentContext> m_xContext; + const uno::Reference<uno::XComponentContext> m_xContext; uno::Reference<deployment::XUpdateInformationProvider> m_xProvider; }; @@ -308,32 +308,32 @@ private: class ManualUpdateCheckThread : public UpdateCheckThread { public: - ManualUpdateCheckThread( osl::Condition& rCondition, const uno::Reference<uno::XComponentContext>& xContext ) : + ManualUpdateCheckThread( osl::Condition& rCondition, const uno::Reference<uno::XComponentContext>& xContext ) : UpdateCheckThread(rCondition, xContext) {}; virtual void SAL_CALL run(); }; - + class MenuBarButtonJob : public ::cppu::WeakImplHelper1< task::XJob > { public: MenuBarButtonJob(const rtl::Reference< UpdateCheck >& rUpdateCheck); - + // XJob - virtual uno::Any SAL_CALL execute(const uno::Sequence<beans::NamedValue>&) + virtual uno::Any SAL_CALL execute(const uno::Sequence<beans::NamedValue>&) throw (lang::IllegalArgumentException, uno::Exception); - + private: rtl::Reference< UpdateCheck > m_aUpdateCheck; }; - + class DownloadThread : public WorkerThread { public: DownloadThread( osl::Condition& rCondition, - const uno::Reference<uno::XComponentContext>& xContext, + const uno::Reference<uno::XComponentContext>& xContext, const rtl::Reference< DownloadInteractionHandler >& rHandler, const rtl::OUString& rURL ); @@ -377,7 +377,7 @@ UpdateCheckThread::UpdateCheckThread( osl::Condition& rCondition, m_pHasInternetConnection(NULL), m_xContext(xContext) { - + #ifdef WNT rtl::OUString aPath; if( osl_getExecutableFile(&aPath.pData) == osl_Process_E_None ) @@ -388,7 +388,7 @@ UpdateCheckThread::UpdateCheckThread( osl::Condition& rCondition, aPath = aPath.copy( 0, lastIndex+1 ); aPath += UNISTRING( "onlinecheck" ); } - + if ( m_aModule.load(aPath) ) { m_pHasInternetConnection = @@ -397,7 +397,7 @@ UpdateCheckThread::UpdateCheckThread( osl::Condition& rCondition, } } #endif - + createSuspended(); // actually run the thread @@ -413,7 +413,7 @@ UpdateCheckThread::~UpdateCheckThread() //------------------------------------------------------------------------------ -void SAL_CALL +void SAL_CALL UpdateCheckThread::terminate() { // Cancel potentially hanging http request .. @@ -424,11 +424,11 @@ UpdateCheckThread::terminate() //------------------------------------------------------------------------------ -void SAL_CALL +void SAL_CALL UpdateCheckThread::join() { uno::Reference< deployment::XUpdateInformationProvider > xProvider(getProvider()); - + // do not join during an update check until #i73893# is fixed if( ! xProvider.is() ) { @@ -438,18 +438,18 @@ UpdateCheckThread::join() //------------------------------------------------------------------------------ -void SAL_CALL +void SAL_CALL UpdateCheckThread::cancel() { uno::Reference< deployment::XUpdateInformationProvider > xProvider(getProvider()); - + if( xProvider.is() ) - xProvider->cancel(); + xProvider->cancel(); } //------------------------------------------------------------------------------ -bool +bool UpdateCheckThread::runCheck( bool & rbExtensionsChecked ) { bool ret = false; @@ -457,7 +457,7 @@ UpdateCheckThread::runCheck( bool & rbExtensionsChecked ) UpdateInfo aInfo; rtl::Reference< UpdateCheck > aController(UpdateCheck::get()); - + if( checkForUpdates(aInfo, m_xContext, aController->getInteractionHandler(), createProvider()) ) { aController->setUpdateInfo(aInfo); @@ -506,53 +506,53 @@ UpdateCheckThread::run() osl::Condition::Result aResult = osl::Condition::result_timeout; TimeValue tv = { 10, 0 }; - + // Initial wait to avoid doing further time consuming tasks during start-up aResult = m_aCondition.wait(&tv); - + try { - + while( sal_True == schedule() ) { /* Use cases: * a) manual check requested from auto check thread - "last check" should not be checked (one time) * a1) manual check was requested in the middle of a running auto check, - * condition is set + * condition is set * a2) manual check was requested while waiting for a retry, - * condition is set - * a3) manual check was requested while waiting for time to next + * condition is set + * a3) manual check was requested while waiting for time to next * scheduled check elapsing, condition is set * a4) manual check was requested during initial wait, condition is set - * b) check interval got changed, condition may be set - same sub-cases as a), + * b) check interval got changed, condition may be set - same sub-cases as a), * but "last check" should be honored * c) normal auto check mode, condition not set - "last check" should be honored */ - + // Accessing const members without synchronization - rtl::Reference< UpdateCheck > aController(UpdateCheck::get()); + rtl::Reference< UpdateCheck > aController(UpdateCheck::get()); rtl::Reference< UpdateCheckConfig > rModel = UpdateCheckConfig::get(m_xContext, *aController); - + // FIXME: remember last & offset ? sal_Int64 last = rModel->getLastChecked(); sal_Int64 offset = rModel->getCheckInterval(); - + rModel.clear(); - + // last == 0 means check immediately bool checkNow = ! (last > 0); - - // Reset the condition to avoid busy loops + + // Reset the condition to avoid busy loops if( osl::Condition::result_ok == aResult ) { m_aCondition.reset(); aResult = osl::Condition::result_timeout; checkNow = aController->isDialogShowing(); } - - if( ! checkNow ) + + if( ! checkNow ) { osl_getSystemTime(&systime); - + // Go back to sleep until time has elapsed sal_Int64 next = last + offset; if( last + offset > systime.Seconds ) @@ -565,21 +565,21 @@ UpdateCheckThread::run() } static sal_uInt8 n = 0; - + if( ! hasInternetConnection() || ! runCheck( bExtensionsChecked ) ) { // the extension update check should be independent from the office update check - // + // osl_getSystemTime( &systime ); if ( nExtCheckTime.Seconds + offset < systime.Seconds ) bExtensionsChecked = false; // Increase next by 15, 60, .. minutes static const sal_Int32 nRetryInterval[] = { 900, 3600, 14400, 86400 }; - + if( n < sizeof(nRetryInterval) / sizeof(sal_Int32) ) ++n; - + tv.Seconds = nRetryInterval[n-1]; aResult = m_aCondition.wait(&tv); } @@ -590,12 +590,12 @@ UpdateCheckThread::run() } } } - + catch(const uno::Exception& e) { // Silently catch all errors OSL_TRACE( "Caught exception: %s\n thread terminated.\n", rtl::OUStringToOString(e.Message, RTL_TEXTENCODING_UTF8).getStr() ); - } + } } //------------------------------------------------------------------------------ @@ -613,20 +613,20 @@ ManualUpdateCheckThread::run() // Silently catch all errors OSL_TRACE( "Caught exception: %s\n thread terminated.\n", rtl::OUStringToOString(e.Message, RTL_TEXTENCODING_UTF8).getStr() ); - } + } } //------------------------------------------------------------------------------ -MenuBarButtonJob::MenuBarButtonJob(const rtl::Reference< UpdateCheck >& rUpdateCheck) : - m_aUpdateCheck(rUpdateCheck) +MenuBarButtonJob::MenuBarButtonJob(const rtl::Reference< UpdateCheck >& rUpdateCheck) : + m_aUpdateCheck(rUpdateCheck) { }; - + //------------------------------------------------------------------------------ -uno::Any SAL_CALL -MenuBarButtonJob::execute(const uno::Sequence<beans::NamedValue>& ) +uno::Any SAL_CALL +MenuBarButtonJob::execute(const uno::Sequence<beans::NamedValue>& ) throw (lang::IllegalArgumentException, uno::Exception) { if ( m_aUpdateCheck->shouldShowExtUpdDlg() ) @@ -640,8 +640,8 @@ MenuBarButtonJob::execute(const uno::Sequence<beans::NamedValue>& ) //------------------------------------------------------------------------------ DownloadThread::DownloadThread(osl::Condition& rCondition, - const uno::Reference<uno::XComponentContext>& xContext, - const rtl::Reference< DownloadInteractionHandler >& rHandler, + const uno::Reference<uno::XComponentContext>& xContext, + const rtl::Reference< DownloadInteractionHandler >& rHandler, const rtl::OUString& rURL) : m_aCondition(rCondition), m_xContext(xContext), @@ -658,8 +658,8 @@ DownloadThread::~DownloadThread() } //------------------------------------------------------------------------------ - -void SAL_CALL + +void SAL_CALL DownloadThread::run() { #ifdef WNT @@ -670,28 +670,28 @@ DownloadThread::run() while( schedule() ) { rtl::Reference< UpdateCheckConfig > rModel = UpdateCheckConfig::get(m_xContext); - + rtl::OUString aLocalFile = rModel->getLocalFileName(); rtl::OUString aDownloadDest = rModel->getDownloadDestination(); // release config class for now rModel.clear(); - + static sal_uInt8 n = 0; if( ! m_aDownload.start(m_aURL, aLocalFile, aDownloadDest ) ) { // retry every 15s unless the dialog is not visible TimeValue tv; tv.Seconds = 15; - + if( ! UpdateCheck::get()->isDialogShowing() ) { // Increase next by 1, 5, 15, 60, .. minutes static const sal_Int16 nRetryInterval[] = { 60, 300, 900, 3600 }; - + if( n < sizeof(nRetryInterval) / sizeof(sal_Int16) ) ++n; - + tv.Seconds = nRetryInterval[n-1]; } m_aCondition.wait(&tv); @@ -710,9 +710,9 @@ void SAL_CALL DownloadThread::cancel() { m_aDownload.stop(); resume(); - + rtl::Reference< UpdateCheck > aController(UpdateCheck::get()); - aController->cancelDownload(); + aController->cancelDownload(); } //------------------------------------------------------------------------------ @@ -743,7 +743,7 @@ ShutdownThread::~ShutdownThread() } //------------------------------------------------------------------------------ -void SAL_CALL +void SAL_CALL ShutdownThread::run() { TimeValue tv = { 0, 250 }; @@ -752,16 +752,16 @@ ShutdownThread::run() // Tell QuickStarter not to veto .. uno::Reference< beans::XFastPropertySet > xQuickStarter( - UpdateCheck::createService(UNISTRING("com.sun.star.office.Quickstart"), m_xContext), + UpdateCheck::createService(UNISTRING("com.sun.star.office.Quickstart"), m_xContext), uno::UNO_QUERY ); if (xQuickStarter.is()) - xQuickStarter->setFastPropertyValue(0, uno::makeAny(false)); + xQuickStarter->setFastPropertyValue(0, uno::makeAny(false)); // Shutdown the office uno::Reference< frame::XDesktop > xDesktop( - UpdateCheck::createService(UNISTRING("com.sun.star.frame.Desktop"), m_xContext), + UpdateCheck::createService(UNISTRING("com.sun.star.frame.Desktop"), m_xContext), uno::UNO_QUERY); if( xDesktop.is() ) @@ -782,12 +782,12 @@ void SAL_CALL ShutdownThread::onTerminated() //------------------------------------------------------------------------------ -void +void UpdateCheck::initialize(const uno::Sequence< beans::NamedValue >& rValues, const uno::Reference<uno::XComponentContext>& xContext) { osl::MutexGuard aGuard(m_aMutex); - + if( NOT_INITIALIZED == m_eState ) { NamedValueByNameAccess aNameAccess(rValues); @@ -795,9 +795,9 @@ UpdateCheck::initialize(const uno::Sequence< beans::NamedValue >& rValues, m_xContext = xContext; rtl::OUString aUpdateEntryVersion = aModel.getUpdateEntryVersion(); - + aModel.getUpdateEntry(m_aUpdateInfo); - + bool obsoleteUpdateInfo = isObsoleteUpdateInfo(aUpdateEntryVersion); bool bContinueDownload = false; bool bDownloadAvailable = false; @@ -806,7 +806,7 @@ UpdateCheck::initialize(const uno::Sequence< beans::NamedValue >& rValues, m_bShowExtUpdDlg = false; rtl::OUString aLocalFileName = aModel.getLocalFileName(); - + if( aLocalFileName.getLength() > 0 ) { bContinueDownload = true; @@ -845,24 +845,24 @@ UpdateCheck::initialize(const uno::Sequence< beans::NamedValue >& rValues, enableDownload(true, downloadPaused); setUIState(downloadPaused ? UPDATESTATE_DOWNLOAD_PAUSED : UPDATESTATE_DOWNLOADING); } - + } if ( !bContinueDownload ) { // We do this intentionally only if no download is in progress .. - if( obsoleteUpdateInfo ) + if( obsoleteUpdateInfo ) { // Bring-up release note for position 5 .. const rtl::OUString aURL(getReleaseNote(m_aUpdateInfo, 5)); if( aURL.getLength() > 0 ) showReleaseNote(aURL); - - // Data is outdated, probably due to installed update + + // Data is outdated, probably due to installed update rtl::Reference< UpdateCheckConfig > aConfig = UpdateCheckConfig::get( xContext, *this ); aConfig->clearUpdateFound(); aConfig->clearLocalFileName(); - - + + m_aUpdateInfo = UpdateInfo(); // Remove outdated release notes storeReleaseNote( 1, rtl::OUString() ); @@ -882,25 +882,25 @@ UpdateCheck::initialize(const uno::Sequence< beans::NamedValue >& rValues, //------------------------------------------------------------------------------ -void +void UpdateCheck::cancel() { osl::ClearableMutexGuard aGuard(m_aMutex); - + WorkerThread *pThread = m_pThread; UpdateState eUIState = getUIState(m_aUpdateInfo); aGuard.clear(); - + if( NULL != pThread ) pThread->cancel(); - + setUIState(eUIState); } //------------------------------------------------------------------------------ -void +void UpdateCheck::download() { osl::ClearableMutexGuard aGuard(m_aMutex); @@ -914,7 +914,7 @@ UpdateCheck::download() if( DOWNLOADING != eState ) { shutdownThread(true); - + osl::ClearableMutexGuard aGuard2(m_aMutex); enableDownload(true); aGuard2.clear(); @@ -929,30 +929,30 @@ UpdateCheck::download() //------------------------------------------------------------------------------ -void +void UpdateCheck::install() { osl::MutexGuard aGuard(m_aMutex); - + const uno::Reference< c3s::XSystemShellExecute > xShellExecute( createService( UNISTRING( "com.sun.star.system.SystemShellExecute" ), m_xContext ), uno::UNO_QUERY ); - + try { // Construct install command ?? - + // Store release note for position 3 and 4 rtl::OUString aURL(getReleaseNote(m_aUpdateInfo, 3)); storeReleaseNote(1, aURL); aURL = getReleaseNote(m_aUpdateInfo, 4); storeReleaseNote(2, aURL); - + if( xShellExecute.is() ) { rtl::OUString aInstallImage(m_aImageName); osl::FileBase::getSystemPathFromFileURL(aInstallImage, aInstallImage); - + rtl::OUString aParameter; sal_Int32 nFlags = c3s::SystemShellExecuteFlags::DEFAULTS; #if ( defined LINUX || defined SOLARIS ) @@ -960,9 +960,9 @@ UpdateCheck::install() aParameter = getBaseInstallation(); if( aParameter.getLength() > 0 ) osl::FileBase::getSystemPathFromFileURL(aParameter, aParameter); - + aParameter += UNISTRING(" &"); -#endif +#endif rtl::Reference< UpdateCheckConfig > rModel = UpdateCheckConfig::get( m_xContext ); rModel->clearLocalFileName(); @@ -978,41 +978,41 @@ UpdateCheck::install() //------------------------------------------------------------------------------ -void +void UpdateCheck::pause() { osl::ClearableMutexGuard aGuard(m_aMutex); - + if( NULL != m_pThread ) m_pThread->suspend(); - + rtl::Reference< UpdateCheckConfig > rModel = UpdateCheckConfig::get(m_xContext); aGuard.clear(); - + rModel->storeDownloadPaused(true); setUIState(UPDATESTATE_DOWNLOAD_PAUSED); } //------------------------------------------------------------------------------ -void +void UpdateCheck::resume() { osl::ClearableMutexGuard aGuard(m_aMutex); - + if( NULL != m_pThread ) m_pThread->resume(); - + rtl::Reference< UpdateCheckConfig > rModel = UpdateCheckConfig::get(m_xContext); aGuard.clear(); - + rModel->storeDownloadPaused(false); setUIState(UPDATESTATE_DOWNLOADING); } //------------------------------------------------------------------------------ -void +void UpdateCheck::closeAfterFailure() { osl::ClearableMutexGuard aGuard(m_aMutex); @@ -1027,16 +1027,16 @@ UpdateCheck::closeAfterFailure() //------------------------------------------------------------------------------ -void +void UpdateCheck::shutdownThread(bool join) { osl::ClearableMutexGuard aGuard(m_aMutex); - + // copy thread object pointer to stack osl::Thread *pThread = m_pThread; m_pThread = NULL; aGuard.clear(); - + if( NULL != pThread ) { pThread->terminate(); @@ -1051,22 +1051,22 @@ UpdateCheck::shutdownThread(bool join) //------------------------------------------------------------------------------ -void +void UpdateCheck::enableAutoCheck(bool enable) { if( enable ) m_pThread = new UpdateCheckThread(m_aCondition, m_xContext); - - m_eState = enable ? CHECK_SCHEDULED : DISABLED; + + m_eState = enable ? CHECK_SCHEDULED : DISABLED; } //------------------------------------------------------------------------------ -void +void UpdateCheck::enableDownload(bool enable, bool paused) { OSL_ASSERT(NULL == m_pThread); - + State eState = DISABLED; if( enable ) { @@ -1078,27 +1078,27 @@ UpdateCheck::enableDownload(bool enable, bool paused) } else eState = DOWNLOAD_PAUSED; - + m_eState = eState; } else { enableAutoCheck(UpdateCheckConfig::get(m_xContext)->isAutoCheckEnabled()); } - + } //------------------------------------------------------------------------------ -bool +bool UpdateCheck::downloadTargetExists(const rtl::OUString& rFileName) { osl::ClearableMutexGuard aGuard(m_aMutex); - + rtl::Reference< UpdateHandler > aUpdateHandler(getUpdateHandler()); UpdateState eUIState = UPDATESTATE_DOWNLOADING; - + bool cont = false; - + if( aUpdateHandler->isVisible() ) { cont = aUpdateHandler->showOverwriteWarning(); @@ -1118,16 +1118,16 @@ UpdateCheck::downloadTargetExists(const rtl::OUString& rFileName) m_aImageName = getImageFromFileName(rFileName); eUIState = UPDATESTATE_DOWNLOAD_AVAIL; } - + if( !cont ) { shutdownThread(false); enableDownload(false); - + aGuard.clear(); setUIState(eUIState); - } - + } + return cont; } @@ -1135,48 +1135,48 @@ UpdateCheck::downloadTargetExists(const rtl::OUString& rFileName) bool UpdateCheck::checkDownloadDestination( const rtl::OUString& rFileName ) { osl::ClearableMutexGuard aGuard(m_aMutex); - + rtl::Reference< UpdateHandler > aUpdateHandler( getUpdateHandler() ); - + bool bReload = false; - + if( aUpdateHandler->isVisible() ) { bReload = aUpdateHandler->showOverwriteWarning( rFileName ); } - + return bReload; } //------------------------------------------------------------------------------ -void +void UpdateCheck::downloadStalled(const rtl::OUString& rErrorMessage) { osl::ClearableMutexGuard aGuard(m_aMutex); rtl::Reference< UpdateHandler > aUpdateHandler(getUpdateHandler()); aGuard.clear(); - + aUpdateHandler->setErrorMessage(rErrorMessage); setUIState(UPDATESTATE_ERROR_DOWNLOADING); } //------------------------------------------------------------------------------ -void +void UpdateCheck::downloadProgressAt(sal_Int8 nPercent) { osl::ClearableMutexGuard aGuard(m_aMutex); rtl::Reference< UpdateHandler > aUpdateHandler(getUpdateHandler()); aGuard.clear(); - + aUpdateHandler->setProgress(nPercent); setUIState(UPDATESTATE_DOWNLOADING); } //------------------------------------------------------------------------------ -void +void UpdateCheck::downloadStarted(const rtl::OUString& rLocalFileName, sal_Int64 nFileSize) { if ( nFileSize > 0 ) @@ -1195,20 +1195,20 @@ UpdateCheck::downloadStarted(const rtl::OUString& rLocalFileName, sal_Int64 nFil //------------------------------------------------------------------------------ -void +void UpdateCheck::downloadFinished(const rtl::OUString& rLocalFileName) { osl::ClearableMutexGuard aGuard(m_aMutex); - + // no more retries m_pThread->terminate(); - + m_aImageName = getImageFromFileName(rLocalFileName); UpdateInfo aUpdateInfo(m_aUpdateInfo); - + aGuard.clear(); setUIState(UPDATESTATE_DOWNLOAD_AVAIL); - + // Bring-up release note for position 2 .. rtl::Reference< UpdateCheckConfig > rModel = UpdateCheckConfig::get( m_xContext ); const rtl::OUString aURL(getReleaseNote(aUpdateInfo, 2, rModel->isAutoDownloadEnabled())); @@ -1222,12 +1222,12 @@ void UpdateCheck::cancelDownload() { shutdownThread(true); - + osl::MutexGuard aGuard(m_aMutex); enableDownload(false); - + rtl::Reference< UpdateCheckConfig > rModel = UpdateCheckConfig::get(m_xContext); - + rtl::OUString aLocalFile(rModel->getLocalFileName()); rModel->clearLocalFileName(); rModel->storeDownloadPaused(false); @@ -1240,7 +1240,7 @@ UpdateCheck::cancelDownload() /*oslFileError rc =*/ osl_removeFile(aLocalFile.pData); // FIXME: error handling .. - + } //------------------------------------------------------------------------------ @@ -1249,10 +1249,10 @@ void UpdateCheck::showDialog(bool forceCheck) { osl::ResettableMutexGuard aGuard(m_aMutex); - + bool update_found = m_aUpdateInfo.BuildId.getLength() > 0; bool bSetUIState = ! m_aUpdateHandler.is(); - + UpdateState eDialogState = UPDATESTATES_COUNT; switch( m_eState ) @@ -1269,15 +1269,15 @@ UpdateCheck::showDialog(bool forceCheck) else eDialogState = UPDATESTATE_UPDATE_NO_DOWNLOAD; break; - + case DOWNLOADING: eDialogState = UPDATESTATE_DOWNLOADING; break; - + case DOWNLOAD_PAUSED: eDialogState = UPDATESTATE_DOWNLOAD_PAUSED; break; - + case NOT_INITIALIZED: OSL_ASSERT( false ); break; @@ -1289,9 +1289,9 @@ UpdateCheck::showDialog(bool forceCheck) setUIState(eDialogState, true); // suppress bubble as Dialog will be visible soon aGuard.reset(); } - + getUpdateHandler()->setVisible(true); - + // Run check in separate thread .. if( UPDATESTATE_CHECKING == eDialogState ) { @@ -1300,14 +1300,14 @@ UpdateCheck::showDialog(bool forceCheck) // destructs itself when done, not cancellable for now .. new ManualUpdateCheckThread(m_aCondition, m_xContext); } - + m_aCondition.set(); } } //------------------------------------------------------------------------------ -void +void UpdateCheck::setUpdateInfo(const UpdateInfo& aInfo) { osl::ClearableMutexGuard aGuard(m_aMutex); @@ -1323,23 +1323,23 @@ UpdateCheck::setUpdateInfo(const UpdateInfo& aInfo) { if( iter->IsDirect ) break; - + ++iter; } - + if( (iter != m_aUpdateInfo.Sources.begin()) && (iter != m_aUpdateInfo.Sources.end()) && iter->IsDirect ) { m_aUpdateInfo.Sources.erase(m_aUpdateInfo.Sources.begin(), --iter); } - + rtl::Reference< UpdateCheckConfig > rModel = UpdateCheckConfig::get(m_xContext, *this); OSL_ASSERT( rModel.is() ); - + // Decide whether to use alternate release note pos .. bool autoDownloadEnabled = rModel->isAutoDownloadEnabled(); - + std::vector< ReleaseNote >::iterator iter2 = m_aUpdateInfo.ReleaseNotes.begin(); while( iter2 != m_aUpdateInfo.ReleaseNotes.end() ) { @@ -1350,22 +1350,22 @@ UpdateCheck::setUpdateInfo(const UpdateInfo& aInfo) iter2->Pos = iter2->Pos2; iter2->Pos2 = 0; } - + ++iter2; } - + // do not move below store/clear .. rModel->updateLastChecked(); - + UpdateState eUIState; if( m_aUpdateInfo.Sources.size() > 0 ) { rModel->storeUpdateFound(aInfo, getBuildId()); - + if( m_aUpdateInfo.Sources[0].IsDirect ) { - eUIState = UPDATESTATE_UPDATE_AVAIL; - + eUIState = UPDATESTATE_UPDATE_AVAIL; + if( rModel->isAutoDownloadEnabled() ) { shutdownThread(false); @@ -1381,14 +1381,14 @@ UpdateCheck::setUpdateInfo(const UpdateInfo& aInfo) eUIState = UPDATESTATE_NO_UPDATE_AVAIL; rModel->clearUpdateFound(); } - + aGuard.clear(); setUIState(eUIState, bSuppressBubble); } //------------------------------------------------------------------------------ -void +void UpdateCheck::setCheckFailedState() { setUIState(UPDATESTATE_ERROR_CHECKING); @@ -1408,7 +1408,7 @@ void UpdateCheck::handleMenuBarUI( rtl::Reference< UpdateHandler > rUpdateHandle m_bShowExtUpdDlg = true; else m_bShowExtUpdDlg = false; - + if( xMenuBarUI.is() ) { if( UPDATESTATE_NO_UPDATE_AVAIL == eState ) @@ -1419,7 +1419,7 @@ void UpdateCheck::handleMenuBarUI( rtl::Reference< UpdateHandler > rUpdateHandle { xMenuBarUI->setPropertyValue( PROPERTY_TITLE, uno::makeAny(rUpdateHandler->getBubbleTitle(eState)) ); xMenuBarUI->setPropertyValue( PROPERTY_TEXT, uno::makeAny(rUpdateHandler->getBubbleText(eState)) ); - + if( ! suppressBubble && ( ! rUpdateHandler->isVisible() || rUpdateHandler->isMinimized() ) ) xMenuBarUI->setPropertyValue( PROPERTY_SHOW_BUBBLE, uno::makeAny( sal_True ) ); @@ -1433,10 +1433,10 @@ void UpdateCheck::handleMenuBarUI( rtl::Reference< UpdateHandler > rUpdateHandle void UpdateCheck::setUIState(UpdateState eState, bool suppressBubble) { osl::ClearableMutexGuard aGuard(m_aMutex); - - if( ! m_xMenuBarUI.is() && - (DISABLED != m_eState) && - ( m_bHasExtensionUpdate || (UPDATESTATE_NO_UPDATE_AVAIL != eState)) && + + if( ! m_xMenuBarUI.is() && + (DISABLED != m_eState) && + ( m_bHasExtensionUpdate || (UPDATESTATE_NO_UPDATE_AVAIL != eState)) && (UPDATESTATE_CHECKING != eState) && (UPDATESTATE_ERROR_CHECKING != eState) ) @@ -1455,29 +1455,29 @@ void UpdateCheck::setUIState(UpdateState eState, bool suppressBubble) UpdateInfo aUpdateInfo(m_aUpdateInfo); rtl::OUString aImageName(m_aImageName); - + aGuard.clear(); - + handleMenuBarUI( aUpdateHandler, eState, suppressBubble ); - + if( (UPDATESTATE_UPDATE_AVAIL == eState) || (UPDATESTATE_DOWNLOAD_PAUSED == eState) || (UPDATESTATE_DOWNLOADING == eState) ) { uno::Reference< uno::XComponentContext > xContext(m_xContext); - rtl::OUString aDownloadDestination = + rtl::OUString aDownloadDestination = UpdateCheckConfig::get(xContext, this)->getDownloadDestination(); osl_getSystemPathFromFileURL(aDownloadDestination.pData, &aDownloadDestination.pData); - + aUpdateHandler->setDownloadPath(aDownloadDestination); } else if( UPDATESTATE_DOWNLOAD_AVAIL == eState ) { aUpdateHandler->setDownloadFile(aImageName); } - + aUpdateHandler->setDescription(aUpdateInfo.Description); aUpdateHandler->setNextVersion(aUpdateInfo.Version); aUpdateHandler->setState(eState); @@ -1485,11 +1485,11 @@ void UpdateCheck::setUIState(UpdateState eState, bool suppressBubble) //------------------------------------------------------------------------------ -UpdateState +UpdateState UpdateCheck::getUIState(const UpdateInfo& rInfo) { UpdateState eUIState = UPDATESTATE_NO_UPDATE_AVAIL; - + if( rInfo.BuildId.getLength() > 0 ) { if( rInfo.Sources[0].IsDirect ) @@ -1497,21 +1497,21 @@ UpdateCheck::getUIState(const UpdateInfo& rInfo) else eUIState = UPDATESTATE_UPDATE_NO_DOWNLOAD; } - + return eUIState; } //------------------------------------------------------------------------------ -void +void UpdateCheck::showReleaseNote(const rtl::OUString& rURL) const { const uno::Reference< c3s::XSystemShellExecute > xShellExecute( createService( UNISTRING( "com.sun.star.system.SystemShellExecute" ), m_xContext ), uno::UNO_QUERY ); - + try { - + if( xShellExecute.is() ) xShellExecute->execute(rURL, rtl::OUString(), c3s::SystemShellExecuteFlags::DEFAULTS); } catch(c3s::SystemShellExecuteException&) { @@ -1520,7 +1520,7 @@ UpdateCheck::showReleaseNote(const rtl::OUString& rURL) const //------------------------------------------------------------------------------ -bool +bool UpdateCheck::storeReleaseNote(sal_Int8 nNum, const rtl::OUString &rURL) { osl::FileBase::RC rc; @@ -1572,12 +1572,12 @@ void UpdateCheck::showExtensionDialog() uno::Reference< uno::XInterface > xService; if( ! m_xContext.is() ) - throw uno::RuntimeException( + throw uno::RuntimeException( UNISTRING( "UpdateCheck::showExtensionDialog(): empty component context" ), uno::Reference< uno::XInterface > () ); uno::Reference< lang::XMultiComponentFactory > xServiceManager( m_xContext->getServiceManager() ); if( !xServiceManager.is() ) - throw uno::RuntimeException( + throw uno::RuntimeException( UNISTRING( "UpdateCheck::showExtensionDialog(): unable to obtain service manager from component context" ), uno::Reference< uno::XInterface > () ); xService = xServiceManager->createInstanceWithContext( sServiceName, m_xContext ); @@ -1601,7 +1601,7 @@ UpdateCheck::getUpdateHandler() //------------------------------------------------------------------------------ -uno::Reference< task::XInteractionHandler > +uno::Reference< task::XInteractionHandler > UpdateCheck::getInteractionHandler() const { osl::MutexGuard aGuard(m_aMutex); @@ -1616,44 +1616,44 @@ UpdateCheck::getInteractionHandler() const //------------------------------------------------------------------------------ -uno::Reference< uno::XInterface > -UpdateCheck::createService(const rtl::OUString& rServiceName, +uno::Reference< uno::XInterface > +UpdateCheck::createService(const rtl::OUString& rServiceName, const uno::Reference<uno::XComponentContext>& xContext) { if( !xContext.is() ) - throw uno::RuntimeException( - UNISTRING( "UpdateCheckConfig: empty component context" ), + throw uno::RuntimeException( + UNISTRING( "UpdateCheckConfig: empty component context" ), uno::Reference< uno::XInterface >() ); - + const uno::Reference< lang::XMultiComponentFactory > xServiceManager(xContext->getServiceManager()); - + if( !xServiceManager.is() ) - throw uno::RuntimeException( - UNISTRING( "UpdateCheckConfig: unable to obtain service manager from component context" ), + throw uno::RuntimeException( + UNISTRING( "UpdateCheckConfig: unable to obtain service manager from component context" ), uno::Reference< uno::XInterface >() ); - + return xServiceManager->createInstanceWithContext(rServiceName, xContext); } //------------------------------------------------------------------------------ -bool +bool UpdateCheck::isDialogShowing() const -{ - osl::MutexGuard aGuard(m_aMutex); +{ + osl::MutexGuard aGuard(m_aMutex); return sal_True == m_aUpdateHandler.is() && m_aUpdateHandler->isVisible(); }; //------------------------------------------------------------------------------ -void +void UpdateCheck::autoCheckStatusChanged(bool enabled) -{ +{ osl::ClearableMutexGuard aGuard(m_aMutex); - + if( (CHECK_SCHEDULED == m_eState) && !enabled ) shutdownThread(false); - + if( (DISABLED == m_eState) || (CHECK_SCHEDULED == m_eState) ) { enableAutoCheck(enabled); @@ -1665,27 +1665,27 @@ UpdateCheck::autoCheckStatusChanged(bool enabled) //------------------------------------------------------------------------------ -void +void UpdateCheck::autoCheckIntervalChanged() -{ +{ // just wake-up m_aCondition.set(); }; //------------------------------------------------------------------------------ -oslInterlockedCount SAL_CALL +oslInterlockedCount SAL_CALL UpdateCheck::acquire() SAL_THROW(()) -{ - return ReferenceObject::acquire(); +{ + return ReferenceObject::acquire(); } //------------------------------------------------------------------------------ -oslInterlockedCount SAL_CALL +oslInterlockedCount SAL_CALL UpdateCheck::release() SAL_THROW(()) -{ - return ReferenceObject::release(); +{ + return ReferenceObject::release(); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |