summaryrefslogtreecommitdiff
path: root/protocols/Steam/src/steam_chats.cpp
diff options
context:
space:
mode:
authorGeorge Hazan <george.hazan@gmail.com>2025-05-04 12:16:34 +0300
committerGeorge Hazan <george.hazan@gmail.com>2025-05-04 12:16:34 +0300
commit13001956a2d307e150ab190905df0e704d7a2ac8 (patch)
tree27f8908f863610fc54abf1426ffcedfc43b1ca82 /protocols/Steam/src/steam_chats.cpp
parentc5657cad31bc98c53d28363fa14cb5d73ab9bcd6 (diff)
Steam: better processing of entering & leaving group chats on the fly
Diffstat (limited to 'protocols/Steam/src/steam_chats.cpp')
-rw-r--r--protocols/Steam/src/steam_chats.cpp17
1 files changed, 13 insertions, 4 deletions
diff --git a/protocols/Steam/src/steam_chats.cpp b/protocols/Steam/src/steam_chats.cpp
index b6c4663f2e..c56a34e9b1 100644
--- a/protocols/Steam/src/steam_chats.cpp
+++ b/protocols/Steam/src/steam_chats.cpp
@@ -44,7 +44,7 @@ void CSteamProto::OnGetMyChats(const CChatRoomGetMyChatRoomGroupsResponse &reply
// clean garbage
for (auto &cc : AccContacts())
- if (getByte(cc, "ChatRoom") == GCW_CHATROOM && chatIds.find(cc) == chatIds.end())
+ if (Contact::IsGroupChat(cc, m_szModuleName) == GCW_CHATROOM && chatIds.find(cc) == chatIds.end())
db_delete_contact(cc, CDF_DEL_CONTACT);
}
@@ -169,7 +169,7 @@ void CSteamProto::OnGotClanInfo(const CMsgClientClanState &reply, const CMsgProt
CMStringW wszId(FORMAT, L"%lld", reply.steamid_clan);
auto *si = Chat_Find(wszId, m_szModuleName);
if (si == nullptr) {
- si = Chat_NewSession(GCW_SERVER, m_szModuleName, wszId, Utf2T(reply.name_info->clan_name));
+ si = Chat_NewSession(GCW_SERVER, m_szModuleName, wszId, reply.name_info ? Utf2T(reply.name_info->clan_name) : wszId.c_str());
Chat_Control(si, WINDOW_HIDDEN);
Chat_Control(si, SESSION_ONLINE);
}
@@ -331,13 +331,19 @@ void CSteamProto::OnGetChatMessage(const CChatRoomIncomingChatMessageNotificatio
INT_PTR CSteamProto::SvcLeaveChat(WPARAM hContact, LPARAM)
{
CChatRoomLeaveChatRoomGroupRequest request;
- request.chat_group_id = GetId(hContact, DBKEY_STEAM_ID); request.has_chat_group_id = true;
+ if (Contact::IsGroupChat(hContact) == GCW_SERVER)
+ request.chat_group_id = GetId(hContact, DBKEY_GROUP_ID);
+ else
+ request.chat_group_id = GetId(hContact, DBKEY_STEAM_ID);
+ request.has_chat_group_id = true;
WSSendService(LeaveChatGroup, request);
return 0;
}
void CSteamProto::LeaveGroupChat(int64_t chatGroupId)
{
+ std::vector<MCONTACT> ids;
+
for (auto &cc : AccContacts()) {
if (!Contact::IsGroupChat(cc) || GetId(cc, DBKEY_STEAM_ID) != chatGroupId)
continue;
@@ -346,8 +352,11 @@ void CSteamProto::LeaveGroupChat(int64_t chatGroupId)
if (auto *si = Chat_Find(wszId, m_szModuleName))
Chat_Terminate(si);
- db_delete_contact(cc, CDF_FROM_SERVER);
+ ids.push_back(cc);
}
+
+ for (auto &cc: ids)
+ db_delete_contact(cc, CDF_FROM_SERVER);
}
/////////////////////////////////////////////////////////////////////////////////////////