Skip to content

Commit

Permalink
fixes #3424 (ICQ: после добавления в групповой чат не виден список уч…
Browse files Browse the repository at this point in the history
…астников)
  • Loading branch information
georgehazan committed Mar 13, 2023
1 parent 15da86e commit 17407bb
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 20 deletions.
25 changes: 25 additions & 0 deletions protocols/ICQ-WIM/src/groupchats.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,21 @@

#include "stdafx.h"

SESSION_INFO* CIcqProto::CreateGroupChat(const wchar_t *pwszId, const wchar_t *pwszNick)
{
auto *si = Chat_NewSession(GCW_CHATROOM, m_szModuleName, pwszId, pwszNick);
if (si != nullptr) {
Chat_AddGroup(si, TranslateT("admin"));
Chat_AddGroup(si, TranslateT("member"));
Chat_Control(si, m_bHideGroupchats ? WINDOW_HIDDEN : SESSION_INITDONE);
Chat_Control(si, SESSION_ONLINE);
}

return si;
}

/////////////////////////////////////////////////////////////////////////////////////////

void CIcqProto::LoadChatInfo(SESSION_INFO *si)
{
int memberCount = getDword(si->hContact, "MemberCount");
Expand Down Expand Up @@ -48,6 +63,16 @@ void CIcqProto::LoadChatInfo(SESSION_INFO *si)
}
}

/////////////////////////////////////////////////////////////////////////////////////////

void CIcqProto::RetrieveChatInfo(SESSION_INFO *si)
{
auto *pReq = new AsyncRapiRequest(this, "getChatInfo", &CIcqProto::OnGetChatInfo);
pReq->params << WCHAR_PARAM("sn", si->ptszID) << INT_PARAM("memberLimit", 100) << CHAR_PARAM("aimSid", m_aimsid);
pReq->pUserInfo = si;
Push(pReq);
}

void CIcqProto::OnGetChatInfo(NETLIBHTTPREQUEST *pReply, AsyncHttpRequest *pReq)
{
SESSION_INFO *si = (SESSION_INFO*)pReq->pUserInfo;
Expand Down
14 changes: 6 additions & 8 deletions protocols/ICQ-WIM/src/poll.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -169,20 +169,18 @@ void CIcqProto::ProcessHistData(const JSONNode &ev)
if (IsChat(wszId)) {
SESSION_INFO *si = Chat_Find(wszId, m_szModuleName);
if (si == nullptr)
return;
if ((si = CreateGroupChat(wszId, L"")) == nullptr)
return;

hContact = si->hContact;

if (si->arUsers.getCount() == 0) {
__int64 srvInfoVer = _wtoi64(ev["mchatState"]["infoVersion"].as_mstring());
__int64 srvMembersVer = _wtoi64(ev["mchatState"]["membersVersion"].as_mstring());
if (srvInfoVer != getId(hContact, "InfoVersion") || srvMembersVer != getId(hContact, "MembersVersion")) {
auto *pReq = new AsyncRapiRequest(this, "getChatInfo", &CIcqProto::OnGetChatInfo);
pReq->params << WCHAR_PARAM("sn", wszId) << INT_PARAM("memberLimit", 100) << CHAR_PARAM("aimSid", m_aimsid);
pReq->pUserInfo = si;
Push(pReq);
}
else LoadChatInfo(si);
if (srvInfoVer != getId(hContact, "InfoVersion") || srvMembersVer != getId(hContact, "MembersVersion"))
RetrieveChatInfo(si);
else
LoadChatInfo(si);
}
}
else {
Expand Down
3 changes: 3 additions & 0 deletions protocols/ICQ-WIM/src/proto.h
Original file line number Diff line number Diff line change
Expand Up @@ -361,6 +361,9 @@ class CIcqProto : public PROTO<CIcqProto>
void Chat_ProcessLogMenu(SESSION_INFO *si, int);
void Chat_SendPrivateMessage(GCHOOK *gch);

SESSION_INFO* CreateGroupChat(const wchar_t *pwszId, const wchar_t *pwszNick);

void RetrieveChatInfo(SESSION_INFO *si);
void InviteUserToChat(SESSION_INFO *si);
void LeaveDestroyChat(SESSION_INFO *si);
void LoadChatInfo(SESSION_INFO *si);
Expand Down
15 changes: 3 additions & 12 deletions protocols/ICQ-WIM/src/server.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -274,22 +274,13 @@ MCONTACT CIcqProto::ParseBuddyInfo(const JSONNode &buddy, MCONTACT hContact, boo
// user chat?
CMStringW wszId(buddy["aimId"].as_mstring());
if (IsChat(wszId)) {
CMStringW wszChatId(buddy["aimId"].as_mstring());
CMStringW wszChatName(buddy["friendly"].as_mstring());

auto *pUser = FindUser(wszId);
if (pUser && pUser->m_iApparentMode == ID_STATUS_OFFLINE)
return INVALID_CONTACT_ID;

auto *si = Chat_NewSession(GCW_CHATROOM, m_szModuleName, wszChatId, wszChatName);
if (si == nullptr)
return INVALID_CONTACT_ID;

Chat_AddGroup(si, TranslateT("admin"));
Chat_AddGroup(si, TranslateT("member"));
Chat_Control(si, m_bHideGroupchats ? WINDOW_HIDDEN : SESSION_INITDONE);
Chat_Control(si, SESSION_ONLINE);
return si->hContact;
CMStringW wszChatName(buddy["friendly"].as_mstring());
auto *si = CreateGroupChat(wszId, wszChatName);
return (si) ? si->hContact : INVALID_CONTACT_ID;
}

bool bIgnored = !IsValidType(buddy);
Expand Down

1 comment on commit 17407bb

@dartraiden
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also fixes #3425

Please sign in to comment.