Inventory Updates and Clean Up
Better viewed without space changes Adds translatable inventory strings
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -74,7 +74,6 @@ BOOL LLInventoryModel::sFirstTimeInViewer2 = TRUE;
|
||||
///----------------------------------------------------------------------------
|
||||
|
||||
//BOOL decompress_file(const char* src_filename, const char* dst_filename);
|
||||
|
||||
const char CACHE_FORMAT_STRING[] = "%s.inv";
|
||||
|
||||
struct InventoryIDPtrLess
|
||||
@@ -531,8 +530,8 @@ private:
|
||||
LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id,
|
||||
LLFolderType::EType preferred_type,
|
||||
const std::string& pname,
|
||||
void (*callback)(const LLSD&, void*)/*=NULL*/,
|
||||
void* user_data/*=NULL*/)
|
||||
void (*callback)(const LLSD&, void*), //Default to NULL
|
||||
void* user_data) //Default to NULL
|
||||
{
|
||||
LLUUID id;
|
||||
if(!isInventoryUsable())
|
||||
@@ -1100,9 +1099,6 @@ void LLInventoryModel::changeItemParent(LLViewerInventoryItem* item,
|
||||
const LLUUID& new_parent_id,
|
||||
BOOL restamp)
|
||||
{
|
||||
// <edit>
|
||||
bool send_parent_update = gInventory.isObjectDescendentOf(item->getUUID(), gInventory.getRootFolderID());
|
||||
// </edit>
|
||||
if (item->getParentUUID() == new_parent_id)
|
||||
{
|
||||
LL_DEBUGS("Inventory") << "'" << item->getName() << "' (" << item->getUUID()
|
||||
@@ -1123,7 +1119,7 @@ void LLInventoryModel::changeItemParent(LLViewerInventoryItem* item,
|
||||
LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
|
||||
new_item->setParent(new_parent_id);
|
||||
// <edit>
|
||||
if(send_parent_update)
|
||||
if(gInventory.isObjectDescendentOf(item->getUUID(), gInventory.getRootFolderID()))
|
||||
// </edit>
|
||||
new_item->updateParentOnServer(restamp);
|
||||
updateItem(new_item);
|
||||
@@ -1254,7 +1250,7 @@ void LLInventoryModel::purgeDescendentsOf(const LLUUID& id)
|
||||
return;
|
||||
}
|
||||
LLPointer<LLViewerInventoryCategory> cat = getCategory(id);
|
||||
if(cat.notNull())
|
||||
if (cat.notNull())
|
||||
{
|
||||
if (LLInventoryClipboard::instance().hasContents() && LLInventoryClipboard::instance().isCutMode())
|
||||
{
|
||||
@@ -1290,7 +1286,7 @@ void LLInventoryModel::purgeDescendentsOf(const LLUUID& id)
|
||||
// Fast purge
|
||||
// do the cache accounting
|
||||
llinfos << "LLInventoryModel::purgeDescendentsOf " << cat->getName()
|
||||
<< llendl;
|
||||
<< llendl;
|
||||
S32 descendents = cat->getDescendentCount();
|
||||
if(descendents > 0)
|
||||
{
|
||||
@@ -1325,6 +1321,7 @@ void LLInventoryModel::purgeDescendentsOf(const LLUUID& id)
|
||||
{
|
||||
deleteObject(items.get(i)->getUUID());
|
||||
}
|
||||
|
||||
count = categories.count();
|
||||
for(S32 i = 0; i < count; ++i)
|
||||
{
|
||||
@@ -1377,7 +1374,6 @@ void LLInventoryModel::notifyObservers()
|
||||
iter != mObservers.end(); )
|
||||
{
|
||||
LLInventoryObserver* observer = *iter;
|
||||
|
||||
observer->changed(mModifyMask);
|
||||
|
||||
// safe way to increment since changed may delete entries! (@!##%@!@&*!)
|
||||
@@ -1563,7 +1559,7 @@ void LLInventoryModel::addCategory(LLViewerInventoryCategory* category)
|
||||
}
|
||||
|
||||
// try to localize default names first. See EXT-8319, EXT-7051.
|
||||
//category->localizeName();
|
||||
category->localizeName();
|
||||
|
||||
// Insert category uniquely into the map
|
||||
mCategoryMap[category->getUUID()] = category; // LLPointer will deref and delete the old one
|
||||
@@ -1643,7 +1639,7 @@ void LLInventoryModel::accountForUpdate(const LLCategoryUpdate& update) const
|
||||
cat->setVersion(++version);
|
||||
lldebugs << "accounted: '" << cat->getName() << "' "
|
||||
<< version << " with " << descendents_actual
|
||||
<< " descendents." << llendl;
|
||||
<< " descendents." << llendl;
|
||||
}
|
||||
}
|
||||
if(!accounted)
|
||||
@@ -1890,7 +1886,7 @@ bool LLInventoryModel::loadSkeleton(
|
||||
LLViewerInventoryCategory* tcat = *cit;
|
||||
|
||||
// we can safely ignore anything loaded from file, but
|
||||
// not sent down in the skeleton.
|
||||
// not sent down in the skeleton. Must have been removed from inventory.
|
||||
if (cit == not_cached)
|
||||
{
|
||||
continue;
|
||||
@@ -2351,73 +2347,6 @@ bool LLUUIDAndName::operator>(const LLUUIDAndName& rhs) const
|
||||
return (mID > rhs.mID);
|
||||
}
|
||||
|
||||
// Given the current state of the inventory items, figure out the
|
||||
// clone information. *FIX: This is sub-optimal, since we can insert
|
||||
// this information snurgically, but this makes sure the implementation
|
||||
// works before we worry about optimization.
|
||||
//void LLInventoryModel::recalculateCloneInformation()
|
||||
//{
|
||||
// //dumpInventory();
|
||||
//
|
||||
// // This implements a 'multi-map' like structure to keep track of
|
||||
// // how many clones we find.
|
||||
// typedef LLDynamicArray<LLViewerInventoryItem*> viewer_item_array_t;
|
||||
// typedef std::map<LLUUIDAndName, viewer_item_array_t*> clone_map_t;
|
||||
// clone_map_t clone_map;
|
||||
// LLUUIDAndName id_and_name;
|
||||
// viewer_item_array_t* clones = NULL;
|
||||
// LLViewerInventoryItem* item = NULL;
|
||||
// for(item = (LLViewerInventoryItem*)mItemMap.getFirstData();
|
||||
// item != NULL;
|
||||
// item = (LLViewerInventoryItem*)mItemMap.getNextData())
|
||||
// {
|
||||
// if(item->getType() == LLAssetType::AT_CALLINGCARD)
|
||||
// {
|
||||
// // if it's a calling card, we key off of the creator id, not
|
||||
// // the asset id.
|
||||
// id_and_name.mID = item->getCreatorUUID();
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// // if it's not a calling card, we key clones from the
|
||||
// // asset id.
|
||||
// id_and_name.mID = item->getAssetUUID();
|
||||
// }
|
||||
// if(id_and_name.mID == LLUUID::null)
|
||||
// {
|
||||
// continue;
|
||||
// }
|
||||
// id_and_name.mName = item->getName();
|
||||
// if(clone_map.checkData(id_and_name))
|
||||
// {
|
||||
// clones = clone_map.getData(id_and_name);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// clones = new viewer_item_array_t;
|
||||
// clone_map.addData(id_and_name, clones);
|
||||
// }
|
||||
// clones->put(item);
|
||||
// }
|
||||
//
|
||||
// S32 count = 0;
|
||||
// for(clones = clone_map.getFirstData();
|
||||
// clones != NULL;
|
||||
// clones = clone_map.getNextData())
|
||||
// {
|
||||
// count = clones->count();
|
||||
// for(S32 i = 0; i < count; i++)
|
||||
// {
|
||||
// item = clones->get(i);
|
||||
// item->setCloneCount(count - 1);
|
||||
// //clones[i] = NULL;
|
||||
// }
|
||||
// delete clones;
|
||||
// }
|
||||
// clone_map.removeAllData();
|
||||
// //dumpInventory();
|
||||
//}
|
||||
|
||||
// static
|
||||
bool LLInventoryModel::loadFromFile(const std::string& filename,
|
||||
LLInventoryModel::cat_array_t& categories,
|
||||
@@ -2480,7 +2409,7 @@ bool LLInventoryModel::loadFromFile(const std::string& filename,
|
||||
{
|
||||
if (is_cache_obsolete)
|
||||
break;
|
||||
|
||||
|
||||
LLPointer<LLViewerInventoryItem> inv_item = new LLViewerInventoryItem;
|
||||
if( inv_item->importFileLocal(file) )
|
||||
{
|
||||
@@ -3002,7 +2931,7 @@ void LLInventoryModel::processBulkUpdateInventory(LLMessageSystem* msg, void**)
|
||||
// << titem->getParentUUID() << llendl;
|
||||
U32 callback_id;
|
||||
msg->getU32Fast(_PREHASH_ItemData, _PREHASH_CallbackID, callback_id);
|
||||
if(titem->getUUID().notNull())
|
||||
if(titem->getUUID().notNull() ) // && callback_id.notNull() )
|
||||
{
|
||||
items.push_back(titem);
|
||||
cblist.push_back(InventoryCallbackInfo(callback_id, titem->getUUID()));
|
||||
@@ -3116,6 +3045,7 @@ void LLInventoryModel::processInventoryDescendents(LLMessageSystem* msg,void**)
|
||||
msg->getS32("AgentData", "Version", version);
|
||||
S32 descendents;
|
||||
msg->getS32("AgentData", "Descendents", descendents);
|
||||
|
||||
S32 i;
|
||||
S32 count = msg->getNumberOfBlocksFast(_PREHASH_FolderData);
|
||||
LLPointer<LLViewerInventoryCategory> tcategory = new LLViewerInventoryCategory(owner_id);
|
||||
@@ -3421,7 +3351,8 @@ void LLInventoryModel::updateItemsOrder(LLInventoryModel::item_array_t& items, c
|
||||
}
|
||||
|
||||
//* @param[in] items vector of items in order to be saved.
|
||||
/*void LLInventoryModel::saveItemsOrder(const LLInventoryModel::item_array_t& items)
|
||||
/*
|
||||
void LLInventoryModel::saveItemsOrder(const LLInventoryModel::item_array_t& items)
|
||||
{
|
||||
int sortField = 0;
|
||||
|
||||
@@ -3441,8 +3372,8 @@ void LLInventoryModel::updateItemsOrder(LLInventoryModel::item_array_t& items, c
|
||||
}
|
||||
|
||||
notifyObservers();
|
||||
}*/
|
||||
|
||||
}
|
||||
*/
|
||||
// See also LLInventorySort where landmarks in the Favorites folder are sorted.
|
||||
/*class LLViewerInventoryItemSort
|
||||
{
|
||||
@@ -3466,7 +3397,8 @@ public:
|
||||
|
||||
// * @param source_item_id - LLUUID of the source item to be moved into new position
|
||||
// * @param target_item_id - LLUUID of the target item before which source item should be placed.
|
||||
/*void LLInventoryModel::rearrangeFavoriteLandmarks(const LLUUID& source_item_id, const LLUUID& target_item_id)
|
||||
/*
|
||||
void LLInventoryModel::rearrangeFavoriteLandmarks(const LLUUID& source_item_id, const LLUUID& target_item_id)
|
||||
{
|
||||
LLInventoryModel::cat_array_t cats;
|
||||
LLInventoryModel::item_array_t items;
|
||||
@@ -3481,7 +3413,10 @@ public:
|
||||
updateItemsOrder(items, source_item_id, target_item_id);
|
||||
|
||||
saveItemsOrder(items);
|
||||
}*/
|
||||
}
|
||||
*/
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
// *NOTE: DEBUG functionality
|
||||
void LLInventoryModel::dumpInventory() const
|
||||
{
|
||||
@@ -3493,8 +3428,8 @@ void LLInventoryModel::dumpInventory() const
|
||||
if(cat)
|
||||
{
|
||||
llinfos << " " << cat->getUUID() << " '" << cat->getName() << "' "
|
||||
<< cat->getVersion() << " " << cat->getDescendentCount() << " parent: " << cat->getParentUUID()
|
||||
<< LL_ENDL;
|
||||
<< cat->getVersion() << " " << cat->getDescendentCount() << " parent: " << cat->getParentUUID()
|
||||
<< llendl;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -63,11 +63,140 @@
|
||||
#include "llfloatercustomize.h"
|
||||
// <edit>
|
||||
#include "llappviewer.h" // System Folders
|
||||
// </edit>
|
||||
|
||||
// Two do-nothing ops for use in callbacks.
|
||||
void no_op_inventory_func(const LLUUID&) {}
|
||||
void no_op() {}
|
||||
// </edit>
|
||||
|
||||
///----------------------------------------------------------------------------
|
||||
/// Helper class to store special inventory item names and their localized values.
|
||||
///----------------------------------------------------------------------------
|
||||
class LLLocalizedInventoryItemsDictionary : public LLSingleton<LLLocalizedInventoryItemsDictionary>
|
||||
{
|
||||
public:
|
||||
std::map<std::string, std::string> mInventoryItemsDict;
|
||||
|
||||
LLLocalizedInventoryItemsDictionary()
|
||||
{
|
||||
mInventoryItemsDict["New Shape"] = LLTrans::getString("New Shape");
|
||||
mInventoryItemsDict["New Skin"] = LLTrans::getString("New Skin");
|
||||
mInventoryItemsDict["New Hair"] = LLTrans::getString("New Hair");
|
||||
mInventoryItemsDict["New Eyes"] = LLTrans::getString("New Eyes");
|
||||
mInventoryItemsDict["New Shirt"] = LLTrans::getString("New Shirt");
|
||||
mInventoryItemsDict["New Pants"] = LLTrans::getString("New Pants");
|
||||
mInventoryItemsDict["New Shoes"] = LLTrans::getString("New Shoes");
|
||||
mInventoryItemsDict["New Socks"] = LLTrans::getString("New Socks");
|
||||
mInventoryItemsDict["New Jacket"] = LLTrans::getString("New Jacket");
|
||||
mInventoryItemsDict["New Gloves"] = LLTrans::getString("New Gloves");
|
||||
mInventoryItemsDict["New Undershirt"] = LLTrans::getString("New Undershirt");
|
||||
mInventoryItemsDict["New Underpants"] = LLTrans::getString("New Underpants");
|
||||
mInventoryItemsDict["New Skirt"] = LLTrans::getString("New Skirt");
|
||||
mInventoryItemsDict["New Alpha"] = LLTrans::getString("New Alpha");
|
||||
mInventoryItemsDict["New Tattoo"] = LLTrans::getString("New Tattoo");
|
||||
mInventoryItemsDict["New Physics"] = LLTrans::getString("New Physics");
|
||||
mInventoryItemsDict["Invalid Wearable"] = LLTrans::getString("Invalid Wearable");
|
||||
|
||||
mInventoryItemsDict["New Gesture"] = LLTrans::getString("New Gesture");
|
||||
mInventoryItemsDict["New Script"] = LLTrans::getString("New Script");
|
||||
mInventoryItemsDict["New Folder"] = LLTrans::getString("New Folder");
|
||||
mInventoryItemsDict["New Note"] = LLTrans::getString("New Note");
|
||||
mInventoryItemsDict["Contents"] = LLTrans::getString("Contents");
|
||||
|
||||
mInventoryItemsDict["Gesture"] = LLTrans::getString("Gesture");
|
||||
mInventoryItemsDict["Male Gestures"] = LLTrans::getString("Male Gestures");
|
||||
mInventoryItemsDict["Female Gestures"] = LLTrans::getString("Female Gestures");
|
||||
mInventoryItemsDict["Other Gestures"] = LLTrans::getString("Other Gestures");
|
||||
mInventoryItemsDict["Speech Gestures"] = LLTrans::getString("Speech Gestures");
|
||||
mInventoryItemsDict["Common Gestures"] = LLTrans::getString("Common Gestures");
|
||||
|
||||
//predefined gestures
|
||||
|
||||
//male
|
||||
mInventoryItemsDict["Male - Excuse me"] = LLTrans::getString("Male - Excuse me");
|
||||
mInventoryItemsDict["Male - Get lost"] = LLTrans::getString("Male - Get lost"); // double space after Male. EXT-8319
|
||||
mInventoryItemsDict["Male - Blow kiss"] = LLTrans::getString("Male - Blow kiss");
|
||||
mInventoryItemsDict["Male - Boo"] = LLTrans::getString("Male - Boo");
|
||||
mInventoryItemsDict["Male - Bored"] = LLTrans::getString("Male - Bored");
|
||||
mInventoryItemsDict["Male - Hey"] = LLTrans::getString("Male - Hey");
|
||||
mInventoryItemsDict["Male - Laugh"] = LLTrans::getString("Male - Laugh");
|
||||
mInventoryItemsDict["Male - Repulsed"] = LLTrans::getString("Male - Repulsed");
|
||||
mInventoryItemsDict["Male - Shrug"] = LLTrans::getString("Male - Shrug");
|
||||
mInventoryItemsDict["Male - Stick tougue out"] = LLTrans::getString("Male - Stick tougue out");
|
||||
mInventoryItemsDict["Male - Wow"] = LLTrans::getString("Male - Wow");
|
||||
|
||||
//female
|
||||
mInventoryItemsDict["Female - Chuckle"] = LLTrans::getString("Female - Chuckle");
|
||||
mInventoryItemsDict["Female - Cry"] = LLTrans::getString("Female - Cry");
|
||||
mInventoryItemsDict["Female - Embarrassed"] = LLTrans::getString("Female - Embarrassed");
|
||||
mInventoryItemsDict["Female - Excuse me"] = LLTrans::getString("Female - Excuse me");
|
||||
mInventoryItemsDict["Female - Get lost"] = LLTrans::getString("Female - Get lost"); // double space after Female. EXT-8319
|
||||
mInventoryItemsDict["Female - Blow kiss"] = LLTrans::getString("Female - Blow kiss");
|
||||
mInventoryItemsDict["Female - Boo"] = LLTrans::getString("Female - Boo");
|
||||
mInventoryItemsDict["Female - Bored"] = LLTrans::getString("Female - Bored");
|
||||
mInventoryItemsDict["Female - Hey"] = LLTrans::getString("Female - Hey");
|
||||
mInventoryItemsDict["Female - Hey baby"] = LLTrans::getString("Female - Hey baby");
|
||||
mInventoryItemsDict["Female - Laugh"] = LLTrans::getString("Female - Laugh");
|
||||
mInventoryItemsDict["Female - Looking good"] = LLTrans::getString("Female - Looking good");
|
||||
mInventoryItemsDict["Female - Over here"] = LLTrans::getString("Female - Over here");
|
||||
mInventoryItemsDict["Female - Please"] = LLTrans::getString("Female - Please");
|
||||
mInventoryItemsDict["Female - Repulsed"] = LLTrans::getString("Female - Repulsed");
|
||||
mInventoryItemsDict["Female - Shrug"] = LLTrans::getString("Female - Shrug");
|
||||
mInventoryItemsDict["Female - Stick tougue out"]= LLTrans::getString("Female - Stick tougue out");
|
||||
mInventoryItemsDict["Female - Wow"] = LLTrans::getString("Female - Wow");
|
||||
|
||||
//common
|
||||
mInventoryItemsDict["/bow"] = LLTrans::getString("/bow");
|
||||
mInventoryItemsDict["/clap"] = LLTrans::getString("/clap");
|
||||
mInventoryItemsDict["/count"] = LLTrans::getString("/count");
|
||||
mInventoryItemsDict["/extinguish"] = LLTrans::getString("/extinguish");
|
||||
mInventoryItemsDict["/kmb"] = LLTrans::getString("/kmb");
|
||||
mInventoryItemsDict["/muscle"] = LLTrans::getString("/muscle");
|
||||
mInventoryItemsDict["/no"] = LLTrans::getString("/no");
|
||||
mInventoryItemsDict["/no!"] = LLTrans::getString("/no!");
|
||||
mInventoryItemsDict["/paper"] = LLTrans::getString("/paper");
|
||||
mInventoryItemsDict["/pointme"] = LLTrans::getString("/pointme");
|
||||
mInventoryItemsDict["/pointyou"] = LLTrans::getString("/pointyou");
|
||||
mInventoryItemsDict["/rock"] = LLTrans::getString("/rock");
|
||||
mInventoryItemsDict["/scissor"] = LLTrans::getString("/scissor");
|
||||
mInventoryItemsDict["/smoke"] = LLTrans::getString("/smoke");
|
||||
mInventoryItemsDict["/stretch"] = LLTrans::getString("/stretch");
|
||||
mInventoryItemsDict["/whistle"] = LLTrans::getString("/whistle");
|
||||
mInventoryItemsDict["/yes"] = LLTrans::getString("/yes");
|
||||
mInventoryItemsDict["/yes!"] = LLTrans::getString("/yes!");
|
||||
mInventoryItemsDict["afk"] = LLTrans::getString("afk");
|
||||
mInventoryItemsDict["dance1"] = LLTrans::getString("dance1");
|
||||
mInventoryItemsDict["dance2"] = LLTrans::getString("dance2");
|
||||
mInventoryItemsDict["dance3"] = LLTrans::getString("dance3");
|
||||
mInventoryItemsDict["dance4"] = LLTrans::getString("dance4");
|
||||
mInventoryItemsDict["dance5"] = LLTrans::getString("dance5");
|
||||
mInventoryItemsDict["dance6"] = LLTrans::getString("dance6");
|
||||
mInventoryItemsDict["dance7"] = LLTrans::getString("dance7");
|
||||
mInventoryItemsDict["dance8"] = LLTrans::getString("dance8");
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds passed name in dictionary and replaces it with found localized value.
|
||||
*
|
||||
* @param object_name - string to be localized.
|
||||
* @return true if passed name was found and localized, false otherwise.
|
||||
*/
|
||||
bool localizeInventoryObjectName(std::string& object_name)
|
||||
{
|
||||
LL_DEBUGS("InventoryLocalize") << "Searching for localization: " << object_name << LL_ENDL;
|
||||
|
||||
std::map<std::string, std::string>::const_iterator dictionary_iter = mInventoryItemsDict.find(object_name);
|
||||
|
||||
bool found = dictionary_iter != mInventoryItemsDict.end();
|
||||
if(found)
|
||||
{
|
||||
object_name = dictionary_iter->second;
|
||||
LL_DEBUGS("InventoryLocalize") << "Found, new name is: " << object_name << LL_ENDL;
|
||||
}
|
||||
return found;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
///----------------------------------------------------------------------------
|
||||
/// Local function declarations, constants, enums, and typedefs
|
||||
@@ -165,13 +294,10 @@ void LLViewerInventoryItem::cloneViewerItem(LLPointer<LLViewerInventoryItem>& ne
|
||||
void LLViewerInventoryItem::removeFromServer()
|
||||
{
|
||||
// <edit> this check is ghetto
|
||||
if((mParentUUID == gSystemFolderRoot) || (gInventory.isObjectDescendentOf(mUUID, gSystemFolderRoot)))
|
||||
{
|
||||
return;
|
||||
}
|
||||
if((mParentUUID == gSystemFolderRoot) || (gInventory.isObjectDescendentOf(mUUID, gSystemFolderRoot))) return;
|
||||
// </edit>
|
||||
llinfos << "Removing inventory item " << mUUID << " from server."
|
||||
<< llendl;
|
||||
lldebugs << "Removing inventory item " << mUUID << " from server."
|
||||
<< llendl;
|
||||
|
||||
LLInventoryModel::LLCategoryUpdate up(mParentUUID, -1);
|
||||
gInventory.accountForUpdate(up);
|
||||
@@ -189,22 +315,14 @@ void LLViewerInventoryItem::removeFromServer()
|
||||
void LLViewerInventoryItem::updateServer(BOOL is_new) const
|
||||
{
|
||||
// <edit>
|
||||
//if(gAgent.getID() != mPermissions.getOwner())
|
||||
//{
|
||||
// // *FIX: deal with this better.
|
||||
// llwarns << "LLViewerInventoryItem::updateServer() - for unowned item"
|
||||
// << llendl;
|
||||
if((mParentUUID == gSystemFolderRoot) || (gInventory.isObjectDescendentOf(mUUID, gSystemFolderRoot)))
|
||||
{
|
||||
if((mParentUUID == gSystemFolderRoot) || (gInventory.isObjectDescendentOf(mUUID, gSystemFolderRoot))) return;
|
||||
// </edit>
|
||||
return;
|
||||
}
|
||||
if(!mIsComplete)
|
||||
{
|
||||
// *FIX: deal with this better.
|
||||
llwarns << "LLViewerInventoryItem::updateServer() - for incomplete item"
|
||||
<< llendl;
|
||||
LLNotificationsUtil::add("IncompleteInventoryItem");
|
||||
LLNotificationsUtil::add("IncompleteInventoryItem");
|
||||
return;
|
||||
}
|
||||
if(gAgent.getID() != mPermissions.getOwner())
|
||||
@@ -286,6 +404,9 @@ void LLViewerInventoryItem::fetchFromServer(void) const
|
||||
BOOL LLViewerInventoryItem::unpackMessage(LLSD item)
|
||||
{
|
||||
BOOL rv = LLInventoryItem::fromLLSD(item);
|
||||
|
||||
LLLocalizedInventoryItemsDictionary::getInstance()->localizeInventoryObjectName(mName);
|
||||
|
||||
mIsComplete = TRUE;
|
||||
return rv;
|
||||
}
|
||||
@@ -294,6 +415,9 @@ BOOL LLViewerInventoryItem::unpackMessage(LLSD item)
|
||||
BOOL LLViewerInventoryItem::unpackMessage(LLMessageSystem* msg, const char* block, S32 block_num)
|
||||
{
|
||||
BOOL rv = LLInventoryItem::unpackMessage(msg, block, block_num);
|
||||
|
||||
LLLocalizedInventoryItemsDictionary::getInstance()->localizeInventoryObjectName(mName);
|
||||
|
||||
mIsComplete = TRUE;
|
||||
return rv;
|
||||
}
|
||||
@@ -429,7 +553,7 @@ void LLViewerInventoryCategory::copyViewerCategory(const LLViewerInventoryCatego
|
||||
{
|
||||
copyCategory(other);
|
||||
mOwnerID = other->mOwnerID;
|
||||
mVersion = other->mVersion;
|
||||
setVersion(other->getVersion());
|
||||
mDescendentCount = other->mDescendentCount;
|
||||
mDescendentsRequested = other->mDescendentsRequested;
|
||||
}
|
||||
@@ -505,7 +629,7 @@ bool LLViewerInventoryCategory::fetch()
|
||||
// <edit>
|
||||
if((mUUID == gSystemFolderRoot) || (gInventory.isObjectDescendentOf(mUUID, gSystemFolderRoot))) return false;
|
||||
// </edit>
|
||||
if((VERSION_UNKNOWN == mVersion) &&
|
||||
if((VERSION_UNKNOWN == getVersion()) &&
|
||||
(!mDescendentsRequested.getStarted() ||
|
||||
mDescendentsRequested.hasExpired())) //Expired check prevents multiple downloads.
|
||||
{
|
||||
@@ -720,6 +844,12 @@ void LLViewerInventoryCategory::changeType(LLFolderType::EType new_folder_type)
|
||||
setPreferredType(new_folder_type);
|
||||
gInventory.addChangedMask(LLInventoryObserver::LABEL, folder_id);
|
||||
}
|
||||
|
||||
void LLViewerInventoryCategory::localizeName()
|
||||
{
|
||||
LLLocalizedInventoryItemsDictionary::getInstance()->localizeInventoryObjectName(mName);
|
||||
}
|
||||
|
||||
///----------------------------------------------------------------------------
|
||||
/// Local function definitions
|
||||
///----------------------------------------------------------------------------
|
||||
@@ -858,6 +988,25 @@ void create_inventory_item(const LLUUID& agent_id, const LLUUID& session_id,
|
||||
U32 next_owner_perm,
|
||||
LLPointer<LLInventoryCallback> cb)
|
||||
{
|
||||
//check if name is equal to one of special inventory items names
|
||||
//EXT-5839
|
||||
std::string server_name = name;
|
||||
|
||||
{
|
||||
std::map<std::string, std::string>::const_iterator dictionary_iter;
|
||||
|
||||
for (dictionary_iter = LLLocalizedInventoryItemsDictionary::getInstance()->mInventoryItemsDict.begin();
|
||||
dictionary_iter != LLLocalizedInventoryItemsDictionary::getInstance()->mInventoryItemsDict.end();
|
||||
dictionary_iter++)
|
||||
{
|
||||
const std::string& localized_name = dictionary_iter->second;
|
||||
if(localized_name == name)
|
||||
{
|
||||
server_name = dictionary_iter->first;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LLMessageSystem* msg = gMessageSystem;
|
||||
msg->newMessageFast(_PREHASH_CreateInventoryItem);
|
||||
msg->nextBlock(_PREHASH_AgentData);
|
||||
@@ -871,7 +1020,7 @@ void create_inventory_item(const LLUUID& agent_id, const LLUUID& session_id,
|
||||
msg->addS8Fast(_PREHASH_Type, (S8)asset_type);
|
||||
msg->addS8Fast(_PREHASH_InvType, (S8)inv_type);
|
||||
msg->addU8Fast(_PREHASH_WearableType, (U8)wtype);
|
||||
msg->addStringFast(_PREHASH_Name, name);
|
||||
msg->addStringFast(_PREHASH_Name, server_name);
|
||||
msg->addStringFast(_PREHASH_Description, desc);
|
||||
|
||||
gAgent.sendReliableMessage();
|
||||
|
||||
@@ -3,10 +3,9 @@
|
||||
* @brief Declaration of the inventory bits that only used on the viewer.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2002&license=viewergpl$
|
||||
*
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (c) 2002-2009, Linden Research, Inc.
|
||||
*
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
@@ -211,7 +210,7 @@ public:
|
||||
// Returns true if a fetch was issued.
|
||||
bool fetch();
|
||||
|
||||
// used to help make cacheing more robust - for example, if
|
||||
// used to help make caching more robust - for example, if
|
||||
// someone is getting 4 packets but logs out after 3. the viewer
|
||||
// may never know the cache is wrong.
|
||||
enum { DESCENDENT_COUNT_UNKNOWN = -1 };
|
||||
@@ -219,7 +218,7 @@ public:
|
||||
void setDescendentCount(S32 descendents) { mDescendentCount = descendents; }
|
||||
|
||||
// file handling on the viewer. These are not meant for anything
|
||||
// other than cacheing.
|
||||
// other than caching.
|
||||
bool exportFileLocal(LLFILE* fp) const;
|
||||
bool importFileLocal(LLFILE* fp);
|
||||
void determineFolderType();
|
||||
@@ -227,6 +226,7 @@ public:
|
||||
|
||||
private:
|
||||
friend class LLInventoryModel;
|
||||
void localizeName(); // intended to be called from the LLInventoryModel
|
||||
|
||||
protected:
|
||||
LLUUID mOwnerID;
|
||||
@@ -327,6 +327,7 @@ extern LLInventoryCallbackManager gInventoryCallbacks;
|
||||
|
||||
#define NOT_WEARABLE (LLWearableType::EType)0
|
||||
|
||||
// *TODO: Find a home for these
|
||||
void create_inventory_item(const LLUUID& agent_id, const LLUUID& session_id,
|
||||
const LLUUID& parent, const LLTransactionID& transaction_id,
|
||||
const std::string& name,
|
||||
|
||||
@@ -177,10 +177,6 @@
|
||||
mouse_opaque="true" name="Copy Asset UUID" width="128">
|
||||
<on_click filter="" function="Inventory.DoToSelected" userdata="copy_uuid" />
|
||||
</menu_item_call>
|
||||
<menu_item_call bottom_delta="-18" height="18" label="Reupload..." left="0" mouse_opaque="true"
|
||||
name="Reupload..." width="128">
|
||||
<on_click filter="" function="Inventory.DoToSelected" userdata="reupload" />
|
||||
</menu_item_call>
|
||||
<menu_item_call bottom_delta="-18" height="18" label="Acquire Asset ID" left="0" mouse_opaque="true"
|
||||
name="Acquire Asset ID" width="128">
|
||||
<on_click filter="" function="Inventory.DoToSelected" userdata="acquire_asset_id" />
|
||||
|
||||
@@ -4121,6 +4121,72 @@ Abuse Report</string>
|
||||
<string name="New Script">New Script</string>
|
||||
<string name="New Note">New Note</string>
|
||||
<string name="New Folder">New Folder</string>
|
||||
<string name="Contents">Contents</string>
|
||||
<string name="Gesture">Gesture</string>
|
||||
<string name="Male Gestures">Male Gestures</string>
|
||||
<string name="Female Gestures">Female Gestures</string>
|
||||
<string name="Other Gestures">Other Gestures</string>
|
||||
<string name="Speech Gestures">Speech Gestures</string>
|
||||
<string name="Common Gestures">Common Gestures</string>
|
||||
<!-- gestures -->
|
||||
<string name="Male - Excuse me">Male - Excuse me</string>
|
||||
<string name="Male - Get lost">Male - Get lost</string>
|
||||
<string name="Male - Blow kiss">Male - Blow kiss</string>
|
||||
<string name="Male - Boo">Male - Boo</string>
|
||||
<string name="Male - Bored">Male - Bored</string>
|
||||
<string name="Male - Hey">Male - Hey</string>
|
||||
<string name="Male - Laugh">Male - Laugh</string>
|
||||
<string name="Male - Repulsed">Male - Repulsed</string>
|
||||
<string name="Male - Shrug">Male - Shrug</string>
|
||||
<string name="Male - Stick tougue out">Male - Stick tongue out</string>
|
||||
<string name="Male - Wow">Male - Wow</string>
|
||||
|
||||
<string name="Female - Chuckle">Female - Chuckle</string>
|
||||
<string name="Female - Cry">Female - Cry</string>
|
||||
<string name="Female - Embarrassed">Female - Embarrassed</string>
|
||||
<string name="Female - Excuse me">Female - Excuse me</string>
|
||||
<string name="Female - Get lost">Female - Get lost</string>
|
||||
<string name="Female - Blow kiss">Female - Blow kiss</string>
|
||||
<string name="Female - Boo">Female - Boo</string>
|
||||
<string name="Female - Bored">Female - Bored</string>
|
||||
<string name="Female - Hey">Female - Hey</string>
|
||||
<string name="Female - Hey baby">Female - Hey baby</string>
|
||||
<string name="Female - Laugh">Female - Laugh</string>
|
||||
<string name="Female - Looking good">Female - Looking good</string>
|
||||
<string name="Female - Over here">Female - Over here</string>
|
||||
<string name="Female - Please">Female - Please</string>
|
||||
<string name="Female - Repulsed">Female - Repulsed</string>
|
||||
<string name="Female - Shrug">Female - Shrug</string>
|
||||
<string name="Female - Stick tougue out">Female - Stick tongue out</string>
|
||||
<string name="Female - Wow">Female - Wow</string>
|
||||
|
||||
<string name="/bow">/bow</string>
|
||||
<string name="/clap">/clap</string>
|
||||
<string name="/count">/count</string>
|
||||
<string name="/extinguish">/extinguish</string>
|
||||
<string name="/kmb">/kmb</string>
|
||||
<string name="/muscle">/muscle</string>
|
||||
<string name="/no">/no</string>
|
||||
<string name="/no!">/no!</string>
|
||||
<string name="/paper">/paper</string>
|
||||
<string name="/pointme">/pointme</string>
|
||||
<string name="/pointyou">/pointyou</string>
|
||||
<string name="/rock">/rock</string>
|
||||
<string name="/scissor">/scissor</string>
|
||||
<string name="/smoke">/smoke</string>
|
||||
<string name="/stretch">/stretch</string>
|
||||
<string name="/whistle">/whistle</string>
|
||||
<string name="/yes">/yes</string>
|
||||
<string name="/yes!">/yes!</string>
|
||||
<string name="afk">afk</string>
|
||||
<string name="dance1">dance1</string>
|
||||
<string name="dance2">dance2</string>
|
||||
<string name="dance3">dance3</string>
|
||||
<string name="dance4">dance4</string>
|
||||
<string name="dance5">dance5</string>
|
||||
<string name="dance6">dance6</string>
|
||||
<string name="dance7">dance7</string>
|
||||
<string name="dance8">dance8</string>
|
||||
<string name="DefaultMimeType">none/none</string>
|
||||
<string name="Chat">Chat</string>
|
||||
|
||||
|
||||
@@ -47,7 +47,6 @@
|
||||
<menu_item_call name="Properties" label="Propiedades"/>
|
||||
<menu_item_call name="Rename" label="Renombrar"/>
|
||||
<menu_item_call name="Copy Asset UUID" label="Copiar Asset UUID"/>
|
||||
<menu_item_call name="Reupload..." label="Resubir..."/>
|
||||
<menu_item_call name="Acquire Asset ID" label="Adquirir Asset ID"/>
|
||||
<menu_item_call name="Cut" label="Cortar"/>
|
||||
<menu_item_call name="Copy" label="Copiar"/>
|
||||
|
||||
@@ -47,7 +47,6 @@
|
||||
<menu_item_call name="Properties" label="Propriétés"/>
|
||||
<menu_item_call name="Rename" label="Renommer"/>
|
||||
<menu_item_call name="Copy Asset UUID" label="Copier l'UUID (identifiant universel unique)"/>
|
||||
<menu_item_call name="Reupload..." label="Reupload..."/>
|
||||
<menu_item_call name="Acquire Asset ID" label="Acquérir Asset ID"/>
|
||||
<menu_item_call name="Copy" label="Copier"/>
|
||||
<menu_item_call name="Paste" label="Coller"/>
|
||||
|
||||
Reference in New Issue
Block a user