/* * Copyright 2021, Jaidyn Levesque * All rights reserved. Distributed under the terms of the MIT license. */ #ifndef CONVERSATION_H #define CONVERSATION_H #include #include #include #include #include "Observer.h" #include "Role.h" #include "Server.h" #include "User.h" class BBitmap; class ConversationItem; class ConversationView; class ProtocolLooper; class Server; typedef KeyMap UserMap; typedef KeyMap RoleMap; class Conversation : public Notifier, public Observer { public: Conversation(BString id, BMessenger msgn); ~Conversation(); BString GetId() const; void ImMessage(BMessage* msg); // Tell the ConversationView to invalidate user list void ObserveString(int32 what, BString str); void ObserveInteger(int32 what, int32 value); void ObservePointer(int32 what, void* ptr); void SetNotifyName(const char* name); void SetNotifySubject(const char* subject); bool SetNotifyIconBitmap(BBitmap* icon); BMessenger Messenger() const; void SetMessenger(BMessenger messenger); ProtocolLooper* GetProtocolLooper() const; void SetProtocolLooper(ProtocolLooper* looper); BString GetName() const; BString GetSubject() const; BBitmap* ProtocolBitmap() const; BBitmap* IconBitmap() const; ConversationView* GetView(); void ShowView(bool typing, bool userAction); ConversationItem* GetListItem(); UserMap Users(); User* UserById(BString id); Contact* GetOwnContact(); void AddUser(User* user); void RemoveUser(User* user); void SetRole(BString id, Role* role); Role* GetRole(BString id); int32 GetFlags(int32 flags) { return fRoomFlags; } private: void _WarnUser(BString message); void _LogChatMessage(BMessage* msg); status_t _GetChatLogs(BMessage* msg); void _CacheRoomFlags(); void _LoadRoomFlags(); void _EnsureCachePath(); User* _EnsureUser(BMessage* msg); Role* _GetRole(BMessage* msg); void _UpdateIcon(User* user = NULL); bool _IsDefaultIcon(BBitmap* icon); void _SortConversationList(); Server* _GetServer(); BMessenger fMessenger; ProtocolLooper* fLooper; ConversationView* fChatView; ConversationItem* fConversationItem; int32 fNotifyMessageCount; int32 fNotifyMentionCount; BString fID; BString fName; BString fSubject; BBitmap* fIcon; bool fUserIcon; BPath fCachePath; BDateTimeFormat fDateFormatter; int32 fRoomFlags; int32 fDisallowedFlags; UserMap fUsers; RoleMap fRoles; }; #endif // CONVERSATION_H