From 6c5b2ecc6f9e1a7968e4eab4d2e1eeed4f82d1f0 Mon Sep 17 00:00:00 2001 From: Sergey Bolhovskoy Date: Thu, 5 Feb 2015 11:10:32 +0000 Subject: VKontakte: fix(???) for empty contact name on friend request (attempt 3) fix memory leaks git-svn-id: http://svn.miranda-ng.org/main/trunk@12006 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- protocols/VKontakte/src/misc.cpp | 23 +++++++++++++++++++---- protocols/VKontakte/src/vk_chats.cpp | 2 +- protocols/VKontakte/src/vk_proto.cpp | 4 ++-- protocols/VKontakte/src/vk_proto.h | 1 + protocols/VKontakte/src/vk_thread.cpp | 23 +++++++++++------------ 5 files changed, 34 insertions(+), 19 deletions(-) (limited to 'protocols') diff --git a/protocols/VKontakte/src/misc.cpp b/protocols/VKontakte/src/misc.cpp index ebe357b40b..414d9fc65a 100644 --- a/protocols/VKontakte/src/misc.cpp +++ b/protocols/VKontakte/src/misc.cpp @@ -512,13 +512,28 @@ void CVkProto::ApplyCookies(AsyncHttpRequest *pReq) ///////////////////////////////////////////////////////////////////////////////////////// +void __cdecl CVkProto::DBAddAuthRequestThread(void *p) +{ + MCONTACT hContact = (MCONTACT)p; + if (hContact == NULL || hContact == INVALID_CONTACT_ID || !IsOnline()) + return; + + for (int i = 0; i < MAX_RETRIES && CMString(ptrT(db_get_tsa(hContact, m_szModuleName, "Nick"))).IsEmpty(); i++) { + Sleep(1500); + + if (!IsOnline()) + return; + } + DBAddAuthRequest(hContact); +} + void CVkProto::DBAddAuthRequest(const MCONTACT hContact) { debugLogA("CVkProto::DBAddAuthRequest"); - CMString tszNick = db_get_sa(hContact, m_szModuleName, "Nick"); - CMString tszFirstName = db_get_sa(hContact, m_szModuleName, "FirstName"); - CMString tszLastName = db_get_sa(hContact, m_szModuleName, "LastName"); + CMString tszNick = ptrT(db_get_tsa(hContact, m_szModuleName, "Nick")); + CMString tszFirstName = ptrT(db_get_tsa(hContact, m_szModuleName, "FirstName")); + CMString tszLastName = ptrT(db_get_tsa(hContact, m_szModuleName, "LastName")); ptrA szNick(mir_utf8encodeT(tszNick.GetBuffer())); ptrA szFirstName(mir_utf8encodeT(tszFirstName.GetBuffer())); @@ -591,7 +606,7 @@ void CVkProto::SetMirVer(MCONTACT hContact, int platform) } CMString MirVer, OldMirVer; - OldMirVer = db_get_sa(hContact, m_szModuleName, "MirVer"); + OldMirVer = ptrT(db_get_tsa(hContact, m_szModuleName, "MirVer")); bool bSetFlag = true; switch (platform) { diff --git a/protocols/VKontakte/src/vk_chats.cpp b/protocols/VKontakte/src/vk_chats.cpp index aec5954217..1ec4075495 100644 --- a/protocols/VKontakte/src/vk_chats.cpp +++ b/protocols/VKontakte/src/vk_chats.cpp @@ -575,7 +575,7 @@ void CVkProto::KickFromChat(int chat_id, int user_id, JSONNODE* pMsg) if (msg.IsEmpty()) { msg = TranslateT("You've been kicked by "); if (hContact != NULL) - msg += db_get_tsa(hContact, m_szModuleName, "Nick"); + msg += ptrT(db_get_tsa(hContact, m_szModuleName, "Nick")); else msg += TranslateT("(Unknown contact)"); } diff --git a/protocols/VKontakte/src/vk_proto.cpp b/protocols/VKontakte/src/vk_proto.cpp index 1ab60f23fa..d8215f969e 100644 --- a/protocols/VKontakte/src/vk_proto.cpp +++ b/protocols/VKontakte/src/vk_proto.cpp @@ -317,7 +317,7 @@ int CVkProto::OnPreBuildContactMenu(WPARAM hContact, LPARAM) { LONG userID = getDword(hContact, "ID", -1); bool bisFriend = (getByte(hContact, "Auth", -1) == 0); - bool bisBroadcast = !(CMString(db_get_tsa(hContact, m_szModuleName, "AudioUrl")).IsEmpty()); + bool bisBroadcast = !(CMString(ptrT(db_get_tsa(hContact, m_szModuleName, "AudioUrl"))).IsEmpty()); Menu_ShowItem(g_hContactMenuItems[CMI_VISITPROFILE], !isChatRoom(hContact)); Menu_ShowItem(g_hContactMenuItems[CMI_ADDASFRIEND], !bisFriend && !isChatRoom(hContact) && userID != VK_FEED_USER); Menu_ShowItem(g_hContactMenuItems[CMI_DELETEFRIEND], bisFriend && userID != VK_FEED_USER); @@ -658,7 +658,7 @@ void CVkProto::OnReceiveAuthRequest(NETLIBHTTPREQUEST *reply, AsyncHttpRequest * if (iRet == 2) { CMString msg, msgformat = TranslateT("User %s added as friend"), - tszNick = db_get_tsa(param->hContact, m_szModuleName, "Nick"); + tszNick = ptrT(db_get_tsa(param->hContact, m_szModuleName, "Nick")); if (tszNick.IsEmpty()) tszNick = TranslateT("(Unknown contact)"); msg.AppendFormat(msgformat, tszNick.GetBuffer()); diff --git a/protocols/VKontakte/src/vk_proto.h b/protocols/VKontakte/src/vk_proto.h index 0d1e7f4ce3..7f705edd56 100644 --- a/protocols/VKontakte/src/vk_proto.h +++ b/protocols/VKontakte/src/vk_proto.h @@ -403,6 +403,7 @@ struct CVkProto : public PROTO void GrabCookies(NETLIBHTTPREQUEST *nhr); void ApplyCookies(AsyncHttpRequest*); + void __cdecl DBAddAuthRequestThread(void *p); void DBAddAuthRequest(const MCONTACT hContact); MCONTACT MContactFromDbEvent(MEVENT hDbEvent); diff --git a/protocols/VKontakte/src/vk_thread.cpp b/protocols/VKontakte/src/vk_thread.cpp index 1dcc570619..d088d03b19 100644 --- a/protocols/VKontakte/src/vk_thread.cpp +++ b/protocols/VKontakte/src/vk_thread.cpp @@ -109,8 +109,8 @@ void CVkProto::SetServerStatus(int iNewStatus) return; int iOldStatus = m_iStatus; - CMString oldStatusMsg = db_get_tsa(NULL, m_szModuleName, "OldStatusMsg"); - CMString ListeningToMsg = db_get_tsa(NULL, m_szModuleName, "ListeningTo"); + CMString oldStatusMsg = ptrT(db_get_tsa(NULL, m_szModuleName, "OldStatusMsg")); + CMString ListeningToMsg = ptrT(db_get_tsa(NULL, m_szModuleName, "ListeningTo")); if (iNewStatus == ID_STATUS_OFFLINE) { m_iStatus = ID_STATUS_OFFLINE; @@ -346,7 +346,7 @@ MCONTACT CVkProto::SetContactInfo(JSONNODE* pItem, bool flag, bool self) setTString(hContact, "Phone", tszValue.GetBuffer()); tszValue = json_as_CMString(json_get(pItem, "status")); - CMString tszOldStatus(db_get_tsa(hContact, hContact ? "CList" : m_szModuleName, "StatusMsg")); + CMString tszOldStatus(ptrT(db_get_tsa(hContact, hContact ? "CList" : m_szModuleName, "StatusMsg"))); if (tszValue != tszOldStatus) { db_set_ts(hContact, hContact ? "CList" : m_szModuleName, "StatusMsg", tszValue.GetBuffer()); db_unset(hContact, m_szModuleName, "AudioUrl"); @@ -483,9 +483,8 @@ void CVkProto::OnReceiveUserInfo(NETLIBHTTPREQUEST *reply, AsyncHttpRequest *pRe hContact = FindUser(userid, true); if (!getBool(hContact, "ReqAuth", false)) { RetrieveUserInfo(userid); - setByte(hContact, "ReqAuth", 1); - Sleep(3000); - DBAddAuthRequest(hContact); + setByte(hContact, "ReqAuth", 1); + ForkThread(&CVkProto::DBAddAuthRequestThread, (void *)hContact); } } } @@ -1013,7 +1012,7 @@ void CVkProto::RetrieveStatusMusic(const CMString &StatusMsg) return; CMString code; - CMString oldStatusMsg = db_get_tsa(0, m_szModuleName, "OldStatusMsg"); + CMString oldStatusMsg = ptrT(db_get_tsa(0, m_szModuleName, "OldStatusMsg")); if (StatusMsg.IsEmpty()) { if (m_iMusicSendMetod == sendBroadcastOnly) code = "API.audio.setBroadcast();return null;"; @@ -1101,7 +1100,7 @@ INT_PTR __cdecl CVkProto::SvcDeleteFriend(WPARAM hContact, LPARAM flag) return 1; CMString formatstr = TranslateT("Are you sure to delete %s from your friend list?"), - tszNick = db_get_tsa(hContact, m_szModuleName, "Nick"), + tszNick = ptrT(db_get_tsa(hContact, m_szModuleName, "Nick")), ptszMsg; if (flag == 0) { ptszMsg.AppendFormat(formatstr, tszNick.IsEmpty() ? TranslateT("(Unknown contact)") : tszNick); @@ -1123,7 +1122,7 @@ void CVkProto::OnReceiveDeleteFriend(NETLIBHTTPREQUEST* reply, AsyncHttpRequest* JSONROOT pRoot; JSONNODE *pResponse = CheckJsonResponse(pReq, reply, pRoot); if (pResponse != NULL) { - CMString tszNick = db_get_tsa(param->hContact, m_szModuleName, "Nick"); + CMString tszNick = ptrT(db_get_tsa(param->hContact, m_szModuleName, "Nick")); if (tszNick.IsEmpty()) tszNick = TranslateT("(Unknown contact)"); CMString msgformat, msg; @@ -1193,7 +1192,7 @@ INT_PTR __cdecl CVkProto::SvcBanUser(WPARAM hContact, LPARAM) code += "return 1;"; CMString formatstr = TranslateT("Are you sure to ban %s? %s%sContinue?"), - tszNick = db_get_tsa(hContact, m_szModuleName, "Nick"), + tszNick = ptrT(db_get_tsa(hContact, m_szModuleName, "Nick")), ptszMsg; ptszMsg.AppendFormat(formatstr, @@ -1222,7 +1221,7 @@ INT_PTR __cdecl CVkProto::SvcReportAbuse(WPARAM hContact, LPARAM) return 1; CMString formatstr = TranslateT("Are you sure to report abuse on %s?"), - tszNick = db_get_tsa(hContact, m_szModuleName, "Nick"), + tszNick = ptrT(db_get_tsa(hContact, m_szModuleName, "Nick")), ptszMsg; ptszMsg.AppendFormat(formatstr, tszNick.IsEmpty() ? TranslateT("(Unknown contact)") : tszNick); if (IDNO == MessageBox(NULL, ptszMsg.GetBuffer(), TranslateT("Attention!"), MB_ICONWARNING | MB_YESNO)) @@ -1239,7 +1238,7 @@ INT_PTR __cdecl CVkProto::SvcReportAbuse(WPARAM hContact, LPARAM) INT_PTR __cdecl CVkProto::SvcOpenBroadcast(WPARAM hContact, LPARAM) { debugLogA("CVkProto::SvcOpenBroadcast"); - CMString tszAudio(db_get_tsa(hContact, m_szModuleName, "AudioUrl")); + CMString tszAudio(ptrT(db_get_tsa(hContact, m_szModuleName, "AudioUrl"))); if (!tszAudio.IsEmpty()) CallService(MS_UTILS_OPENURL, (WPARAM)OUF_TCHAR, (LPARAM)tszAudio.GetBuffer()); -- cgit v1.2.3