From f85c085f5f798ea9ae30de56377c5d8a59976fa9 Mon Sep 17 00:00:00 2001 From: Rohacan Hirons Date: Mon, 9 Jun 2025 01:35:21 +0200 Subject: [PATCH] Added buttons on sounds explorer window to mute all attached / rezzed sounds by avatar --- indra/llcommon/llassettype.h | 5 +- indra/llinventory/llinventorytype.cpp | 3 + indra/newview/NACLfloaterexploresounds.cpp | 126 ++++++++++++++++++ indra/newview/NACLfloaterexploresounds.h | 6 +- indra/newview/fsassetblacklist.cpp | 6 + indra/newview/fsfloaterassetblacklist.cpp | 4 + indra/newview/llviewermessage.cpp | 23 ++++ .../xui/en/floater_NACL_explore_sounds.xml | 4 + .../xui/en/floater_fs_asset_blacklist.xml | 6 + 9 files changed, 181 insertions(+), 2 deletions(-) diff --git a/indra/llcommon/llassettype.h b/indra/llcommon/llassettype.h index 547c3f4329..c1525e60eb 100644 --- a/indra/llcommon/llassettype.h +++ b/indra/llcommon/llassettype.h @@ -131,7 +131,10 @@ public: AT_GLTF = 58, // gltf json document AT_GLTF_BIN = 59, // gltf binary data - AT_COUNT = 60, + AT_AVATAR_ATTACHED_SOUNDS = 60, // Black list avatar attached sounds + AT_AVATAR_REZZED_SOUNDS = 61, // Black list avatar rezzed sounds + + AT_COUNT = 62, // +*********************************************************+ // | TO ADD AN ELEMENT TO THIS ENUM: | diff --git a/indra/llinventory/llinventorytype.cpp b/indra/llinventory/llinventorytype.cpp index 8fa8983d3c..2cbb2a143a 100644 --- a/indra/llinventory/llinventorytype.cpp +++ b/indra/llinventory/llinventorytype.cpp @@ -162,6 +162,9 @@ DEFAULT_ASSET_FOR_INV_TYPE[LLAssetType::AT_COUNT] = LLInventoryType::IT_MATERIAL, // 57 AT_MATERIAL LLInventoryType::IT_GLTF, // 58 AT_GLTF LLInventoryType::IT_GLTF_BIN, // 59 AT_GLTF_BIN + + LLInventoryType::IT_NONE, // 60 AT_AVATAR_ATTACHED_SOUNDS + LLInventoryType::IT_NONE, // 61 AT_AVATAR_REZZED_SOUNDS }; // static diff --git a/indra/newview/NACLfloaterexploresounds.cpp b/indra/newview/NACLfloaterexploresounds.cpp index a58695824b..8bfb245910 100644 --- a/indra/newview/NACLfloaterexploresounds.cpp +++ b/indra/newview/NACLfloaterexploresounds.cpp @@ -75,6 +75,8 @@ 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::blacklistAvatarAttachedSounds, this)); + getChild("block_avatar_rezzed_sounds_btn")->setClickedCallback(boost::bind(&NACLFloaterExploreSounds::blacklistAvatarRezzedSounds, this)); mHistoryScroller = getChild("sound_list"); mHistoryScroller->setCommitCallback(boost::bind(&NACLFloaterExploreSounds::handleSelection, this)); @@ -500,6 +502,7 @@ void NACLFloaterExploreSounds::blacklistSound() } } + void NACLFloaterExploreSounds::onBlacklistAvatarNameCacheCallback(const LLUUID& av_id, const LLAvatarName& av_name, const LLUUID& asset_id, const std::string& region_name) { blacklist_avatar_name_cache_connection_map_t::iterator it = mBlacklistAvatarNameCacheConnections.find(av_id); @@ -513,3 +516,126 @@ void NACLFloaterExploreSounds::onBlacklistAvatarNameCacheCallback(const LLUUID& } FSAssetBlacklist::getInstance()->addNewItemToBlacklist(asset_id, av_name.getCompleteName(), region_name, LLAssetType::AT_SOUND); } + + + + +// add avatar attached sounds to blacklist +void NACLFloaterExploreSounds::blacklistAvatarAttachedSounds() +{ + 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::onBlacklistAvatarAttachedSoundsNameCacheCallback, this, _1, _2, item.mOwnerID, region_name)); + mBlacklistAvatarNameCacheConnections.insert(std::make_pair(item.mOwnerID, cb)); + } +} + +void NACLFloaterExploreSounds::onBlacklistAvatarAttachedSoundsNameCacheCallback(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()->addNewItemToBlacklist(owner_id, av_name.getCompleteName(), region_name, LLAssetType::AT_AVATAR_ATTACHED_SOUNDS); +} + + + +// add avatar rezzed sounds to blacklist +void NACLFloaterExploreSounds::blacklistAvatarRezzedSounds() +{ + 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::onBlacklistAvatarRezzedSoundsNameCacheCallback, + this, + _1, + _2, + item.mOwnerID, + region_name)); + mBlacklistAvatarNameCacheConnections.insert(std::make_pair(item.mOwnerID, cb)); + } +} + +void NACLFloaterExploreSounds::onBlacklistAvatarRezzedSoundsNameCacheCallback(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()->addNewItemToBlacklist(owner_id, + av_name.getCompleteName(), + region_name, + LLAssetType::AT_AVATAR_REZZED_SOUNDS); +} diff --git a/indra/newview/NACLfloaterexploresounds.h b/indra/newview/NACLfloaterexploresounds.h index 1edce5fe09..a8728af482 100644 --- a/indra/newview/NACLfloaterexploresounds.h +++ b/indra/newview/NACLfloaterexploresounds.h @@ -32,6 +32,8 @@ private: void handleStopLocally(); void handleSelection(); void blacklistSound(); + void blacklistAvatarAttachedSounds(); + void blacklistAvatarRezzedSounds(); LLScrollListCtrl* mHistoryScroller; LLCheckBoxCtrl* mCollisionSounds; @@ -46,8 +48,10 @@ private: typedef std::map blacklist_avatar_name_cache_connection_map_t; 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 onBlacklistAvatarAttachedSoundsNameCacheCallback(const LLUUID& av_id, const LLAvatarName& av_name, const LLUUID& asset_id, const std::string& region_name); + void onBlacklistAvatarRezzedSoundsNameCacheCallback(const LLUUID& av_id, const LLAvatarName& av_name, const LLUUID& asset_id, const std::string& region_name); }; #endif diff --git a/indra/newview/fsassetblacklist.cpp b/indra/newview/fsassetblacklist.cpp index 845ffd6e7d..6656286505 100644 --- a/indra/newview/fsassetblacklist.cpp +++ b/indra/newview/fsassetblacklist.cpp @@ -60,6 +60,12 @@ LLAssetType::EType S32toAssetType(S32 assetindex) case 45: type = LLAssetType::AT_PERSON; break; + case 60: + type = LLAssetType::AT_AVATAR_ATTACHED_SOUNDS; + break; + case 61: + type = LLAssetType::AT_AVATAR_REZZED_SOUNDS; + break; default: type = LLAssetType::AT_NONE; } diff --git a/indra/newview/fsfloaterassetblacklist.cpp b/indra/newview/fsfloaterassetblacklist.cpp index 636ae39278..4c4e3e1cc9 100644 --- a/indra/newview/fsfloaterassetblacklist.cpp +++ b/indra/newview/fsfloaterassetblacklist.cpp @@ -104,6 +104,10 @@ std::string FSFloaterAssetBlacklist::getTypeString(S32 type) return getString("asset_animation"); case LLAssetType::AT_PERSON: return getString("asset_resident"); + case LLAssetType::AT_AVATAR_ATTACHED_SOUNDS: + return getString("asset_avatar_attached_sounds"); + case LLAssetType::AT_AVATAR_REZZED_SOUNDS: + return getString("asset_avatar_rezzed_sounds"); default: return getString("asset_unknown"); } diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 91792f1848..d16dc3ce6d 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -4714,6 +4714,18 @@ void process_sound_trigger(LLMessageSystem *msg, void **) { return; } + + if (object_id == owner_id) + { + if (FSAssetBlacklist::getInstance()->isBlacklisted(owner_id, LLAssetType::AT_AVATAR_ATTACHED_SOUNDS)) + { + return; + } + } + else if (FSAssetBlacklist::getInstance()->isBlacklisted(owner_id, LLAssetType::AT_AVATAR_REZZED_SOUNDS)) + { + return; + } // // NaCl - Antispam Registry @@ -4824,6 +4836,17 @@ void process_preload_sound(LLMessageSystem *msg, void **user_data) { return; } + if (object_id == owner_id) + { + if (FSAssetBlacklist::getInstance()->isBlacklisted(owner_id, LLAssetType::AT_AVATAR_ATTACHED_SOUNDS)) + { + return; + } + } + else if (FSAssetBlacklist::getInstance()->isBlacklisted(owner_id, LLAssetType::AT_AVATAR_REZZED_SOUNDS)) + { + return; + } // // NaCl - Antispam Registry 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 c194052347..18d6e0918a 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 @@ -52,4 +52,8 @@