summaryrefslogtreecommitdiff
path: root/indra/newview/llinventoryfilter.cpp
diff options
context:
space:
mode:
authorAndreyL ProductEngine <andreylproductengine@lindenlab.com>2015-08-04 05:00:59 +0300
committerAndreyL ProductEngine <andreylproductengine@lindenlab.com>2015-08-04 05:00:59 +0300
commitb5378f93b298098cf841286ba6eb970ee5d855eb (patch)
treec2f395318d33ae90c12d88d4258796b7ce6db62d /indra/newview/llinventoryfilter.cpp
parent8f5676202821b9b8addb19fe8b93bac56057c6af (diff)
parent310ec101dfd2c69ecc1a51d0a3a8ea12d5fdaf7a (diff)
Merge viewer-release and become version 3.8.3
Diffstat (limited to 'indra/newview/llinventoryfilter.cpp')
-rwxr-xr-xindra/newview/llinventoryfilter.cpp90
1 files changed, 89 insertions, 1 deletions
diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp
index c054747308..003bbcafed 100755
--- a/indra/newview/llinventoryfilter.cpp
+++ b/indra/newview/llinventoryfilter.cpp
@@ -33,6 +33,8 @@
#include "llfolderviewitem.h"
#include "llinventorymodel.h"
#include "llinventorymodelbackgroundfetch.h"
+#include "llinventoryfunctions.h"
+#include "llmarketplacefunctions.h"
#include "llviewercontrol.h"
#include "llfolderview.h"
#include "llinventorybridge.h"
@@ -137,12 +139,64 @@ bool LLInventoryFilter::checkFolder(const LLUUID& folder_id) const
}
// when applying a filter, matching folders get their contents downloaded first
- if (mFilterSubString.size()
+ if (isNotDefault()
&& !gInventory.isCategoryComplete(folder_id))
{
LLInventoryModelBackgroundFetch::instance().start(folder_id);
}
+ // Marketplace folder filtering
+ const U32 filterTypes = mFilterOps.mFilterTypes;
+ const U32 marketplace_filter = FILTERTYPE_MARKETPLACE_ACTIVE | FILTERTYPE_MARKETPLACE_INACTIVE |
+ FILTERTYPE_MARKETPLACE_UNASSOCIATED | FILTERTYPE_MARKETPLACE_LISTING_FOLDER |
+ FILTERTYPE_NO_MARKETPLACE_ITEMS;
+ if (filterTypes & marketplace_filter)
+ {
+ S32 depth = depth_nesting_in_marketplace(folder_id);
+
+ if (filterTypes & FILTERTYPE_NO_MARKETPLACE_ITEMS)
+ {
+ if (depth >= 0)
+ {
+ return false;
+ }
+ }
+
+ if (filterTypes & FILTERTYPE_MARKETPLACE_LISTING_FOLDER)
+ {
+ if (depth > 1)
+ {
+ return false;
+ }
+ }
+
+ if (depth > 0)
+ {
+ LLUUID listing_uuid = nested_parent_id(folder_id, depth);
+ if (filterTypes & FILTERTYPE_MARKETPLACE_ACTIVE)
+ {
+ if (!LLMarketplaceData::instance().getActivationState(listing_uuid))
+ {
+ return false;
+ }
+ }
+ else if (filterTypes & FILTERTYPE_MARKETPLACE_INACTIVE)
+ {
+ if (!LLMarketplaceData::instance().isListed(listing_uuid) || LLMarketplaceData::instance().getActivationState(listing_uuid))
+ {
+ return false;
+ }
+ }
+ else if (filterTypes & FILTERTYPE_MARKETPLACE_UNASSOCIATED)
+ {
+ if (LLMarketplaceData::instance().isListed(listing_uuid))
+ {
+ return false;
+ }
+ }
+ }
+ }
+
// show folder links
LLViewerInventoryItem* item = gInventory.getItem(folder_id);
if (item && item->getActualType() == LLAssetType::AT_LINK_FOLDER)
@@ -502,6 +556,40 @@ void LLInventoryFilter::setFilterEmptySystemFolders()
mFilterOps.mFilterTypes |= FILTERTYPE_EMPTYFOLDERS;
}
+void LLInventoryFilter::setFilterMarketplaceActiveFolders()
+{
+ mFilterOps.mFilterTypes |= FILTERTYPE_MARKETPLACE_ACTIVE;
+}
+
+void LLInventoryFilter::setFilterMarketplaceInactiveFolders()
+{
+ mFilterOps.mFilterTypes |= FILTERTYPE_MARKETPLACE_INACTIVE;
+}
+
+void LLInventoryFilter::setFilterMarketplaceUnassociatedFolders()
+{
+ mFilterOps.mFilterTypes |= FILTERTYPE_MARKETPLACE_UNASSOCIATED;
+}
+
+void LLInventoryFilter::setFilterMarketplaceListingFolders(bool select_only_listing_folders)
+{
+ if (select_only_listing_folders)
+ {
+ mFilterOps.mFilterTypes |= FILTERTYPE_MARKETPLACE_LISTING_FOLDER;
+ setModified(FILTER_MORE_RESTRICTIVE);
+ }
+ else
+ {
+ mFilterOps.mFilterTypes &= ~FILTERTYPE_MARKETPLACE_LISTING_FOLDER;
+ setModified(FILTER_LESS_RESTRICTIVE);
+ }
+}
+
+void LLInventoryFilter::setFilterNoMarketplaceFolder()
+{
+ mFilterOps.mFilterTypes |= FILTERTYPE_NO_MARKETPLACE_ITEMS;
+}
+
void LLInventoryFilter::setFilterUUID(const LLUUID& object_id)
{
if (mFilterOps.mFilterUUID == LLUUID::null)