Merge vmm up to 3a62616f3dd8bd512fcdfd29ef033b2505b11213

This commit is contained in:
Inusaito Sayori
2015-08-01 13:07:30 -04:00
committed by Lirusaito
parent 1d6e2b4182
commit fd4155f4b6
12 changed files with 185 additions and 123 deletions

View File

@@ -120,6 +120,7 @@ namespace {
LL_INFOS() << "Error setting log file to " << filename << LL_ENDL; LL_INFOS() << "Error setting log file to " << filename << LL_ENDL;
} }
mWantsTime = true; mWantsTime = true;
mWantsTags = true;
} }
~RecordToFile() ~RecordToFile()
@@ -600,7 +601,7 @@ namespace LLError
mFunctionString += std::string(mFunction) + ":"; mFunctionString += std::string(mFunction) + ":";
for (size_t i = 0; i < mTagCount; i++) for (size_t i = 0; i < mTagCount; i++)
{ {
mTagString += std::string("#") + mTags[i] + ((i == mTagCount - 1) ? "" : " "); mTagString += std::string("#") + mTags[i] + ((i == mTagCount - 1) ? "" : ",");
} }
} }
} }
@@ -983,13 +984,19 @@ namespace
} }
if (show_level && r->wantsLevel()) if (show_level && r->wantsLevel())
{ {
message_stream << site.mLevelString << " "; message_stream << site.mLevelString;
} }
if (show_tags && r->wantsTags()) if (show_tags && r->wantsTags())
{ {
message_stream << site.mTagString << " "; message_stream << site.mTagString;
}
if ((show_level && r->wantsLevel())||
(show_tags && r->wantsTags()))
{
message_stream << " ";
} }
if (show_function && r->wantsFunctionName()) if (show_function && r->wantsFunctionName())

View File

@@ -32,6 +32,7 @@
#include "llagentcamera.h" #include "llagentcamera.h"
#include "llagentwearablesfetch.h" #include "llagentwearablesfetch.h"
#include "llappearancemgr.h" #include "llappearancemgr.h"
#include "llattachmentsmgr.h"
#include "llcallbacklist.h" #include "llcallbacklist.h"
#include "llfloatercustomize.h" #include "llfloatercustomize.h"
#include "llfolderview.h" #include "llfolderview.h"

View File

@@ -530,6 +530,15 @@ LLUpdateAppearanceOnDestroy::~LLUpdateAppearanceOnDestroy()
} }
} }
LLRequestServerAppearanceUpdateOnDestroy::~LLRequestServerAppearanceUpdateOnDestroy()
{
LL_DEBUGS("Avatar") << "ATT requesting server appearance update" << LL_ENDL;
if (!LLApp::isExiting())
{
LLAppearanceMgr::instance().requestServerAppearanceUpdate();
}
}
U32 LLUpdateAppearanceOnDestroy::sActiveCallbacks = 0; U32 LLUpdateAppearanceOnDestroy::sActiveCallbacks = 0;
LLUpdateAppearanceAndEditWearableOnDestroy::LLUpdateAppearanceAndEditWearableOnDestroy(const LLUUID& item_id): LLUpdateAppearanceAndEditWearableOnDestroy::LLUpdateAppearanceAndEditWearableOnDestroy(const LLUUID& item_id):
@@ -1568,9 +1577,11 @@ void LLAppearanceMgr::wearItemsOnAvatar(const uuid_vec_t& item_ids_to_wear,
break; break;
case LLAssetType::AT_OBJECT: case LLAssetType::AT_OBJECT:
{ {
rez_attachment(item_to_wear, NULL, replace); LL_DEBUGS("Avatar") << "ATT wearing object. calling rez_attachment, item " << item_to_wear->getName()
} << " id " << item_to_wear->getLinkedUUID() << LL_ENDL;
rez_attachment(item_to_wear, NULL, replace);
}
break; break;
default: continue; default: continue;
@@ -3759,7 +3770,7 @@ void RequestAgentUpdateAppearanceResponder::onRequestRequested()
} }
// Actually send the request. // Actually send the request.
LL_DEBUGS("Avatar") << "Will send request for cof_version " << cof_version << LL_ENDL; LL_DEBUGS("Avatar") << "ATT sending bake request for cof_version " << cof_version << LL_ENDL;
mRetryPolicy->reset(); mRetryPolicy->reset();
sendRequest(); sendRequest();
} }

View File

