Build>Scripts>Recompile Scripts now will skip Experience scripts that the agent
can not contribute to and will keep Experience association otherwise.meow-7.2.2
parent
d14673988d
commit
d331db79c2
|
|
@ -165,6 +165,7 @@ void LLAssetUploadQueue::request(LLAssetUploadQueueSupplier** supplier)
|
|||
body["item_id"] = data.mItemId;
|
||||
body["is_script_running"] = data.mIsRunning;
|
||||
body["target"] = data.mIsTargetMono? "mono" : "lsl2";
|
||||
body["experience"] = data.mExperienceId;
|
||||
|
||||
std::string url = "";
|
||||
LLViewerObject* object = gObjectList.findObject(data.mTaskId);
|
||||
|
|
@ -188,7 +189,8 @@ void LLAssetUploadQueue::queue(const std::string& filename,
|
|||
const LLUUID& queue_id,
|
||||
U8* script_data,
|
||||
U32 data_size,
|
||||
std::string script_name)
|
||||
std::string script_name,
|
||||
const LLUUID& experience_id)
|
||||
{
|
||||
UploadData data;
|
||||
data.mTaskId = task_id;
|
||||
|
|
@ -200,6 +202,7 @@ void LLAssetUploadQueue::queue(const std::string& filename,
|
|||
data.mData = script_data;
|
||||
data.mDataSize = data_size;
|
||||
data.mScriptName = script_name;
|
||||
data.mExperienceId = experience_id;
|
||||
|
||||
mQueue.push_back(data);
|
||||
|
||||
|
|
|
|||
|
|
@ -50,7 +50,8 @@ public:
|
|||
const LLUUID& queue_id,
|
||||
U8* data,
|
||||
U32 data_size,
|
||||
std::string script_name);
|
||||
std::string script_name,
|
||||
const LLUUID& experience_id);
|
||||
|
||||
bool isEmpty() const {return mQueue.empty();}
|
||||
|
||||
|
|
@ -69,6 +70,7 @@ private:
|
|||
U8* mData;
|
||||
U32 mDataSize;
|
||||
std::string mScriptName;
|
||||
LLUUID mExperienceId;
|
||||
};
|
||||
|
||||
// Ownership of mSupplier passed to currently waiting responder
|
||||
|
|
|
|||
|
|
@ -59,6 +59,8 @@
|
|||
#include "lltrans.h"
|
||||
|
||||
#include "llselectmgr.h"
|
||||
#include "llexperienceassociationresponder.h"
|
||||
#include "llexperiencecache.h"
|
||||
|
||||
// *TODO: This should be separated into the script queue, and the floater views of that queue.
|
||||
// There should only be one floater class that can view any queue type
|
||||
|
|
@ -70,11 +72,13 @@
|
|||
struct LLScriptQueueData
|
||||
{
|
||||
LLUUID mQueueID;
|
||||
std::string mScriptName;
|
||||
LLUUID mTaskId;
|
||||
LLUUID mItemId;
|
||||
LLScriptQueueData(const LLUUID& q_id, const std::string& name, const LLUUID& task_id, const LLUUID& item_id) :
|
||||
mQueueID(q_id), mScriptName(name), mTaskId(task_id), mItemId(item_id) {}
|
||||
LLPointer<LLInventoryItem> mItem;
|
||||
LLHost mHost;
|
||||
LLUUID mExperienceId;
|
||||
std::string mExperiencename;
|
||||
LLScriptQueueData(const LLUUID& q_id, const LLUUID& task_id, LLInventoryItem* item) :
|
||||
mQueueID(q_id), mTaskId(task_id), mItem(new LLInventoryItem(item)) {}
|
||||
|
||||
};
|
||||
|
||||
|
|
@ -88,6 +92,7 @@ LLFloaterScriptQueue::LLFloaterScriptQueue(const LLSD& key) :
|
|||
mDone(false),
|
||||
mMono(false)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// Destroys the object
|
||||
|
|
@ -167,7 +172,7 @@ BOOL LLFloaterScriptQueue::start()
|
|||
|
||||
getChild<LLScrollListCtrl>("queue output")->addSimpleElement(buffer, ADD_BOTTOM);
|
||||
|
||||
return nextObject();
|
||||
return startQueue();
|
||||
}
|
||||
|
||||
BOOL LLFloaterScriptQueue::isDone() const
|
||||
|
|
@ -232,6 +237,40 @@ BOOL LLFloaterScriptQueue::popNext()
|
|||
return rv;
|
||||
}
|
||||
|
||||
BOOL LLFloaterScriptQueue::startQueue()
|
||||
{
|
||||
return nextObject();
|
||||
}
|
||||
|
||||
class CompileQueueExperienceResponder : public LLHTTPClient::Responder
|
||||
{
|
||||
public:
|
||||
CompileQueueExperienceResponder(const LLUUID& parent):mParent(parent)
|
||||
{
|
||||
}
|
||||
|
||||
LLUUID mParent;
|
||||
|
||||
virtual void result(const LLSD& content)
|
||||
{
|
||||
sendResult(content);
|
||||
}
|
||||
virtual void error(U32 status, const std::string& reason)
|
||||
{
|
||||
sendResult(LLSD());
|
||||
}
|
||||
void sendResult(const LLSD& content)
|
||||
{
|
||||
LLFloaterCompileQueue* queue = LLFloaterReg::findTypedInstance<LLFloaterCompileQueue>("compile_queue", mParent);
|
||||
if(!queue)
|
||||
return;
|
||||
|
||||
queue->experienceIdsReceived(content["experience_ids"]);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
///----------------------------------------------------------------------------
|
||||
/// Class LLFloaterCompileQueue
|
||||
|
|
@ -284,6 +323,21 @@ LLFloaterCompileQueue::~LLFloaterCompileQueue()
|
|||
{
|
||||
}
|
||||
|
||||
void LLFloaterCompileQueue::experienceIdsReceived( const LLSD& content )
|
||||
{
|
||||
for(LLSD::array_const_iterator it = content.beginArray(); it != content.endArray(); ++it)
|
||||
{
|
||||
mExperienceIds.insert(it->asUUID());
|
||||
}
|
||||
nextObject();
|
||||
}
|
||||
|
||||
BOOL LLFloaterCompileQueue::hasExperience( const LLUUID& id ) const
|
||||
{
|
||||
return mExperienceIds.find(id) != mExperienceIds.end();
|
||||
}
|
||||
|
||||
|
||||
void LLFloaterCompileQueue::handleInventory(LLViewerObject *viewer_object,
|
||||
LLInventoryObject::object_list_t* inv)
|
||||
{
|
||||
|
|
@ -324,25 +378,52 @@ void LLFloaterCompileQueue::handleInventory(LLViewerObject *viewer_object,
|
|||
{
|
||||
LLInventoryItem *itemp = iter->second;
|
||||
LLScriptQueueData* datap = new LLScriptQueueData(getKey().asUUID(),
|
||||
itemp->getName(),
|
||||
viewer_object->getID(),
|
||||
itemp->getUUID());
|
||||
viewer_object->getID(), itemp);
|
||||
|
||||
//LL_INFOS() << "ITEM NAME 2: " << names.get(i) << LL_ENDL;
|
||||
gAssetStorage->getInvItemAsset(viewer_object->getRegion()->getHost(),
|
||||
gAgent.getID(),
|
||||
gAgent.getSessionID(),
|
||||
itemp->getPermissions().getOwner(),
|
||||
viewer_object->getID(),
|
||||
itemp->getUUID(),
|
||||
itemp->getAssetUUID(),
|
||||
itemp->getType(),
|
||||
LLFloaterCompileQueue::scriptArrived,
|
||||
(void*)datap);
|
||||
ExperienceAssociationResponder::fetchAssociatedExperience(itemp->getParentUUID(), itemp->getUUID(),
|
||||
boost::bind(LLFloaterCompileQueue::requestAsset, datap, _1));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void LLFloaterCompileQueue::requestAsset( LLScriptQueueData* datap, const LLSD& experience )
|
||||
{
|
||||
LLFloaterCompileQueue* queue = LLFloaterReg::findTypedInstance<LLFloaterCompileQueue>("compile_queue", datap->mQueueID);
|
||||
if(!queue)
|
||||
{
|
||||
delete datap;
|
||||
return;
|
||||
}
|
||||
if(experience.has(LLExperienceCache::EXPERIENCE_ID))
|
||||
{
|
||||
datap->mExperienceId=experience[LLExperienceCache::EXPERIENCE_ID].asUUID();
|
||||
if(!queue->hasExperience(datap->mExperienceId))
|
||||
{
|
||||
std::string buffer = LLTrans::getString("CompileNoExperiencePerm", LLSD::emptyMap()
|
||||
.with("SCRIPT", datap->mItem->getName())
|
||||
.with("EXPERIENCE", experience[LLExperienceCache::NAME].asString()));
|
||||
|
||||
queue->getChild<LLScrollListCtrl>("queue output")->addSimpleElement(buffer, ADD_BOTTOM);
|
||||
queue->removeItemByItemID(datap->mItem->getUUID());
|
||||
delete datap;
|
||||
return;
|
||||
}
|
||||
}
|
||||
//LL_INFOS() << "ITEM NAME 2: " << names.get(i) << LL_ENDL;
|
||||
gAssetStorage->getInvItemAsset(datap->mHost,
|
||||
gAgent.getID(),
|
||||
gAgent.getSessionID(),
|
||||
datap->mItem->getPermissions().getOwner(),
|
||||
datap->mTaskId,
|
||||
datap->mItem->getUUID(),
|
||||
datap->mItem->getAssetUUID(),
|
||||
datap->mItem->getType(),
|
||||
LLFloaterCompileQueue::scriptArrived,
|
||||
(void*)datap);
|
||||
}
|
||||
|
||||
|
||||
// This is the callback for when each script arrives
|
||||
// static
|
||||
void LLFloaterCompileQueue::scriptArrived(LLVFS *vfs, const LLUUID& asset_id,
|
||||
|
|
@ -382,12 +463,12 @@ void LLFloaterCompileQueue::scriptArrived(LLVFS *vfs, const LLUUID& asset_id,
|
|||
file.read(script_data, script_size);
|
||||
|
||||
queue->mUploadQueue->queue(filename, data->mTaskId,
|
||||
data->mItemId, is_running, queue->mMono, queue->getKey().asUUID(),
|
||||
script_data, script_size, data->mScriptName);
|
||||
data->mItem->getUUID(), is_running, queue->mMono, queue->getKey().asUUID(),
|
||||
script_data, script_size, data->mItem->getName(), data->mExperienceId);
|
||||
}
|
||||
else
|
||||
{
|
||||
buffer = LLTrans::getString("CompileQueueServiceUnavailable") + (": ") + data->mScriptName;
|
||||
buffer = LLTrans::getString("CompileQueueServiceUnavailable") + (": ") + data->mItem->getName();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -399,7 +480,7 @@ void LLFloaterCompileQueue::scriptArrived(LLVFS *vfs, const LLUUID& asset_id,
|
|||
args["MESSAGE"] = LLTrans::getString("CompileQueueScriptNotFound");
|
||||
LLNotificationsUtil::add("SystemMessage", args);
|
||||
|
||||
buffer = LLTrans::getString("CompileQueueProblemDownloading") + (": ") + data->mScriptName;
|
||||
buffer = LLTrans::getString("CompileQueueProblemDownloading") + (": ") + data->mItem->getName();
|
||||
}
|
||||
else if (LL_ERR_INSUFFICIENT_PERMISSIONS == status)
|
||||
{
|
||||
|
|
@ -407,15 +488,15 @@ void LLFloaterCompileQueue::scriptArrived(LLVFS *vfs, const LLUUID& asset_id,
|
|||
args["MESSAGE"] = LLTrans::getString("CompileQueueInsufficientPermDownload");
|
||||
LLNotificationsUtil::add("SystemMessage", args);
|
||||
|
||||
buffer = LLTrans::getString("CompileQueueInsufficientPermFor") + (": ") + data->mScriptName;
|
||||
buffer = LLTrans::getString("CompileQueueInsufficientPermFor") + (": ") + data->mItem->getName();
|
||||
}
|
||||
else
|
||||
{
|
||||
buffer = LLTrans::getString("CompileQueueUnknownFailure") + (" ") + data->mScriptName;
|
||||
buffer = LLTrans::getString("CompileQueueUnknownFailure") + (" ") + data->mItem->getName();
|
||||
}
|
||||
|
||||
LL_WARNS() << "Problem downloading script asset." << LL_ENDL;
|
||||
if(queue) queue->removeItemByItemID(data->mItemId);
|
||||
if(queue) queue->removeItemByItemID(data->mItem->getUUID());
|
||||
}
|
||||
if(queue && (buffer.size() > 0))
|
||||
{
|
||||
|
|
@ -564,6 +645,23 @@ void LLFloaterCompileQueue::removeItemByItemID(const LLUUID& asset_id)
|
|||
}
|
||||
}
|
||||
|
||||
BOOL LLFloaterCompileQueue::startQueue()
|
||||
{
|
||||
LLViewerRegion* region = gAgent.getRegion();
|
||||
if (region)
|
||||
{
|
||||
std::string lookup_url=region->getCapability("GetCreatorExperiences");
|
||||
if(!lookup_url.empty())
|
||||
{
|
||||
LLHTTPClient::get(lookup_url, new CompileQueueExperienceResponder(getKey().asUUID()));
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return nextObject();
|
||||
}
|
||||
|
||||
|
||||
|
||||
void LLFloaterNotRunQueue::handleInventory(LLViewerObject* viewer_obj,
|
||||
LLInventoryObject::object_list_t* inv)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -81,13 +81,15 @@ protected:
|
|||
// returns true if this is done
|
||||
BOOL isDone() const;
|
||||
|
||||
virtual BOOL startQueue();
|
||||
|
||||
// go to the next object. If no objects left, it falls out
|
||||
// silently and waits to be killed by the deleteIfDone() callback.
|
||||
BOOL nextObject();
|
||||
BOOL popNext();
|
||||
|
||||
void setStartString(const std::string& s) { mStartString = s; }
|
||||
|
||||
|
||||
protected:
|
||||
// UI
|
||||
LLScrollListCtrl* mMessages;
|
||||
|
|
@ -131,6 +133,9 @@ public:
|
|||
|
||||
LLAssetUploadQueue* getUploadQueue() { return mUploadQueue; }
|
||||
|
||||
void experienceIdsReceived( const LLSD& content );
|
||||
BOOL hasExperience(const LLUUID& id)const;
|
||||
|
||||
protected:
|
||||
LLFloaterCompileQueue(const LLSD& key);
|
||||
virtual ~LLFloaterCompileQueue();
|
||||
|
|
@ -139,16 +144,21 @@ protected:
|
|||
virtual void handleInventory(LLViewerObject* viewer_obj,
|
||||
LLInventoryObject::object_list_t* inv);
|
||||
|
||||
static void requestAsset(struct LLScriptQueueData* datap, const LLSD& experience);
|
||||
|
||||
|
||||
// This is the callback for when each script arrives
|
||||
static void scriptArrived(LLVFS *vfs, const LLUUID& asset_id,
|
||||
LLAssetType::EType type,
|
||||
void* user_data, S32 status, LLExtStat ext_status);
|
||||
|
||||
virtual BOOL startQueue();
|
||||
protected:
|
||||
LLViewerInventoryItem::item_array_t mCurrentScripts;
|
||||
|
||||
private:
|
||||
LLAssetUploadQueue* mUploadQueue;
|
||||
uuid_list_t mExperienceIds;
|
||||
};
|
||||
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
|
|
|||
|
|
@ -2464,7 +2464,8 @@ The [[MARKETPLACE_CREATE_STORE_URL] Marketplace store] is returning errors.
|
|||
<string name="CompileQueueProblemDownloading">Problem downloading</string>
|
||||
<string name="CompileQueueInsufficientPermDownload">Insufficient permissions to download a script.</string>
|
||||
<string name="CompileQueueInsufficientPermFor">Insufficient permissions for</string>
|
||||
<string name="CompileQueueUnknownFailure">Unknown failure to download</string>
|
||||
<string name="CompileQueueUnknownFailure">Unknown failure to download</string>
|
||||
<string name="CompileNoExperiencePerm">Skipping script [SCRIPT] with Experience [EXPERIENCE].</string>
|
||||
<string name="CompileQueueTitle">Recompilation Progress</string>
|
||||
<string name="CompileQueueStart">recompile</string>
|
||||
<string name="ResetQueueTitle">Reset Progress</string>
|
||||
|
|
|
|||
Loading…
Reference in New Issue