llfriendcard.h
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:5k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llfriendcard.h
  3.  * @brief Definition of classes to process Friends Cards
  4.  *
  5.  * $LicenseInfo:firstyear=2002&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2002-2010, Linden Research, Inc.
  8.  * 
  9.  * Second Life Viewer Source Code
  10.  * The source code in this file ("Source Code") is provided by Linden Lab
  11.  * to you under the terms of the GNU General Public License, version 2.0
  12.  * ("GPL"), unless you have obtained a separate licensing agreement
  13.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  14.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  15.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  16.  * 
  17.  * There are special exceptions to the terms and conditions of the GPL as
  18.  * it is applied to this Source Code. View the full text of the exception
  19.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  20.  * online at
  21.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  22.  * 
  23.  * By copying, modifying or distributing this software, you acknowledge
  24.  * that you have read and understood your obligations described above,
  25.  * and agree to abide by those obligations.
  26.  * 
  27.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  28.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  29.  * COMPLETENESS OR PERFORMANCE.
  30.  * $/LicenseInfo$
  31.  */
  32. #ifndef LL_LLFRIENDCARD_H
  33. #define LL_LLFRIENDCARD_H
  34. #include "llcallingcard.h"
  35. #include "llinventorymodel.h" // for LLInventoryModel::item_array_t
  36. class LLViewerInventoryItem;
  37. class LLFriendCardsManager
  38. : public LLSingleton<LLFriendCardsManager>
  39. , public LLFriendObserver
  40. {
  41. LOG_CLASS(LLFriendCardsManager);
  42. friend class LLSingleton<LLFriendCardsManager>;
  43. friend class CreateFriendCardCallback;
  44. public:
  45. typedef std::map<LLUUID, std::vector<LLUUID> > folderid_buddies_map_t;
  46. // LLFriendObserver implementation
  47. void changed(U32 mask)
  48. {
  49. onFriendListUpdate(mask);
  50. }
  51. /**
  52.  * Determines if specified Inventory Calling Card exists in any of lists 
  53.  * in the Calling Card/Friends/ folder (Default, or Custom)
  54.  */
  55. bool isItemInAnyFriendsList(const LLViewerInventoryItem* item);
  56. /**
  57.  * Checks if specified category is contained in the Calling Card/Friends folder and 
  58.  * determines if specified Inventory Object exists in that category.
  59.  */
  60. bool isObjDirectDescendentOfCategory(const LLInventoryObject* obj, const LLViewerInventoryCategory* cat) const;
  61. /**
  62.  * Checks is the specified category is in the Calling Card/Friends folder
  63.  */
  64. bool isCategoryInFriendFolder(const LLViewerInventoryCategory* cat) const;
  65. /**
  66.  * Checks is the specified category is a Friend folder or any its subfolder
  67.  */
  68. bool isAnyFriendCategory(const LLUUID& catID) const;
  69. /**
  70.  * Checks whether "Friends" and "Friends/All" folders exist in "Calling Cards" category
  71.  * (creates them otherwise) and fetches their contents to synchronize with Agent's Friends List.
  72.  */
  73. void syncFriendCardsFolders();
  74. /*!
  75.  * brief
  76.  * Collects folders' IDs with the buddies' IDs in the Inventory Calling Card/Friends folder.
  77.  * 
  78.  * param folderBuddiesMap
  79.  * map into collected data will be put. It will be cleared before adding new data.
  80.  * 
  81.  * Each item in the out map is a pair where first is an LLViewerInventoryCategory UUID,
  82.  * second is a vector with UUID of Avatars from this folder.
  83.  * 
  84.  */
  85. void collectFriendsLists(folderid_buddies_map_t& folderBuddiesMap) const;
  86. private:
  87. typedef boost::function<void()> callback_t;
  88. LLFriendCardsManager();
  89. ~LLFriendCardsManager();
  90. /**
  91.  * Stores buddy id to avoid sent create_inventory_callingcard several time for the same Avatar
  92.  */
  93. void putAvatarData(const LLUUID& avatarID);
  94. /**
  95.  * Extracts buddy id of Created Friend Card
  96.  */
  97. const LLUUID extractAvatarID(const LLUUID& avatarID);
  98. bool isAvatarDataStored(const LLUUID& avatarID) const
  99. {
  100. return (mBuddyIDSet.end() != mBuddyIDSet.find(avatarID));
  101. }
  102. const LLUUID& findChildFolderUUID(const LLUUID& parentFolderUUID, const std::string& localizedName) const;
  103. const LLUUID& findFriendFolderUUIDImpl() const;
  104. const LLUUID& findFriendAllSubfolderUUIDImpl() const;
  105. const LLUUID& findFriendCardInventoryUUIDImpl(const LLUUID& avatarID);
  106. void findMatchedFriendCards(const LLUUID& avatarID, LLInventoryModel::item_array_t& items) const;
  107. void fetchAndCheckFolderDescendents(const LLUUID& folder_id, callback_t cb);
  108. /**
  109.  * Checks whether "Calling Cards/Friends" folder exists. If not, creates it with "All"
  110.  * sub-folder and synchronizes its contents with buddies list.
  111.  */
  112. void ensureFriendsFolderExists();
  113. /**
  114.  * Checks whether "Calling Cards/Friends/All" folder exists. If not, creates it and
  115.  * synchronizes its contents with buddies list.
  116.  */
  117. void ensureFriendsAllFolderExists();
  118. /**
  119.  * Synchronizes content of the Calling Card/Friends/All Global Inventory folder with Agent's Friend List
  120.  */
  121. void syncFriendsFolder();
  122. /**
  123.  * Adds avatar specified by its UUID into the Calling Card/Friends/All Global Inventory folder
  124.  */
  125. void addFriendCardToInventory(const LLUUID& avatarID);
  126. /**
  127.  * Removes an avatar specified by its UUID from the Calling Card/Friends/All Global Inventory folder
  128.  * and from the all Custom Folders
  129.  */
  130. void removeFriendCardFromInventory(const LLUUID& avatarID);
  131. void onFriendListUpdate(U32 changed_mask);
  132. private:
  133. typedef std::set<LLUUID> avatar_uuid_set_t;
  134. avatar_uuid_set_t mBuddyIDSet;
  135. };
  136. #endif // LL_LLFRIENDCARD_H