SL-18629 WIP Replacing UDP creation messages with callback based AIS
parent
e364b90d61
commit
a777a0b27e
|
|
@ -1703,12 +1703,17 @@ void LLAppearanceMgr::shallowCopyCategory(const LLUUID& src_id, const LLUUID& ds
|
|||
}
|
||||
// USES UDP PATH
|
||||
// D567 needs to carry over thumbnail info
|
||||
LLUUID subfolder_id = gInventory.createNewCategory( parent_id,
|
||||
LLFolderType::FT_NONE,
|
||||
src_cat->getName());
|
||||
shallowCopyCategoryContents(src_id, subfolder_id, cb);
|
||||
gInventory.createNewCategory(
|
||||
parent_id,
|
||||
LLFolderType::FT_NONE,
|
||||
src_cat->getName(),
|
||||
[src_id, cb](const LLUUID &new_id)
|
||||
{
|
||||
LLAppearanceMgr::getInstance()->shallowCopyCategoryContents(src_id, new_id, cb);
|
||||
|
||||
gInventory.notifyObservers();
|
||||
gInventory.notifyObservers();
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
void LLAppearanceMgr::slamCategoryLinks(const LLUUID& src_id, const LLUUID& dst_id,
|
||||
|
|
@ -2730,21 +2735,27 @@ void LLAppearanceMgr::wearCategoryFinal(LLUUID& cat_id, bool copy_items, bool ap
|
|||
|
||||
// UDP PATH
|
||||
// D567 needs to carry over thumbnail info if present
|
||||
LLUUID new_cat_id = gInventory.createNewCategory(
|
||||
gInventory.createNewCategory(
|
||||
pid,
|
||||
LLFolderType::FT_NONE,
|
||||
name);
|
||||
name,
|
||||
[cat_id, append](const LLUUID& new_cat_id)
|
||||
{
|
||||
LLInventoryModel::cat_array_t* cats;
|
||||
LLInventoryModel::item_array_t* items;
|
||||
gInventory.getDirectDescendentsOf(cat_id, cats, items);
|
||||
// Create a CopyMgr that will copy items, manage its own destruction
|
||||
new LLCallAfterInventoryCopyMgr(
|
||||
*items, new_cat_id, std::string("wear_inventory_category_callback"),
|
||||
boost::bind(&LLAppearanceMgr::wearInventoryCategoryOnAvatar,
|
||||
LLAppearanceMgr::getInstance(),
|
||||
gInventory.getCategory(new_cat_id),
|
||||
append));
|
||||
|
||||
// Create a CopyMgr that will copy items, manage its own destruction
|
||||
new LLCallAfterInventoryCopyMgr(
|
||||
*items, new_cat_id, std::string("wear_inventory_category_callback"),
|
||||
boost::bind(&LLAppearanceMgr::wearInventoryCategoryOnAvatar,
|
||||
LLAppearanceMgr::getInstance(),
|
||||
gInventory.getCategory(new_cat_id),
|
||||
append));
|
||||
|
||||
// BAP fixes a lag in display of created dir.
|
||||
gInventory.notifyObservers();
|
||||
// BAP fixes a lag in display of created dir.
|
||||
gInventory.notifyObservers();
|
||||
}
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -4004,11 +4015,14 @@ void LLAppearanceMgr::makeNewOutfitLinks(const std::string& new_folder_name, boo
|
|||
{
|
||||
// UDP PATH, should remove
|
||||
// D567 copy thumbnail info from source folder
|
||||
LLUUID folder_id = gInventory.createNewCategory(
|
||||
gInventory.createNewCategory(
|
||||
parent_id,
|
||||
LLFolderType::FT_OUTFIT,
|
||||
new_folder_name);
|
||||
onOutfitFolderCreated(folder_id, show_panel);
|
||||
new_folder_name,
|
||||
[show_panel](const LLUUID &new_cat_id)
|
||||
{
|
||||
LLAppearanceMgr::getInstance()->onOutfitFolderCreated(new_cat_id, show_panel);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -230,18 +230,31 @@ void LLPanelMarketplaceListings::onTabChange()
|
|||
|
||||
void LLPanelMarketplaceListings::onAddButtonClicked()
|
||||
{
|
||||
// Find active panel
|
||||
LLInventoryPanel* panel = (LLInventoryPanel*)getChild<LLTabContainer>("marketplace_filter_tabs")->getCurrentPanel();
|
||||
if (panel)
|
||||
{
|
||||
LLUUID marketplacelistings_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MARKETPLACE_LISTINGS, false);
|
||||
llassert(marketplacelistings_id.notNull());
|
||||
LLFolderType::EType preferred_type = LLFolderType::lookup("category");
|
||||
LLUUID category = gInventory.createNewCategory(marketplacelistings_id, preferred_type, LLStringUtil::null);
|
||||
gInventory.notifyObservers();
|
||||
panel->setSelectionByID(category, TRUE);
|
||||
panel->getRootFolder()->setNeedsAutoRename(TRUE);
|
||||
LLUUID marketplacelistings_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MARKETPLACE_LISTINGS, false);
|
||||
llassert(marketplacelistings_id.notNull());
|
||||
LLFolderType::EType preferred_type = LLFolderType::lookup("category");
|
||||
LLHandle<LLPanel> handle = getHandle();
|
||||
gInventory.createNewCategory(
|
||||
marketplacelistings_id,
|
||||
preferred_type,
|
||||
LLStringUtil::null,
|
||||
[handle](const LLUUID &new_cat_id)
|
||||
{
|
||||
// Find active panel
|
||||
LLPanel *marketplace_panel = handle.get();
|
||||
if (!marketplace_panel)
|
||||
{
|
||||
return;
|
||||
}
|
||||
LLInventoryPanel* panel = (LLInventoryPanel*)marketplace_panel->getChild<LLTabContainer>("marketplace_filter_tabs")->getCurrentPanel();
|
||||
if (panel)
|
||||
{
|
||||
gInventory.notifyObservers();
|
||||
panel->setSelectionByID(new_cat_id, TRUE);
|
||||
panel->getRootFolder()->setNeedsAutoRename(TRUE);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
void LLPanelMarketplaceListings::onAuditButtonClicked()
|
||||
|
|
|
|||
|
|
@ -165,35 +165,11 @@ void LLFloaterOpenObject::moveToInventory(bool wear, bool replace)
|
|||
|
||||
inventory_func_type func = boost::bind(LLFloaterOpenObject::callbackCreateInventoryCategory,_1,object_id,wear,replace);
|
||||
// D567 copy thumbnail info
|
||||
LLUUID category_id = gInventory.createNewCategory(parent_category_id,
|
||||
LLFolderType::FT_NONE,
|
||||
name,
|
||||
func);
|
||||
|
||||
//If we get a null category ID, we are using a capability in createNewCategory and we will
|
||||
//handle the following in the callbackCreateInventoryCategory routine.
|
||||
// D567 review
|
||||
if ( category_id.notNull() )
|
||||
{
|
||||
LLCatAndWear* data = new LLCatAndWear;
|
||||
data->mCatID = category_id;
|
||||
data->mWear = wear;
|
||||
data->mFolderResponded = false;
|
||||
data->mReplace = replace;
|
||||
|
||||
// Copy and/or move the items into the newly created folder.
|
||||
// Ignore any "you're going to break this item" messages.
|
||||
BOOL success = move_inv_category_world_to_agent(object_id, category_id, TRUE,
|
||||
callbackMoveInventory,
|
||||
(void*)data);
|
||||
if (!success)
|
||||
{
|
||||
delete data;
|
||||
data = NULL;
|
||||
|
||||
LLNotificationsUtil::add("OpenObjectCannotCopy");
|
||||
}
|
||||
}
|
||||
gInventory.createNewCategory(
|
||||
parent_category_id,
|
||||
LLFolderType::FT_NONE,
|
||||
name,
|
||||
func);
|
||||
}
|
||||
|
||||
// static
|
||||
|
|
|
|||
|
|
@ -478,14 +478,24 @@ void LLFriendCardsManager::ensureFriendsFolderExists()
|
|||
LL_WARNS() << "Failed to find \"" << cat_name << "\" category descendents in Category Tree." << LL_ENDL;
|
||||
}
|
||||
|
||||
friends_folder_ID = gInventory.createNewCategory(calling_cards_folder_ID,
|
||||
LLFolderType::FT_CALLINGCARD, get_friend_folder_name());
|
||||
|
||||
gInventory.createNewCategory(friends_folder_ID,
|
||||
LLFolderType::FT_CALLINGCARD, get_friend_all_subfolder_name());
|
||||
|
||||
// Now when we have all needed folders we can sync their contents with buddies list.
|
||||
syncFriendsFolder();
|
||||
gInventory.createNewCategory(
|
||||
calling_cards_folder_ID,
|
||||
LLFolderType::FT_CALLINGCARD,
|
||||
get_friend_folder_name(),
|
||||
[](const LLUUID &new_category_id)
|
||||
{
|
||||
gInventory.createNewCategory(
|
||||
new_category_id,
|
||||
LLFolderType::FT_CALLINGCARD,
|
||||
get_friend_all_subfolder_name(),
|
||||
[](const LLUUID &new_category_id)
|
||||
{
|
||||
// Now when we have all needed folders we can sync their contents with buddies list.
|
||||
LLFriendCardsManager::getInstance()->syncFriendsFolder();
|
||||
}
|
||||
);
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -510,11 +520,16 @@ void LLFriendCardsManager::ensureFriendsAllFolderExists()
|
|||
LL_WARNS() << "Failed to find \"" << cat_name << "\" category descendents in Category Tree." << LL_ENDL;
|
||||
}
|
||||
|
||||
friends_all_folder_ID = gInventory.createNewCategory(friends_folder_ID,
|
||||
LLFolderType::FT_CALLINGCARD, get_friend_all_subfolder_name());
|
||||
|
||||
// Now when we have all needed folders we can sync their contents with buddies list.
|
||||
syncFriendsFolder();
|
||||
gInventory.createNewCategory(
|
||||
friends_folder_ID,
|
||||
LLFolderType::FT_CALLINGCARD,
|
||||
get_friend_all_subfolder_name(),
|
||||
[](const LLUUID &new_cat_id)
|
||||
{
|
||||
// Now when we have all needed folders we can sync their contents with buddies list.
|
||||
LLFriendCardsManager::getInstance()->syncFriendsFolder();
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -861,22 +861,6 @@ void open_marketplace_listings()
|
|||
LLFloaterReg::showInstance("marketplace_listings");
|
||||
}
|
||||
|
||||
// Create a new folder in destFolderId with the same name as the item name and return the uuid of the new folder
|
||||
// Note: this is used locally in various situation where we need to wrap an item into a special folder
|
||||
LLUUID create_folder_for_item(LLInventoryItem* item, const LLUUID& destFolderId)
|
||||
{
|
||||
llassert(item);
|
||||
llassert(destFolderId.notNull());
|
||||
|
||||
LLUUID created_folder_id = gInventory.createNewCategory(destFolderId, LLFolderType::FT_NONE, item->getName());
|
||||
gInventory.notifyObservers();
|
||||
|
||||
// *TODO : Create different notifications for the various cases
|
||||
LLNotificationsUtil::add("OutboxFolderCreated");
|
||||
|
||||
return created_folder_id;
|
||||
}
|
||||
|
||||
///----------------------------------------------------------------------------
|
||||
// Marketplace functions
|
||||
//
|
||||
|
|
@ -1753,28 +1737,36 @@ bool validate_marketplacelistings(
|
|||
}
|
||||
cb(message,depth,LLError::LEVEL_WARN);
|
||||
}
|
||||
LLUUID folder_uuid = gInventory.createNewCategory(parent_uuid, new_folder_type, folder_name);
|
||||
|
||||
// Move each item to the new folder
|
||||
while (!items_vector_it->second.empty())
|
||||
std::vector<LLUUID> &uuid_vector = items_vector_it->second;
|
||||
gInventory.createNewCategory(
|
||||
parent_uuid,
|
||||
new_folder_type,
|
||||
folder_name,
|
||||
[uuid_vector, cb, indent, depth, parent_uuid, notify_observers](const LLUUID &new_category_id)
|
||||
{
|
||||
LLViewerInventoryItem* viewer_inv_item = gInventory.getItem(items_vector_it->second.back());
|
||||
if (cb)
|
||||
// Move each item to the new folder
|
||||
std::vector<LLUUID>::reverse_iterator iter = uuid_vector.rbegin();
|
||||
while (iter != uuid_vector.rend())
|
||||
{
|
||||
std::string message = indent + viewer_inv_item->getName() + LLTrans::getString("Marketplace Validation Warning Move");
|
||||
cb(message,depth,LLError::LEVEL_WARN);
|
||||
LLViewerInventoryItem* viewer_inv_item = gInventory.getItem(*iter);
|
||||
if (cb)
|
||||
{
|
||||
std::string message = indent + viewer_inv_item->getName() + LLTrans::getString("Marketplace Validation Warning Move");
|
||||
cb(message, depth, LLError::LEVEL_WARN);
|
||||
}
|
||||
gInventory.changeItemParent(viewer_inv_item, new_category_id, true);
|
||||
iter++;
|
||||
}
|
||||
|
||||
// Next type
|
||||
update_marketplace_category(parent_uuid);
|
||||
update_marketplace_category(new_category_id);
|
||||
if (notify_observers)
|
||||
{
|
||||
gInventory.notifyObservers();
|
||||
}
|
||||
gInventory.changeItemParent(viewer_inv_item, folder_uuid, true);
|
||||
items_vector_it->second.pop_back();
|
||||
}
|
||||
|
||||
// Next type
|
||||
update_marketplace_category(parent_uuid);
|
||||
update_marketplace_category(folder_uuid);
|
||||
if (notify_observers)
|
||||
{
|
||||
gInventory.notifyObservers();
|
||||
}
|
||||
);
|
||||
items_vector_it++;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1696,9 +1696,21 @@ void menu_create_inventory_item(LLInventoryPanel* panel, LLFolderBridge *bridge,
|
|||
parent_id = gInventory.getRootFolderID();
|
||||
}
|
||||
|
||||
LLUUID category = gInventory.createNewCategory(parent_id, preferred_type, LLStringUtil::null);
|
||||
gInventory.notifyObservers();
|
||||
panel->setSelectionByID(category, TRUE);
|
||||
LLHandle<LLPanel> handle = panel->getHandle();
|
||||
gInventory.createNewCategory(
|
||||
parent_id,
|
||||
preferred_type,
|
||||
LLStringUtil::null,
|
||||
[handle](const LLUUID &new_category_id)
|
||||
{
|
||||
gInventory.notifyObservers();
|
||||
LLInventoryPanel* panel = static_cast<LLInventoryPanel*>(handle.get());
|
||||
if (panel)
|
||||
{
|
||||
panel->setSelectionByID(new_category_id, TRUE);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
else if ("lsl" == type_name)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -5898,42 +5898,47 @@ void container_inventory_arrived(LLViewerObject* object,
|
|||
{
|
||||
// create a new inventory category to put this in
|
||||
LLUUID cat_id;
|
||||
cat_id = gInventory.createNewCategory(gInventory.getRootFolderID(),
|
||||
LLFolderType::FT_NONE,
|
||||
LLTrans::getString("AcquiredItems"));
|
||||
gInventory.createNewCategory(
|
||||
gInventory.getRootFolderID(),
|
||||
LLFolderType::FT_NONE,
|
||||
LLTrans::getString("AcquiredItems"),
|
||||
[inventory](const LLUUID &new_cat_id)
|
||||
{
|
||||
LLInventoryObject::object_list_t::const_iterator it = inventory->begin();
|
||||
LLInventoryObject::object_list_t::const_iterator end = inventory->end();
|
||||
for (; it != end; ++it)
|
||||
{
|
||||
if ((*it)->getType() != LLAssetType::AT_CATEGORY)
|
||||
{
|
||||
LLInventoryObject* obj = (LLInventoryObject*)(*it);
|
||||
LLInventoryItem* item = (LLInventoryItem*)(obj);
|
||||
LLUUID item_id;
|
||||
item_id.generate();
|
||||
time_t creation_date_utc = time_corrected();
|
||||
LLPointer<LLViewerInventoryItem> new_item
|
||||
= new LLViewerInventoryItem(item_id,
|
||||
new_cat_id,
|
||||
item->getPermissions(),
|
||||
item->getAssetUUID(),
|
||||
item->getType(),
|
||||
item->getInventoryType(),
|
||||
item->getName(),
|
||||
item->getDescription(),
|
||||
LLSaleInfo::DEFAULT,
|
||||
item->getFlags(),
|
||||
creation_date_utc);
|
||||
new_item->updateServer(TRUE);
|
||||
gInventory.updateItem(new_item);
|
||||
}
|
||||
}
|
||||
gInventory.notifyObservers();
|
||||
|
||||
LLInventoryObject::object_list_t::const_iterator it = inventory->begin();
|
||||
LLInventoryObject::object_list_t::const_iterator end = inventory->end();
|
||||
for ( ; it != end; ++it)
|
||||
{
|
||||
if ((*it)->getType() != LLAssetType::AT_CATEGORY)
|
||||
{
|
||||
LLInventoryObject* obj = (LLInventoryObject*)(*it);
|
||||
LLInventoryItem* item = (LLInventoryItem*)(obj);
|
||||
LLUUID item_id;
|
||||
item_id.generate();
|
||||
time_t creation_date_utc = time_corrected();
|
||||
LLPointer<LLViewerInventoryItem> new_item
|
||||
= new LLViewerInventoryItem(item_id,
|
||||
cat_id,
|
||||
item->getPermissions(),
|
||||
item->getAssetUUID(),
|
||||
item->getType(),
|
||||
item->getInventoryType(),
|
||||
item->getName(),
|
||||
item->getDescription(),
|
||||
LLSaleInfo::DEFAULT,
|
||||
item->getFlags(),
|
||||
creation_date_utc);
|
||||
new_item->updateServer(TRUE);
|
||||
gInventory.updateItem(new_item);
|
||||
}
|
||||
}
|
||||
gInventory.notifyObservers();
|
||||
if(active_panel)
|
||||
{
|
||||
active_panel->setSelection(cat_id, TAKE_FOCUS_NO);
|
||||
}
|
||||
LLInventoryPanel *active_panel = LLInventoryPanel::getActiveInventoryPanel();
|
||||
if (active_panel)
|
||||
{
|
||||
active_panel->setSelection(new_cat_id, TAKE_FOCUS_NO);
|
||||
}
|
||||
});
|
||||
}
|
||||
else if (inventory->size() == 2)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue