From ca9594af28ce2e1cc8bb333a0fa7384dae718a9a Mon Sep 17 00:00:00 2001 From: "Andrew A. de Laix" Date: Thu, 28 Oct 2010 16:47:05 -0700 Subject: shell of the update checker; it will just print a message to the log depending on the result of the check one time. --- indra/newview/llappviewer.cpp | 8 ++++---- indra/newview/lltranslate.cpp | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index e6feaae504..06300141be 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -632,9 +632,6 @@ bool LLAppViewer::init() if (!initConfiguration()) return false; - // Initialize updater service - initUpdater(); - // write Google Breakpad minidump files to our log directory std::string logdir = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, ""); logdir += gDirUtilp->getDirDelimiter(); @@ -980,7 +977,10 @@ bool LLAppViewer::mainLoop() gServicePump = new LLPumpIO(gAPRPoolp); LLHTTPClient::setPump(*gServicePump); LLCurl::setCAFile(gDirUtilp->getCAFile()); - + + // Initialize updater service (now that we have an io pump) + initUpdater(); + // Note: this is where gLocalSpeakerMgr and gActiveSpeakerMgr used to be instantiated. LLVoiceChannel::initClass(); diff --git a/indra/newview/lltranslate.cpp b/indra/newview/lltranslate.cpp index 21467a2ab8..8ccfdb071b 100644 --- a/indra/newview/lltranslate.cpp +++ b/indra/newview/lltranslate.cpp @@ -64,7 +64,7 @@ void LLTranslate::translateMessage(LLHTTPClient::ResponderPtr &result, const std getTranslateUrl(url, from_lang, to_lang, mesg); std::string user_agent = llformat("%s %d.%d.%d (%d)", - LLVersionInfo::getChannel(), + LLVersionInfo::getChannel().c_str(), LLVersionInfo::getMajor(), LLVersionInfo::getMinor(), LLVersionInfo::getPatch(), -- cgit v1.3 From 609f5bd6810ca16a409f209610e6fac972348cba Mon Sep 17 00:00:00 2001 From: "Andrew A. de Laix" Date: Fri, 29 Oct 2010 11:20:54 -0700 Subject: added periodic retry to look for updates --- indra/newview/app_settings/settings.xml | 4 +- .../viewer_components/updater/llupdatechecker.cpp | 19 +++++-- indra/viewer_components/updater/llupdatechecker.h | 2 + .../viewer_components/updater/llupdaterservice.cpp | 63 ++++++++++++++++++++-- 4 files changed, 78 insertions(+), 10 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 371326c0f5..5b9bfd0f9c 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -11011,7 +11011,7 @@ Type U32 Value - 3600 + 10 UpdaterServiceURL @@ -11022,7 +11022,7 @@ Type String Value - http://secondlife.com/app/update + http://localhost/agni UploadBakedTexOld diff --git a/indra/viewer_components/updater/llupdatechecker.cpp b/indra/viewer_components/updater/llupdatechecker.cpp index a19b8be607..ca2959a4ac 100644 --- a/indra/viewer_components/updater/llupdatechecker.cpp +++ b/indra/viewer_components/updater/llupdatechecker.cpp @@ -35,6 +35,7 @@ class LLUpdateChecker::Implementation: public: Implementation(Client & client); + ~Implementation(); void check(std::string const & host, std::string channel, std::string version); // Responder: @@ -49,6 +50,7 @@ private: Client & mClient; LLHTTPClient mHttpClient; bool mInProgress; + LLHTTPClient::ResponderPtr mMe; std::string mVersion; LOG_CLASS(LLUpdateChecker::Implementation); @@ -80,21 +82,28 @@ void LLUpdateChecker::check(std::string const & host, std::string channel, std:: LLUpdateChecker::Implementation::Implementation(LLUpdateChecker::Client & client): mClient(client), - mInProgress(false) + mInProgress(false), + mMe(this) { ; // No op. } +LLUpdateChecker::Implementation::~Implementation() +{ + mMe.reset(0); +} + + void LLUpdateChecker::Implementation::check(std::string const & host, std::string channel, std::string version) { - llassert(!mInProgress); + // llassert(!mInProgress); mInProgress = true; mVersion = version; std::string checkUrl = buildUrl(host, channel, version); LL_INFOS("UpdateCheck") << "checking for updates at " << checkUrl << llendl; - mHttpClient.get(checkUrl, this); + mHttpClient.get(checkUrl, mMe); } void LLUpdateChecker::Implementation::completed(U32 status, @@ -105,12 +114,16 @@ void LLUpdateChecker::Implementation::completed(U32 status, if(status != 200) { LL_WARNS("UpdateCheck") << "html error " << status << " (" << reason << ")" << llendl; + mClient.error(reason); } else if(!content["valid"].asBoolean()) { LL_INFOS("UpdateCheck") << "version invalid" << llendl; + mClient.requiredUpdate(content["latest_version"].asString()); } else if(content["latest_version"].asString() != mVersion) { LL_INFOS("UpdateCheck") << "newer version " << content["latest_version"].asString() << " available" << llendl; + mClient.optionalUpdate(content["latest_version"].asString()); } else { LL_INFOS("UpdateCheck") << "up to date" << llendl; + mClient.upToDate(); } } diff --git a/indra/viewer_components/updater/llupdatechecker.h b/indra/viewer_components/updater/llupdatechecker.h index d2ec848e14..b630c4d8a6 100644 --- a/indra/viewer_components/updater/llupdatechecker.h +++ b/indra/viewer_components/updater/llupdatechecker.h @@ -42,6 +42,7 @@ public: // Check status of current app on the given host for the channel and version provided. void check(std::string const & hostUrl, std::string channel, std::string version); + private: boost::shared_ptr mImplementation; }; @@ -52,6 +53,7 @@ private: // class LLUpdateChecker::Client { +public: // An error occurred while checking for an update. virtual void error(std::string const & message) = 0; diff --git a/indra/viewer_components/updater/llupdaterservice.cpp b/indra/viewer_components/updater/llupdaterservice.cpp index e0f23722dd..2633dbc015 100644 --- a/indra/viewer_components/updater/llupdaterservice.cpp +++ b/indra/viewer_components/updater/llupdaterservice.cpp @@ -25,6 +25,8 @@ #include "linden_common.h" +#include "llevents.h" +#include "lltimer.h" #include "llupdaterservice.h" #include "llupdatechecker.h" @@ -38,6 +40,8 @@ class LLUpdaterServiceImpl : public LLPluginProcessParentOwner, public LLUpdateChecker::Client { + static const std::string ListenerName; + std::string mUrl; std::string mChannel; std::string mVersion; @@ -47,10 +51,15 @@ class LLUpdaterServiceImpl : boost::scoped_ptr mPlugin; LLUpdateChecker mUpdateChecker; + LLTimer mTimer; + + void retry(void); + + LOG_CLASS(LLUpdaterServiceImpl); public: LLUpdaterServiceImpl(); - virtual ~LLUpdaterServiceImpl() {} + virtual ~LLUpdaterServiceImpl(); // LLPluginProcessParentOwner interfaces virtual void receivePluginMessage(const LLPluginMessage &message); @@ -74,8 +83,10 @@ public: virtual void requiredUpdate(std::string const & newVersion); virtual void upToDate(void); + bool onMainLoop(LLSD const & event); }; +const std::string LLUpdaterServiceImpl::ListenerName = "LLUpdaterServiceImpl"; LLUpdaterServiceImpl::LLUpdaterServiceImpl() : mIsChecking(false), @@ -87,6 +98,12 @@ LLUpdaterServiceImpl::LLUpdaterServiceImpl() : mPlugin.reset(new LLPluginProcessParent(this)); } +LLUpdaterServiceImpl::~LLUpdaterServiceImpl() +{ + LL_INFOS("UpdaterService") << "shutting down updater service" << LL_ENDL; + LLEventPumps::instance().obtain("mainloop").stopListening(ListenerName); +} + // LLPluginProcessParentOwner interfaces void LLUpdaterServiceImpl::receivePluginMessage(const LLPluginMessage &message) { @@ -153,13 +170,49 @@ bool LLUpdaterServiceImpl::isChecking() return mIsChecking; } -void LLUpdaterServiceImpl::error(std::string const & message) {} +void LLUpdaterServiceImpl::error(std::string const & message) +{ + retry(); +} -void LLUpdaterServiceImpl::optionalUpdate(std::string const & newVersion) {} +void LLUpdaterServiceImpl::optionalUpdate(std::string const & newVersion) +{ + retry(); +} -void LLUpdaterServiceImpl::requiredUpdate(std::string const & newVersion) {} +void LLUpdaterServiceImpl::requiredUpdate(std::string const & newVersion) +{ + retry(); +} -void LLUpdaterServiceImpl::upToDate(void) {} +void LLUpdaterServiceImpl::upToDate(void) +{ + retry(); +} + +void LLUpdaterServiceImpl::retry(void) +{ + LL_INFOS("UpdaterService") << "will check for update again in " << + mCheckPeriod << " seconds" << LL_ENDL; + mTimer.start(); + mTimer.setTimerExpirySec(mCheckPeriod); + LLEventPumps::instance().obtain("mainloop").listen( + ListenerName, boost::bind(&LLUpdaterServiceImpl::onMainLoop, this, _1)); +} + +bool LLUpdaterServiceImpl::onMainLoop(LLSD const & event) +{ + if(mTimer.hasExpired()) + { + mTimer.stop(); + LLEventPumps::instance().obtain("mainloop").stopListening(ListenerName); + mUpdateChecker.check(mUrl, mChannel, mVersion); + } else { + // Keep on waiting... + } + + return false; +} //----------------------------------------------------------------------- -- cgit v1.3 From 064a8d079917ecd91bd6b47f5f7f353989594593 Mon Sep 17 00:00:00 2001 From: "Andrew A. de Laix" Date: Fri, 29 Oct 2010 11:22:07 -0700 Subject: restore 1hr polling frequency --- indra/newview/app_settings/settings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra/newview') diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 5b9bfd0f9c..274c7fbeb8 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -11011,7 +11011,7 @@ Type U32 Value - 10 + 3600 UpdaterServiceURL -- cgit v1.3