diff options
Diffstat (limited to 'indra/newview/llinventoryobserver.h')
-rw-r--r-- | indra/newview/llinventoryobserver.h | 266 |
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 + |