summaryrefslogtreecommitdiff
path: root/protocols/Steam/src/steam_chats.cpp
diff options
context:
space:
mode:
authorGeorge Hazan <george.hazan@gmail.com>2025-01-13 13:05:45 +0300
committerGeorge Hazan <george.hazan@gmail.com>2025-01-13 13:05:45 +0300
commitff52dc730a047fadc8eb71676b91a9d2ecc654ad (patch)
treec392eb7467dc223e00aea2974060b1227c14b7ac /protocols/Steam/src/steam_chats.cpp
parent80a6e614bdb1d571d3eec68c3e508b07542bf06e (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.cpp62
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);