Merge worn/rezzed/gesture methods
Added flag to existing blacklist functions Use of bitfields for blacklist flagsmaster
parent
5b1d898024
commit
1a24fd839f
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
|
|
|
|||
|
|
@ -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; };
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue