summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/newview/rlvhandler.cpp23
1 files changed, 18 insertions, 5 deletions
diff --git a/indra/newview/rlvhandler.cpp b/indra/newview/rlvhandler.cpp
index 57275af54a..413d3758e4 100644
--- a/indra/newview/rlvhandler.cpp
+++ b/indra/newview/rlvhandler.cpp
@@ -243,13 +243,26 @@ ECmdRet ReplyHandler<EBehaviour::GetSitID>::onCommand(const RlvCommand& rlvCmd,
template<> template<>
ECmdRet ReplyHandler<EBehaviour::GetInv>::onCommand(const RlvCommand& rlvCmd, std::string& strReply)
{
- LLInventoryModel::cat_array_t* cats;
- LLInventoryModel::item_array_t* items;
- auto rlvFolderID = findDescendentCategoryIDByName(gInventory.getRootFolderID(), "#RLV");
- if (rlvFolderID == LLUUID::null)
+ auto folderID = findDescendentCategoryIDByName(gInventory.getRootFolderID(), "#RLV");
+ if (folderID == LLUUID::null)
return ECmdRet::FailedNoSharedRoot;
strReply = "";
- gInventory.getDirectDescendentsOf(rlvFolderID, cats, items);
+ LLInventoryModel::cat_array_t* cats;
+ LLInventoryModel::item_array_t* items;
+ std::vector<std::string> optionList;
+ auto option = rlvCmd.getOption();
+ if (!option.empty())
+ {
+ Util::parseStringList(option, optionList, "/");
+ auto optIter = optionList.begin();
+ for(; optionList.end() != optIter; ++optIter)
+ {
+ auto name = *optIter;
+ if (!name.empty())
+ folderID = findDescendentCategoryIDByName(folderID, name);
+ }
+ }
+ gInventory.getDirectDescendentsOf(folderID, cats, items);
auto iter = cats->begin();
for(; cats->end() != iter; ++iter)
{