From 5c01958391700c2392c3dbd82cdb843facf70bbd Mon Sep 17 00:00:00 2001 From: "Brad Payne (Vir Linden)" Date: Fri, 4 Dec 2009 18:55:23 -0500 Subject: For EXT-2879: uncommented web-based inventory fetch. AIS fix is in process. --HG-- branch : avatar-pipeline --- indra/newview/llviewerinventory.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'indra/newview/llviewerinventory.cpp') diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp index 5bdcbc79bd..43bf9d1a6b 100644 --- a/indra/newview/llviewerinventory.cpp +++ b/indra/newview/llviewerinventory.cpp @@ -509,11 +509,13 @@ bool LLViewerInventoryCategory::fetchDescendents() // This comes from LLInventoryFilter from llfolderview.h U32 sort_order = gSavedSettings.getU32("InventorySortOrder") & 0x1; - // *NOTE - // Temporary workaround for bug EXT-2879, see ticket for details. - // Commented gAgent.getRegion()->getCapability in order to use the old system. - std::string url;//= gAgent.getRegion()->getCapability("WebFetchInventoryDescendents"); - + // *NOTE: For bug EXT-2879, originally commented out + // gAgent.getRegion()->getCapability in order to use the old + // message-based system. This has been uncommented now that + // AIS folks are aware of the issue and have a fix in process. + // see ticket for details. + + std::string url = gAgent.getRegion()->getCapability("WebFetchInventoryDescendents"); if (!url.empty()) //Capability found. Build up LLSD and use it. { LLInventoryModel::startBackgroundFetch(mUUID); -- cgit v1.3 From add459cfd2245dd116392426f12ba04365b579de Mon Sep 17 00:00:00 2001 From: Loren Shih Date: Fri, 4 Dec 2009 20:07:09 -0500 Subject: EXT-3179 : Add ability to recover broken links EXT-3168 : Add "Find Original" to InventoryPanel gear menu Broken link recovery is still work in progress. --HG-- branch : avatar-pipeline --- indra/newview/llpanelmaininventory.cpp | 50 +++++++++++- indra/newview/llviewerinventory.cpp | 90 ++++++++++++++++++++++ indra/newview/llviewerinventory.h | 5 +- .../default/xui/en/menu_inventory_gear_default.xml | 24 ++++++ 4 files changed, 167 insertions(+), 2 deletions(-) (limited to 'indra/newview/llviewerinventory.cpp') diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index 2a56a6011e..92b4c8383e 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -966,6 +966,27 @@ void LLPanelMainInventory::onCustomAction(const LLSD& userdata) preview_texture->openToSave(); } } + if (command_name == "regenerate_link") + { + LLFolderViewItem* current_item = getActivePanel()->getRootFolder()->getCurSelectedItem(); + if (!current_item) + { + return; + } + const LLUUID& item_id = current_item->getListener()->getUUID(); + LLViewerInventoryItem *item = gInventory.getItem(item_id); + item->regenerateLink(); + } + if (command_name == "find_original") + { + LLFolderViewItem* current_item = getActivePanel()->getRootFolder()->getCurSelectedItem(); + if (!current_item) + { + return; + } + current_item->getListener()->performAction(getActivePanel()->getRootFolder(), getActivePanel()->getModel(), "goto"); + } + if (command_name == "find_links") { LLFolderViewItem* current_item = getActivePanel()->getRootFolder()->getCurSelectedItem(); @@ -1017,18 +1038,45 @@ BOOL LLPanelMainInventory::isActionEnabled(const LLSD& userdata) } return FALSE; } + if (command_name == "find_original") + { + LLFolderViewItem* current_item = getActivePanel()->getRootFolder()->getCurSelectedItem(); + if (!current_item) return FALSE; + const LLUUID& item_id = current_item->getListener()->getUUID(); + const LLViewerInventoryItem *item = gInventory.getItem(item_id); + if (item && item->getIsLinkType() && !item->getIsBrokenLink()) + { + return TRUE; + } + return FALSE; + } + if (command_name == "find_links") { LLFolderViewItem* current_item = getActivePanel()->getRootFolder()->getCurSelectedItem(); if (!current_item) return FALSE; const LLUUID& item_id = current_item->getListener()->getUUID(); - LLInventoryObject *obj = gInventory.getObject(item_id); + const LLInventoryObject *obj = gInventory.getObject(item_id); if (obj && !obj->getIsLinkType() && LLAssetType::lookupCanLink(obj->getType())) { return TRUE; } return FALSE; } + + if (command_name == "regenerate_link") + { + LLFolderViewItem* current_item = getActivePanel()->getRootFolder()->getCurSelectedItem(); + if (!current_item) return FALSE; + const LLUUID& item_id = current_item->getListener()->getUUID(); + const LLViewerInventoryItem *item = gInventory.getItem(item_id); + if (item && item->getIsBrokenLink()) + { + return TRUE; + } + return FALSE; + } + return TRUE; } diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp index 5bdcbc79bd..bcb3a2e72d 100644 --- a/indra/newview/llviewerinventory.cpp +++ b/indra/newview/llviewerinventory.cpp @@ -1435,3 +1435,93 @@ void LLViewerInventoryItem::onCallingCardNameLookup(const LLUUID& id, const std: gInventory.notifyObservers(); } +class LLRegenerateLinkCollector : public LLInventoryCollectFunctor +{ +public: + LLRegenerateLinkCollector(const LLViewerInventoryItem *target_item) : mTargetItem(target_item) {} + virtual ~LLRegenerateLinkCollector() {} + virtual bool operator()(LLInventoryCategory* cat, + LLInventoryItem* item) + { + if (item) + { + if ((item->getName() == mTargetItem->getName()) && + (item->getInventoryType() == mTargetItem->getInventoryType()) && + (!item->getIsLinkType())) + { + return true; + } + } + return false; + } +protected: + const LLViewerInventoryItem* mTargetItem; +}; + +LLUUID find_possible_item_for_regeneration(const LLViewerInventoryItem *target_item) +{ + LLViewerInventoryCategory::cat_array_t cats; + LLViewerInventoryItem::item_array_t items; + /* + LLAssetIDMatches asset_id_matches(target_item->getAssetUUID()); + gInventory.collectDescendentsIf(LLUUID::null, + cats, + items, + LLInventoryModel::EXCLUDE_TRASH, + asset_id_matches); + for (LLViewerInventoryItem::item_array_t::const_iterator item_iter = items.begin(); + item_iter != items.end(); + item_iter++) + { + const LLViewerInventoryItem *item = (*item_iter); + if (!item->getIsBrokenLink()) + { + return item->getAssetUUID(); + } + } + */ + + items.clear(); + cats.clear(); + + LLRegenerateLinkCollector candidate_matches(target_item); + gInventory.collectDescendentsIf(LLUUID::null, + cats, + items, + LLInventoryModel::EXCLUDE_TRASH, + candidate_matches); + for (LLViewerInventoryItem::item_array_t::const_iterator item_iter = items.begin(); + item_iter != items.end(); + ++item_iter) + { + const LLViewerInventoryItem *item = (*item_iter); + if (true) return item->getUUID(); + } + return LLUUID::null; +} + +BOOL LLViewerInventoryItem::regenerateLink() +{ + const LLUUID target_item_id = find_possible_item_for_regeneration(this); + if (target_item_id.isNull()) + return FALSE; + LLViewerInventoryCategory::cat_array_t cats; + LLViewerInventoryItem::item_array_t items; + LLAssetIDMatches asset_id_matches(getAssetUUID()); + gInventory.collectDescendentsIf(LLUUID::null, + cats, + items, + LLInventoryModel::EXCLUDE_TRASH, + asset_id_matches); + for (LLViewerInventoryItem::item_array_t::iterator item_iter = items.begin(); + item_iter != items.end(); + item_iter++) + { + LLViewerInventoryItem *item = (*item_iter); + item->setAssetUUID(target_item_id); + item->updateServer(FALSE); + gInventory.addChangedMask(LLInventoryObserver::REBUILD, item->getUUID()); + } + gInventory.notifyObservers(); + return TRUE; +} diff --git a/indra/newview/llviewerinventory.h b/indra/newview/llviewerinventory.h index d27faffdd9..0156e7dab1 100644 --- a/indra/newview/llviewerinventory.h +++ b/indra/newview/llviewerinventory.h @@ -161,7 +161,10 @@ public: // callback void onCallingCardNameLookup(const LLUUID& id, const std::string& first_name, const std::string& last_name); - + + // If this is a broken link, try to fix it and any other identical link. + BOOL regenerateLink(); + public: BOOL mIsComplete; LLTransactionID mTransactionID; diff --git a/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml index 7a3e91d5a1..e5592c3c57 100644 --- a/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml +++ b/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml @@ -76,6 +76,8 @@ function="Inventory.GearDefault.Custom.Action" parameter="empty_lostnfound" /> + + + + + + + + + -- cgit v1.3 From 13f1ed2740664332d52b15094438aed3e3accc0e Mon Sep 17 00:00:00 2001 From: Loren Shih Date: Mon, 7 Dec 2009 11:43:24 -0500 Subject: EXT-3124 : Add lookup for finding all linked items to an item EXT-3195 : Regenerat Links sometimes pairs to library items Excluding library when repairing broken links. Reselecting original selected broken link after repairing. --HG-- branch : avatar-pipeline --- indra/newview/llpanelmaininventory.cpp | 6 ++++-- indra/newview/llviewerinventory.cpp | 23 +---------------------- 2 files changed, 5 insertions(+), 24 deletions(-) (limited to 'indra/newview/llviewerinventory.cpp') diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index 92b4c8383e..44d32cdc99 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -968,14 +968,16 @@ void LLPanelMainInventory::onCustomAction(const LLSD& userdata) } if (command_name == "regenerate_link") { - LLFolderViewItem* current_item = getActivePanel()->getRootFolder()->getCurSelectedItem(); + LLInventoryPanel *active_panel = getActivePanel(); + LLFolderViewItem* current_item = active_panel->getRootFolder()->getCurSelectedItem(); if (!current_item) { return; } - const LLUUID& item_id = current_item->getListener()->getUUID(); + const LLUUID item_id = current_item->getListener()->getUUID(); LLViewerInventoryItem *item = gInventory.getItem(item_id); item->regenerateLink(); + active_panel->setSelection(item_id, TAKE_FOCUS_NO); } if (command_name == "find_original") { diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp index f20d87a687..3019d714fd 100644 --- a/indra/newview/llviewerinventory.cpp +++ b/indra/newview/llviewerinventory.cpp @@ -1464,30 +1464,9 @@ LLUUID find_possible_item_for_regeneration(const LLViewerInventoryItem *target_i { LLViewerInventoryCategory::cat_array_t cats; LLViewerInventoryItem::item_array_t items; - /* - LLAssetIDMatches asset_id_matches(target_item->getAssetUUID()); - gInventory.collectDescendentsIf(LLUUID::null, - cats, - items, - LLInventoryModel::EXCLUDE_TRASH, - asset_id_matches); - for (LLViewerInventoryItem::item_array_t::const_iterator item_iter = items.begin(); - item_iter != items.end(); - item_iter++) - { - const LLViewerInventoryItem *item = (*item_iter); - if (!item->getIsBrokenLink()) - { - return item->getAssetUUID(); - } - } - */ - - items.clear(); - cats.clear(); LLRegenerateLinkCollector candidate_matches(target_item); - gInventory.collectDescendentsIf(LLUUID::null, + gInventory.collectDescendentsIf(gInventory.getRootFolderID(), cats, items, LLInventoryModel::EXCLUDE_TRASH, -- cgit v1.3 From ff7f3c348d5b08dfa817ebe2c9e1405879a5b8be Mon Sep 17 00:00:00 2001 From: Loren Shih Date: Mon, 7 Dec 2009 13:06:24 -0500 Subject: EXT-3124 : Add lookup for finding all linked items to an item Commented this feature out since the viewer can't ask the server to change assetIDs of its inventory items. --HG-- branch : avatar-pipeline --- indra/newview/llpanelmaininventory.cpp | 3 ++- indra/newview/llviewerinventory.cpp | 4 +++- .../skins/default/xui/en/menu_inventory_gear_default.xml | 11 ----------- 3 files changed, 5 insertions(+), 13 deletions(-) (limited to 'indra/newview/llviewerinventory.cpp') diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index 44d32cdc99..9fd92725dc 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -966,6 +966,7 @@ void LLPanelMainInventory::onCustomAction(const LLSD& userdata) preview_texture->openToSave(); } } + // This doesn't currently work, since the viewer can't change an assetID an item. if (command_name == "regenerate_link") { LLInventoryPanel *active_panel = getActivePanel(); @@ -1065,7 +1066,7 @@ BOOL LLPanelMainInventory::isActionEnabled(const LLSD& userdata) } return FALSE; } - + // This doesn't currently work, since the viewer can't change an assetID an item. if (command_name == "regenerate_link") { LLFolderViewItem* current_item = getActivePanel()->getRootFolder()->getCurSelectedItem(); diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp index 3019d714fd..5da77ecdb9 100644 --- a/indra/newview/llviewerinventory.cpp +++ b/indra/newview/llviewerinventory.cpp @@ -1481,6 +1481,8 @@ LLUUID find_possible_item_for_regeneration(const LLViewerInventoryItem *target_i return LLUUID::null; } +// This currently dosen't work, because the sim does not allow us +// to change an item's assetID. BOOL LLViewerInventoryItem::regenerateLink() { const LLUUID target_item_id = find_possible_item_for_regeneration(this); @@ -1489,7 +1491,7 @@ BOOL LLViewerInventoryItem::regenerateLink() LLViewerInventoryCategory::cat_array_t cats; LLViewerInventoryItem::item_array_t items; LLAssetIDMatches asset_id_matches(getAssetUUID()); - gInventory.collectDescendentsIf(LLUUID::null, + gInventory.collectDescendentsIf(gInventory.getRootFolderID(), cats, items, LLInventoryModel::EXCLUDE_TRASH, diff --git a/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml index e5592c3c57..4e6a07d020 100644 --- a/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml +++ b/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml @@ -111,15 +111,4 @@ function="Inventory.GearDefault.Enable" parameter="find_links" /> - - - - -- cgit v1.3