summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
Diffstat (limited to 'indra')
-rw-r--r--indra/newview/llappviewer.cpp52
-rw-r--r--indra/newview/lllogininstance.cpp8
-rw-r--r--indra/newview/skins/default/xui/en/notifications.xml38
-rw-r--r--indra/newview/tests/lllogininstance_test.cpp1
-rw-r--r--indra/viewer_components/updater/llupdaterservice.cpp17
-rw-r--r--indra/viewer_components/updater/llupdaterservice.h5
6 files changed, 107 insertions, 14 deletions
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 1306e92b35..41be4eb065 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -2408,6 +2408,49 @@ namespace {
LLUpdaterService().startChecking(install_if_ready);
}
}
+
+ void apply_update_ok_callback(LLSD const & notification, LLSD const & response)
+ {
+ llinfos << "LLUpdate restarting viewer" << llendl;
+ static const bool install_if_ready = true;
+ // *HACK - this lets us launch the installer immediately for now
+ LLUpdaterService().startChecking(install_if_ready);
+ }
+
+ void on_required_update_downloaded(LLSD const & data)
+ {
+ std::string notification_name;
+ if(LLStartUp::getStartupState() <= STATE_LOGIN_WAIT)
+ {
+ // The user never saw the progress bar.
+ notification_name = "RequiredUpdateDownloadedVerboseDialog";
+ }
+ else
+ {
+ notification_name = "RequiredUpdateDownloadedDialog";
+ }
+ LLSD substitutions;
+ substitutions["VERSION"] = data["version"];
+ LLNotificationsUtil::add(notification_name, substitutions, LLSD(), &apply_update_ok_callback);
+ }
+
+ void on_optional_update_downloaded(LLSD const & data)
+ {
+ std::string notification_name;
+ if(LLStartUp::getStartupState() < STATE_STARTED)
+ {
+ // CHOP-262 we need to use a different notification
+ // method prior to login.
+ notification_name = "DownloadBackgroundDialog";
+ }
+ else
+ {
+ notification_name = "DownloadBackgroundTip";
+ }
+ LLSD substitutions;
+ substitutions["VERSION"] = data["version"];
+ LLNotificationsUtil::add(notification_name, substitutions, LLSD(), apply_update_callback);
+ }
bool notify_update(LLSD const & evt)
{
@@ -2415,17 +2458,14 @@ namespace {
switch (evt["type"].asInteger())
{
case LLUpdaterService::DOWNLOAD_COMPLETE:
- if(LLStartUp::getStartupState() < STATE_STARTED)
+ if(evt["required"].asBoolean())
{
- // CHOP-262 we need to use a different notification
- // method prior to login.
- notification_name = "DownloadBackgroundDialog";
+ on_required_update_downloaded(evt);
}
else
{
- notification_name = "DownloadBackgroundTip";
+ on_optional_update_downloaded(evt);
}
- LLNotificationsUtil::add(notification_name, LLSD(), LLSD(), apply_update_callback);
break;
case LLUpdaterService::INSTALL_ERROR:
LLNotificationsUtil::add("FailedUpdateInstall");
diff --git a/indra/newview/lllogininstance.cpp b/indra/newview/lllogininstance.cpp
index 3ff1487286..1858cbdcd9 100644
--- a/indra/newview/lllogininstance.cpp
+++ b/indra/newview/lllogininstance.cpp
@@ -62,6 +62,7 @@
#include "llappviewer.h"
#include <boost/scoped_ptr.hpp>
+#include <sstream>
namespace {
class MandatoryUpdateMachine {
@@ -261,7 +262,7 @@ void MandatoryUpdateMachine::CheckingForUpdate::enter(void)
mProgressView = gViewerWindow->getProgressView();
mProgressView->setMessage("Looking for update...");
- mProgressView->setText("Update");
+ mProgressView->setText("There is a required update for your Second Life installation.");
mProgressView->setPercent(0);
mProgressView->setVisible(true);
mConnection = LLEventPumps::instance().obtain(LLUpdaterService::pumpName()).
@@ -411,7 +412,10 @@ void MandatoryUpdateMachine::WaitingForDownload::enter(void)
llinfos << "entering waiting for download" << llendl;
mProgressView = gViewerWindow->getProgressView();
mProgressView->setMessage("Downloading update...");
- mProgressView->setText("Update");
+ std::ostringstream stream;
+ stream << "There is a required update for your Second Life installation." << std::endl <<
+ "Version " << mMachine.mUpdaterService.updatedVersion();
+ mProgressView->setText(stream.str());
mProgressView->setPercent(0);
mProgressView->setVisible(true);
mConnection = LLEventPumps::instance().obtain(LLUpdaterService::pumpName()).
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 80a210f9bc..eecbeeb8dc 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -2893,6 +2893,9 @@ http://secondlife.com/download.
name="UpdaterServiceNotRunning"
type="alertmodal">
There is a required update for your Second Life Installation.
+
+You may download this update from http://www.secondlife.com/downloads
+or you can install it now.
<usetemplate
name="okcancelbuttons"
notext="Quit Second Life"
@@ -2903,8 +2906,8 @@ There is a required update for your Second Life Installation.
icon="notify.tga"
name="DownloadBackgroundTip"
type="notify">
-An updated version of [APP_NAME] has been downloaded.
-It will be applied the next time you restart [APP_NAME]
+We have downloaded and update to your [APP_NAME] installation.
+Version [VERSION]
<usetemplate
name="okcancelbuttons"
notext="Wait"
@@ -2915,12 +2918,35 @@ It will be applied the next time you restart [APP_NAME]
icon="alertmodal.tga"
name="DownloadBackgroundDialog"
type="alertmodal">
- An updated version of [APP_NAME] has been downloaded.
- It will be applied the next time you restart [APP_NAME]
+We have downloaded and update to your [APP_NAME] installation.
+Version [VERSION]
<usetemplate
name="okcancelbuttons"
- notext="Wait"
- yestext="Restart Now"/>
+ notext="Later..."
+ yestext="Install now and restart [APP_NAME]"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
+ name="RequiredUpdateDownloadedVerboseDialog"
+ type="alertmodal">
+We have downloaded a required software update.
+Version [VERSION]
+
+We must restart [APP_NAME] to install the update.
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
+ name="RequiredUpdateDownloadedDialog"
+ type="alertmodal">
+We must restart [APP_NAME] to install the update.
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
</notification>
<notification
diff --git a/indra/newview/tests/lllogininstance_test.cpp b/indra/newview/tests/lllogininstance_test.cpp
index 59a8e40607..9e321db889 100644
--- a/indra/newview/tests/lllogininstance_test.cpp
+++ b/indra/newview/tests/lllogininstance_test.cpp
@@ -219,6 +219,7 @@ void LLUpdaterService::startChecking(bool install_if_ready) {}
void LLUpdaterService::stopChecking() {}
bool LLUpdaterService::isChecking() { return false; }
LLUpdaterService::eUpdaterState LLUpdaterService::getState() { return INITIAL; }
+std::string LLUpdaterService::updatedVersion() { return ""; }
//-----------------------------------------------------------------------------
#include "llnotifications.h"
diff --git a/indra/viewer_components/updater/llupdaterservice.cpp b/indra/viewer_components/updater/llupdaterservice.cpp
index b29356b968..78f768facf 100644
--- a/indra/viewer_components/updater/llupdaterservice.cpp
+++ b/indra/viewer_components/updater/llupdaterservice.cpp
@@ -122,6 +122,7 @@ public:
LLUpdaterService::eUpdaterState getState();
void setAppExitCallback(LLUpdaterService::app_exit_callback_t aecb) { mAppExitCallback = aecb;}
+ std::string updatedVersion(void);
bool checkForInstall(bool launchInstaller); // Test if a local install is ready.
bool checkForResume(); // Test for resumeable d/l.
@@ -143,6 +144,8 @@ public:
bool onMainLoop(LLSD const & event);
private:
+ std::string mNewVersion;
+
void restartTimer(unsigned int seconds);
void setState(LLUpdaterService::eUpdaterState state);
void stopTimer();
@@ -254,6 +257,11 @@ LLUpdaterService::eUpdaterState LLUpdaterServiceImpl::getState()
return mState;
}
+std::string LLUpdaterServiceImpl::updatedVersion(void)
+{
+ return mNewVersion;
+}
+
bool LLUpdaterServiceImpl::checkForInstall(bool launchInstaller)
{
bool foundInstall = false; // return true if install is found.
@@ -360,6 +368,7 @@ void LLUpdaterServiceImpl::optionalUpdate(std::string const & newVersion,
std::string const & hash)
{
stopTimer();
+ mNewVersion = newVersion;
mIsDownloading = true;
mUpdateDownloader.download(uri, hash, false);
@@ -371,6 +380,7 @@ void LLUpdaterServiceImpl::requiredUpdate(std::string const & newVersion,
std::string const & hash)
{
stopTimer();
+ mNewVersion = newVersion;
mIsDownloading = true;
mUpdateDownloader.download(uri, hash, true);
@@ -400,6 +410,8 @@ void LLUpdaterServiceImpl::downloadComplete(LLSD const & data)
event["pump"] = LLUpdaterService::pumpName();
LLSD payload;
payload["type"] = LLSD(LLUpdaterService::DOWNLOAD_COMPLETE);
+ payload["required"] = data["required"];
+ payload["version"] = mNewVersion;
event["payload"] = payload;
LLEventPumps::instance().obtain("mainlooprepeater").post(event);
@@ -578,6 +590,11 @@ void LLUpdaterService::setImplAppExitCallback(LLUpdaterService::app_exit_callbac
return mImpl->setAppExitCallback(aecb);
}
+std::string LLUpdaterService::updatedVersion(void)
+{
+ return mImpl->updatedVersion();
+}
+
std::string const & ll_get_version(void) {
static std::string version("");
diff --git a/indra/viewer_components/updater/llupdaterservice.h b/indra/viewer_components/updater/llupdaterservice.h
index 1ffa609019..421481bc43 100644
--- a/indra/viewer_components/updater/llupdaterservice.h
+++ b/indra/viewer_components/updater/llupdaterservice.h
@@ -90,6 +90,11 @@ public:
app_exit_callback_t aecb = callable;
setImplAppExitCallback(aecb);
}
+
+ // If an update is or has been downloaded, this method will return the
+ // version string for that update. An empty string will be returned
+ // otherwise.
+ std::string updatedVersion(void);
private:
boost::shared_ptr<LLUpdaterServiceImpl> mImpl;