00001 
00032 #ifndef LL_MUTELIST_H
00033 #define LL_MUTELIST_H
00034 
00035 #include "llstring.h"
00036 #include "lluuid.h"
00037 
00038 class LLViewerObject;
00039 class LLMessageSystem;
00040 class LLMuteListObserver;
00041 
00042 
00043 class LLMute
00044 {
00045 public:
00046         
00047         enum EType { BY_NAME = 0, AGENT = 1, OBJECT = 2, GROUP = 3, COUNT = 4 };
00048         
00049         
00050         
00051         
00052         
00053         enum 
00054         {
00055                 flagTextChat            = 0x00000001,           
00056                 flagVoiceChat           = 0x00000002,           
00057                 flagParticles           = 0x00000004,           
00058                 flagObjectSounds        = 0x00000008,           
00059                 
00060                 flagAll                         = 0x0000000F            
00061         };
00062         
00063         LLMute(const LLUUID& id, const LLString& name = LLString(), EType type = BY_NAME, U32 flags = 0) 
00064         : mID(id), mName(name), mType(type),mFlags(flags) { }
00065 
00066         
00067         
00068         LLString getDisplayName() const;
00069         
00070         
00071         
00072         
00073         void setFromDisplayName(const LLString& display_name);
00074         
00075 public:
00076         LLUUID          mID;    
00077         LLString        mName;  
00078         EType           mType;  
00079         U32                     mFlags; 
00080 };
00081 
00082 class LLMuteList
00083 {
00084 public:
00085         LLMuteList();
00086         ~LLMuteList();
00087 
00088         void addObserver(LLMuteListObserver* observer);
00089         void removeObserver(LLMuteListObserver* observer);
00090 
00091         
00092         BOOL add(const LLMute& mute, U32 flags = 0);
00093 
00094         
00095         BOOL remove(const LLMute& mute, U32 flags = 0);
00096         
00097         
00098         BOOL isMuted(const LLUUID& id, const LLString& name = LLString::null, U32 flags = 0) const;
00099         
00100         
00101         BOOL isMuted(const LLUUID& id, U32 flags) const { return isMuted(id, LLString::null, flags); };
00102         
00103         BOOL isLinden(const LLString& name) const;
00104         
00105         BOOL isLoaded() const { return mIsLoaded; }
00106 
00107         std::vector<LLMute> getMutes() const;
00108         
00109         
00110         void requestFromServer(const LLUUID& agent_id);
00111 
00112         
00113         void cache(const LLUUID& agent_id);
00114 
00115 private:
00116         BOOL loadFromFile(const LLString& filename);
00117         BOOL saveToFile(const LLString& filename);
00118 
00119         void setLoaded();
00120         void notifyObservers();
00121 
00122         void updateAdd(const LLMute& mute);
00123         void updateRemove(const LLMute& mute);
00124 
00125         
00126         static void processMuteListUpdate(LLMessageSystem* msg, void**);
00127         static void processUseCachedMuteList(LLMessageSystem* msg, void**);
00128 
00129         static void onFileMuteList(void** user_data, S32 code, LLExtStat ext_status);
00130 
00131 private:
00132         struct compare_by_name
00133         {
00134                 bool operator()(const LLMute& a, const LLMute& b) const
00135                 {
00136                         return a.mName < b.mName;
00137                 }
00138         };
00139         struct compare_by_id
00140         {
00141                 bool operator()(const LLMute& a, const LLMute& b) const
00142                 {
00143                         return a.mID < b.mID;
00144                 }
00145         };
00146         typedef std::set<LLMute, compare_by_id> mute_set_t;
00147         mute_set_t mMutes;
00148         
00149         typedef std::set<LLString> string_set_t;
00150         string_set_t mLegacyMutes;
00151         
00152         typedef std::set<LLMuteListObserver*> observer_set_t;
00153         observer_set_t mObservers;
00154 
00155         BOOL mIsLoaded;
00156 
00157         friend class LLDispatchEmptyMuteList;
00158 };
00159 
00160 class LLMuteListObserver
00161 {
00162 public:
00163         virtual ~LLMuteListObserver() { }
00164         virtual void onChange() = 0;
00165 };
00166 
00167 extern LLMuteList *gMuteListp;
00168 
00169 #endif //LL_MUTELIST_H