void LLInventoryTransactionObserver::changed(U32 mask) { if (mask & LLInventoryObserver::ADD) { // This could be it - see if we are processing a bulk update LLMessageSystem* msg = gMessageSystem; if (msg->getMessageName() && (0 == strcmp(msg->getMessageName(), "BulkUpdateInventory"))) { // we have a match for the message - now check the // transaction id. LLUUID id; msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_TransactionID, id); if (id == mTransactionID) { // woo hoo, we found it uuid_vec_t folders; uuid_vec_t items; S32 count; count = msg->getNumberOfBlocksFast(_PREHASH_FolderData); S32 i; for (i = 0; i < count; ++i) { msg->getUUIDFast(_PREHASH_FolderData, _PREHASH_FolderID, id, i); if (id.notNull()) { folders.push_back(id); } } count = msg->getNumberOfBlocksFast(_PREHASH_ItemData); for (i = 0; i < count; ++i) { msg->getUUIDFast(_PREHASH_ItemData, _PREHASH_ItemID, id, i); if (id.notNull()) { items.push_back(id); } } // call the derived class the implements this method. done(folders, items); } } } }
void LLInventoryAddedObserver::changed(U32 mask) { if (!(mask & LLInventoryObserver::ADD)) { return; } // *HACK: If this was in response to a packet off // the network, figure out which item was updated. LLMessageSystem* msg = gMessageSystem; std::string msg_name; if (mMessageName.empty()) { msg_name = msg->getMessageName(); } else { msg_name = mMessageName; } if (msg_name.empty()) { return; } // We only want newly created inventory items. JC if ( msg_name != "UpdateCreateInventoryItem") { return; } LLPointer<LLViewerInventoryItem> titem = new LLViewerInventoryItem; S32 num_blocks = msg->getNumberOfBlocksFast(_PREHASH_InventoryData); for (S32 i = 0; i < num_blocks; ++i) { titem->unpackMessage(msg, _PREHASH_InventoryData, i); if (!(titem->getUUID().isNull())) { //we don't do anything with null keys mAdded.push_back(titem->getUUID()); } } if (!mAdded.empty()) { done(); } }
void LLInventoryAddItemByAssetObserver::changed(U32 mask) { if(!(mask & LLInventoryObserver::ADD)) { return; } // nothing is watched if (mWatchedAssets.size() == 0) { return; } LLMessageSystem* msg = gMessageSystem; if (!(msg->getMessageName() && (0 == strcmp(msg->getMessageName(), "UpdateCreateInventoryItem")))) { // this is not our message return; // to prevent a crash. EXT-7921; } LLPointer<LLViewerInventoryItem> item = new LLViewerInventoryItem; S32 num_blocks = msg->getNumberOfBlocksFast(_PREHASH_InventoryData); for(S32 i = 0; i < num_blocks; ++i) { item->unpackMessage(msg, _PREHASH_InventoryData, i); const LLUUID& asset_uuid = item->getAssetUUID(); if (item->getUUID().notNull() && asset_uuid.notNull()) { if (isAssetWatched(asset_uuid)) { LL_DEBUGS("Inventory_Move") << "Found asset UUID: " << asset_uuid << LL_ENDL; mAddedItems.push_back(item->getUUID()); } } } if (mAddedItems.size() == mWatchedAssets.size()) { done(); LL_DEBUGS("Inventory_Move") << "All watched items are added & processed." << LL_ENDL; mAddedItems.clear(); // Unable to clean watched items here due to somebody can require to check them in current frame. // set dirty state to clean them while next watch cycle. mIsDirty = true; } }
// Checked: 2010-04-18 (RLVa-1.2.0e) | Added: RLVa-1.2.0e void RlvGiveToRLVTaskOffer::changed(U32 mask) { if (mask & LLInventoryObserver::ADD) { LLMessageSystem* pMsg = gMessageSystem; if ( (pMsg->getMessageName()) && (0 == strcmp(pMsg->getMessageName(), "BulkUpdateInventory")) ) { LLUUID idTransaction; pMsg->getUUIDFast(_PREHASH_AgentData, _PREHASH_TransactionID, idTransaction); if(m_idTransaction == idTransaction) { LLUUID idInvObject; for(S32 idxBlock = 0, cntBlock = pMsg->getNumberOfBlocksFast(_PREHASH_FolderData); idxBlock < cntBlock; idxBlock++) { pMsg->getUUIDFast(_PREHASH_FolderData, _PREHASH_FolderID, idInvObject, idxBlock); if ( (idInvObject.notNull()) && (std::find(m_Folders.begin(), m_Folders.end(), idInvObject) == m_Folders.end()) ) m_Folders.push_back(idInvObject); } done(); } } } }