diff --git a/indra/newview/NACLfloaterexploresounds.cpp b/indra/newview/NACLfloaterexploresounds.cpp index c7f349c987..3de1368f62 100644 --- a/indra/newview/NACLfloaterexploresounds.cpp +++ b/indra/newview/NACLfloaterexploresounds.cpp @@ -75,9 +75,9 @@ bool NACLFloaterExploreSounds::postBuild() getChild("stop_btn")->setClickedCallback(boost::bind(&NACLFloaterExploreSounds::handleStop, this)); getChild("bl_btn")->setClickedCallback(boost::bind(&NACLFloaterExploreSounds::blacklistSound, this)); getChild("stop_locally_btn")->setClickedCallback(boost::bind(&NACLFloaterExploreSounds::handleStopLocally, this)); - getChild("block_avatar_attached_sounds_btn")->setClickedCallback(boost::bind(&NACLFloaterExploreSounds::blacklistAvatarSoundsByFlagWorn, this)); - getChild("block_avatar_rezzed_sounds_btn")->setClickedCallback(boost::bind(&NACLFloaterExploreSounds::blacklistAvatarSoundsByFlagRezzed, this)); - getChild("block_avatar_gesture_sounds_btn")->setClickedCallback(boost::bind(&NACLFloaterExploreSounds::blacklistAvatarSoundsByFlagGesture, this)); + getChild("block_avatar_worn_sounds_btn")->setClickedCallback(boost::bind(&NACLFloaterExploreSounds::blacklistAvatarSoundsByFlag, this, FSAssetBlacklist::eBlacklistFlag::WORN)); + getChild("block_avatar_rezzed_sounds_btn")->setClickedCallback(boost::bind(&NACLFloaterExploreSounds::blacklistAvatarSoundsByFlag, this, FSAssetBlacklist::eBlacklistFlag::REZZED)); + getChild("block_avatar_gesture_sounds_btn")->setClickedCallback(boost::bind(&NACLFloaterExploreSounds::blacklistAvatarSoundsByFlag, this, FSAssetBlacklist::eBlacklistFlag::GESTURE)); mHistoryScroller = getChild("sound_list"); mHistoryScroller->setCommitCallback(boost::bind(&NACLFloaterExploreSounds::handleSelection, this)); @@ -101,7 +101,7 @@ void NACLFloaterExploreSounds::handleSelection() childSetEnabled("play_locally_btn", num_selected); childSetEnabled("stop_btn", num_selected); childSetEnabled("bl_btn", num_selected); - childSetEnabled("block_avatar_attached_sounds_btn", num_selected); + childSetEnabled("block_avatar_worn_sounds_btn", num_selected); childSetEnabled("block_avatar_rezzed_sounds_btn", num_selected); childSetEnabled("block_avatar_gesture_sounds_btn", num_selected); } @@ -521,7 +521,7 @@ void NACLFloaterExploreSounds::onBlacklistAvatarNameCacheCallback(const LLUUID& } // add avatar attachments sounds to blacklist -void NACLFloaterExploreSounds::blacklistAvatarSoundsByFlagWorn() +void NACLFloaterExploreSounds::blacklistAvatarSoundsByFlag(FSAssetBlacklist::eBlacklistFlag flag) { std::vector selection = mHistoryScroller->getAllSelected(); std::vector::iterator selection_iter = selection.begin(); @@ -553,12 +553,12 @@ void NACLFloaterExploreSounds::blacklistAvatarSoundsByFlagWorn() } LLAvatarNameCache::callback_connection_t cb = LLAvatarNameCache::get( item.mOwnerID, - boost::bind(&NACLFloaterExploreSounds::onBlacklistAvatarSoundsByFlagWornNameCacheCallback, this, _1, _2, item.mOwnerID, region_name)); + boost::bind(&NACLFloaterExploreSounds::onBlacklistAvatarSoundsByFlagNameCacheCallback, this, _1, _2, item.mOwnerID, region_name, flag)); mBlacklistAvatarNameCacheConnections.insert(std::make_pair(item.mOwnerID, cb)); } } -void NACLFloaterExploreSounds::onBlacklistAvatarSoundsByFlagWornNameCacheCallback(const LLUUID& av_id, const LLAvatarName& av_name, const LLUUID& owner_id, const std::string& region_name) +void NACLFloaterExploreSounds::onBlacklistAvatarSoundsByFlagNameCacheCallback(const LLUUID& av_id, const LLAvatarName& av_name, const LLUUID& owner_id, const std::string& region_name, FSAssetBlacklist::eBlacklistFlag flag) { blacklist_avatar_name_cache_connection_map_t::iterator it = mBlacklistAvatarNameCacheConnections.find(av_id); if (it != mBlacklistAvatarNameCacheConnections.end()) @@ -569,109 +569,5 @@ void NACLFloaterExploreSounds::onBlacklistAvatarSoundsByFlagWornNameCacheCallbac } mBlacklistAvatarNameCacheConnections.erase(it); } - FSAssetBlacklist::getInstance()->addNewAvatarSoundsByFlagToBlacklist(owner_id, av_name.getCompleteName(), region_name, FSAssetBlacklist::eBlacklistFlag::WORN); -} - -// add avatar rezzed objects sounds to blacklist -void NACLFloaterExploreSounds::blacklistAvatarSoundsByFlagRezzed() -{ - std::vector selection = mHistoryScroller->getAllSelected(); - std::vector::iterator selection_iter = selection.begin(); - std::vector::iterator selection_end = selection.end(); - - for (; selection_iter != selection_end; ++selection_iter) - { - LLSoundHistoryItem item = getItem((*selection_iter)->getValue()); - if (item.mID.isNull()) - { - continue; - } - - std::string region_name; - LLViewerRegion* cur_region = gAgent.getRegion(); - if (cur_region) - { - region_name = cur_region->getName(); - } - - blacklist_avatar_name_cache_connection_map_t::iterator it = mBlacklistAvatarNameCacheConnections.find(item.mOwnerID); - if (it != mBlacklistAvatarNameCacheConnections.end()) - { - if (it->second.connected()) - { - it->second.disconnect(); - } - mBlacklistAvatarNameCacheConnections.erase(it); - } - LLAvatarNameCache::callback_connection_t cb = LLAvatarNameCache::get( - item.mOwnerID, - boost::bind(&NACLFloaterExploreSounds::onBlacklistAvatarSoundsByFlagRezzedNameCacheCallback, this, _1, _2, item.mOwnerID, region_name)); - mBlacklistAvatarNameCacheConnections.insert(std::make_pair(item.mOwnerID, cb)); - } -} - -void NACLFloaterExploreSounds::onBlacklistAvatarSoundsByFlagRezzedNameCacheCallback(const LLUUID& av_id, const LLAvatarName& av_name, const LLUUID& owner_id, const std::string& region_name) -{ - blacklist_avatar_name_cache_connection_map_t::iterator it = mBlacklistAvatarNameCacheConnections.find(av_id); - if (it != mBlacklistAvatarNameCacheConnections.end()) - { - if (it->second.connected()) - { - it->second.disconnect(); - } - mBlacklistAvatarNameCacheConnections.erase(it); - } - FSAssetBlacklist::getInstance()->addNewAvatarSoundsByFlagToBlacklist(owner_id, av_name.getCompleteName(), region_name, FSAssetBlacklist::eBlacklistFlag::REZZED); -} - -// add avatar attachments sounds to blacklist -void NACLFloaterExploreSounds::blacklistAvatarSoundsByFlagGesture() -{ - std::vector selection = mHistoryScroller->getAllSelected(); - std::vector::iterator selection_iter = selection.begin(); - std::vector::iterator selection_end = selection.end(); - - for (; selection_iter != selection_end; ++selection_iter) - { - LLSoundHistoryItem item = getItem((*selection_iter)->getValue()); - if (item.mID.isNull()) - { - continue; - } - - std::string region_name; - LLViewerRegion* cur_region = gAgent.getRegion(); - if (cur_region) - { - region_name = cur_region->getName(); - } - - blacklist_avatar_name_cache_connection_map_t::iterator it = mBlacklistAvatarNameCacheConnections.find(item.mOwnerID); - if (it != mBlacklistAvatarNameCacheConnections.end()) - { - if (it->second.connected()) - { - it->second.disconnect(); - } - mBlacklistAvatarNameCacheConnections.erase(it); - } - LLAvatarNameCache::callback_connection_t cb = LLAvatarNameCache::get( - item.mOwnerID, - boost::bind(&NACLFloaterExploreSounds::onBlacklistAvatarSoundsByFlagGestureNameCacheCallback, this, _1, _2, item.mOwnerID, region_name)); - mBlacklistAvatarNameCacheConnections.insert(std::make_pair(item.mOwnerID, cb)); - } -} - -void NACLFloaterExploreSounds::onBlacklistAvatarSoundsByFlagGestureNameCacheCallback(const LLUUID& av_id, const LLAvatarName& av_name, const LLUUID& owner_id, const std::string& region_name) -{ - blacklist_avatar_name_cache_connection_map_t::iterator it = mBlacklistAvatarNameCacheConnections.find(av_id); - if (it != mBlacklistAvatarNameCacheConnections.end()) - { - if (it->second.connected()) - { - it->second.disconnect(); - } - mBlacklistAvatarNameCacheConnections.erase(it); - } - FSAssetBlacklist::getInstance()->addNewAvatarSoundsByFlagToBlacklist(owner_id, av_name.getCompleteName(), region_name, FSAssetBlacklist::eBlacklistFlag::GESTURE); + FSAssetBlacklist::getInstance()->addNewItemToBlacklist(owner_id, av_name.getCompleteName(), region_name, LLAssetType::AT_SOUND, flag); } diff --git a/indra/newview/NACLfloaterexploresounds.h b/indra/newview/NACLfloaterexploresounds.h index e23c4d84b5..31078a0a2b 100644 --- a/indra/newview/NACLfloaterexploresounds.h +++ b/indra/newview/NACLfloaterexploresounds.h @@ -9,6 +9,7 @@ #include "lleventtimer.h" #include "llaudioengine.h" #include "llavatarnamecache.h" +#include "fsassetblacklist.h" class LLCheckBoxCtrl; class LLScrollListCtrl; @@ -32,9 +33,7 @@ private: void handleStopLocally(); void handleSelection(); void blacklistSound(); - void blacklistAvatarSoundsByFlagWorn(); - void blacklistAvatarSoundsByFlagRezzed(); - void blacklistAvatarSoundsByFlagGesture(); + void blacklistAvatarSoundsByFlag(FSAssetBlacklist::eBlacklistFlag flag); LLScrollListCtrl* mHistoryScroller; LLCheckBoxCtrl* mCollisionSounds; @@ -51,9 +50,7 @@ private: blacklist_avatar_name_cache_connection_map_t mBlacklistAvatarNameCacheConnections; void onBlacklistAvatarNameCacheCallback(const LLUUID& av_id, const LLAvatarName& av_name, const LLUUID& asset_id, const std::string& region_name); - void onBlacklistAvatarSoundsByFlagWornNameCacheCallback(const LLUUID& av_id, const LLAvatarName& av_name, const LLUUID& asset_id, const std::string& region_name); - void onBlacklistAvatarSoundsByFlagRezzedNameCacheCallback(const LLUUID& av_id, const LLAvatarName& av_name, const LLUUID& asset_id, const std::string& region_name); - void onBlacklistAvatarSoundsByFlagGestureNameCacheCallback(const LLUUID& av_id, const LLAvatarName& av_name, const LLUUID& asset_id, const std::string& region_name); + void onBlacklistAvatarSoundsByFlagNameCacheCallback(const LLUUID& av_id, const LLAvatarName& av_name, const LLUUID& asset_id, const std::string& region_name, FSAssetBlacklist::eBlacklistFlag flag); }; #endif diff --git a/indra/newview/fsassetblacklist.cpp b/indra/newview/fsassetblacklist.cpp index b0eb4c2a69..16cd507c88 100644 --- a/indra/newview/fsassetblacklist.cpp +++ b/indra/newview/fsassetblacklist.cpp @@ -72,7 +72,7 @@ void FSAssetBlacklist::init() loadBlacklist(); } -bool FSAssetBlacklist::isBlacklisted(const LLUUID& id, LLAssetType::EType type) +bool FSAssetBlacklist::isBlacklisted(const LLUUID& id, LLAssetType::EType type, eBlacklistFlag flag) { if (mBlacklistData.empty()) { @@ -87,76 +87,72 @@ bool FSAssetBlacklist::isBlacklisted(const LLUUID& id, LLAssetType::EType type) } blacklisted_uuid_container_t uuids = it->second; - return (uuids.find(id) != uuids.end()); -} - -void FSAssetBlacklist::addNewItemToBlacklist(const LLUUID& id, const std::string& name, const std::string& region, LLAssetType::EType type, bool permanent /*= true*/, bool save /*= true*/) -{ - if (isBlacklisted(id, type)) + if (uuids.find(id) == uuids.end()) { - return; + return false; } + if (flag == eBlacklistFlag::NONE) + { + return true; + } + + const auto& data_it = mBlacklistData.find(id); + if (data_it == mBlacklistData.end()) + { + return false; + } + + const LLSD& data = data_it->second; + if (!data.has("asset_flag")) + { + return false; + } + + eBlacklistFlag stored_flag = static_cast(data["asset_flag"].asInteger()); + + return (static_cast(stored_flag) & static_cast(flag)) != 0; +} + +void FSAssetBlacklist::addNewItemToBlacklist(const LLUUID& id, const std::string& name, const std::string& region, LLAssetType::EType type, eBlacklistFlag flag /*= eBlacklistFlag::NONE*/, bool permanent /*= true*/, bool save /*= true*/) +{ LLDate curdate = LLDate((double)time_corrected()); std::string input_date = curdate.asString(); input_date.replace(input_date.find("T"), 1, " "); input_date.resize(input_date.size() - 1); LLSD data; - data["asset_name"] = name; - data["asset_region"] = region; - data["asset_type"] = type; - data["asset_date"] = input_date; - data["asset_permanent"] = permanent; - addNewItemToBlacklistData(id, data, save); -} - -bool FSAssetBlacklist::isBlacklistedAvatarSoundsByFlag(const LLUUID& id, eBlacklistFlag flag) -{ - if (mBlacklistData.empty()) + if (isBlacklisted(id, type)) { - return false; - } + auto it = mBlacklistData.find(id); + if (it != mBlacklistData.end()) + { + data = it->second; - auto it = mBlacklistData.find(id); - if (it == mBlacklistData.end()) + S32 existing_flag = data.has("asset_flag") ? data["asset_flag"].asInteger() : 0; + data["asset_flag"] = static_cast(existing_flag | static_cast(flag)); + + data["asset_name"] = name; + data["asset_region"] = region; + data["asset_date"] = input_date; + data["asset_permanent"] = permanent; + + addNewItemToBlacklistData(id, data, save); + } + } + else { - return false; + // Nouvelle entrée + data["asset_name"] = name; + data["asset_region"] = region; + data["asset_type"] = type; + data["asset_flag"] = static_cast(flag); + data["asset_date"] = input_date; + data["asset_permanent"] = permanent; + + addNewItemToBlacklistData(id, data, save); } - - const LLSD& data = it->second; - if (!data.has("asset_flag")) - { - return false; - } - - eBlacklistFlag stored_source = static_cast(data["asset_flag"].asInteger()); - - return stored_source == flag; -} - -void FSAssetBlacklist::addNewAvatarSoundsByFlagToBlacklist(const LLUUID& id, const std::string& name, const std::string& region, eBlacklistFlag flag, bool permanent /*= true*/, bool save /*= true*/) -{ - if (isBlacklistedAvatarSoundsByFlag(id, flag)) - { - return; - } - - LLDate curdate = LLDate((double)time_corrected()); - std::string input_date = curdate.asString(); - input_date.replace(input_date.find("T"), 1, " "); - input_date.resize(input_date.size() - 1); - - LLSD data; - data["asset_name"] = name; - data["asset_region"] = region; - data["asset_type"] = LLAssetType::EType::AT_SOUND; - data["asset_flag"] = static_cast (flag); - data["asset_date"] = input_date; - data["asset_permanent"] = permanent; - - addNewItemToBlacklistData(id, data, save); } bool FSAssetBlacklist::removeItem(const LLUUID& id) @@ -215,14 +211,50 @@ void FSAssetBlacklist::removeItemsFromBlacklist(const uuid_vec_t& ids) } } +void FSAssetBlacklist::removeFlagsFromItem(const LLUUID& id, S32 combined_flags) +{auto it = mBlacklistData.find(id); + if (it == mBlacklistData.end()) + { + return; + } + + LLSD& data = it->second; + S32 current_flags = data.has("asset_flag") ? data["asset_flag"].asInteger() : 0; + + current_flags &= ~combined_flags; + + if (current_flags == 0) + { + removeItemsFromBlacklist({ id }); + } + else + { + data["asset_flag"] = current_flags; + addNewItemToBlacklistData(id, data, true); + + if (!mBlacklistChangedCallback.empty()) + { + mBlacklistChangedCallback(LLSD().with(id.asString(), data), eBlacklistOperation::BLACKLIST_ADD); + } + } +} + void FSAssetBlacklist::addNewItemToBlacklistData(const LLUUID& id, const LLSD& data, bool save) { LLAssetType::EType type = S32toAssetType(data["asset_type"].asInteger()); - addEntryToBlacklistMap(id, type); - mBlacklistData[id] = data; + auto it = mBlacklistData.find(id); + if (it != mBlacklistData.end()) + { + it->second = data; + } + else + { + addEntryToBlacklistMap(id, type); + mBlacklistData[id] = data; + } - if (type == LLAssetType::AT_SOUND) + if (type == LLAssetType::AT_SOUND && !data.has("flag")) { LLFileSystem::removeFile(id, LLAssetType::AT_SOUND); std::string wav_path = gDirUtilp->getExpandedFilename(LL_PATH_FS_SOUND_CACHE, id.asString()) + ".dsf"; diff --git a/indra/newview/fsassetblacklist.h b/indra/newview/fsassetblacklist.h index 04b65e6826..a6dc3b103f 100644 --- a/indra/newview/fsassetblacklist.h +++ b/indra/newview/fsassetblacklist.h @@ -45,21 +45,20 @@ class FSAssetBlacklist : public LLSingleton public: void init(); - bool isBlacklisted(const LLUUID& id, LLAssetType::EType type); - void addNewItemToBlacklist(const LLUUID& id, const std::string& name, const std::string& region, LLAssetType::EType type,bool permanent = true, bool save = true); + enum class eBlacklistFlag + { + NONE = 0, + WORN = 1 << 0, + REZZED = 1 << 1, + GESTURE = 1 << 2 + }; + bool isBlacklisted(const LLUUID& id, LLAssetType::EType type, eBlacklistFlag flag = eBlacklistFlag::NONE); + void addNewItemToBlacklist(const LLUUID& id, const std::string& name, const std::string& region, LLAssetType::EType type, eBlacklistFlag flag = eBlacklistFlag::NONE,bool permanent = true, bool save = true); void addNewItemToBlacklistData(const LLUUID& id, const LLSD& data, bool save = true); void removeItemFromBlacklist(const LLUUID& id); void removeItemsFromBlacklist(const uuid_vec_t& ids); + void removeFlagsFromItem(const LLUUID& id, S32 combined_flags); void saveBlacklist(); - enum class eBlacklistFlag - { - NONE = 0, - WORN, - REZZED, - GESTURE - }; - bool isBlacklistedAvatarSoundsByFlag(const LLUUID& id, eBlacklistFlag source); - void addNewAvatarSoundsByFlagToBlacklist(const LLUUID& id, const std::string& name, const std::string& region, eBlacklistFlag source, bool permanent = true, bool save = true); blacklist_data_t getBlacklistData() const { return mBlacklistData; }; diff --git a/indra/newview/fsfloaterassetblacklist.cpp b/indra/newview/fsfloaterassetblacklist.cpp index da2e6f55e0..7c02e614ff 100644 --- a/indra/newview/fsfloaterassetblacklist.cpp +++ b/indra/newview/fsfloaterassetblacklist.cpp @@ -123,7 +123,7 @@ std::string FSFloaterAssetBlacklist::getFlagString(FSAssetBlacklist::eBlacklistF switch (flag) { case FSAssetBlacklist::eBlacklistFlag::WORN: - return getString("asset_avatar_attached_sounds"); + return getString("asset_avatar_worn_sounds"); case FSAssetBlacklist::eBlacklistFlag::REZZED: return getString("asset_avatar_rezzed_sounds"); case FSAssetBlacklist::eBlacklistFlag::GESTURE: @@ -160,55 +160,106 @@ void FSFloaterAssetBlacklist::addElementToList(const LLUUID& id, const LLSD& dat LLStringUtil::format(date_str, substitution); const S32 asset_type = data["asset_type"].asInteger(); - const FSAssetBlacklist::eBlacklistFlag source = getFlagFromLLSD(data); - std::string type_label; - if (asset_type == LLAssetType::AT_SOUND) + + if (data.has("asset_flag") && data["asset_flag"].asInteger() > 0) { - type_label = getFlagString(source); + S32 flags = data["asset_flag"].asInteger(); + + for (S32 flag_value = 1; flag_value <= static_cast(FSAssetBlacklist::eBlacklistFlag::GESTURE); flag_value <<= 1) + { + if (flags & flag_value) + { + FSAssetBlacklist::eBlacklistFlag flag = static_cast(flag_value); + + LLSD element; + element["id"] = id; + element["columns"][0]["column"] = "name"; + element["columns"][0]["type"] = "text"; + element["columns"][0]["value"] = !data["asset_name"].asString().empty() ? data["asset_name"].asString() : getString("unknown_object"); + element["columns"][1]["column"] = "region"; + element["columns"][1]["type"] = "text"; + element["columns"][1]["value"] = !data["asset_region"].asString().empty() ? data["asset_region"].asString() : getString("unknown_region"); + element["columns"][2]["column"] = "type"; + element["columns"][2]["type"] = "text"; + element["columns"][2]["value"] = getFlagString(flag); + element["columns"][3]["column"] = "date"; + element["columns"][3]["type"] = "text"; + element["columns"][3]["value"] = date_str; + element["columns"][4]["column"] = "permanent"; + element["columns"][4]["type"] = "text"; + element["columns"][4]["halign"] = "center"; + element["columns"][4]["value"] = data["asset_permanent"].asBoolean() ? getString("asset_permanent") : LLStringUtil::null; + element["columns"][5]["column"] = "date_sort"; + element["columns"][5]["type"] = "text"; + element["columns"][5]["value"] = llformat("%u", (U64)date.secondsSinceEpoch()); + element["columns"][6]["column"] = "asset_type"; + element["columns"][6]["type"] = "integer"; + element["columns"][6]["value"] = data["asset_type"].asInteger(); + + LLSD value; + value["flag"] = static_cast(flag); + element["alt_value"] = value; + + mResultList->addElement(element, ADD_BOTTOM); + } + } } else { - type_label = getTypeString(asset_type); + LLSD element; + element["id"] = id; + element["columns"][0]["column"] = "name"; + element["columns"][0]["type"] = "text"; + element["columns"][0]["value"] = !data["asset_name"].asString().empty() ? data["asset_name"].asString() : getString("unknown_object"); + element["columns"][1]["column"] = "region"; + element["columns"][1]["type"] = "text"; + element["columns"][1]["value"] = !data["asset_region"].asString().empty() ? data["asset_region"].asString() : getString("unknown_region"); + element["columns"][2]["column"] = "type"; + element["columns"][2]["type"] = "text"; + element["columns"][2]["value"] = getTypeString(asset_type); + element["columns"][3]["column"] = "date"; + element["columns"][3]["type"] = "text"; + element["columns"][3]["value"] = date_str; + element["columns"][4]["column"] = "permanent"; + element["columns"][4]["type"] = "text"; + element["columns"][4]["halign"] = "center"; + element["columns"][4]["value"] = data["asset_permanent"].asBoolean() ? getString("asset_permanent") : LLStringUtil::null; + element["columns"][5]["column"] = "date_sort"; + element["columns"][5]["type"] = "text"; + element["columns"][5]["value"] = llformat("%u", (U64)date.secondsSinceEpoch()); + element["columns"][6]["column"] = "asset_type"; + element["columns"][6]["type"] = "integer"; + element["columns"][6]["value"] = data["asset_type"].asInteger(); + + mResultList->addElement(element, ADD_BOTTOM); } - - LLSD element; - element["id"] = id; - element["columns"][0]["column"] = "name"; - element["columns"][0]["type"] = "text"; - element["columns"][0]["value"] = !data["asset_name"].asString().empty() ? data["asset_name"].asString() : getString("unknown_object"); - element["columns"][1]["column"] = "region"; - element["columns"][1]["type"] = "text"; - element["columns"][1]["value"] = !data["asset_region"].asString().empty() ? data["asset_region"].asString() : getString("unknown_region"); - element["columns"][2]["column"] = "type"; - element["columns"][2]["type"] = "text"; - element["columns"][2]["value"] = type_label; - element["columns"][3]["column"] = "date"; - element["columns"][3]["type"] = "text"; - element["columns"][3]["value"] = date_str; - element["columns"][4]["column"] = "permanent"; - element["columns"][4]["type"] = "text"; - element["columns"][4]["halign"] = "center"; - element["columns"][4]["value"] = data["asset_permanent"].asBoolean() ? getString("asset_permanent") : LLStringUtil::null; - element["columns"][5]["column"] = "date_sort"; - element["columns"][5]["type"] = "text"; - element["columns"][5]["value"] = llformat("%u", (U64)date.secondsSinceEpoch()); - element["columns"][6]["column"] = "asset_type"; - element["columns"][6]["type"] = "integer"; - element["columns"][6]["value"] = data["asset_type"].asInteger(); - - mResultList->addElement(element, ADD_BOTTOM); } void FSFloaterAssetBlacklist::removeElements() { - uuid_vec_t items; + std::map flags_to_remove_by_id; for (auto listitem : mResultList->getAllSelected()) { - items.emplace_back(listitem->getUUID()); + LLUUID id = listitem->getUUID(); + LLSD value = listitem->getAltValue(); + + if (value.has("flag")) + { + S32 flag = value["flag"].asInteger(); + flags_to_remove_by_id[id] |= flag; + } + else + { + // fallback: remove full item + FSAssetBlacklist::instance().removeItemsFromBlacklist({ id }); + } } - FSAssetBlacklist::instance().removeItemsFromBlacklist(items); + for (const auto& [id, flags] : flags_to_remove_by_id) + { + FSAssetBlacklist::instance().removeFlagsFromItem(id, flags); + } } void FSFloaterAssetBlacklist::onBlacklistChanged(const LLSD& data, FSAssetBlacklist::eBlacklistOperation op) @@ -221,6 +272,7 @@ void FSFloaterAssetBlacklist::onBlacklistChanged(const LLSD& data, FSAssetBlackl for (LLSD::map_const_iterator it = data.beginMap(); it != data.endMap(); ++it) { LLUUID id = LLUUID(it->first); + mResultList->deleteItems(id); LLSD insert_data = it->second; addElementToList(id, insert_data); } diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp index c340930972..ff809b09d9 100644 --- a/indra/newview/llavataractions.cpp +++ b/indra/newview/llavataractions.cpp @@ -2531,7 +2531,7 @@ void LLAvatarActions::derenderMultiple(const uuid_vec_t& agent_ids, bool permane //static void LLAvatarActions::onDerenderAvatarNameLookup(const LLUUID& agent_id, const LLAvatarName& av_name, bool permanent) { - FSAssetBlacklist::getInstance()->addNewItemToBlacklist(agent_id, av_name.getUserName(), "", LLAssetType::AT_PERSON, permanent, permanent); + FSAssetBlacklist::getInstance()->addNewItemToBlacklist(agent_id, av_name.getUserName(), "", LLAssetType::AT_PERSON, FSAssetBlacklist::eBlacklistFlag::NONE, permanent, permanent); LLViewerObject* av_obj = gObjectList.findObject(agent_id); if (av_obj) diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 9e0ec0fb49..503e989a51 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -3327,7 +3327,7 @@ void derenderObject(bool permanent) asset_type = LLAssetType::AT_OBJECT; } - FSAssetBlacklist::getInstance()->addNewItemToBlacklist(id, entry_name, region_name, asset_type, permanent, false); + FSAssetBlacklist::getInstance()->addNewItemToBlacklist(id, entry_name, region_name, asset_type, FSAssetBlacklist::eBlacklistFlag::NONE, permanent, false); if (permanent) { diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 8ee2e07198..f12ef03370 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -4717,7 +4717,7 @@ void process_sound_trigger(LLMessageSystem *msg, void **) // Gesture sound if (object_id == owner_id) { - if (FSAssetBlacklist::getInstance()->isBlacklistedAvatarSoundsByFlag(owner_id, FSAssetBlacklist::eBlacklistFlag::GESTURE)) + if (FSAssetBlacklist::getInstance()->isBlacklisted(owner_id, LLAssetType::AT_SOUND, FSAssetBlacklist::eBlacklistFlag::GESTURE)) { return; } @@ -4728,13 +4728,13 @@ void process_sound_trigger(LLMessageSystem *msg, void **) // Attachment sound if (object && object->isAttachment()) { - if (FSAssetBlacklist::getInstance()->isBlacklistedAvatarSoundsByFlag(owner_id, FSAssetBlacklist::eBlacklistFlag::WORN)) + if (FSAssetBlacklist::getInstance()->isBlacklisted(owner_id, LLAssetType::AT_SOUND, FSAssetBlacklist::eBlacklistFlag::WORN)) { return; } } // Rezzed object sound - else if (FSAssetBlacklist::getInstance()->isBlacklistedAvatarSoundsByFlag(owner_id, FSAssetBlacklist::eBlacklistFlag::REZZED)) + else if (FSAssetBlacklist::getInstance()->isBlacklisted(owner_id, LLAssetType::AT_SOUND, FSAssetBlacklist::eBlacklistFlag::REZZED)) { return; } @@ -4853,7 +4853,7 @@ void process_preload_sound(LLMessageSystem *msg, void **user_data) // Gesture sound if (object_id == owner_id) { - if (FSAssetBlacklist::getInstance()->isBlacklistedAvatarSoundsByFlag(owner_id, FSAssetBlacklist::eBlacklistFlag::GESTURE)) + if (FSAssetBlacklist::getInstance()->isBlacklisted(owner_id, LLAssetType::AT_SOUND, FSAssetBlacklist::eBlacklistFlag::GESTURE)) { return; } @@ -4861,13 +4861,13 @@ void process_preload_sound(LLMessageSystem *msg, void **user_data) // Attachment sound else if (objectp && objectp->isAttachment()) { - if (FSAssetBlacklist::getInstance()->isBlacklistedAvatarSoundsByFlag(owner_id, FSAssetBlacklist::eBlacklistFlag::WORN)) + if (FSAssetBlacklist::getInstance()->isBlacklisted(owner_id, LLAssetType::AT_SOUND, FSAssetBlacklist::eBlacklistFlag::WORN)) { return; } } // Rezzed object sound - else if (FSAssetBlacklist::getInstance()->isBlacklistedAvatarSoundsByFlag(owner_id, FSAssetBlacklist::eBlacklistFlag::REZZED)) + else if (FSAssetBlacklist::getInstance()->isBlacklisted(owner_id, LLAssetType::AT_SOUND, FSAssetBlacklist::eBlacklistFlag::REZZED)) { return; } diff --git a/indra/newview/skins/default/xui/en/floater_NACL_explore_sounds.xml b/indra/newview/skins/default/xui/en/floater_NACL_explore_sounds.xml index 550c7b0f34..e79e932a0a 100644 --- a/indra/newview/skins/default/xui/en/floater_NACL_explore_sounds.xml +++ b/indra/newview/skins/default/xui/en/floater_NACL_explore_sounds.xml @@ -53,7 +53,7 @@