diff --git a/src/ChatRoom.cpp b/src/ChatRoom.cpp index 8db4ddf..ea19798 100644 --- a/src/ChatRoom.cpp +++ b/src/ChatRoom.cpp @@ -64,7 +64,6 @@ void ChatRoom::EnterRoom(ChatAvatar* avatar, const std::u16string& password) { } avatars_.push_back(avatar); - avatarIds_.push_back(avatar->GetAvatarId()); avatar->JoinRoom(this); } @@ -85,14 +84,18 @@ void ChatRoom::LeaveRoom(ChatAvatar* avatar) { if (avatarsIter != std::end(avatars_)) { avatars_.erase(avatarsIter); } +} - auto avatarsIdIter = std::remove_if(std::begin(avatarIds_), std::end(avatarIds_), [avatar](auto avatarId) { - return avatar->GetAvatarId() == avatarId; - }); +std::vector ChatRoom::GetAvatarIds(const ChatAvatar * srcAvatar) const { + std::vector avatarIds; - if (avatarsIdIter != std::end(avatarIds_)) { - avatarIds_.erase(avatarsIdIter); + for (auto roomAvatar : avatars_) { + if (roomAvatar->IsIgnored(srcAvatar)) { + avatarIds.push_back(roomAvatar->GetAvatarId()); + } } + + return std::vector(); } std::vector ChatRoom::GetConnectedAddresses() const { diff --git a/src/ChatRoom.hpp b/src/ChatRoom.hpp index 72ad5e9..5558e30 100644 --- a/src/ChatRoom.hpp +++ b/src/ChatRoom.hpp @@ -51,8 +51,10 @@ public: uint32_t GetCreateTime() const { return createTime_; } uint32_t GetNodeLevel() const { return nodeLevel_; } - const std::vector GetAvatars() const { return avatars_; } - std::vector GetAvatarIds() const { return avatarIds_; } + const std::vector GetAvatars() const { return avatars_; } + /** Returns a list of id's in the room that are not ignoring the srcAvatar. + */ + std::vector GetAvatarIds(const ChatAvatar* srcAvatar) const; const std::vector GetAdminstrators() const { return administrators_; } const std::vector GetModerators() const { return moderators_; } const std::vector GetTempModerators() const { return tempModerators_; } @@ -107,7 +109,6 @@ private: int32_t dbId_ = -1; std::vector avatars_; - std::vector avatarIds_; std::vector administrators_; std::vector moderators_; std::vector tempModerators_; diff --git a/src/GatewayClient.cpp b/src/GatewayClient.cpp index 41c2626..8a6d521 100644 --- a/src/GatewayClient.cpp +++ b/src/GatewayClient.cpp @@ -210,7 +210,7 @@ void GatewayClient::SendRoomMessageUpdate(const ChatAvatar* srcAvatar, const Cha uint32_t messageId, const std::u16string& message, const std::u16string& oob) { auto connectedAddresses = room->GetConnectedAddresses(); for (auto& address : connectedAddresses) { - node_->SendTo(address, MRoomMessage{srcAvatar, room->GetRoomId(), room->GetAvatarIds(), + node_->SendTo(address, MRoomMessage{srcAvatar, room->GetRoomId(), room->GetAvatarIds(srcAvatar), message, oob, messageId}); } }