Merge worn/rezzed/gesture methods

Added flag to existing blacklist functions
Use of bitfields for blacklist flags
master
Rohacan Hirons 2025-06-10 18:03:06 +02:00
parent 5b1d898024
commit 1a24fd839f
10 changed files with 214 additions and 238 deletions

View File

@ -75,9 +75,9 @@ bool NACLFloaterExploreSounds::postBuild()
getChild<LLButton>("stop_btn")->setClickedCallback(boost::bind(&NACLFloaterExploreSounds::handleStop, this));
getChild<LLButton>("bl_btn")->setClickedCallback(boost::bind(&NACLFloaterExploreSounds::blacklistSound, this));
getChild<LLButton>("stop_locally_btn")->setClickedCallback(boost::bind(&NACLFloaterExploreSounds::handleStopLocally, this));
getChild<LLButton>("block_avatar_attached_sounds_btn")->setClickedCallback(boost::bind(&NACLFloaterExploreSounds::blacklistAvatarSoundsByFlagWorn, this));
getChild<LLButton>("block_avatar_rezzed_sounds_btn")->setClickedCallback(boost::bind(&NACLFloaterExploreSounds::blacklistAvatarSoundsByFlagRezzed, this));
getChild<LLButton>("block_avatar_gesture_sounds_btn")->setClickedCallback(boost::bind(&NACLFloaterExploreSounds::blacklistAvatarSoundsByFlagGesture, this));
getChild<LLButton>("block_avatar_worn_sounds_btn")->setClickedCallback(boost::bind(&NACLFloaterExploreSounds::blacklistAvatarSoundsByFlag, this, FSAssetBlacklist::eBlacklistFlag::WORN));
getChild<LLButton>("block_avatar_rezzed_sounds_btn")->setClickedCallback(boost::bind(&NACLFloaterExploreSounds::blacklistAvatarSoundsByFlag, this, FSAssetBlacklist::eBlacklistFlag::REZZED));
getChild<LLButton>("block_avatar_gesture_sounds_btn")->setClickedCallback(boost::bind(&NACLFloaterExploreSounds::blacklistAvatarSoundsByFlag, this, FSAssetBlacklist::eBlacklistFlag::GESTURE));
mHistoryScroller = getChild<LLScrollListCtrl>("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<LLScrollListItem*> selection = mHistoryScroller->getAllSelected();
std::vector<LLScrollListItem*>::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<LLScrollListItem*> selection = mHistoryScroller->getAllSelected();
std::vector<LLScrollListItem*>::iterator selection_iter = selection.begin();
std::vector<LLScrollListItem*>::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<LLScrollListItem*> selection = mHistoryScroller->getAllSelected();
std::vector<LLScrollListItem*>::iterator selection_iter = selection.begin();
std::vector<LLScrollListItem*>::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);
}

View File

@ -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

View File

@ -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<eBlacklistFlag>(data["asset_flag"].asInteger());
return (static_cast<int>(stored_flag) & static_cast<int>(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<S32>(existing_flag | static_cast<S32>(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<S32>(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<eBlacklistFlag>(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<S32> (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";

View File

@ -45,21 +45,20 @@ class FSAssetBlacklist : public LLSingleton<FSAssetBlacklist>
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; };

View File

@ -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<S32>(FSAssetBlacklist::eBlacklistFlag::GESTURE); flag_value <<= 1)
{
if (flags & flag_value)
{
FSAssetBlacklist::eBlacklistFlag flag = static_cast<FSAssetBlacklist::eBlacklistFlag>(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<S32>(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<LLUUID, S32> 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);
}

View File

@ -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)

View File

@ -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)
{

View File

@ -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;
}

View File

@ -53,7 +53,7 @@
<button bottom_delta="0" follows="left|bottom" height="20" label="Stop" name="stop_btn" right="-10" width="95" enabled="false"/>
<button bottom_delta="0" follows="left|bottom" height="20" label="Blacklist" name="bl_btn" right="-110" width="95" enabled="false"/>
<button bottom_delta="25" follows="left|bottom" height="20" label="Block AV attached sounds" name="block_avatar_attached_sounds_btn" left="10" width="165" enabled="false"/>
<button bottom_delta="25" follows="left|bottom" height="20" label="Block AV worn sounds" name="block_avatar_worn_sounds_btn" left="10" width="165" enabled="false"/>
<button bottom_delta="0" follows="left|bottom" height="20" label="Block AV rezzed sounds" name="block_avatar_rezzed_sounds_btn" left_delta="170" width="165" enabled="false"/>
<button bottom_delta="0" follows="left|bottom" height="20" label="Block AV gesture sounds" name="block_avatar_gesture_sounds_btn" left_delta="170" width="165" enabled="false"/>
</floater>

View File

@ -27,14 +27,14 @@
<floater.string name="asset_resident">
Resident
</floater.string>
<floater.string name="asset_avatar_attached_sounds">
Avatar Attached Sounds
<floater.string name="asset_avatar_worn_sounds">
Avatar worn objects sounds
</floater.string>
<floater.string name="asset_avatar_rezzed_sounds">
Avatar Rezzed Sounds
Avatar rezzed objects sounds
</floater.string>
<floater.string name="asset_avatar_gesture_sounds">
Avatar Gesture Sounds
Avatar gestures sounds
</floater.string>
<floater.string name="asset_unknown">
Unknown