diff options
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/newview/llfloaterabout.cpp | 74 | 
1 files changed, 51 insertions, 23 deletions
| diff --git a/indra/newview/llfloaterabout.cpp b/indra/newview/llfloaterabout.cpp index bababca652..8d17f4c198 100644 --- a/indra/newview/llfloaterabout.cpp +++ b/indra/newview/llfloaterabout.cpp @@ -108,6 +108,7 @@ private:  	static const std::string sCheckUpdateListenerName;      static void startFetchServerReleaseNotes(); +    static void fetchServerReleaseNotesCoro(const std::string& cap_url);      static void handleServerReleaseNotes(LLSD results);  }; @@ -224,35 +225,62 @@ void LLFloaterAbout::startFetchServerReleaseNotes()      // an URL suitable for external browsers in the "Location:" HTTP header.      std::string cap_url = region->getCapability("ServerReleaseNotes"); -    LLCoreHttpUtil::HttpCoroutineAdapter::callbackHttpGet(cap_url, -        &LLFloaterAbout::handleServerReleaseNotes, &LLFloaterAbout::handleServerReleaseNotes); +    LLCoros::instance().launch("fetchServerReleaseNotesCoro", boost::bind(&LLFloaterAbout::fetchServerReleaseNotesCoro, cap_url));  }  /*static*/ +void LLFloaterAbout::fetchServerReleaseNotesCoro(const std::string& cap_url) +{ +    LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t +        httpAdapter(new LLCoreHttpUtil::HttpCoroutineAdapter("fetchServerReleaseNotesCoro", LLCore::HttpRequest::DEFAULT_POLICY_ID)); +    LLCore::HttpRequest::ptr_t httpRequest(new LLCore::HttpRequest); +    LLCore::HttpOptions::ptr_t httpOpts(new LLCore::HttpOptions); + +    httpOpts->setWantHeaders(true); +    httpOpts->setFollowRedirects(false); + +    LLSD result = httpAdapter->getAndSuspend(httpRequest, cap_url, httpOpts); + +    LLSD httpResults = result[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS]; +    LLCore::HttpStatus status = LLCoreHttpUtil::HttpCoroutineAdapter::getStatusFromLLSD(httpResults); + +    if (!status) +    { +        handleServerReleaseNotes(httpResults); +    } +    else +    { +        handleServerReleaseNotes(result); +    } +} + +/*static*/  void LLFloaterAbout::handleServerReleaseNotes(LLSD results)  { -//     LLFloaterAbout* floater_about = LLFloaterReg::getTypedInstance<LLFloaterAbout>("sl_about"); -//     if (floater_about) -//     { -        LLSD http_headers; -        if (results.has(LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS)) -        { -            LLSD http_results = results[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS]; -            http_headers = http_results[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS_HEADERS]; -        } -        else -        { -            http_headers = results[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS_HEADERS]; -        } -         -        std::string location = http_headers[HTTP_IN_HEADER_LOCATION].asString(); -        if (location.empty()) -        { -            location = LLTrans::getString("ErrorFetchingServerReleaseNotesURL"); -        } -        LLAppViewer::instance()->setServerReleaseNotesURL(location); -//    } +    LLSD http_headers; +    if (results.has(LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS)) +    { +        LLSD http_results = results[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS]; +        http_headers = http_results[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS_HEADERS]; +    } +    else +    { +        http_headers = results[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS_HEADERS]; +    } + +    std::string location = http_headers[HTTP_IN_HEADER_LOCATION].asString(); +    if (location.empty()) +    { +        location = LLTrans::getString("ErrorFetchingServerReleaseNotesURL"); +    } +    LLAppViewer::instance()->setServerReleaseNotesURL(location); + +    LLFloaterAbout* floater_about = LLFloaterReg::getTypedInstance<LLFloaterAbout>("sl_about"); +    if (floater_about) +    { +        floater_about->setSupportText(location); +    }  }  class LLFloaterAboutListener: public LLEventAPI | 
