diff options
Diffstat (limited to 'protocols/ICQ-WIM/src')
-rw-r--r-- | protocols/ICQ-WIM/src/groupchats.cpp | 25 | ||||
-rw-r--r-- | protocols/ICQ-WIM/src/poll.cpp | 14 | ||||
-rw-r--r-- | protocols/ICQ-WIM/src/proto.h | 3 | ||||
-rw-r--r-- | protocols/ICQ-WIM/src/server.cpp | 15 |
4 files changed, 37 insertions, 20 deletions
diff --git a/protocols/ICQ-WIM/src/groupchats.cpp b/protocols/ICQ-WIM/src/groupchats.cpp index 0e4bbb1a53..b0c438f535 100644 --- a/protocols/ICQ-WIM/src/groupchats.cpp +++ b/protocols/ICQ-WIM/src/groupchats.cpp @@ -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");
@@ -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;
diff --git a/protocols/ICQ-WIM/src/poll.cpp b/protocols/ICQ-WIM/src/poll.cpp index b7cd908ea2..fe344a8ccc 100644 --- a/protocols/ICQ-WIM/src/poll.cpp +++ b/protocols/ICQ-WIM/src/poll.cpp @@ -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 {
diff --git a/protocols/ICQ-WIM/src/proto.h b/protocols/ICQ-WIM/src/proto.h index 75e33ef5c2..c511107a8d 100644 --- a/protocols/ICQ-WIM/src/proto.h +++ b/protocols/ICQ-WIM/src/proto.h @@ -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);
diff --git a/protocols/ICQ-WIM/src/server.cpp b/protocols/ICQ-WIM/src/server.cpp index 818807d3ea..d4a8299cf2 100644 --- a/protocols/ICQ-WIM/src/server.cpp +++ b/protocols/ICQ-WIM/src/server.cpp @@ -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);
|