void LLGiveInventory::doGiveInventoryCategory(const LLUUID& to_agent, const LLInventoryCategory* cat, const LLUUID& im_session_id) { if (!cat) return; llinfos << "LLGiveInventory::giveInventoryCategory() - " << cat->getUUID() << llendl; if (!isAgentAvatarValid()) return; // Test out how many items are being given. LLViewerInventoryCategory::cat_array_t cats; LLViewerInventoryItem::item_array_t items; LLGiveable giveable; gInventory.collectDescendentsIf(cat->getUUID(), cats, items, LLInventoryModel::EXCLUDE_TRASH, giveable); S32 count = cats.count(); bool complete = true; for(S32 i = 0; i < count; ++i) { if(!gInventory.isCategoryComplete(cats.get(i)->getUUID())) { complete = false; break; } } if(!complete) { LLNotificationsUtil::add("IncompleteInventory"); return; } count = items.count() + cats.count(); if(count > MAX_ITEMS) { LLNotificationsUtil::add("TooManyItems"); return; } else if(count == 0) { LLNotificationsUtil::add("NoItems"); return; } else { if(0 == giveable.countNoCopy()) { LLGiveInventory::commitGiveInventoryCategory(to_agent, cat, im_session_id); } else { LLSD args; args["COUNT"] = llformat("%d",giveable.countNoCopy()); LLSD payload; payload["agent_id"] = to_agent; payload["folder_id"] = cat->getUUID(); LLNotificationsUtil::add("CannotCopyCountItems", args, payload, &LLGiveInventory::handleCopyProtectedCategory); } } }
bool LLGiveInventory::doGiveInventoryCategory(const LLUUID& to_agent, const LLInventoryCategory* cat, const LLUUID& im_session_id, const std::string& notification_name) { if (!cat) { return false; } LL_INFOS() << "LLGiveInventory::giveInventoryCategory() - " << cat->getUUID() << LL_ENDL; if (!isAgentAvatarValid()) { return false; } bool give_successful = true; // Test out how many items are being given. LLViewerInventoryCategory::cat_array_t cats; LLViewerInventoryItem::item_array_t items; LLGiveable giveable; gInventory.collectDescendentsIf(cat->getUUID(), cats, items, LLInventoryModel::EXCLUDE_TRASH, giveable); S32 count = cats.size(); bool complete = true; for(S32 i = 0; i < count; ++i) { if(!gInventory.isCategoryComplete(cats.at(i)->getUUID())) { complete = false; break; } } if(!complete) { LLNotificationsUtil::add("IncompleteInventory"); give_successful = false; } count = items.size() + cats.size(); if(count > MAX_ITEMS) { LLNotificationsUtil::add("TooManyItems"); give_successful = false; } else if(count == 0) { LLNotificationsUtil::add("NoItems"); give_successful = false; } else if (give_successful) { if(0 == giveable.countNoCopy()) { give_successful = LLGiveInventory::commitGiveInventoryCategory(to_agent, cat, im_session_id); } else { LLSD args; args["COUNT"] = llformat("%d",giveable.countNoCopy()); LLSD payload; payload["agent_id"] = to_agent; payload["folder_id"] = cat->getUUID(); if (!notification_name.empty()) { payload["success_notification"] = notification_name; } LLNotificationsUtil::add("CannotCopyCountItems", args, payload, &LLGiveInventory::handleCopyProtectedCategory); give_successful = false; } } return give_successful; }