/** * @file user_list_manager.h * @ingroup Lobby * @brief TODO: Document this. */ #ifndef COCKATRICE_USER_LIST_MANAGER_H #define COCKATRICE_USER_LIST_MANAGER_H #include "pb/serverinfo_user.pb.h" #include "user_list_proxy.h" #include #include class AbstractClient; class Event_AddToList; class Event_ListRooms; class Event_RemoveFromList; class Event_UserJoined; class Event_UserLeft; class Response; class ServerInfo_User; class TabSupervisor; class UserListManager : public QObject, public UserListProxy { Q_OBJECT private: AbstractClient *client; ServerInfo_User *ownUserInfo; QMap onlineUsers, buddyUsers, ignoredUsers; private slots: void setOwnUserInfo(const ServerInfo_User &userInfo); void populateInitialOnlineUsers(); void processListUsersResponse(const Response &response); void processUserJoinedEvent(const Event_UserJoined &event); void processUserLeftEvent(const Event_UserLeft &event); void buddyListReceived(const QList &_buddyList); void ignoreListReceived(const QList &_ignoreList); void processAddToListEvent(const Event_AddToList &event); void processRemoveFromListEvent(const Event_RemoveFromList &event); public: explicit UserListManager(AbstractClient *_client, QObject *parent = nullptr); ~UserListManager() override; [[nodiscard]] QMap getAllUsersList() const { return onlineUsers; } [[nodiscard]] QMap getBuddyList() const { return buddyUsers; } [[nodiscard]] QMap getIgnoreList() const { return ignoredUsers; } bool isOwnUserRegistered() const override; QString getOwnUsername() const override; bool isUserBuddy(const QString &userName) const override; bool isUserIgnored(const QString &userName) const override; const ServerInfo_User *getOnlineUser(const QString &userName) const override; public slots: void handleConnect(); void handleDisconnect(); signals: void userLeft(const QString &userName); void userJoined(const ServerInfo_User &userInfo); }; #endif // COCKATRICE_USER_LIST_MANAGER_H