summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
Diffstat (limited to 'indra')
-rw-r--r--indra/newview/llsyntaxid.cpp191
-rw-r--r--indra/newview/llsyntaxid.h31
2 files changed, 142 insertions, 80 deletions
diff --git a/indra/newview/llsyntaxid.cpp b/indra/newview/llsyntaxid.cpp
index 442793bff1..7d0c7e376a 100644
--- a/indra/newview/llsyntaxid.cpp
+++ b/indra/newview/llsyntaxid.cpp
@@ -31,53 +31,54 @@
#include "llhttpclient.h"
#include "llagent.h"
#include "llappviewer.h"
-#include "llcurl.h"
-#include "llenvmanager.h"
#include "llsdserialize.h"
#include "llsyntaxid.h"
+
//-----------------------------------------------------------------------------
// fetchKeywordsFileResponder
//-----------------------------------------------------------------------------
-class fetchKeywordsFileResponder : public LLCurl::Responder
+fetchKeywordsFileResponder::fetchKeywordsFileResponder(std::string filespec)
{
-public:
- std::string mFileSpec;
+ mFileSpec = filespec;
+ LL_WARNS("")
+ << "Instantiating with file saving to: '" << filespec << "'"
+ << LL_ENDL;
+}
- fetchKeywordsFileResponder(std::string filespec)
- {
- mFileSpec = filespec;
- }
- void errorWithContent(U32 status,
+void fetchKeywordsFileResponder::errorWithContent(U32 status,
const std::string& reason,
const LLSD& content)
- {
- LL_WARNS("")
- << "fetchKeywordsFileResponder error [status:"
- << status
- << "]: "
- << content
- << LL_ENDL;
- }
+{
+ LL_WARNS("")
+ << "fetchKeywordsFileResponder error [status:"
+ << status
+ << "]: "
+ << content
+ << LL_ENDL;
+}
- void result(const LLSD& content_ref)
- {
- //LLSyntaxIdLSL::setKeywordsXml(content_ref);
+void fetchKeywordsFileResponder::result(const LLSD& content_ref)
+{
+ LLSyntaxIdLSL::setKeywordsXml(content_ref);
- std::stringstream str;
- LLSDSerialize::toPrettyXML(content_ref, str);
- LL_WARNS("")
- << "fetchKeywordsFileResponder result:" << str.str()
- << "filename: '" << mFileSpec << "'"
- << LL_ENDL;
+ std::stringstream str;
+ LLSDSerialize::toPrettyXML(content_ref, str);
+ const std::string xml = str.str();
- // TODO save the damn str to disc
- //llofstream file(mFileSpec, std::ios_base::out);
- //file.write(str.str(), str.str().size());
- //file.close();
- }
-};
+ // save the str to disc
+ llofstream file(mFileSpec, std::ios_base::out);
+ file.write(xml.c_str(), str.str().size());
+ file.close();
+
+ LL_WARNS("")
+ << "Syntax file received, saving as: '" << mFileSpec << "'"
+ << LL_ENDL;
+}
+
+
+LLSD LLSyntaxIdLSL::sKeywordsXml;
//-----------------------------------------------------------------------------
// LLSyntaxIdLSL
@@ -90,16 +91,34 @@ LLSyntaxIdLSL::LLSyntaxIdLSL() :
mFileNameDefault("keywords_lsl_default.xml"),
mSimulatorFeature("LSLSyntaxId"),
mCapabilityName("LSLSyntax"),
+ mCapabilityURL(""),
mFilePath(LL_PATH_APP_SETTINGS)
{
- mCurrentSyntaxId = LLUUID();
+ mSyntaxIdCurrent = LLUUID();
mFileNameCurrent = mFileNameDefault;
}
-std::string LLSyntaxIdLSL::buildFileName(LLUUID& SyntaxId)
+std::string LLSyntaxIdLSL::buildFileNameNew()
{
- std::string filename = "keywords_lsl_" + SyntaxId.asString() + "_" + gLastVersionChannel + ".llsd.xml";
- return filename;
+ std::string filename = "keywords_lsl_";
+ if (!mSyntaxIdNew.isNull())
+ {
+ filename += gLastVersionChannel + "_" + mSyntaxIdNew.asString();
+ }
+ else
+ {
+ filename += mFileNameDefault;
+ }
+ mFileNameNew = filename + ".llsd.xml";
+ return mFileNameNew;
+}
+
+std::string LLSyntaxIdLSL::buildFullFileSpec()
+{
+ ELLPath path = mSyntaxIdNew.isNull() ? LL_PATH_APP_SETTINGS : LL_PATH_CACHE;
+ buildFileNameNew();
+ mFullFileSpec = gDirUtilp->getExpandedFilename(path, mFileNameNew);
+ return mFullFileSpec;
}
//-----------------------------------------------------------------------------
@@ -112,15 +131,9 @@ bool LLSyntaxIdLSL::checkSyntaxIdChanged()
if (region)
{
- /*
- LL_WARNS("LSLSyntax")
- << "REGION is '" << region->getName() << "'"
- << LL_ENDL;
- */
-
if (!region->capabilitiesReceived())
{ // Shouldn't be possible, but experience shows that it's needed
-// region->setCapabilitiesReceivedCallback(boost::bind(&LLSyntaxIdLSL::checkSyntaxIdChange, this));
+ //region->setCapabilitiesReceivedCallback(boost::bind(&LLSyntaxIdLSL::checkSyntaxIdChange, this));
LL_WARNS("LSLSyntax")
<< "region '" << region->getName()
<< "' has not received capabilities yet! Setting a callback for when they arrive."
@@ -133,18 +146,18 @@ bool LLSyntaxIdLSL::checkSyntaxIdChanged()
region->getSimulatorFeatures(simFeatures);
if (simFeatures.has("LSLSyntaxId"))
{
- LLUUID SyntaxId = simFeatures["LSLSyntaxId"].asUUID();
- if (mCurrentSyntaxId != SyntaxId)
+ mSyntaxIdNew = simFeatures["LSLSyntaxId"].asUUID();
+ mCapabilityURL = region->getCapability(mCapabilityName);
+ if (mSyntaxIdCurrent != mSyntaxIdNew)
{
// set the properties for the fetcher to use
- mFileNameCurrent = buildFileName(SyntaxId);
- mFilePath = LL_PATH_CACHE;
- mCurrentSyntaxId = SyntaxId;
+ //mFileNameNew = buildFileNameNew(mSyntaxIdNew);
+ //mFilePath = LL_PATH_CACHE;
LL_WARNS("LSLSyntax")
<< "Region changed to '" << region->getName()
<< "' it has LSLSyntaxId capability, and the new hash is '"
- << SyntaxId << "'"
+ << mSyntaxIdNew << "'"
<< LL_ENDL;
changed = true;
@@ -154,14 +167,14 @@ bool LLSyntaxIdLSL::checkSyntaxIdChanged()
LL_WARNS("LSLSyntax")
<< "Region changed to '" << region->getName()
<< "' it has the same LSLSyntaxId! Leaving hash as '"
- << mCurrentSyntaxId << "'"
+ << mSyntaxIdCurrent << "'"
<< LL_ENDL;
}
}
else
{
// Set the hash to NULL_KEY to indicate use of default keywords file
- if ( mCurrentSyntaxId.isNull() )
+ if ( mSyntaxIdCurrent.isNull() )
{
LL_WARNS("LSLSyntax")
<< "Region changed to '" << region->getName()
@@ -170,9 +183,9 @@ bool LLSyntaxIdLSL::checkSyntaxIdChanged()
}
else
{
- mCurrentSyntaxId = LLUUID();
- mFileNameCurrent = mFileNameDefault;
- mFilePath = LL_PATH_APP_SETTINGS;
+ mSyntaxIdNew = LLUUID();
+ //mFileNameNew = mFileNameDefault;
+ //mFilePath = LL_PATH_APP_SETTINGS;
LL_WARNS("LSLSyntax")
<< "Region changed to '" << region->getName()
@@ -190,18 +203,27 @@ bool LLSyntaxIdLSL::checkSyntaxIdChanged()
//-----------------------------------------------------------------------------
// fetchKeywordsFile
//-----------------------------------------------------------------------------
-bool LLSyntaxIdLSL::fetchKeywordsFile()
+void LLSyntaxIdLSL::fetchKeywordsFile()
{
- LLViewerRegion* region = gAgent.getRegion();
- bool fetched = false;
-
- std::string cap_url = region->getCapability(mCapabilityName);
- if ( !cap_url.empty() )
+ if ( !mCapabilityURL.empty() )
{
- LLHTTPClient::get(cap_url, new fetchKeywordsFileResponder(mFullFileSpec));
+ //buildFullFileSpec();
+ LLHTTPClient::get(mCapabilityURL,
+ new fetchKeywordsFileResponder(mFullFileSpec),
+ LLSD(), 30.f
+ );
+ LL_WARNS("LSLSyntax")
+ << "LSLSyntaxId capability URL is: " << mCapabilityURL
+ << ". Filename to use is: '" << mFullFileSpec << "'."
+ << LL_ENDL;
+ }
+ else
+ {
+ LL_WARNS("LSLSyntax")
+ << "LSLSyntaxId capability URL is empty using capability: '"
+ << mCapabilityName << "'"
+ << LL_ENDL;
}
-
- return fetched;
}
void LLSyntaxIdLSL::initialise()
@@ -212,24 +234,42 @@ void LLSyntaxIdLSL::initialise()
<< "Change to syntax, setting up new file."
<< LL_ENDL;
- setFileNameNew(gDirUtilp->getExpandedFilename(
- mFilePath,
- mFileNameCurrent
- ));
- if ( !mCurrentSyntaxId.isNull() )
+ // Need a full spec built regardless of file source
+ buildFullFileSpec();
+ if ( !mSyntaxIdNew.isNull() )
{
- bool success = false;
+ LL_WARNS("LSLSyntax")
+ << "ID is not null so must be processed!"
+ << LL_ENDL;
+
if ( !gDirUtilp->fileExists(mFullFileSpec) )
{ // Does not exist, so fetch it from the capability
- success = fetchKeywordsFile();
+ fetchKeywordsFile();
+ LL_WARNS("LSLSyntax")
+ << "Filename is not cached, we will try to download it!"
+ << LL_ENDL;
+ }
+ else
+ {
+ LL_WARNS("LSLSyntax")
+ << "Filename is cached, no need to download!"
+ << LL_ENDL;
+ openKeywordsFile();
}
}
+ else
+ { // Need to open the default
+ LL_WARNS("LSLSyntax")
+ << "ID is null so SyntaxID does not need to be processed!"
+ << LL_ENDL;
+ openKeywordsFile();
+ }
// TODO add a signal here to tell the editor the hash has changed?
}
else
{
LL_WARNS("LSLSyntax")
- << "Apparently there is no change to Syntax!"
+ << "No change to Syntax! Nothing to see here. Move along now!"
<< LL_ENDL;
}
@@ -239,7 +279,10 @@ void LLSyntaxIdLSL::initialise()
//-----------------------------------------------------------------------------
// openKeywordsFile
//-----------------------------------------------------------------------------
-void openKeywordsFile()
+void LLSyntaxIdLSL::openKeywordsFile()
{
- ;
+ LL_WARNS("LSLSyntax")
+ << "Trying to open default or cached keyword file ;-)"
+ << LL_ENDL;
+ // TODO Open the file and load LLSD into sKeywordsXml
}
diff --git a/indra/newview/llsyntaxid.h b/indra/newview/llsyntaxid.h
index f7e3d6896e..d9f2572863 100644
--- a/indra/newview/llsyntaxid.h
+++ b/indra/newview/llsyntaxid.h
@@ -12,6 +12,21 @@
#include "llviewerregion.h"
+class fetchKeywordsFileResponder : public LLHTTPClient::Responder
+{
+public:
+ std::string mFileSpec;
+
+ fetchKeywordsFileResponder(std::string filespec);
+
+ void errorWithContent(U32 status,
+ const std::string& reason,
+ const LLSD& content);
+
+ void result(const LLSD& content_ref);
+};
+
+
/**
* @file llsyntaxid.h
* @brief The LLSyntaxIdLSL class
@@ -24,7 +39,7 @@ public:
bool checkSyntaxIdChanged();
std::string getFileNameCurrent() const { return mFileNameCurrent; }
ELLPath getFilePath() const { return mFilePath; }
- LLUUID getSyntaxId() const { return mCurrentSyntaxId; }
+ LLUUID getSyntaxId() const { return mSyntaxIdCurrent; }
void initialise();
@@ -32,13 +47,14 @@ public:
protected:
- std::string buildFileName(LLUUID& SyntaxId);
- bool fetchKeywordsFile();
+ std::string buildFileNameNew();
+ std::string buildFullFileSpec();
+ void fetchKeywordsFile();
void openKeywordsFile();
- void setSyntaxId(LLUUID SyntaxId) { mCurrentSyntaxId = SyntaxId; }
+ void setSyntaxId(LLUUID SyntaxId) { mSyntaxIdCurrent = SyntaxId; }
void setFileNameCurrent(std::string& name) { mFileNameCurrent = name; }
void setFileNameDefault(std::string& name) { mFileNameDefault = name; }
- void setFileNameNew(std::string& name) { mFileNameNew = name; }
+ void setFileNameNew(std::string name) { mFileNameNew = name; }
void setSimulatorFeatureName(const std::string& name) { mSimulatorFeature = name; }
@@ -51,13 +67,16 @@ protected:
private:
std::string mCapabilityName;
- LLUUID mCurrentSyntaxId;
+ std::string mCapabilityURL;
std::string mFileNameCurrent;
std::string mFileNameDefault;
std::string mFileNameNew;
ELLPath mFilePath;
std::string mFullFileSpec;
std::string mSimulatorFeature;
+ LLUUID mSyntaxIdCurrent;
+ LLUUID mSyntaxIdNew;
static LLSD sKeywordsXml;
+
};