diff options
| author | George Hazan <george.hazan@gmail.com> | 2025-01-13 13:05:45 +0300 |
|---|---|---|
| committer | George Hazan <george.hazan@gmail.com> | 2025-01-13 13:05:45 +0300 |
| commit | ff52dc730a047fadc8eb71676b91a9d2ecc654ad (patch) | |
| tree | c392eb7467dc223e00aea2974060b1227c14b7ac /protocols/Steam/src/steam_chats.cpp | |
| parent | 80a6e614bdb1d571d3eec68c3e508b07542bf06e (diff) | |
Steam: user info request for unknown chat members
Diffstat (limited to 'protocols/Steam/src/steam_chats.cpp')
| -rw-r--r-- | protocols/Steam/src/steam_chats.cpp | 62 |
1 files changed, 38 insertions, 24 deletions
diff --git a/protocols/Steam/src/steam_chats.cpp b/protocols/Steam/src/steam_chats.cpp index 248233166f..704a86e5b1 100644 --- a/protocols/Steam/src/steam_chats.cpp +++ b/protocols/Steam/src/steam_chats.cpp @@ -34,40 +34,51 @@ void CSteamProto::OnGetMyChats(const CChatRoomGetMyChatRoomGroupsResponse &reply SESSION_INFO *pOwner = 0; for (int k = 0; k < pGroup->n_chat_rooms; k++) { + std::vector<uint64_t> ids; + auto *pChat = pGroup->chat_rooms[k]; - CMStringW wszId(FORMAT, L"%lld_%d", pGroup->chat_group_id, pChat->chat_id); + CMStringW wszId(FORMAT, L"%lld_%lld", pGroup->chat_group_id, pChat->chat_id); CMStringW wszTitle(Utf2T(pChat->chat_name)); if (wszTitle.IsEmpty()) wszTitle = Utf2T(pGroup->chat_group_name); auto *si = Chat_NewSession(GCW_CHATROOM, m_szModuleName, wszId, wszTitle); - Chat_AddGroup(si, TranslateT("Owner")); - Chat_AddGroup(si, TranslateT("Participant")); - - if (pOwner == 0) { - for (int j = 0; j < pGroup->n_top_members; j++) { - uint64_t iSteamId = AccountIdToSteamId(pGroup->top_members[j]); - CMStringW wszUserId(FORMAT, L"%lld", iSteamId), wszNick; - - GCEVENT gce = { si, GC_EVENT_JOIN }; - gce.pszUID.w = wszUserId; - - if (iSteamId == m_iSteamId) { - gce.bIsMe = true; - wszNick = getMStringW("Nick"); + if (!si->pStatuses) { + + Chat_AddGroup(si, TranslateT("Owner")); + Chat_AddGroup(si, TranslateT("Participant")); + + if (pOwner == 0) { + for (int j = 0; j < pGroup->n_top_members; j++) { + uint64_t iSteamId = AccountIdToSteamId(pGroup->top_members[j]); + CMStringW wszUserId(FORMAT, L"%lld", iSteamId), wszNick; + + GCEVENT gce = { si, GC_EVENT_JOIN }; + gce.pszUID.w = wszUserId; + + if (iSteamId == m_iSteamId) { + gce.bIsMe = true; + wszNick = getMStringW("Nick"); + } + else if (MCONTACT hContact = GetContact(iSteamId)) + wszNick = Clist_GetContactDisplayName(hContact); + else { + ids.push_back(iSteamId); + { + mir_cslock lck(m_csChats); + m_chatContactInfo[iSteamId] = si; + } + wszNick = L"@" + wszUserId; + } + + gce.pszNick.w = wszNick; + gce.pszStatus.w = (pGroup->top_members[j] == pGroup->accountid_owner) ? TranslateT("Owner") : TranslateT("Participant"); + Chat_Event(&gce); } - else if (MCONTACT hContact = GetContact(iSteamId)) - wszNick = Clist_GetContactDisplayName(hContact); - else - wszNick = L"@" + wszUserId; - - gce.pszNick.w = wszNick; - gce.pszStatus.w = (pGroup->top_members[j] == pGroup->accountid_owner) ? TranslateT("Owner") : TranslateT("Participant"); - Chat_Event(&gce); } + else si->pParent = pOwner; } - else si->pParent = pOwner; setDword(si->hContact, "ChatId", pChat->chat_id); @@ -84,6 +95,9 @@ void CSteamProto::OnGetMyChats(const CChatRoomGetMyChatRoomGroupsResponse &reply Chat_Control(si, WINDOW_HIDDEN); Chat_Control(si, SESSION_ONLINE); + if (!ids.empty()) + SendUserInfoRequest(ids); + uint32_t dwLastMsgId = getDword(si->hContact, DBKEY_LASTMSG); if (pChat->time_last_message > dwLastMsgId) SendGetChatHistory(si->hContact, dwLastMsgId); |