@@ -321,6 +321,16 @@ private:
nullary_func_t mPostUpdateFunc; nullary_func_t mPostUpdateFunc;
}; };
class LLRequestServerAppearanceUpdateOnDestroy: public LLInventoryCallback
{
public:
LLRequestServerAppearanceUpdateOnDestroy() {}
~LLRequestServerAppearanceUpdateOnDestroy();
/* virtual */ void fire(const LLUUID& item_id) {}
};
// [SL:KB] - Patch: Appearance-SyncAttach | Checked: 2010-08-31 (Catznip-2.1)
class LLUpdateAppearanceAndEditWearableOnDestroy: public LLInventoryCallback class LLUpdateAppearanceAndEditWearableOnDestroy: public LLInventoryCallback
{ {
public: public:

View File

@@ -66,10 +66,6 @@ void fake_local_chat(std::string msg);
// Longest time, in seconds, to wait for all animations to stop playing // Longest time, in seconds, to wait for all animations to stop playing
const F32 MAX_WAIT_ANIM_SECS = 30.f; const F32 MAX_WAIT_ANIM_SECS = 30.f;
// If this gesture is a link, get the base gesture that this link points to,
// otherwise just return this id.
static const LLUUID& get_linked_uuid(const LLUUID& item_id);
// Lightweight constructor. // Lightweight constructor.
// init() does the heavy lifting. // init() does the heavy lifting.
LLGestureMgr::LLGestureMgr() LLGestureMgr::LLGestureMgr()
@@ -259,7 +255,7 @@ void LLGestureMgr::activateGestureWithAsset(const LLUUID& item_id,
BOOL inform_server, BOOL inform_server,
BOOL deactivate_similar) BOOL deactivate_similar)
{ {
const LLUUID& base_item_id = get_linked_uuid(item_id); const LLUUID& base_item_id = gInventory.getLinkedItemID(item_id);
if( !gAssetStorage ) if( !gAssetStorage )
{ {
@@ -307,7 +303,7 @@ void LLGestureMgr::activateGestureWithAsset(const LLUUID& item_id,
void LLGestureMgr::deactivateGesture(const LLUUID& item_id) void LLGestureMgr::deactivateGesture(const LLUUID& item_id)
{ {
const LLUUID& base_item_id = get_linked_uuid(item_id); const LLUUID& base_item_id = gInventory.getLinkedItemID(item_id);
item_map_t::iterator it = mActive.find(base_item_id); item_map_t::iterator it = mActive.find(base_item_id);
if (it == mActive.end()) if (it == mActive.end())
{ {
@@ -352,7 +348,7 @@ void LLGestureMgr::deactivateGesture(const LLUUID& item_id)
void LLGestureMgr::deactivateSimilarGestures(LLMultiGesture* in, const LLUUID& in_item_id) void LLGestureMgr::deactivateSimilarGestures(LLMultiGesture* in, const LLUUID& in_item_id)
{ {
const LLUUID& base_in_item_id = get_linked_uuid(in_item_id); const LLUUID& base_in_item_id = gInventory.getLinkedItemID(in_item_id);
uuid_vec_t gest_item_ids; uuid_vec_t gest_item_ids;
// Deactivate all gestures that match // Deactivate all gestures that match
@@ -439,7 +435,7 @@ void LLGestureMgr::deactivateSimilarGestures(LLMultiGesture* in, const LLUUID& i
BOOL LLGestureMgr::isGestureActive(const LLUUID& item_id) BOOL LLGestureMgr::isGestureActive(const LLUUID& item_id)
{ {
const LLUUID& base_item_id = get_linked_uuid(item_id); const LLUUID& base_item_id = gInventory.getLinkedItemID(item_id);
item_map_t::iterator it = mActive.find(base_item_id); item_map_t::iterator it = mActive.find(base_item_id);
return (it != mActive.end()); return (it != mActive.end());
} }
@@ -447,7 +443,7 @@ BOOL LLGestureMgr::isGestureActive(const LLUUID& item_id)
BOOL LLGestureMgr::isGesturePlaying(const LLUUID& item_id) BOOL LLGestureMgr::isGesturePlaying(const LLUUID& item_id)
{ {
const LLUUID& base_item_id = get_linked_uuid(item_id); const LLUUID& base_item_id = gInventory.getLinkedItemID(item_id);
item_map_t::iterator it = mActive.find(base_item_id); item_map_t::iterator it = mActive.find(base_item_id);
if (it == mActive.end()) return FALSE; if (it == mActive.end()) return FALSE;
@@ -469,7 +465,7 @@ BOOL LLGestureMgr::isGesturePlaying(LLMultiGesture* gesture)
void LLGestureMgr::replaceGesture(const LLUUID& item_id, LLMultiGesture* new_gesture, const LLUUID& asset_id) void LLGestureMgr::replaceGesture(const LLUUID& item_id, LLMultiGesture* new_gesture, const LLUUID& asset_id)
{ {
const LLUUID& base_item_id = get_linked_uuid(item_id); const LLUUID& base_item_id = gInventory.getLinkedItemID(item_id);
item_map_t::iterator it = mActive.find(base_item_id); item_map_t::iterator it = mActive.find(base_item_id);
if (it == mActive.end()) if (it == mActive.end())
{ {
@@ -510,7 +506,7 @@ void LLGestureMgr::replaceGesture(const LLUUID& item_id, LLMultiGesture* new_ges
void LLGestureMgr::replaceGesture(const LLUUID& item_id, const LLUUID& new_asset_id) void LLGestureMgr::replaceGesture(const LLUUID& item_id, const LLUUID& new_asset_id)
{ {
const LLUUID& base_item_id = get_linked_uuid(item_id); const LLUUID& base_item_id = gInventory.getLinkedItemID(item_id);
item_map_t::iterator it = LLGestureMgr::instance().mActive.find(base_item_id); item_map_t::iterator it = LLGestureMgr::instance().mActive.find(base_item_id);
if (it == mActive.end()) if (it == mActive.end())
@@ -613,7 +609,7 @@ void LLGestureMgr::playGesture(LLMultiGesture* gesture, bool local)
// Convenience function that looks up the item_id for you. // Convenience function that looks up the item_id for you.
void LLGestureMgr::playGesture(const LLUUID& item_id, bool local) void LLGestureMgr::playGesture(const LLUUID& item_id, bool local)
{ {
const LLUUID& base_item_id = get_linked_uuid(item_id); const LLUUID& base_item_id = gInventory.getLinkedItemID(item_id);
item_map_t::iterator it = mActive.find(base_item_id); item_map_t::iterator it = mActive.find(base_item_id);
if (it == mActive.end()) return; if (it == mActive.end()) return;
@@ -1337,7 +1333,7 @@ void LLGestureMgr::stopGesture(LLMultiGesture* gesture)
void LLGestureMgr::stopGesture(const LLUUID& item_id) void LLGestureMgr::stopGesture(const LLUUID& item_id)
{ {
const LLUUID& base_item_id = get_linked_uuid(item_id); const LLUUID& base_item_id = gInventory.getLinkedItemID(item_id);
item_map_t::iterator it = mActive.find(base_item_id); item_map_t::iterator it = mActive.find(base_item_id);
if (it == mActive.end()) return; if (it == mActive.end()) return;
@@ -1493,13 +1489,4 @@ void LLGestureMgr::done()
} }
} }
// static
const LLUUID& get_linked_uuid(const LLUUID &item_id)
{
LLViewerInventoryItem* item = gInventory.getItem(item_id);
if (item && item->getIsLinkType())
{
return item->getLinkedUUID();
}
return item_id;
}

View File

@@ -99,6 +99,34 @@ void LLInventoryAction::callback_copySelected(const LLSD& notification, const LL
} }
} }
// Succeeds iff all selected items are bridges to objects, in which
// case returns their corresponding uuids.
bool get_selection_object_uuids(LLFolderView *root, uuid_vec_t& ids)
{
uuid_vec_t results;
//S32 no_object = 0;
std::set<LLUUID> selectedItems = root->getSelectionList();
for(std::set<LLUUID>::iterator it = selectedItems.begin(); it != selectedItems.end(); ++it)
{
const LLUUID& id(*it);
if(id.notNull())
{
results.push_back(id);
}
else
{
return false; //non_object++;
}
}
//if (non_object == 0)
{
ids = results;
return true;
}
//return false;
}
bool LLInventoryAction::doToSelected(LLFolderView* root, std::string action, BOOL user_confirm) bool LLInventoryAction::doToSelected(LLFolderView* root, std::string action, BOOL user_confirm)
{ {
if (!root) if (!root)
@@ -206,18 +234,31 @@ bool LLInventoryAction::doToSelected(LLFolderView* root, std::string action, BOO
std::set<LLUUID>::iterator set_iter; std::set<LLUUID>::iterator set_iter;
for (set_iter = selected_items.begin(); set_iter != selected_items.end(); ++set_iter)
// This rather warty piece of code is to allow items to be removed
// from the avatar in a batch, eliminating redundant
// updateAppearanceFromCOF() requests further down the line. (MAINT-4918)
//
// There are probably other cases where similar batching would be
// desirable, but the current item-by-item performAction()
// approach would need to be reworked.
uuid_vec_t object_uuids_to_remove;
if (isRemoveAction(action) && get_selection_object_uuids(root, object_uuids_to_remove))
{ {
LLFolderViewItem* folder_item = root->getItemByID(*set_iter); LLAppearanceMgr::instance().removeItemsFromAvatar(object_uuids_to_remove);
if(!folder_item) continue;
LLInvFVBridge* bridge = (LLInvFVBridge*)folder_item->getListener();
if(!bridge) continue;
bridge->performAction(model, action);
} }
else
{
for (set_iter = selected_items.begin(); set_iter != selected_items.end(); ++set_iter)
{
LLFolderViewItem* folder_item = root->getItemByID(*set_iter);
if(!folder_item) continue;
LLInvFVBridge* bridge = (LLInvFVBridge*)folder_item->getListener();
if(!bridge) continue;
// Update the marketplace listings that have been affected by the operation bridge->performAction(model, action);
updateMarketplaceFolders(); }
}
LLFloater::setFloaterHost(NULL); LLFloater::setFloaterHost(NULL);
if (multi_floaterp) if (multi_floaterp)
@@ -239,10 +280,16 @@ void LLInventoryAction::buildMarketplaceFolders(LLFolderView* root)
// Note: do not however put the marketplace listings root itself in this list or the whole marketplace data will be rebuilt. // Note: do not however put the marketplace listings root itself in this list or the whole marketplace data will be rebuilt.
sMarketplaceFolders.clear(); sMarketplaceFolders.clear();
const LLUUID& marketplacelistings_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MARKETPLACE_LISTINGS, false); const LLUUID& marketplacelistings_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MARKETPLACE_LISTINGS, false);
if (marketplacelistings_id.isNull())
{
return;
}
std::set<LLUUID> selected_items = root->getSelectionList(); std::set<LLUUID> selected_items = root->getSelectionList();
for (std::set<LLUUID>::const_iterator set_iter = selected_items.begin(); set_iter != selected_items.end(); ++set_iter) for (std::set<LLUUID>::const_iterator set_iter = selected_items.begin(); set_iter != selected_items.end(); ++set_iter)
{ {
const LLInventoryObject* obj(gInventory.getObject(*set_iter)); const LLInventoryObject* obj(gInventory.getObject(*set_iter));
if (!obj) continue;
if (gInventory.isObjectDescendentOf(obj->getParentUUID(), marketplacelistings_id)) if (gInventory.isObjectDescendentOf(obj->getParentUUID(), marketplacelistings_id))
{ {
const LLUUID& parent_id = obj->getParentUUID(); const LLUUID& parent_id = obj->getParentUUID();

View File

@@ -6162,12 +6162,13 @@ void rez_attachment(LLViewerInventoryItem* item, LLViewerJointAttachment* attach
// Check for duplicate request. // Check for duplicate request.
if (isAgentAvatarValid() && if (isAgentAvatarValid() &&
(gAgentAvatarp->attachmentWasRequested(item_id) || gAgentAvatarp->isWearingAttachment(item_id))
gAgentAvatarp->isWearingAttachment(item_id)))
{ {
LL_WARNS() << "duplicate attachment request, ignoring" << LL_ENDL; LL_WARNS() << "ATT duplicate attachment request, ignoring" << LL_ENDL;
return; return;
} }
LL_DEBUGS("Avatar") << "ATT add rez request for " << item->getName() << " id " << item_id << LL_ENDL;
gAgentAvatarp->addAttachmentRequest(item_id); gAgentAvatarp->addAttachmentRequest(item_id);
S32 attach_pt = 0; S32 attach_pt = 0;
@@ -6232,27 +6233,6 @@ bool confirm_attachment_rez(const LLSD& notification, const LLSD& response)
if (itemp) if (itemp)
{ {
/*
{
U8 attachment_pt = notification["payload"]["attachment_point"].asInteger();
LLMessageSystem* msg = gMessageSystem;
msg->newMessageFast(_PREHASH_RezSingleAttachmentFromInv);
msg->nextBlockFast(_PREHASH_AgentData);
msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
msg->nextBlockFast(_PREHASH_ObjectData);
msg->addUUIDFast(_PREHASH_ItemID, itemp->getUUID());
msg->addUUIDFast(_PREHASH_OwnerID, itemp->getPermissions().getOwner());
msg->addU8Fast(_PREHASH_AttachmentPt, attachment_pt);
pack_permissions_slam(msg, itemp->getFlags(), itemp->getPermissions());
msg->addStringFast(_PREHASH_Name, itemp->getName());
msg->addStringFast(_PREHASH_Description, itemp->getDescription());
msg->sendReliable(gAgent.getRegion()->getHost());
return false;
}
*/
// Queue up attachments to be sent in next idle tick, this way the // Queue up attachments to be sent in next idle tick, this way the
// attachments are batched up all into one message versus each attachment // attachments are batched up all into one message versus each attachment
// being sent in its own separate attachments message. // being sent in its own separate attachments message.

View File

@@ -719,4 +719,10 @@ public:
virtual void groupFilterContextMenu(folder_view_item_deque& selected_items, LLMenuGL& menu); virtual void groupFilterContextMenu(folder_view_item_deque& selected_items, LLMenuGL& menu);
}; };
// Helper functions to classify actions.
bool isAddAction(const std::string& action);
bool isRemoveAction(const std::string& action);
bool isMarketplaceCopyAction(const std::string& action);
bool isMarketplaceSendAction(const std::string& action);
#endif // LL_LLINVENTORYBRIDGE_H #endif // LL_LLINVENTORYBRIDGE_H

View File

@@ -291,6 +291,11 @@ void update_marketplace_category(const LLUUID& cur_uuid, bool perform_consistenc
LLNotificationsUtil::add("AlertMerchantVersionFolderEmpty"); LLNotificationsUtil::add("AlertMerchantVersionFolderEmpty");
LLMarketplaceData::instance().activateListing(listing_uuid, false,1); LLMarketplaceData::instance().activateListing(listing_uuid, false,1);
} }
else if (version_folder_uuid.notNull() && (count_descendants_items(version_folder_uuid) == 0))
{
LL_INFOS("SLM") << "Unlist as the version folder is empty of any item!!" << LL_ENDL;
LLMarketplaceData::instance().activateListing(listing_uuid, false);
}
} }
// Check if the count on hand needs to be updated on SLM // Check if the count on hand needs to be updated on SLM

View File

@@ -34,6 +34,7 @@
#include "llinventoryfunctions.h" #include "llinventoryfunctions.h"
#include "llinventoryobserver.h" #include "llinventoryobserver.h"
#include "llnotificationsutil.h" #include "llnotificationsutil.h"
#include "llsdserialize.h"
#include "lltimer.h" #include "lltimer.h"
#include "lltrans.h" #include "lltrans.h"
#include "llviewercontrol.h" #include "llviewercontrol.h"
@@ -214,8 +215,8 @@ protected:
log_SLM_infos("Get /merchant", getStatus(), "User is a merchant"); log_SLM_infos("Get /merchant", getStatus(), "User is a merchant");
LLMarketplaceData::instance().setSLMStatus(MarketplaceStatusCodes::MARKET_PLACE_MERCHANT); LLMarketplaceData::instance().setSLMStatus(MarketplaceStatusCodes::MARKET_PLACE_MERCHANT);
} }
virtual char const* getName() const { return "LLSLMGetMerchantResponder"; } virtual char const* getName() const { return "LLSLMGetMerchantResponder"; }
}; };
class LLSLMGetListingsResponder : public LLHTTPClient::ResponderWithCompleted class LLSLMGetListingsResponder : public LLHTTPClient::ResponderWithCompleted
@@ -288,7 +289,6 @@ public:
update_marketplace_category(mExpectedFolderId, false); update_marketplace_category(mExpectedFolderId, false);
gInventory.notifyObservers(); gInventory.notifyObservers();
} }
virtual char const* getName() const { return "LLSLMGetListingsResponder"; } virtual char const* getName() const { return "LLSLMGetListingsResponder"; }
private: private:
LLUUID mExpectedFolderId; LLUUID mExpectedFolderId;
@@ -356,7 +356,6 @@ public:
it++; it++;
} }
} }
virtual char const* getName() const { return "LLSLMCreateListingsResponder"; } virtual char const* getName() const { return "LLSLMCreateListingsResponder"; }
private: private:
LLUUID mExpectedFolderId; LLUUID mExpectedFolderId;
@@ -439,7 +438,6 @@ public:
it++; it++;
} }
} }
virtual char const* getName() const { return "LLSLMGetListingResponder"; } virtual char const* getName() const { return "LLSLMGetListingResponder"; }
private: private:
LLUUID mExpectedFolderId; LLUUID mExpectedFolderId;
@@ -525,7 +523,6 @@ public:
it++; it++;
} }
} }
virtual char const* getName() const { return "LLSLMUpdateListingsResponder"; } virtual char const* getName() const { return "LLSLMUpdateListingsResponder"; }
private: private:
LLUUID mExpectedFolderId; LLUUID mExpectedFolderId;
@@ -607,7 +604,7 @@ public:
update_marketplace_category(folder_id, false); update_marketplace_category(folder_id, false);
gInventory.notifyObservers(); gInventory.notifyObservers();
// the stock count needs to be updated with the new local count now // The stock count needs to be updated with the new local count now
LLMarketplaceData::instance().updateCountOnHand(folder_id,1); LLMarketplaceData::instance().updateCountOnHand(folder_id,1);
it++; it++;
@@ -689,11 +686,10 @@ namespace LLMarketplaceImport
{ {
// Basic interface for this namespace // Basic interface for this namespace
bool hasSessionCookie(); bool hasSessionCookie();
bool inProgress(); bool inProgress();
bool resultPending(); bool resultPending();
U32 getResultStatus(); S32 getResultStatus();
const LLSD& getResults(); const LLSD& getResults();
bool establishMarketplaceSessionCookie(); bool establishMarketplaceSessionCookie();
@@ -707,7 +703,7 @@ namespace LLMarketplaceImport
static bool sImportInProgress = false; static bool sImportInProgress = false;
static bool sImportPostPending = false; static bool sImportPostPending = false;
static bool sImportGetPending = false; static bool sImportGetPending = false;
static U32 sImportResultStatus = 0; static S32 sImportResultStatus = 0;
static LLSD sImportResults = LLSD::emptyMap(); static LLSD sImportResults = LLSD::emptyMap();
static LLTimer slmGetTimer; static LLTimer slmGetTimer;
@@ -717,30 +713,32 @@ namespace LLMarketplaceImport
class LLImportPostResponder : public LLHTTPClient::ResponderWithCompleted class LLImportPostResponder : public LLHTTPClient::ResponderWithCompleted
{ {
LOG_CLASS(LLImportPostResponder);
public: public:
/*virtual*/ void httpCompleted(void) /*virtual*/ void httpCompleted()
{ {
slmPostTimer.stop(); slmPostTimer.stop();
if (gSavedSettings.getBOOL("InventoryOutboxLogging")) if (gSavedSettings.getBOOL("InventoryOutboxLogging"))
{ {
LL_INFOS() << " SLM POST status: " << mStatus << LL_ENDL; LL_INFOS() << " SLM [timer:" << slmPostTimer.getElapsedTimeF32() << "] "
LL_INFOS() << " SLM POST reason: " << mReason << LL_ENDL; << dumpResponse() << LL_ENDL;
LL_INFOS() << " SLM POST content: " << mContent.asString() << LL_ENDL;
LL_INFOS() << " SLM POST timer: " << slmPostTimer.getElapsedTimeF32() << LL_ENDL;
} }
// MAINT-2301 : we determined we can safely ignore that error in that context S32 status = getStatus();
if (mStatus == MarketplaceErrorCodes::IMPORT_JOB_TIMEOUT) if ((status == MarketplaceErrorCodes::IMPORT_REDIRECT) ||
(status == MarketplaceErrorCodes::IMPORT_AUTHENTICATION_ERROR) ||
// MAINT-2301 : we determined we can safely ignore that error in that context
(status == MarketplaceErrorCodes::IMPORT_JOB_TIMEOUT))
{ {
if (gSavedSettings.getBOOL("InventoryOutboxLogging")) if (gSavedSettings.getBOOL("InventoryOutboxLogging"))
{ {
LL_INFOS() << " SLM POST : Ignoring time out status and treating it as success" << LL_ENDL; LL_INFOS() << " SLM POST : Ignoring time out status and treating it as success" << LL_ENDL;
} }
mStatus = MarketplaceErrorCodes::IMPORT_DONE; status = MarketplaceErrorCodes::IMPORT_DONE;
} }
if (mStatus >= MarketplaceErrorCodes::IMPORT_BAD_REQUEST) if (status >= MarketplaceErrorCodes::IMPORT_BAD_REQUEST)
{ {
if (gSavedSettings.getBOOL("InventoryOutboxLogging")) if (gSavedSettings.getBOOL("InventoryOutboxLogging"))
{ {
@@ -749,10 +747,10 @@ namespace LLMarketplaceImport
sMarketplaceCookie.clear(); sMarketplaceCookie.clear();
} }
sImportInProgress = (mStatus == MarketplaceErrorCodes::IMPORT_DONE); sImportInProgress = (status == MarketplaceErrorCodes::IMPORT_DONE);
sImportPostPending = false; sImportPostPending = false;
sImportResultStatus = mStatus; sImportResultStatus = status;
sImportId = mContent; sImportId = getContent();
} }
/*virtual*/ char const* getName(void) const { return "LLImportPostResponder"; } /*virtual*/ char const* getName(void) const { return "LLImportPostResponder"; }
@@ -760,6 +758,7 @@ namespace LLMarketplaceImport
class LLImportGetResponder : public LLHTTPClient::ResponderWithCompleted class LLImportGetResponder : public LLHTTPClient::ResponderWithCompleted
{ {
LOG_CLASS(LLImportGetResponder);
public: public:
/*virtual*/ bool needsHeaders(void) const { return true; } /*virtual*/ bool needsHeaders(void) const { return true; }
@@ -779,39 +778,38 @@ namespace LLMarketplaceImport
} }
} }
/*virtual*/ void httpCompleted(void) /*virtual*/ void httpCompleted()
{ {
slmGetTimer.stop(); slmGetTimer.stop();
if (gSavedSettings.getBOOL("InventoryOutboxLogging")) if (gSavedSettings.getBOOL("InventoryOutboxLogging"))
{ {
LL_INFOS() << " SLM GET status: " << mStatus << LL_ENDL; LL_INFOS() << " SLM [timer:" << slmGetTimer.getElapsedTimeF32() << "] "
LL_INFOS() << " SLM GET reason: " << mReason << LL_ENDL; << dumpResponse() << LL_ENDL;
LL_INFOS() << " SLM GET content: " << mContent.asString() << LL_ENDL;
LL_INFOS() << " SLM GET timer: " << slmGetTimer.getElapsedTimeF32() << LL_ENDL;
} }
// MAINT-2452 : Do not clear the cookie on IMPORT_DONE_WITH_ERRORS : Happens when trying to import objects with wrong permissions // MAINT-2452 : Do not clear the cookie on IMPORT_DONE_WITH_ERRORS : Happens when trying to import objects with wrong permissions
// ACME-1221 : Do not clear the cookie on IMPORT_NOT_FOUND : Happens for newly created Merchant accounts that are initially empty // ACME-1221 : Do not clear the cookie on IMPORT_NOT_FOUND : Happens for newly created Merchant accounts that are initially empty
if ((mStatus >= MarketplaceErrorCodes::IMPORT_BAD_REQUEST) && S32 status = getStatus();
(mStatus != MarketplaceErrorCodes::IMPORT_DONE_WITH_ERRORS) && if ((status >= MarketplaceErrorCodes::IMPORT_BAD_REQUEST) &&
(mStatus != MarketplaceErrorCodes::IMPORT_NOT_FOUND)) (status != MarketplaceErrorCodes::IMPORT_DONE_WITH_ERRORS) &&
(status != MarketplaceErrorCodes::IMPORT_NOT_FOUND))
{ {
if (gSavedSettings.getBOOL("InventoryOutboxLogging")) if (gSavedSettings.getBOOL("InventoryOutboxLogging"))
{ {
LL_INFOS() << " SLM GET clearing marketplace cookie due to client or server error (" << mStatus << " / " << mReason << ")." << LL_ENDL; LL_INFOS() << " SLM GET clearing marketplace cookie due to client or server error" << LL_ENDL;
} }
sMarketplaceCookie.clear(); sMarketplaceCookie.clear();
} }
else if (gSavedSettings.getBOOL("InventoryOutboxLogging") && (mStatus >= MarketplaceErrorCodes::IMPORT_BAD_REQUEST)) else if (gSavedSettings.getBOOL("InventoryOutboxLogging") && (status >= MarketplaceErrorCodes::IMPORT_BAD_REQUEST))
{ {
LL_INFOS() << " SLM GET : Got error status = " << mStatus << ", but marketplace cookie not cleared." << LL_ENDL; LL_INFOS() << " SLM GET : Got error status = " << status << ", but marketplace cookie not cleared." << LL_ENDL;
} }
sImportInProgress = (mStatus == MarketplaceErrorCodes::IMPORT_PROCESSING); sImportInProgress = (status == MarketplaceErrorCodes::IMPORT_PROCESSING);
sImportGetPending = false; sImportGetPending = false;
sImportResultStatus = mStatus; sImportResultStatus = status;
sImportResults = mContent; sImportResults = getContent();
} }
/*virtual*/ char const* getName(void) const { return "LLImportGetResponder"; } /*virtual*/ char const* getName(void) const { return "LLImportGetResponder"; }
@@ -834,7 +832,7 @@ namespace LLMarketplaceImport
return (sImportPostPending || sImportGetPending); return (sImportPostPending || sImportGetPending);
} }
U32 getResultStatus() S32 getResultStatus()
{ {
return sImportResultStatus; return sImportResultStatus;
} }
@@ -871,8 +869,10 @@ namespace LLMarketplaceImport
if (gSavedSettings.getBOOL("InventoryOutboxLogging")) if (gSavedSettings.getBOOL("InventoryOutboxLogging"))
{ {
LL_INFOS() << " SLM GET: establishMarketplaceSessionCookie, LLHTTPClient::get, url = " << url << LL_ENDL; LL_INFOS() << " SLM GET: establishMarketplaceSessionCookie, LLHTTPClient::get, url = " << url << LL_ENDL;
std::stringstream str;
str << headers; //LLSDSerialize::toPrettyXML(headers, str);
LL_INFOS() << " SLM GET: headers " << LL_ENDL; LL_INFOS() << " SLM GET: headers " << LL_ENDL;
LL_INFOS() << headers << LL_ENDL; LL_INFOS() << str.str() << LL_ENDL;
} }
slmGetTimer.start(); slmGetTimer.start();
@@ -898,14 +898,17 @@ namespace LLMarketplaceImport
AIHTTPHeaders headers; AIHTTPHeaders headers;
headers.addHeader("Accept", "*/*"); headers.addHeader("Accept", "*/*");
headers.addHeader("Cookie", sMarketplaceCookie); headers.addHeader("Cookie", sMarketplaceCookie);
// *TODO: Why are we setting Content-Type for a GET request?
headers.addHeader("Content-Type", "application/llsd+xml"); headers.addHeader("Content-Type", "application/llsd+xml");
headers.addHeader("User-Agent", LLViewerMedia::getCurrentUserAgent()); headers.addHeader("User-Agent", LLViewerMedia::getCurrentUserAgent());
if (gSavedSettings.getBOOL("InventoryOutboxLogging")) if (gSavedSettings.getBOOL("InventoryOutboxLogging"))
{ {
LL_INFOS() << " SLM GET: pollStatus, LLHTTPClient::get, url = " << url << LL_ENDL; LL_INFOS() << " SLM GET: pollStatus, LLHTTPClient::get, url = " << url << LL_ENDL;
std::stringstream str;
str << headers; //LLSDSerialize::toPrettyXML(headers, str);
LL_INFOS() << " SLM GET: headers " << LL_ENDL; LL_INFOS() << " SLM GET: headers " << LL_ENDL;
LL_INFOS() << headers << LL_ENDL; LL_INFOS() << str.str() << LL_ENDL;
} }
slmGetTimer.start(); slmGetTimer.start();
@@ -940,8 +943,10 @@ namespace LLMarketplaceImport
if (gSavedSettings.getBOOL("InventoryOutboxLogging")) if (gSavedSettings.getBOOL("InventoryOutboxLogging"))
{ {
LL_INFOS() << " SLM POST: triggerImport, LLHTTPClient::post, url = " << url << LL_ENDL; LL_INFOS() << " SLM POST: triggerImport, LLHTTPClient::post, url = " << url << LL_ENDL;
std::stringstream str;
str << headers; //LLSDSerialize::toPrettyXML(headers, str);
LL_INFOS() << " SLM POST: headers " << LL_ENDL; LL_INFOS() << " SLM POST: headers " << LL_ENDL;
LL_INFOS() << headers << LL_ENDL; LL_INFOS() << str.str() << LL_ENDL;
} }
slmPostTimer.start(); slmPostTimer.start();
@@ -967,7 +972,6 @@ void LLMarketplaceInventoryImporter::update()
if (update_timer.hasExpired()) if (update_timer.hasExpired())
{ {
LLMarketplaceInventoryImporter::instance().updateImport(); LLMarketplaceInventoryImporter::instance().updateImport();
//static LLCachedControl<F32> MARKET_IMPORTER_UPDATE_FREQUENCY("MarketImporterUpdateFreq", 1.0f);
update_timer.setTimerExpirySec(MARKET_IMPORTER_UPDATE_FREQUENCY); update_timer.setTimerExpirySec(MARKET_IMPORTER_UPDATE_FREQUENCY);
} }
} }
@@ -1114,12 +1118,12 @@ void LLMarketplaceInventoryImporter::updateImport()
} }
} }
} }
}
// Make sure we trigger the status change with the final state (in case of auto trigger after initialize) // Make sure we trigger the status change with the final state (in case of auto trigger after initialize)
if (mStatusChangedSignal) if (mStatusChangedSignal)
{ {
(*mStatusChangedSignal)(mImportInProgress); (*mStatusChangedSignal)(mImportInProgress);
}
} }
} }
@@ -1197,7 +1201,7 @@ void LLMarketplaceInventoryObserver::changed(U32 mask)
{ {
// If it's not a category, it's an item... // If it's not a category, it's an item...
LLInventoryItem* item = (LLInventoryItem*)(obj); LLInventoryItem* item = (LLInventoryItem*)(obj);
// If it's a no copy item, we may need to update the label count of marketplace listing // If it's a no copy item, we may need to update the label count of marketplace listings
if (!item->getPermissions().allowOperationBy(PERM_COPY, gAgent.getID(), gAgent.getGroupID())) if (!item->getPermissions().allowOperationBy(PERM_COPY, gAgent.getID(), gAgent.getGroupID()))
{ {
LLMarketplaceData::instance().setDirtyCount(); LLMarketplaceData::instance().setDirtyCount();
@@ -1313,7 +1317,7 @@ void LLMarketplaceData::getSLMListing(S32 listing_id)
// Send request // Send request
std::string url = getSLMConnectURL("/listing/") + llformat("%d", listing_id); std::string url = getSLMConnectURL("/listing/") + llformat("%d", listing_id);
log_SLM_infos("LLHTTPClient::get", url, ""); log_SLM_infos("LLHTTPClient::get", url, "");
const LLUUID folder_id = LLMarketplaceData::instance().getListingFolder(listing_id); LLUUID folder_id = LLMarketplaceData::instance().getListingFolder(listing_id);
setUpdating(folder_id, true); setUpdating(folder_id, true);
LLHTTPClient::get(url, new LLSLMGetListingResponder(folder_id), headers); LLHTTPClient::get(url, new LLSLMGetListingResponder(folder_id), headers);
} }
@@ -1508,7 +1512,7 @@ bool LLMarketplaceData::clearListing(const LLUUID& folder_id, S32 depth)
depth = depth_nesting_in_marketplace(folder_id); depth = depth_nesting_in_marketplace(folder_id);
} }
// Folder id can be the root of the listing of not so we need to retrieve the root first // Folder id can be the root of the listing or not so we need to retrieve the root first
LLUUID listing_uuid = (isListed(folder_id) ? folder_id : nested_parent_id(folder_id, depth)); LLUUID listing_uuid = (isListed(folder_id) ? folder_id : nested_parent_id(folder_id, depth));
S32 listing_id = getListingID(listing_uuid); S32 listing_id = getListingID(listing_uuid);
@@ -1641,7 +1645,7 @@ bool LLMarketplaceData::setVersionFolder(const LLUUID& folder_id, const LLUUID&
count = 0; count = 0;
} }
// Post the listing update requesst to SLM // Post the listing update request to SLM
updateSLMListing(listing_uuid, listing_id, version_id, is_listed, count); updateSLMListing(listing_uuid, listing_id, version_id, is_listed, count);
return true; return true;
@@ -1682,6 +1686,7 @@ bool LLMarketplaceData::updateCountOnHand(const LLUUID& folder_id, S32 depth)
bool is_listed = getActivationState(listing_uuid); bool is_listed = getActivationState(listing_uuid);
LLUUID version_uuid = getVersionFolder(listing_uuid); LLUUID version_uuid = getVersionFolder(listing_uuid);
// Post the listing update request to SLM // Post the listing update request to SLM
updateSLMListing(listing_uuid, listing_id, version_uuid, is_listed, count); updateSLMListing(listing_uuid, listing_id, version_uuid, is_listed, count);
@@ -1713,7 +1718,6 @@ bool LLMarketplaceData::associateListing(const LLUUID& folder_id, const LLUUID&
bool LLMarketplaceData::addListing(const LLUUID& folder_id, S32 listing_id, const LLUUID& version_id, bool is_listed, const std::string& edit_url, S32 count) bool LLMarketplaceData::addListing(const LLUUID& folder_id, S32 listing_id, const LLUUID& version_id, bool is_listed, const std::string& edit_url, S32 count)
{ {
mMarketplaceItems[folder_id] = LLMarketplaceTuple(folder_id, listing_id, version_id, is_listed); mMarketplaceItems[folder_id] = LLMarketplaceTuple(folder_id, listing_id, version_id, is_listed);
mMarketplaceItems[folder_id].mEditURL = edit_url; mMarketplaceItems[folder_id].mEditURL = edit_url;
mMarketplaceItems[folder_id].mCountOnHand = count; mMarketplaceItems[folder_id].mCountOnHand = count;
if (version_id.notNull()) if (version_id.notNull())
@@ -1757,7 +1761,7 @@ bool LLMarketplaceData::getActivationState(const LLUUID& folder_id)
{ {
// Listing folder case // Listing folder case
marketplace_items_list_t::iterator it = mMarketplaceItems.find(folder_id); marketplace_items_list_t::iterator it = mMarketplaceItems.find(folder_id);
if (isListed(folder_id)) if (it != mMarketplaceItems.end())
{ {
return (it->second).mIsActive; return (it->second).mIsActive;
} }
@@ -1818,7 +1822,7 @@ std::string LLMarketplaceData::getListingURL(const LLUUID& folder_id, S32 depth)
LLUUID listing_uuid = nested_parent_id(folder_id, depth); LLUUID listing_uuid = nested_parent_id(folder_id, depth);
marketplace_items_list_t::iterator it = mMarketplaceItems.find(folder_id); marketplace_items_list_t::iterator it = mMarketplaceItems.find(listing_uuid);
return (it == mMarketplaceItems.end() ? "" : (it->second).mEditURL); return (it == mMarketplaceItems.end() ? "" : (it->second).mEditURL);
} }
@@ -1854,16 +1858,16 @@ bool LLMarketplaceData::isInActiveFolder(const LLUUID& obj_id, S32 depth)
return (active && ((obj_id == version_uuid) || gInventory.isObjectDescendentOf(obj_id, version_uuid))); return (active && ((obj_id == version_uuid) || gInventory.isObjectDescendentOf(obj_id, version_uuid)));
} }
LLUUID LLMarketplaceData::getActiveFolder(const LLUUID& folder_id, S32 depth) LLUUID LLMarketplaceData::getActiveFolder(const LLUUID& obj_id, S32 depth)
{ {
// Evaluate the depth if it wasn't passed as a parameter // Evaluate the depth if it wasn't passed as a parameter
if (depth < 0) if (depth < 0)
{ {
depth = depth_nesting_in_marketplace(folder_id); depth = depth_nesting_in_marketplace(obj_id);
} }
LLUUID listing_uuid = nested_parent_id(folder_id, depth); LLUUID listing_uuid = nested_parent_id(obj_id, depth);
return (getActivationState(listing_uuid) ? getVersionFolder(listing_uuid) : LLUUID::null); return (getActivationState(listing_uuid) ? getVersionFolder(listing_uuid) : LLUUID::null);
} }
@@ -1873,7 +1877,6 @@ bool LLMarketplaceData::isUpdating(const LLUUID& folder_id, S32 depth)
if (depth < 0) if (depth < 0)
{ {
depth = depth_nesting_in_marketplace(folder_id); depth = depth_nesting_in_marketplace(folder_id);
} }
if ((depth <= 0) || (depth > 2)) if ((depth <= 0) || (depth > 2))
{ {

View File

@@ -1547,6 +1547,11 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
if (sent_parentp && (sent_parentp != this) && !sent_parentp->isDead()) if (sent_parentp && (sent_parentp != this) && !sent_parentp->isDead())
{ {
if (((LLViewerObject*)sent_parentp)->isAvatar())
{
//LL_DEBUGS("Avatar") << "ATT got object update for attachment " << LL_ENDL;
}
// //
// We have a viewer object for the parent, and it's not dead. // We have a viewer object for the parent, and it's not dead.
// Do the actual reparenting here. // Do the actual reparenting here.

View File

@@ -451,7 +451,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
compressed_dp.unpackU32(local_id, "LocalID"); compressed_dp.unpackU32(local_id, "LocalID");
compressed_dp.unpackU8(pcode, "PCode"); compressed_dp.unpackU8(pcode, "PCode");
} }
else else //OUT_TERSE_IMPROVED
{ {
compressed_dp.unpackU32(local_id, "LocalID"); compressed_dp.unpackU32(local_id, "LocalID");
getUUIDFromLocal(fullid, getUUIDFromLocal(fullid,
@@ -460,7 +460,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
gMessageSystem->getSenderPort()); gMessageSystem->getSenderPort());
if (fullid.isNull()) if (fullid.isNull())
{ {
// LL_WARNS() << "update for unknown localid " << local_id << " host " << gMessageSystem->getSender() << ":" << gMessageSystem->getSenderPort() << LL_ENDL; LL_DEBUGS() << "update for unknown localid " << local_id << " host " << gMessageSystem->getSender() << ":" << gMessageSystem->getSenderPort() << LL_ENDL;
mNumUnknownUpdates++; mNumUnknownUpdates++;
} }
} }