summaryrefslogtreecommitdiff
path: root/indra/newview/llinventoryobserver.h
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llinventoryobserver.h')
-rw-r--r--indra/newview/llinventoryobserver.h266
1 files changed, 100 insertions, 166 deletions
diff --git a/indra/newview/llinventoryobserver.h b/indra/newview/llinventoryobserver.h
index f2a2049a51..ba70552ebc 100644
--- a/indra/newview/llinventoryobserver.h
+++ b/indra/newview/llinventoryobserver.h
@@ -2,25 +2,31 @@
* @file llinventoryobserver.h
* @brief LLInventoryObserver class header file
*
- * $LicenseInfo:firstyear=2002&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
+ * $LicenseInfo:firstyear=2002&license=viewergpl$
+ *
+ * Copyright (c) 2002-2009, Linden Research, Inc.
*
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
+ * 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
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
*
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
*
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
*
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
* $/LicenseInfo$
*/
@@ -28,7 +34,6 @@
#define LL_LLINVENTORYOBSERVERS_H
#include "lluuid.h"
-#include "llmd5.h"
#include <string>
#include <vector>
@@ -40,6 +45,7 @@ class LLViewerInventoryCategory;
// A simple abstract base class that can relay messages when the inventory
// changes.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
class LLInventoryObserver
{
public:
@@ -54,7 +60,7 @@ public:
ADD = 4, // Something added
REMOVE = 8, // Something deleted
STRUCTURE = 16, // Structural change (e.g. item or folder moved)
- CALLING_CARD = 32, // Calling card change (e.g. online, grant status, cancel)
+ CALLING_CARD = 32, // Calling card change (e.g. online, grant status, cancel)
GESTURE = 64,
REBUILD = 128, // Item UI changed (e.g. item type different)
SORT = 256, // Folder needs to be resorted.
@@ -67,104 +73,120 @@ public:
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// Class LLInventoryFetchObserver
+// Class LLInventoryCompletionObserver
//
-// Abstract class to handle fetching items, folders, etc.
+// Base class for doing something when when all observed items are locally
+// complete. Implements the changed() method of LLInventoryObserver
+// and declares a new method named done() which is called when all watched items
+// have complete information in the inventory model.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-class LLInventoryFetchObserver : public LLInventoryObserver
+
+class LLInventoryCompletionObserver : public LLInventoryObserver
{
public:
- LLInventoryFetchObserver(const LLUUID& id = LLUUID::null); // single item
- LLInventoryFetchObserver(const uuid_vec_t& ids); // multiple items
- void setFetchID(const LLUUID& id);
- void setFetchIDs(const uuid_vec_t& ids);
+ LLInventoryCompletionObserver() {}
+ virtual void changed(U32 mask);
- BOOL isFinished() const;
+ void watchItem(const LLUUID& id);
- virtual void startFetch() = 0;
- virtual void changed(U32 mask) = 0;
- virtual void done() {};
protected:
+ virtual void done() = 0;
+
uuid_vec_t mComplete;
uuid_vec_t mIncomplete;
- uuid_vec_t mIDs;
};
+
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// Class LLInventoryFetchItemsObserver
+// Class LLInventoryFetchObserver
//
-// Fetches inventory items, calls done() when all inventory has arrived.
+// This class is much like the LLInventoryCompletionObserver, except
+// that it handles all the the fetching necessary. Override the done()
+// method to do the thing you want.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-class LLInventoryFetchItemsObserver : public LLInventoryFetchObserver
+
+class LLInventoryFetchObserver : public LLInventoryObserver
{
public:
- LLInventoryFetchItemsObserver(const LLUUID& item_id = LLUUID::null);
- LLInventoryFetchItemsObserver(const uuid_vec_t& item_ids);
-
- /*virtual*/ void startFetch();
- /*virtual*/ void changed(U32 mask);
-private:
- LLTimer mFetchingPeriod;
-
- /**
- * Period of waiting a notification when requested items get added into inventory.
- */
- static const F32 FETCH_TIMER_EXPIRY;
+ LLInventoryFetchObserver(bool retry_if_missing = false);
+ virtual void changed(U32 mask);
+
+ bool isEverythingComplete() const;
+ void fetch(const uuid_vec_t& ids);
+ virtual void done() {};
+
+protected:
+ bool mRetryIfMissing;
+ uuid_vec_t mComplete;
+ uuid_vec_t mIncomplete;
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class LLInventoryFetchDescendentsObserver
//
-// Fetches children of a category/folder, calls done() when all
-// inventory has arrived.
+// This class is much like the LLInventoryCompletionObserver, except
+// that it handles fetching based on category. Override the done()
+// method to do the thing you want.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-class LLInventoryFetchDescendentsObserver : public LLInventoryFetchObserver
+class LLInventoryFetchDescendentsObserver : public LLInventoryObserver
{
public:
- LLInventoryFetchDescendentsObserver(const LLUUID& cat_id = LLUUID::null);
- LLInventoryFetchDescendentsObserver(const uuid_vec_t& cat_ids);
+ LLInventoryFetchDescendentsObserver() {}
+ virtual void changed(U32 mask);
+
+ void fetch(const uuid_vec_t& ids);
+ bool isEverythingComplete() const;
+ virtual void done() = 0;
- /*virtual*/ void startFetch();
- /*virtual*/ void changed(U32 mask);
protected:
- BOOL isCategoryComplete(const LLViewerInventoryCategory* cat) const;
+ bool isComplete(LLViewerInventoryCategory* cat);
+ uuid_vec_t mIncomplete;
+ uuid_vec_t mComplete;
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class LLInventoryFetchComboObserver
//
-// Does an appropriate combination of fetch descendents and
-// item fetches based on completion of categories and items. This is optimized
-// to not fetch item_ids that are descendents of any of the folder_ids.
+// This class does an appropriate combination of fetch descendents and
+// item fetches based on completion of categories and items. Much like
+// the fetch and fetch descendents, this will call done() when everything
+// has arrived.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
class LLInventoryFetchComboObserver : public LLInventoryObserver
{
public:
- LLInventoryFetchComboObserver(const uuid_vec_t& folder_ids,
- const uuid_vec_t& item_ids);
- ~LLInventoryFetchComboObserver();
- /*virtual*/ void changed(U32 mask);
- void startFetch();
+ LLInventoryFetchComboObserver() : mDone(false) {}
+ virtual void changed(U32 mask);
+
+ void fetch(const uuid_vec_t& folder_ids, const uuid_vec_t& item_ids);
virtual void done() = 0;
+
protected:
- LLInventoryFetchItemsObserver *mFetchItems;
- LLInventoryFetchDescendentsObserver *mFetchDescendents;
+ bool mDone;
+ uuid_vec_t mCompleteFolders;
+ uuid_vec_t mIncompleteFolders;
+ uuid_vec_t mCompleteItems;
+ uuid_vec_t mIncompleteItems;
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class LLInventoryExistenceObserver
//
-// Used as a base class for doing something when all the
-// observed item ids exist in the inventory somewhere.
+// This class is used as a base class for doing somethign when all the
+// observed item ids exist in the inventory somewhere. You can derive
+// a class from this class and implement the done() method to do
+// something useful.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
class LLInventoryExistenceObserver : public LLInventoryObserver
{
public:
LLInventoryExistenceObserver() {}
- /*virtual*/ void changed(U32 mask);
+ virtual void changed(U32 mask);
void watchItem(const LLUUID& id);
+
protected:
virtual void done() = 0;
uuid_vec_t mExist;
@@ -172,46 +194,20 @@ protected:
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// Class LLInventoryMovedObserver
+// Class LLInventoryAddedObserver
//
-// This class is used as a base class for doing something when all the
-// item for observed asset ids were added into the inventory.
+// This class is used as a base class for doing something when
+// a new item arrives in inventory.
+// It does not watch for a certain UUID, rather it acts when anything is added
// Derive a class from this class and implement the done() method to do
// something useful.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-class LLInventoryAddItemByAssetObserver : public LLInventoryObserver
-{
-public:
- LLInventoryAddItemByAssetObserver() : mIsDirty(false) {}
- virtual void changed(U32 mask);
-
- void watchAsset(const LLUUID& asset_id);
- bool isAssetWatched(const LLUUID& asset_id);
-
-protected:
- virtual void onAssetAdded(const LLUUID& asset_id) {}
- virtual void done() = 0;
-
- typedef std::vector<LLUUID> item_ref_t;
- item_ref_t mAddedItems;
- item_ref_t mWatchedAssets;
-
-private:
- bool mIsDirty;
-};
-
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// Class LLInventoryAddedObserver
-//
-// Base class for doing something when a new item arrives in inventory.
-// It does not watch for a certain UUID, rather it acts when anything is added
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
class LLInventoryAddedObserver : public LLInventoryObserver
{
public:
LLInventoryAddedObserver() : mAdded() {}
- /*virtual*/ void changed(U32 mask);
+ virtual void changed(U32 mask);
protected:
virtual void done() = 0;
@@ -222,15 +218,18 @@ protected:
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class LLInventoryTransactionObserver
//
-// Base class for doing something when an inventory transaction completes.
-// NOTE: This class is not quite complete. Avoid using unless you fix up its
-// functionality gaps.
+// Class which can be used as a base class for doing something when an
+// inventory transaction completes.
+//
+// *NOTE: This class is not quite complete. Avoid using unless you fix up it's
+// functionality gaps.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
class LLInventoryTransactionObserver : public LLInventoryObserver
{
public:
LLInventoryTransactionObserver(const LLTransactionID& transaction_id);
- /*virtual*/ void changed(U32 mask);
+ virtual void changed(U32 mask);
protected:
virtual void done(const uuid_vec_t& folders, const uuid_vec_t& items) = 0;
@@ -238,71 +237,6 @@ protected:
LLTransactionID mTransactionID;
};
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// Class LLInventoryCompletionObserver
-//
-// Base class for doing something when when all observed items are locally
-// complete. Implements the changed() method of LLInventoryObserver
-// and declares a new method named done() which is called when all watched items
-// have complete information in the inventory model.
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-class LLInventoryCompletionObserver : public LLInventoryObserver
-{
-public:
- LLInventoryCompletionObserver() {}
- /*virtual*/ void changed(U32 mask);
-
- void watchItem(const LLUUID& id);
-
-protected:
- virtual void done() = 0;
-
- uuid_vec_t mComplete;
- uuid_vec_t mIncomplete;
-};
-
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// Class LLInventoryCategoriesObserver
-//
-// This class is used for monitoring a list of inventory categories
-// and firing a callback when there are changes in any of them.
-// Categories are identified by their UUIDs.
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-class LLInventoryCategoriesObserver : public LLInventoryObserver
-{
-public:
- typedef boost::function<void()> callback_t;
-
- LLInventoryCategoriesObserver() {};
- virtual void changed(U32 mask);
-
- /**
- * Add cat_id to the list of observed categories with a
- * callback fired on category being changed.
- *
- * @return "true" if category was added, "false" if it could
- * not be found.
- */
- bool addCategory(const LLUUID& cat_id, callback_t cb);
- void removeCategory(const LLUUID& cat_id);
-
-protected:
- struct LLCategoryData
- {
- LLCategoryData(const LLUUID& cat_id, callback_t cb, S32 version, S32 num_descendents);
-
- callback_t mCallback;
- S32 mVersion;
- S32 mDescendentsCount;
- LLMD5 mItemNameHash;
- bool mIsNameHashInitialized;
- LLUUID mCatID;
- };
-
- typedef std::map<LLUUID, LLCategoryData> category_map_t;
- typedef category_map_t::value_type category_map_value_t;
-
- category_map_t mCategoryMap;
-};
#endif // LL_LLINVENTORYOBSERVERS_H
+