From 14ba52669cf1f87cbf8564ab68ca5859be1bb282 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Thu, 30 Nov 2023 17:53:26 +0300 Subject: ICQ: fix for eternal cycle on group chat leaving + some code cleaning --- protocols/ICQ-WIM/src/groupchats.cpp | 15 ++++++++++----- protocols/ICQ-WIM/src/proto.cpp | 14 +++++++------- protocols/ICQ-WIM/src/proto.h | 11 ++++++----- 3 files changed, 23 insertions(+), 17 deletions(-) (limited to 'protocols') diff --git a/protocols/ICQ-WIM/src/groupchats.cpp b/protocols/ICQ-WIM/src/groupchats.cpp index aef323b1c9..42aea886a8 100644 --- a/protocols/ICQ-WIM/src/groupchats.cpp +++ b/protocols/ICQ-WIM/src/groupchats.cpp @@ -36,7 +36,7 @@ SESSION_INFO* CIcqProto::CreateGroupChat(const wchar_t *pwszId, const wchar_t *p return si; } -INT_PTR CIcqProto::OnLeaveChat(WPARAM hContact, LPARAM) +INT_PTR CIcqProto::SvcLeaveChat(WPARAM hContact, LPARAM) { CMStringW wszId(GetUserId(hContact)); if (auto *si = Chat_Find(wszId, m_szModuleName)) @@ -192,12 +192,17 @@ void CIcqProto::InviteUserToChat(SESSION_INFO *si) dlg.DoModal(); } -void CIcqProto::LeaveDestroyChat(SESSION_INFO *si) +void CIcqProto::OnLeaveChat(NETLIBHTTPREQUEST*, AsyncHttpRequest *pReq) { - Push(new AsyncHttpRequest(CONN_MAIN, REQUEST_GET, "/buddylist/hideChat") - << AIMSID(this) << WCHAR_PARAM("buddy", si->ptszID) << INT64_PARAM("lastMsgId", getId(si->hContact, DB_KEY_LASTMSGID))); + db_delete_contact(INT_PTR(pReq->pUserInfo)); +} - db_delete_contact(si->hContact); +void CIcqProto::LeaveDestroyChat(SESSION_INFO *si) +{ + auto *pReq = new AsyncHttpRequest(CONN_MAIN, REQUEST_GET, "/buddylist/hideChat", &CIcqProto::OnLeaveChat) + << AIMSID(this) << WCHAR_PARAM("buddy", si->ptszID) << INT64_PARAM("lastMsgId", getId(si->hContact, DB_KEY_LASTMSGID)); + pReq->pUserInfo = (void *)si->hContact; + Push(pReq); } ///////////////////////////////////////////////////////////////////////////////////////// diff --git a/protocols/ICQ-WIM/src/proto.cpp b/protocols/ICQ-WIM/src/proto.cpp index 15fc7310cb..ccda5e0c98 100644 --- a/protocols/ICQ-WIM/src/proto.cpp +++ b/protocols/ICQ-WIM/src/proto.cpp @@ -70,9 +70,9 @@ CIcqProto::CIcqProto(const char *aProtoName, const wchar_t *aUserName) : CreateProtoService(PS_GETMYAVATAR, &CIcqProto::GetAvatar); CreateProtoService(PS_SETMYAVATAR, &CIcqProto::SetAvatar); - CreateProtoService(PS_MENU_LOADHISTORY, &CIcqProto::OnMenuLoadHistory); - CreateProtoService(PS_GETUNREADEMAILCOUNT, &CIcqProto::GetEmailCount); - CreateProtoService(PS_GOTO_INBOX, &CIcqProto::GotoInbox); + CreateProtoService(PS_MENU_LOADHISTORY, &CIcqProto::SvcLoadHistory); + CreateProtoService(PS_GETUNREADEMAILCOUNT, &CIcqProto::SvcGetEmailCount); + CreateProtoService(PS_GOTO_INBOX, &CIcqProto::SvcGotoInbox); // cloud file transfer CreateProtoService(PS_OFFLINEFILE, &CIcqProto::SvcOfflineFile); @@ -90,7 +90,7 @@ CIcqProto::CIcqProto(const char *aProtoName, const wchar_t *aUserName) : gcr.pszModule = m_szModuleName; Chat_Register(&gcr); - CreateProtoService(PS_LEAVECHAT, &CIcqProto::OnLeaveChat); + CreateProtoService(PS_LEAVECHAT, &CIcqProto::SvcLeaveChat); // avatars CreateDirectoryTreeW(GetAvatarPath()); @@ -267,7 +267,7 @@ INT_PTR __cdecl CIcqProto::SvcOfflineFile(WPARAM param, LPARAM) ///////////////////////////////////////////////////////////////////////////////////////// -INT_PTR CIcqProto::OnMenuLoadHistory(WPARAM hContact, LPARAM) +INT_PTR CIcqProto::SvcLoadHistory(WPARAM hContact, LPARAM) { delSetting(hContact, DB_KEY_LASTMSGID); @@ -321,14 +321,14 @@ INT_PTR CIcqProto::EditProfile(WPARAM, LPARAM) ///////////////////////////////////////////////////////////////////////////////////////// -INT_PTR CIcqProto::GetEmailCount(WPARAM, LPARAM) +INT_PTR CIcqProto::SvcGetEmailCount(WPARAM, LPARAM) { if (!m_bOnline) return 0; return m_unreadEmails; } -INT_PTR CIcqProto::GotoInbox(WPARAM, LPARAM) +INT_PTR CIcqProto::SvcGotoInbox(WPARAM, LPARAM) { Utils_OpenUrl("https://e.mail.ru/messages/inbox"); return 0; diff --git a/protocols/ICQ-WIM/src/proto.h b/protocols/ICQ-WIM/src/proto.h index d44478774e..37e1b48357 100644 --- a/protocols/ICQ-WIM/src/proto.h +++ b/protocols/ICQ-WIM/src/proto.h @@ -40,7 +40,7 @@ #define ICQ_ROBUST_SERVER "https://u.icq.net/rapi" #define PS_DUMMY "/DoNothing" -#define PS_GOTO_INBOX "/GotoInbox" +#define PS_GOTO_INBOX "/SvcGotoInbox" #define WIM_CAP_VOIP_VOICE "094613504c7f11d18222444553540000" #define WIM_CAP_VOIP_VIDEO "094613514c7f11d18222444553540000" @@ -271,6 +271,7 @@ class CIcqProto : public PROTO void OnGetUserHistory(NETLIBHTTPREQUEST *pReply, AsyncHttpRequest *pReq); void OnGetUserInfo(NETLIBHTTPREQUEST *pReply, AsyncHttpRequest *pReq); void OnLastSeen(NETLIBHTTPREQUEST *pReply, AsyncHttpRequest *pReq); + void OnLeaveChat(NETLIBHTTPREQUEST *pReply, AsyncHttpRequest *pReq); void OnLoginViaPhone(NETLIBHTTPREQUEST *pReply, AsyncHttpRequest *pReq); void OnNormalizePhone(NETLIBHTTPREQUEST *pReply, AsyncHttpRequest *pReq); void OnReceiveAvatar(NETLIBHTTPREQUEST *pReply, AsyncHttpRequest *pReq); @@ -385,16 +386,16 @@ class CIcqProto : public PROTO INT_PTR __cdecl GetAvatarInfo(WPARAM, LPARAM); INT_PTR __cdecl SetAvatar(WPARAM, LPARAM); + INT_PTR __cdecl SvcLeaveChat(WPARAM, LPARAM); INT_PTR __cdecl SvcOfflineFile(WPARAM, LPARAM); INT_PTR __cdecl EditGroups(WPARAM, LPARAM); INT_PTR __cdecl EditProfile(WPARAM, LPARAM); - INT_PTR __cdecl GetEmailCount(WPARAM, LPARAM); - INT_PTR __cdecl GotoInbox(WPARAM, LPARAM); + INT_PTR __cdecl SvcGetEmailCount(WPARAM, LPARAM); + INT_PTR __cdecl SvcGotoInbox(WPARAM, LPARAM); INT_PTR __cdecl UploadGroups(WPARAM, LPARAM); - INT_PTR __cdecl OnLeaveChat(WPARAM, LPARAM); - INT_PTR __cdecl OnMenuLoadHistory(WPARAM, LPARAM); + INT_PTR __cdecl SvcLoadHistory(WPARAM, LPARAM); //////////////////////////////////////////////////////////////////////////////////////// // events -- cgit v1.2.3