From af6a85ef15a3de2d4051a012b4f06c0df510a858 Mon Sep 17 00:00:00 2001 From: Erik Kundiman Date: Thu, 10 Jul 2025 18:16:05 +0800 Subject: @getinv[:folder1/...]= implementation The collar I happen to have issued @getinv:.outfits/=98745923, so I just assume ignoring folders beginning with a dot only applies to the answer, not the command. --- indra/newview/rlvhandler.cpp | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) (limited to 'indra/newview/rlvhandler.cpp') 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::onCommand(const RlvCommand& rlvCmd, template<> template<> ECmdRet ReplyHandler::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 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) { -- cgit v1.2.3