diff options
9 files changed, 45 insertions, 9 deletions
| diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 5cf7087c71..c9800c9830 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -2475,6 +2475,11 @@ namespace {  		LLNotificationsUtil::add(notification_name, substitutions, LLSD(), apply_callback);  	} + +	void install_error_callback(LLSD const & notification, LLSD const & response) +	{ +		LLAppViewer::instance()->forceQuit(); +	}      bool notify_update(LLSD const & evt)      { @@ -2485,7 +2490,11 @@ namespace {  				on_update_downloaded(evt);  				break;  			case LLUpdaterService::INSTALL_ERROR: -				LLNotificationsUtil::add("FailedUpdateInstall"); +				if(evt["required"].asBoolean()) { +					LLNotificationsUtil::add("FailedRequiredUpdateInstall", LLSD(), LLSD(), &install_error_callback); +				} else { +					LLNotificationsUtil::add("FailedUpdateInstall"); +				}  				break;  			default:  				break; diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index b0bb93c13a..fc5479a6f7 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -2890,6 +2890,19 @@ http://secondlife.com/download.    <notification     icon="alertmodal.tga" +   name="FailedRequiredUpdateInstall" +   type="alertmodal"> +We were unable to install a required update.  +You will be unable to log in until [APP_NAME] has been updated. +Please download and install the latest viewer from +http://secondlife.com/download. +    <usetemplate +     name="okbutton" +     yestext="Quit"/> +  </notification> + +  <notification +   icon="alertmodal.tga"     name="UpdaterServiceNotRunning"     type="alertmodal">  There is a required update for your Second Life Installation. diff --git a/indra/viewer_components/updater/llupdateinstaller.cpp b/indra/viewer_components/updater/llupdateinstaller.cpp index 6e69bcf28b..fe1e493e82 100644 --- a/indra/viewer_components/updater/llupdateinstaller.cpp +++ b/indra/viewer_components/updater/llupdateinstaller.cpp @@ -25,6 +25,7 @@  #include "linden_common.h"  #include <apr_file_io.h> +#include <boost/lexical_cast.hpp>  #include "llapr.h"  #include "llprocesslauncher.h"  #include "llupdateinstaller.h" @@ -47,7 +48,10 @@ namespace {  } -int ll_install_update(std::string const & script, std::string const & updatePath, LLInstallScriptMode mode) +int ll_install_update(std::string const & script, +					  std::string const & updatePath, +					  bool required, +					  LLInstallScriptMode mode)  {  	std::string actualScriptPath;  	switch(mode) { @@ -73,6 +77,7 @@ int ll_install_update(std::string const & script, std::string const & updatePath  	launcher.setExecutable(actualScriptPath);  	launcher.addArgument(updatePath);  	launcher.addArgument(ll_install_failed_marker_path().c_str()); +	launcher.addArgument(boost::lexical_cast<std::string>(required));  	int result = launcher.launch();  	launcher.orphan(); diff --git a/indra/viewer_components/updater/llupdateinstaller.h b/indra/viewer_components/updater/llupdateinstaller.h index 6ce08ce6fa..fe5b1d19b5 100644 --- a/indra/viewer_components/updater/llupdateinstaller.h +++ b/indra/viewer_components/updater/llupdateinstaller.h @@ -42,9 +42,10 @@ enum LLInstallScriptMode {  // that the current application terminate once this function is called.  //  int ll_install_update( -					   std::string const & script, // Script to execute. -					   std::string const & updatePath, // Path to update file. -					   LLInstallScriptMode mode=LL_COPY_INSTALL_SCRIPT_TO_TEMP); // Run in place or copy to temp? +					  std::string const & script, // Script to execute. +					  std::string const & updatePath, // Path to update file. +					  bool required, // Is the update required. +					  LLInstallScriptMode mode=LL_COPY_INSTALL_SCRIPT_TO_TEMP); // Run in place or copy to temp?  // diff --git a/indra/viewer_components/updater/llupdaterservice.cpp b/indra/viewer_components/updater/llupdaterservice.cpp index df1a963f81..08f76c26e9 100644 --- a/indra/viewer_components/updater/llupdaterservice.cpp +++ b/indra/viewer_components/updater/llupdaterservice.cpp @@ -305,6 +305,7 @@ bool LLUpdaterServiceImpl::checkForInstall(bool launchInstaller)  				int result = ll_install_update(install_script_path(),  											   update_info["path"].asString(), +											   update_info["required"].asBoolean(),  											   install_script_mode());	  				if((result == 0) && mAppExitCallback) @@ -489,6 +490,12 @@ bool LLUpdaterServiceImpl::onMainLoop(LLSD const & event)  		// Check for failed install.  		if(LLFile::isfile(ll_install_failed_marker_path()))  		{ +			int requiredValue = 0;  +			{ +				llifstream stream(ll_install_failed_marker_path()); +				stream >> requiredValue; +				if(!stream) requiredValue = 0; +			}  			// TODO: notify the user.  			llinfos << "found marker " << ll_install_failed_marker_path() << llendl;  			llinfos << "last install attempt failed" << llendl; @@ -496,6 +503,7 @@ bool LLUpdaterServiceImpl::onMainLoop(LLSD const & event)  			LLSD event;  			event["type"] = LLSD(LLUpdaterService::INSTALL_ERROR); +			event["required"] = LLSD(requiredValue);  			LLEventPumps::instance().obtain(LLUpdaterService::pumpName()).post(event);  			setState(LLUpdaterService::TERMINAL); diff --git a/indra/viewer_components/updater/scripts/darwin/update_install b/indra/viewer_components/updater/scripts/darwin/update_install index 9df382f119..6a95f96d86 100644 --- a/indra/viewer_components/updater/scripts/darwin/update_install +++ b/indra/viewer_components/updater/scripts/darwin/update_install @@ -6,5 +6,5 @@  #  cd "$(dirname "$0")" -../Resources/mac-updater.app/Contents/MacOS/mac-updater -dmg "$1" -name "Second Life Viewer 2" -marker "$2" & +(../Resources/mac-updater.app/Contents/MacOS/mac-updater -dmg "$1" -name "Second Life Viewer 2"; if [ $? -ne 0 ]; then echo $3 >> "$2"; fi;) &  exit 0 diff --git a/indra/viewer_components/updater/scripts/linux/update_install b/indra/viewer_components/updater/scripts/linux/update_install index a271926e25..88451340ec 100644 --- a/indra/viewer_components/updater/scripts/linux/update_install +++ b/indra/viewer_components/updater/scripts/linux/update_install @@ -4,7 +4,7 @@ export LD_LIBRARY_PATH="$INSTALL_DIR/lib"  bin/linux-updater.bin --file "$1" --dest "$INSTALL_DIR" --name "Second Life Viewer 2" --stringsdir "$INSTALL_DIR/skins/default/xui/en" --stringsfile "strings.xml"  if [ $? -ne 0 ] -   then touch "$2" +   then echo $3 >> "$2"  fi  rm -f "$1" diff --git a/indra/viewer_components/updater/scripts/windows/update_install.bat b/indra/viewer_components/updater/scripts/windows/update_install.bat index 42e148a707..96687226a8 100644 --- a/indra/viewer_components/updater/scripts/windows/update_install.bat +++ b/indra/viewer_components/updater/scripts/windows/update_install.bat @@ -1,3 +1,3 @@  start /WAIT %1 /SKIP_DIALOGS
 -IF ERRORLEVEL 1 ECHO %ERRORLEVEL% > %2
 +IF ERRORLEVEL 1 ECHO %3 > %2
  DEL %1
 diff --git a/indra/viewer_components/updater/tests/llupdaterservice_test.cpp b/indra/viewer_components/updater/tests/llupdaterservice_test.cpp index be5a5da50d..5f8cd28f29 100644 --- a/indra/viewer_components/updater/tests/llupdaterservice_test.cpp +++ b/indra/viewer_components/updater/tests/llupdaterservice_test.cpp @@ -103,7 +103,7 @@ void LLUpdateDownloader::resume(void) {}  void LLUpdateDownloader::cancel(void) {}
  void LLUpdateDownloader::setBandwidthLimit(U64 bytesPerSecond) {}
 -int ll_install_update(std::string const &, std::string const &, LLInstallScriptMode)
 +int ll_install_update(std::string const &, std::string const &, bool, LLInstallScriptMode)
  {
  	return 0;
  }
 | 
