From b1b93020d02fb4217cc8742c47fb9865e199254c Mon Sep 17 00:00:00 2001 From: Dirk Völzke Date: Thu, 26 Nov 2009 10:40:00 +0000 Subject: #i107166# Make check for extension update independent from office update check --- extensions/source/update/check/updatecheck.cxx | 33 +++++++++++++++++++------- 1 file changed, 25 insertions(+), 8 deletions(-) (limited to 'extensions') diff --git a/extensions/source/update/check/updatecheck.cxx b/extensions/source/update/check/updatecheck.cxx index 23d4da29a41f..349c4438cb99 100644 --- a/extensions/source/update/check/updatecheck.cxx +++ b/extensions/source/update/check/updatecheck.cxx @@ -264,7 +264,7 @@ protected: virtual void SAL_CALL onTerminated(); /* Wrapper around checkForUpdates */ - bool runCheck(); + bool runCheck( bool & rbExtensionsChecked ); private: @@ -453,7 +453,7 @@ UpdateCheckThread::cancel() //------------------------------------------------------------------------------ bool -UpdateCheckThread::runCheck() +UpdateCheckThread::runCheck( bool & rbExtensionsChecked ) { bool ret = false; UpdateState eUIState = UPDATESTATE_NO_UPDATE_AVAIL; @@ -474,12 +474,14 @@ UpdateCheckThread::runCheck() // and when there was no office update found if ( ( eUIState != UPDATESTATE_UPDATE_AVAIL ) && ( eUIState != UPDATESTATE_UPDATE_NO_DOWNLOAD ) && - !aController->isDialogShowing() ) + !aController->isDialogShowing() && + !rbExtensionsChecked ) { bool bHasExtensionUpdates = checkForExtensionUpdates( m_xContext ); aController->setHasExtensionUpdates( bHasExtensionUpdates ); if ( bHasExtensionUpdates ) aController->setUIState( UPDATESTATE_EXT_UPD_AVAIL ); + rbExtensionsChecked = true; } // joining with this thread is safe again @@ -500,6 +502,11 @@ UpdateCheckThread::onTerminated() void SAL_CALL UpdateCheckThread::run() { + bool bExtensionsChecked = false; + TimeValue systime; + TimeValue nExtCheckTime; + osl_getSystemTime( &nExtCheckTime ); + osl::Condition::Result aResult = osl::Condition::result_timeout; TimeValue tv = { 10, 0 }; @@ -547,7 +554,6 @@ UpdateCheckThread::run() if( ! checkNow ) { - TimeValue systime; osl_getSystemTime(&systime); // Go back to sleep until time has elapsed @@ -563,10 +569,16 @@ UpdateCheckThread::run() static sal_uInt8 n = 0; - if( ! hasInternetConnection() || ! runCheck() ) + if( ! hasInternetConnection() || ! runCheck( bExtensionsChecked ) ) { - // Increase next by 1, 5, 15, 60, .. minutes - static const sal_Int16 nRetryInterval[] = { 60, 300, 900, 3600 }; + // 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_Int16 nRetryInterval[] = { 900, 3600, 14400, 86400 }; if( n < sizeof(nRetryInterval) / sizeof(sal_Int16) ) ++n; @@ -575,7 +587,10 @@ UpdateCheckThread::run() aResult = m_aCondition.wait(&tv); } else // reset retry counter + { n = 0; + bExtensionsChecked = false; + } } } @@ -591,8 +606,10 @@ UpdateCheckThread::run() void SAL_CALL ManualUpdateCheckThread::run() { + bool bExtensionsChecked = false; + try { - runCheck(); + runCheck( bExtensionsChecked ); m_aCondition.reset(); } catch(const uno::Exception& e) { -- cgit v1.2.3