From 3f85b15bfb0f49b3ecc2da23060f4a2d6d3ad372 Mon Sep 17 00:00:00 2001 From: Sergey Bolhovskoy Date: Mon, 15 Sep 2014 03:43:29 +0000 Subject: VKontakte: upgrade vk api version to 5.24 - complete bugfix for StatusMsg freeze acceleration avatars loading some cleanup git-svn-id: http://svn.miranda-ng.org/main/trunk@10448 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- protocols/VKontakte/src/misc.cpp | 4 ++-- protocols/VKontakte/src/vk_avatars.cpp | 1 + protocols/VKontakte/src/vk_proto.cpp | 1 - protocols/VKontakte/src/vk_proto.h | 1 + protocols/VKontakte/src/vk_queue.cpp | 11 +++++++---- protocols/VKontakte/src/vk_thread.cpp | 22 +++++++++++++--------- 6 files changed, 24 insertions(+), 16 deletions(-) (limited to 'protocols/VKontakte/src') diff --git a/protocols/VKontakte/src/misc.cpp b/protocols/VKontakte/src/misc.cpp index d7f678a29a..f8ef8c415c 100644 --- a/protocols/VKontakte/src/misc.cpp +++ b/protocols/VKontakte/src/misc.cpp @@ -211,7 +211,7 @@ bool CVkProto::AutoFillForm(char *pBody, CMStringA &szAction, CMStringA& szResul AsyncHttpRequest::AsyncHttpRequest() { cbSize = sizeof(NETLIBHTTPREQUEST); - + m_bApiReq = true; AddHeader("Connection", "keep-alive"); AddHeader("Accept-Encoding", "booo"); } @@ -219,7 +219,7 @@ AsyncHttpRequest::AsyncHttpRequest() AsyncHttpRequest::AsyncHttpRequest(CVkProto *ppro, int iRequestType, LPCSTR _url, bool bSecure, VK_REQUEST_HANDLER pFunc) { cbSize = sizeof(NETLIBHTTPREQUEST); - + m_bApiReq = true; AddHeader("Connection", "keep-alive"); AddHeader("Accept-Encoding", "booo"); diff --git a/protocols/VKontakte/src/vk_avatars.cpp b/protocols/VKontakte/src/vk_avatars.cpp index 560bf5dd75..a2c1923a1e 100644 --- a/protocols/VKontakte/src/vk_avatars.cpp +++ b/protocols/VKontakte/src/vk_avatars.cpp @@ -83,6 +83,7 @@ INT_PTR CVkProto::SvcGetAvatarInfo(WPARAM wParam, LPARAM lParam) pReq->pUserInfo = (char*)AI->hContact; pReq->m_pFunc = &CVkProto::OnReceiveAvatar; pReq->requestType = REQUEST_GET; + pReq->m_bApiReq = false; Push(pReq); debugLogA("Requested to read an avatar from '%s'", szUrl); diff --git a/protocols/VKontakte/src/vk_proto.cpp b/protocols/VKontakte/src/vk_proto.cpp index 59f896c6f5..9d0ac6a4b1 100644 --- a/protocols/VKontakte/src/vk_proto.cpp +++ b/protocols/VKontakte/src/vk_proto.cpp @@ -114,7 +114,6 @@ int CVkProto::OnModulesLoaded(WPARAM wParam, LPARAM lParam) mi.flags = CMIF_TCHAR; mi.position = -200001000+1; mi.icolibItem = LoadSkinnedIconHandle(SKINICON_OTHER_HISTORY); - mi.position = -201001000+102; mi.ptszName = LPGENT("Reload all messages from vk.com"); Menu_AddContactMenuItem(&mi); diff --git a/protocols/VKontakte/src/vk_proto.h b/protocols/VKontakte/src/vk_proto.h index aa5497f93d..ba6c0aa8d6 100644 --- a/protocols/VKontakte/src/vk_proto.h +++ b/protocols/VKontakte/src/vk_proto.h @@ -36,6 +36,7 @@ struct AsyncHttpRequest : public NETLIBHTTPREQUEST, public MZeroedObject bool bNeedsRestart, bIsMainConn; VK_REQUEST_HANDLER m_pFunc; void *pUserInfo; + bool m_bApiReq; }; struct PARAM diff --git a/protocols/VKontakte/src/vk_queue.cpp b/protocols/VKontakte/src/vk_queue.cpp index c1934fa190..b736fad51a 100644 --- a/protocols/VKontakte/src/vk_queue.cpp +++ b/protocols/VKontakte/src/vk_queue.cpp @@ -91,10 +91,13 @@ void CVkProto::WorkerThread(void*) else { // Initialize new OAuth session extern char szBlankUrl[]; - //need rework Push(new AsyncHttpRequest(this, REQUEST_GET, "/oauth/authorize", false, &CVkProto::OnOAuthAuthorize) - << INT_PARAM("client_id", VK_APP_ID) << CHAR_PARAM("scope", "friends,photos,audio,video,wall,messages,offline") - << CHAR_PARAM("redirect_uri", szBlankUrl) << CHAR_PARAM("display", "wap") << CHAR_PARAM("response_type", "token")); + << INT_PARAM("client_id", VK_APP_ID) + << CHAR_PARAM("scope", "friends,photos,audio,video,wall,messages,offline,status") + << CHAR_PARAM("redirect_uri", szBlankUrl) + << CHAR_PARAM("display", "mobile") + << CHAR_PARAM("response_type", "token") + << VER_API)->m_bApiReq = false;; } while(true) { @@ -112,7 +115,7 @@ void CVkProto::WorkerThread(void*) pReq = m_arRequestsQueue[0]; m_arRequestsQueue.remove(0); - need_sleep = (m_arRequestsQueue.getCount() > 1); // more than two to not gather + need_sleep = (m_arRequestsQueue.getCount() > 1) && (pReq->m_bApiReq); // more than two to not gather } ExecuteRequest(pReq); if (need_sleep) // There can be maximum 3 requests to API methods per second from a client diff --git a/protocols/VKontakte/src/vk_thread.cpp b/protocols/VKontakte/src/vk_thread.cpp index 4e534ec2e9..02d2199fba 100644 --- a/protocols/VKontakte/src/vk_thread.cpp +++ b/protocols/VKontakte/src/vk_thread.cpp @@ -230,7 +230,7 @@ void CVkProto::OnReceiveMyInfo(NETLIBHTTPREQUEST *reply, AsyncHttpRequest *pReq) ///////////////////////////////////////////////////////////////////////////////////////// -static char fieldsName[] = "id, first_name, last_name, photo_100, sex, country, timezone, contacts, online, status, about"; +static char fieldsName[] = "id, first_name, last_name, photo_100, sex, timezone, contacts, online, status, about"; void CVkProto::RetrieveUserInfo(LONG userID) { @@ -333,9 +333,12 @@ void CVkProto::OnReceiveUserInfo(NETLIBHTTPREQUEST *reply, AsyncHttpRequest *pRe setTString(hContact, "Phone", szValue); szValue = json_as_string(json_get(pRecord, "status")); - if (szValue && *szValue) - if (_tcscmp(db_get_tsa(hContact, "CList", "StatusMsg"), szValue)) - db_set_ts(hContact, "CList", "StatusMsg", szValue); + if (szValue && *szValue) { + ptrT tszOldStatus(db_get_tsa(hContact, "CList", "StatusMsg")); + if (tszOldStatus) + if (_tcscmp(tszOldStatus, szValue)) + db_set_ts(hContact, "CList", "StatusMsg", szValue); + } szValue = json_as_string(json_get(pRecord, "about")); if (szValue && *szValue) @@ -425,8 +428,9 @@ void CVkProto::OnReceiveFriends(NETLIBHTTPREQUEST *reply, AsyncHttpRequest *pReq szValue = json_as_string(json_get(pInfo, "status")); if (szValue && *szValue) { ptrT tszOldStatus(db_get_tsa(hContact, "CList", "StatusMsg")); - if (_tcscmp(tszOldStatus, szValue)) - db_set_ts(hContact, "CList", "StatusMsg", szValue); + if (tszOldStatus) + if (_tcscmp(tszOldStatus, szValue)) + db_set_ts(hContact, "CList", "StatusMsg", szValue); } szValue = json_as_string(json_get(pInfo, "about")); @@ -548,7 +552,6 @@ void CVkProto::OnReceiveMessages(NETLIBHTTPREQUEST *reply, AsyncHttpRequest *pRe if (!m_bMarkReadOnReply) MarkMessagesRead(mids); - RetrieveUsersInfo(); } void CVkProto::OnReceiveDlgs(NETLIBHTTPREQUEST *reply, AsyncHttpRequest *pReq) @@ -610,6 +613,7 @@ void CVkProto::OnReceiveDlgs(NETLIBHTTPREQUEST *reply, AsyncHttpRequest *pReq) MarkMessagesRead(hContact); } } + RetrieveUsersInfo(); } ///////////////////////////////////////////////////////////////////////////////////////// @@ -828,10 +832,10 @@ int CVkProto::PollServer() { debugLogA("CVkProto::PollServer"); - //need rework NETLIBHTTPREQUEST req = { sizeof(req) }; req.requestType = REQUEST_GET; - req.szUrl = NEWSTR_ALLOCA(CMStringA().Format("http://%s?act=a_check&key=%s&ts=%s&wait=25&access_token=%s", m_pollingServer, m_pollingKey, m_pollingTs, m_szAccessToken)); + req.szUrl = NEWSTR_ALLOCA(CMStringA().Format("http://%s?act=a_check&key=%s&ts=%s&wait=25&access_token=%s&mode=%d", m_pollingServer, m_pollingKey, m_pollingTs, m_szAccessToken, 106)); + // see mode parametr description on https://vk.com/dev/using_longpoll (Russian version) req.flags = VK_NODUMPHEADERS | NLHRF_PERSISTENT; req.timeout = 30000; req.nlc = m_pollingConn; -- cgit v1.2.3