diff options
| author | andreykproductengine <akleshchev@productengine.com> | 2015-07-07 18:51:19 +0300 | 
|---|---|---|
| committer | andreykproductengine <akleshchev@productengine.com> | 2015-07-07 18:51:19 +0300 | 
| commit | 9790ec0c753b54d5ab0c7e6c54139888f49107e3 (patch) | |
| tree | a76caf4520cdf9e69ba0b3001dfc3ba0449fd000 | |
| parent | f153aa3daf2e70b6da8c113b55afff10af1f5fae (diff) | |
MAINT-5174 Add Check for Updates feature to Help menu
| -rwxr-xr-x | indra/newview/llfloaterabout.cpp | 93 | ||||
| -rwxr-xr-x | indra/newview/llfloaterabout.h | 3 | ||||
| -rwxr-xr-x | indra/newview/llviewermenu.cpp | 18 | ||||
| -rwxr-xr-x | indra/newview/skins/default/xui/en/floater_about.xml | 8 | ||||
| -rwxr-xr-x | indra/newview/skins/default/xui/en/menu_login.xml | 6 | ||||
| -rwxr-xr-x | indra/newview/skins/default/xui/en/menu_viewer.xml | 8 | ||||
| -rwxr-xr-x | indra/newview/skins/default/xui/en/notifications.xml | 47 | ||||
| -rwxr-xr-x | indra/viewer_components/updater/llupdaterservice.cpp | 18 | ||||
| -rwxr-xr-x | indra/viewer_components/updater/llupdaterservice.h | 1 | 
9 files changed, 200 insertions, 2 deletions
| diff --git a/indra/newview/llfloaterabout.cpp b/indra/newview/llfloaterabout.cpp index e71daa6067..d88a869d60 100755 --- a/indra/newview/llfloaterabout.cpp +++ b/indra/newview/llfloaterabout.cpp @@ -34,10 +34,12 @@  // Viewer includes  #include "llagent.h"  #include "llagentui.h" -#include "llappviewer.h"  +#include "llappviewer.h" +#include "llnotificationsutil.h"  #include "llslurl.h"  #include "llvoiceclient.h"  #include "lluictrlfactory.h" +#include "llupdaterservice.h"  #include "llviewertexteditor.h"  #include "llviewercontrol.h"  #include "llviewerstats.h" @@ -99,9 +101,23 @@ public:  	/// separated so that we can programmatically access the same info.  	static LLSD getInfo();  	void onClickCopyToClipboard(); +	void onClickUpdateCheck(); + +	// checks state of updater service and starts a check outside of schedule. +	// subscribes callback for closest state update +	static void setUpdateListener();  private:  	void setSupportText(const std::string& server_release_notes_url); + +	// notifications for user requested checks +	static void LLFloaterAbout::showCheckUpdateNotification(S32 state); + +	// callback method for manual checks +	static bool LLFloaterAbout::callbackCheckUpdate(LLSD const & event); + +	// listener name for update checks +	static const std::string LLFloaterAbout::sCheckUpdateListenerName;  }; @@ -132,6 +148,9 @@ BOOL LLFloaterAbout::postBuild()  	getChild<LLUICtrl>("copy_btn")->setCommitCallback(  		boost::bind(&LLFloaterAbout::onClickCopyToClipboard, this)); +	getChild<LLUICtrl>("update_btn")->setCommitCallback( +		boost::bind(&LLFloaterAbout::onClickUpdateCheck, this)); +  	static const LLUIColor about_color = LLUIColorTable::instance().getColor("TextFgReadOnlyColor");  	if (gAgent.getRegion()) @@ -235,6 +254,11 @@ void LLFloaterAbout::onClickCopyToClipboard()  	support_widget->deselect();  } +void LLFloaterAbout::onClickUpdateCheck() +{ +	setUpdateListener(); +} +  void LLFloaterAbout::setSupportText(const std::string& server_release_notes_url)  {  #if LL_WINDOWS @@ -256,6 +280,68 @@ void LLFloaterAbout::setSupportText(const std::string& server_release_notes_url)  }  ///---------------------------------------------------------------------------- +/// Floater About Update-check related functions +///---------------------------------------------------------------------------- + +const std::string LLFloaterAbout::sCheckUpdateListenerName = "LLUpdateNotificationListener"; + +void LLFloaterAbout::showCheckUpdateNotification(S32 state) +{ +	switch (state) +	{ +	case LLUpdaterService::UP_TO_DATE: +		LLNotificationsUtil::add("UpdateViewerUpToDate"); +		break; +	case LLUpdaterService::DOWNLOADING: +	case LLUpdaterService::INSTALLING: +		LLNotificationsUtil::add("UpdateDownloadInProgress"); +		break; +	case LLUpdaterService::TERMINAL: +		// download complete, user triggered check after download pop-up appeared +		LLNotificationsUtil::add("UpdateDownloadComplete"); +		break; +	default: +		LLNotificationsUtil::add("UpdateCheckError"); +		break; +	} +} + +bool LLFloaterAbout::callbackCheckUpdate(LLSD const & event) +{ +	if (!event.has("payload")) +	{ +		return false; +	} + +	LLSD payload = event["payload"]; +	if (payload.has("type") && payload["type"].asInteger() == LLUpdaterService::STATE_CHANGE) +	{ +		LLEventPumps::instance().obtain("mainlooprepeater").stopListening(sCheckUpdateListenerName); +		showCheckUpdateNotification(payload["state"].asInteger()); +	} +	return false; +} + +void LLFloaterAbout::setUpdateListener() +{ +	LLUpdaterService update_service; +	S32 service_state = update_service.getState(); +	// Note: Do not set state listener before forceCheck() since it set's new state +	if (update_service.forceCheck() || service_state == LLUpdaterService::CHECKING_FOR_UPDATE) +	{ +		LLEventPump& mainloop(LLEventPumps::instance().obtain("mainlooprepeater")); +		if (mainloop.getListener(sCheckUpdateListenerName) == LLBoundListener()) // dummy listener +		{ +			mainloop.listen(sCheckUpdateListenerName, boost::bind(&callbackCheckUpdate, _1)); +		} +	} +	else +	{ +		showCheckUpdateNotification(service_state); +	} +} + +///----------------------------------------------------------------------------  /// LLFloaterAboutUtil  ///----------------------------------------------------------------------------  void LLFloaterAboutUtil::registerFloater() @@ -265,6 +351,11 @@ void LLFloaterAboutUtil::registerFloater()  } +void LLFloaterAboutUtil::checkUpdatesAndNotify() +{ +	LLFloaterAbout::setUpdateListener(); +} +  ///----------------------------------------------------------------------------  /// Class LLServerReleaseNotesURLFetcher implementation  ///---------------------------------------------------------------------------- diff --git a/indra/newview/llfloaterabout.h b/indra/newview/llfloaterabout.h index 8fc1aa4f29..be34b631cc 100755 --- a/indra/newview/llfloaterabout.h +++ b/indra/newview/llfloaterabout.h @@ -30,6 +30,9 @@  namespace LLFloaterAboutUtil  {  	void registerFloater(); + +	// Support for user initialized update/state checks +	void checkUpdatesAndNotify();  }  #endif // LL_LLFLOATERABOUT_H diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 6d7a8008ba..5c55683d84 100755 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -57,6 +57,7 @@  #include "llfacebookconnect.h"  #include "llfilepicker.h"  #include "llfirstuse.h" +#include "llfloaterabout.h"  #include "llfloaterbuy.h"  #include "llfloaterbuycontents.h"  #include "llbuycurrencyhtml.h" @@ -2077,6 +2078,22 @@ class LLAdvancedCheckShowObjectUpdates : public view_listener_t +/////////////////////// +// CHECK FOR UPDATES // +/////////////////////// + + + +class LLAdvancedCheckViewerUpdates : public view_listener_t +{ +	bool handleEvent(const LLSD& userdata) +	{ +		LLFloaterAboutUtil::checkUpdatesAndNotify(); +		return true; +	} +}; + +  ////////////////////  // COMPRESS IMAGE //  //////////////////// @@ -8857,6 +8874,7 @@ void initialize_menus()  	// Advanced (toplevel)  	view_listener_t::addMenu(new LLAdvancedToggleShowObjectUpdates(), "Advanced.ToggleShowObjectUpdates");  	view_listener_t::addMenu(new LLAdvancedCheckShowObjectUpdates(), "Advanced.CheckShowObjectUpdates"); +	view_listener_t::addMenu(new LLAdvancedCheckViewerUpdates(), "Advanced.CheckViewerUpdates");  	view_listener_t::addMenu(new LLAdvancedCompressImage(), "Advanced.CompressImage");  	view_listener_t::addMenu(new LLAdvancedShowDebugSettings(), "Advanced.ShowDebugSettings");  	view_listener_t::addMenu(new LLAdvancedEnableViewAdminOptions(), "Advanced.EnableViewAdminOptions"); diff --git a/indra/newview/skins/default/xui/en/floater_about.xml b/indra/newview/skins/default/xui/en/floater_about.xml index 60f36770bb..ec87b3684e 100755 --- a/indra/newview/skins/default/xui/en/floater_about.xml +++ b/indra/newview/skins/default/xui/en/floater_about.xml @@ -43,6 +43,14 @@          top_pad="5"          height="25"          width="180" /> +      <button +        follows="left|top" +        label="Check for updates" +        name="update_btn" +        left_pad="70" +        top_delta="0" +        height="25" +        width="180" />      </panel>      <panel        border="true"  diff --git a/indra/newview/skins/default/xui/en/menu_login.xml b/indra/newview/skins/default/xui/en/menu_login.xml index e91eea04d1..73ca7c529d 100755 --- a/indra/newview/skins/default/xui/en/menu_login.xml +++ b/indra/newview/skins/default/xui/en/menu_login.xml @@ -108,6 +108,12 @@               function="Floater.Show"               parameter="sl_about" />          </menu_item_call> +        <menu_item_call +         label="Check for Updates" +         name="Check for Updates"> +            <menu_item_call.on_click +             function="Advanced.CheckViewerUpdates"/> +        </menu_item_call>      </menu>      <menu_item_check        label="Show Debug Menu" diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index dd02537f39..2e248bcab9 100755 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -1431,7 +1431,7 @@                   function="Floater.Show"                   parameter="bumps" />          </menu_item_call> -        <menu_item_separator/>     +        <menu_item_separator/>          <menu_item_call           label="About [APP_NAME]"           name="About Second Life"> @@ -1439,6 +1439,12 @@               function="Floater.Show"               parameter="sl_about" />          </menu_item_call> +        <menu_item_call +         label="Check for Updates" +         name="Check for Updates"> +          <menu_item_call.on_click +           function="Advanced.CheckViewerUpdates"/> +        </menu_item_call>      </menu>      <menu       create_jump_keys="true" diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 1225601e7b..67d50d66c0 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -3677,6 +3677,53 @@ see [[INFO_URL] Information about this update]       name="okbutton"       yestext="OK"/>    </notification> +   +  <notification + icon="alertmodal.tga" + name="UpdateDownloadInProgress" + type="alertmodal"> +An update is available! +It's downloading in the background and we will prompt you to restart your viewer to finish installing it as soon as it's ready. +    <tag>confirm</tag> +    <usetemplate +     name="okbutton" +     yestext="OK"/> +  </notification> +   +  <notification + icon="alertmodal.tga" + name="UpdateDownloadComplete" + type="alertmodal"> +An update was downloaded. It will be installed during restart. +    <tag>confirm</tag> +    <usetemplate +     name="okbutton" +     yestext="OK"/> +  </notification> + +  <notification + icon="alertmodal.tga" + name="UpdateCheckError" + type="alertmodal"> +An error occured while checking for update. +Please try again later. +    <tag>confirm</tag> +    <usetemplate +     name="okbutton" +     yestext="OK"/> +  </notification> + +  <notification + icon="alertmodal.tga" + name="UpdateViewerUpToDate" + type="alertmodal"> +Your viewer is up to date! +If you can't wait to try out the latest features and fixes, check out the Alternate Viewers page. http://wiki.secondlife.com/wiki/Linden_Lab_Official:Alternate_Viewers. +    <tag>confirm</tag> +    <usetemplate +     name="okbutton" +     yestext="OK"/> +  </notification>    <notification     icon="alertmodal.tga" diff --git a/indra/viewer_components/updater/llupdaterservice.cpp b/indra/viewer_components/updater/llupdaterservice.cpp index c152493a51..abf4ac5e21 100755 --- a/indra/viewer_components/updater/llupdaterservice.cpp +++ b/indra/viewer_components/updater/llupdaterservice.cpp @@ -132,6 +132,7 @@ public:  	void startChecking(bool install_if_ready);  	void stopChecking(); +	bool forceCheck();  	bool isChecking();  	LLUpdaterService::eUpdaterState getState(); @@ -266,6 +267,18 @@ void LLUpdaterServiceImpl::stopChecking()  	setState(LLUpdaterService::TERMINAL);  } +bool LLUpdaterServiceImpl::forceCheck() +{ +	if (mTimer.getStarted() +		&& !mIsDownloading) +	{ +		mTimer.setTimerExpirySec(0); +		setState(LLUpdaterService::CHECKING_FOR_UPDATE); +		return true; +	} +	return false; +} +  bool LLUpdaterServiceImpl::isChecking()  {  	return mIsChecking; @@ -672,6 +685,11 @@ void LLUpdaterService::stopChecking()  	mImpl->stopChecking();  } +bool LLUpdaterService::forceCheck() +{ +	return mImpl->forceCheck(); +} +  bool LLUpdaterService::isChecking()  {  	return mImpl->isChecking(); diff --git a/indra/viewer_components/updater/llupdaterservice.h b/indra/viewer_components/updater/llupdaterservice.h index 0ddf24935b..95bbe1695c 100755 --- a/indra/viewer_components/updater/llupdaterservice.h +++ b/indra/viewer_components/updater/llupdaterservice.h @@ -84,6 +84,7 @@ public:  	void startChecking(bool install_if_ready = false);  	void stopChecking(); +	bool forceCheck();  	bool isChecking();  	eUpdaterState getState(); | 
