diff options
| author | George Hazan <george.hazan@gmail.com> | 2025-05-04 12:16:34 +0300 |
|---|---|---|
| committer | George Hazan <george.hazan@gmail.com> | 2025-05-04 12:16:34 +0300 |
| commit | 13001956a2d307e150ab190905df0e704d7a2ac8 (patch) | |
| tree | 27f8908f863610fc54abf1426ffcedfc43b1ca82 /protocols/Steam/src/steam_chats.cpp | |
| parent | c5657cad31bc98c53d28363fa14cb5d73ab9bcd6 (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.cpp | 17 |
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); } ///////////////////////////////////////////////////////////////////////////////////////// |
