From 9f5e4ae49d35bb503decce730d141d55ec9f165a Mon Sep 17 00:00:00 2001 From: ElzorFox Date: Thu, 18 Jun 2020 14:06:24 +0500 Subject: VKontakte: VK API upgrade (5.78 => 5.110) version bump --- protocols/VKontakte/src/version.h | 4 ++-- protocols/VKontakte/src/vk.h | 2 +- protocols/VKontakte/src/vk_chats.cpp | 36 ++++++++++++++++++++++++++++++--- protocols/VKontakte/src/vk_messages.cpp | 17 +++++++++------- protocols/VKontakte/src/vk_options.cpp | 2 ++ protocols/VKontakte/src/vk_proto.h | 6 +++++- protocols/VKontakte/src/vk_struct.cpp | 8 +++++--- protocols/VKontakte/src/vk_struct.h | 6 ++++-- 8 files changed, 62 insertions(+), 19 deletions(-) (limited to 'protocols/VKontakte') diff --git a/protocols/VKontakte/src/version.h b/protocols/VKontakte/src/version.h index eee10724fa..8a6084d743 100644 --- a/protocols/VKontakte/src/version.h +++ b/protocols/VKontakte/src/version.h @@ -1,7 +1,7 @@ #define __MAJOR_VERSION 0 #define __MINOR_VERSION 1 -#define __RELEASE_NUM 10 -#define __BUILD_NUM 1 +#define __RELEASE_NUM 11 +#define __BUILD_NUM 0 #include diff --git a/protocols/VKontakte/src/vk.h b/protocols/VKontakte/src/vk.h index 527021c145..284fb9e204 100644 --- a/protocols/VKontakte/src/vk.h +++ b/protocols/VKontakte/src/vk.h @@ -90,7 +90,7 @@ along with this program. If not, see . #define VK_CHAT_FLAG 2000000000 -#define VK_NEW_API 0 +#define VK_NEW_API 1 #if (VK_NEW_API == 0) #define VK_API_VER "5.78" diff --git a/protocols/VKontakte/src/vk_chats.cpp b/protocols/VKontakte/src/vk_chats.cpp index 9106e4a6b3..402e51744d 100644 --- a/protocols/VKontakte/src/vk_chats.cpp +++ b/protocols/VKontakte/src/vk_chats.cpp @@ -106,6 +106,7 @@ CVkChatInfo* CVkProto::AppendConversationChat(int iChatId, const JSONNode& jnIte } +#if (VK_NEW_API == 0) CVkChatInfo* CVkProto::AppendChat(int id, const JSONNode &jnDlg) { debugLogW(L"CVkProto::AppendChat"); @@ -170,6 +171,7 @@ CVkChatInfo* CVkProto::AppendChat(int id, const JSONNode &jnDlg) RetrieveChatInfo(c); return c; } +#endif ///////////////////////////////////////////////////////////////////////////////////////// @@ -485,6 +487,14 @@ void CVkProto::AppendChatConversationMessage(int id, const JSONNode& jnMsg, cons wszBody += wszFwdMessages; } + const JSONNode& jnReplyMessages = jnMsg["reply_message"]; + if (jnReplyMessages && !jnReplyMessages.empty()) { + CMStringW wszReplyMessages = GetFwdMessages(jnReplyMessages, jnFUsers, bbcNo); + if (!wszBody.IsEmpty()) + wszReplyMessages = L"\n" + wszReplyMessages; + wszBody += wszReplyMessages; + } + const JSONNode& jnAttachments = jnMsg["attachments"]; if (jnAttachments && !jnAttachments.empty()) { CMStringW wszAttachmentDescr = GetAttachmentDescr(jnAttachments, bbcNo); @@ -497,7 +507,7 @@ void CVkProto::AppendChatConversationMessage(int id, const JSONNode& jnMsg, cons wszBody += wszAttachmentDescr; } - if (m_vkOptions.bAddMessageLinkToMesWAtt && ((jnAttachments && !jnAttachments.empty())||(jnFwdMessages && !jnFwdMessages.empty()))) + if (m_vkOptions.bAddMessageLinkToMesWAtt && ((jnAttachments && !jnAttachments.empty()) || (jnFwdMessages && !jnFwdMessages.empty()) || (jnReplyMessages && !jnReplyMessages.empty()))) wszBody += SetBBCString(TranslateT("Message link"), bbcNo, vkbbcUrl, CMStringW(FORMAT, L"https://vk.com/im?sel=c%d&msgid=%d", cc->m_iChatId, mid)); @@ -593,7 +603,7 @@ void CVkProto::AppendChatConversationMessage(int id, const JSONNode& jnMsg, cons } } - +#if (VK_NEW_API == 0) void CVkProto::AppendChatMessage(int id, const JSONNode &jnMsg, const JSONNode &jnFUsers, bool bIsHistory) { debugLogA("CVkProto::AppendChatMessage"); @@ -729,6 +739,7 @@ void CVkProto::AppendChatMessage(int id, const JSONNode &jnMsg, const JSONNode & cm->m_bIsAction = bIsAction; } } +#endif void CVkProto::AppendChatMessage(CVkChatInfo *cc, LONG uid, int msgTime, LPCWSTR pwszBody, bool bIsHistory, bool bIsAction) { @@ -919,9 +930,16 @@ INT_PTR __cdecl CVkProto::OnJoinChat(WPARAM hContact, LPARAM) if (chat_id == VK_INVALID_USER) return 1; +#if (VK_NEW_API == 1) + AsyncHttpRequest* pReq = new AsyncHttpRequest(this, REQUEST_POST, "/method/messages.addChatUser.json", true, &CVkProto::OnReceiveSmth, AsyncHttpRequest::rpHigh); + pReq << INT_PARAM("user_id", m_myUserId); + pReq<< INT_PARAM("chat_id", chat_id); +#else +#define VK_API_VER "5.110" AsyncHttpRequest *pReq = new AsyncHttpRequest(this, REQUEST_POST, "/method/messages.send.json", true, &CVkProto::OnSendChatMsg, AsyncHttpRequest::rpHigh); pReq << INT_PARAM("chat_id", chat_id) << WCHAR_PARAM("message", m_vkOptions.pwszReturnChatMessage); pReq->AddHeader("Content-Type", "application/x-www-form-urlencoded"); +#endif Push(pReq); db_unset(hContact, m_szModuleName, "off"); return 0; @@ -983,7 +1001,12 @@ void CVkProto::KickFromChat(int chat_id, LONG user_id, const JSONNode &jnMsg, co return; MCONTACT hContact = FindUser(user_id, false); + +#if (VK_NEW_API == 1) + CMStringW msg(jnMsg["text"].as_mstring()); +#else CMStringW msg(jnMsg["body"].as_mstring()); +#endif if (msg.IsEmpty()) { msg = TranslateT("You've been kicked by "); if (hContact != 0) @@ -992,8 +1015,11 @@ void CVkProto::KickFromChat(int chat_id, LONG user_id, const JSONNode &jnMsg, co msg += TranslateT("(Unknown contact)"); } else +#if (VK_NEW_API == 1) + AppendChatConversationMessage(chat_id, jnMsg, jnFUsers, false); +#else AppendChatMessage(chat_id, jnMsg, jnFUsers, false); - +#endif MsgPopup(hContact, msg, TranslateT("Chat")); setByte(cc->m_hContact, "kicked", 1); LeaveChat(chat_id); @@ -1251,5 +1277,9 @@ void CVkProto::OnCreateNewChat(NETLIBHTTPREQUEST *reply, AsyncHttpRequest *pReq) int chat_id = jnResponse.as_int(); if (chat_id != 0) +#if (VK_NEW_API == 1) + AppendConversationChat(chat_id, nullNode); +#else AppendChat(chat_id, nullNode); +#endif } \ No newline at end of file diff --git a/protocols/VKontakte/src/vk_messages.cpp b/protocols/VKontakte/src/vk_messages.cpp index 9c5f93d4cd..fa91b6db23 100644 --- a/protocols/VKontakte/src/vk_messages.cpp +++ b/protocols/VKontakte/src/vk_messages.cpp @@ -154,6 +154,7 @@ INT_PTR CVkProto::SvcMarkMessagesAsRead(WPARAM hContact, LPARAM) return 0; } +#if (VK_NEW_API == 0) void CVkProto::MarkMessagesRead(const CMStringA &mids) { debugLogA("CVkProto::MarkMessagesRead (mids)"); @@ -163,6 +164,7 @@ void CVkProto::MarkMessagesRead(const CMStringA &mids) Push(new AsyncHttpRequest(this, REQUEST_GET, "/method/messages.markAsRead.json", true, &CVkProto::OnReceiveSmth, AsyncHttpRequest::rpLow) << CHAR_PARAM("message_ids", mids)); } +#endif void CVkProto::MarkMessagesRead(const MCONTACT hContact) { @@ -240,12 +242,18 @@ void CVkProto::OnReceiveMessages(NETLIBHTTPREQUEST *reply, AsyncHttpRequest *pRe break; CMStringW wszPeerType(jnPeer["type"].as_mstring()); + int iUserId = jnPeer["id"].as_int(); if (wszPeerType == L"user" || wszPeerType == L"group") { - int iUserId = jnPeer["id"].as_int(); MCONTACT hContact = FindUser(iUserId, true); setDword(hContact, "in_read", jnItem["in_read"].as_int()); setDword(hContact, "out_read", jnItem["out_read"].as_int()); + if (m_vkOptions.iMarkMessageReadOn == MarkMsgReadOn::markOnReceive) + MarkMessagesRead(hContact); + } + else { + MCONTACT hContact = FindChat(iUserId % VK_CHAT_FLAG); + MarkMessagesRead(hContact); } } } @@ -270,11 +278,6 @@ void CVkProto::OnReceiveMessages(NETLIBHTTPREQUEST *reply, AsyncHttpRequest *pRe char szMid[40]; _itoa(mid, szMid, 10); - if (m_vkOptions.iMarkMessageReadOn == MarkMsgReadOn::markOnReceive || chat_id != 0) { - if (!mids.IsEmpty()) - mids.AppendChar(','); - mids.Append(szMid); - } bool bUseServerReadFlag = m_vkOptions.bSyncReadMessageStatusFromServer ? true : !m_vkOptions.bMesAsUnread; @@ -533,10 +536,10 @@ void CVkProto::OnReceiveMessages(NETLIBHTTPREQUEST *reply, AsyncHttpRequest *pRe ProtoChainRecvMsg(hContact, &recv); } } -#endif if (!mids.IsEmpty()) MarkMessagesRead(mids); +#endif } void CVkProto::OnReceiveDlgs(NETLIBHTTPREQUEST *reply, AsyncHttpRequest *pReq) diff --git a/protocols/VKontakte/src/vk_options.cpp b/protocols/VKontakte/src/vk_options.cpp index 38f8aac213..25259b7928 100644 --- a/protocols/VKontakte/src/vk_options.cpp +++ b/protocols/VKontakte/src/vk_options.cpp @@ -270,7 +270,9 @@ CVkOptionAdvancedForm::CVkOptionAdvancedForm(CVkProto *proto) : CreateLink(m_cbClearServerHistory, m_proto->m_vkOptions.bClearServerHistory); CreateLink(m_cbRemoveFromFrendlist, m_proto->m_vkOptions.bRemoveFromFrendlist); CreateLink(m_cbRemoveFromCList, m_proto->m_vkOptions.bRemoveFromCList); +#if (VK_NEW_API == 0) CreateLink(m_edtReturnChatMessage, m_proto->m_vkOptions.pwszReturnChatMessage); +#endif m_cbForceInvisibleStatus.OnChange = Callback(this, &CVkOptionAdvancedForm::On_cbForceInvisibleStatusChange); m_cbSendVKLinksAsAttachments.OnChange = Callback(this, &CVkOptionAdvancedForm::On_cbSendVKLinksAsAttachmentsChange); diff --git a/protocols/VKontakte/src/vk_proto.h b/protocols/VKontakte/src/vk_proto.h index e04bbf73c2..958aa1e396 100644 --- a/protocols/VKontakte/src/vk_proto.h +++ b/protocols/VKontakte/src/vk_proto.h @@ -308,7 +308,9 @@ private: void OnReceiveGroupInfo(NETLIBHTTPREQUEST * reply, AsyncHttpRequest * pReq); void RetrieveFriends(bool bCleanNonFriendContacts = false); void OnReceiveFriends(NETLIBHTTPREQUEST*, AsyncHttpRequest*); +#if (VK_NEW_API == 0) void MarkMessagesRead(const CMStringA &mids); +#endif void MarkMessagesRead(const MCONTACT hContact); void RetrieveMessagesByIds(const CMStringA &mids); void RetrieveUnreadMessages(); @@ -390,10 +392,12 @@ private: void StopChatContactTyping(int iChatId, LONG iUserId); void OnCreateNewChat(NETLIBHTTPREQUEST*, AsyncHttpRequest*); CVkChatInfo* AppendConversationChat(int iChatId, const JSONNode& jnItem); - CVkChatInfo* AppendChat(int id, const JSONNode &jnNode); void SetChatTitle(CVkChatInfo *cc, LPCWSTR wszTopic); void AppendChatConversationMessage(int id, const JSONNode& jnMsg, const JSONNode& jnFUsers, bool bIsHistory); +#if (VK_NEW_API == 0) + CVkChatInfo* AppendChat(int id, const JSONNode& jnNode); void AppendChatMessage(int id, const JSONNode &jnMsg, const JSONNode &jnFUsers, bool bIsHistory); +#endif void AppendChatMessage(CVkChatInfo *cc, LONG uid, int msgTime, LPCWSTR pwszBody, bool bIsHistory, bool bIsAction = false); void RetrieveChatInfo(CVkChatInfo*); void OnReceiveChatInfo(NETLIBHTTPREQUEST*, AsyncHttpRequest*); diff --git a/protocols/VKontakte/src/vk_struct.cpp b/protocols/VKontakte/src/vk_struct.cpp index efec941c19..39f33c22d5 100644 --- a/protocols/VKontakte/src/vk_struct.cpp +++ b/protocols/VKontakte/src/vk_struct.cpp @@ -221,7 +221,9 @@ CVKOptions::CVKOptions(PROTO_INTERFACE* proto) : iStickerSize(proto, "StickerSize", 128), pwszDefaultGroup(proto, "ProtoGroup", L"VKontakte"), +#if (VK_NEW_API == 0) pwszReturnChatMessage(proto, "ReturnChatMessage", TranslateT("I'm back")), +#endif pwszVKLang(proto, "VKLang", nullptr) { @@ -234,9 +236,7 @@ CVKOptions::CVKOptions(PROTO_INTERFACE* proto) : } // Note } - - - +#if (VK_NEW_API == 0) //////////////////////////////////////////////////////////////////////////////////////////////////// void CVkUserItem::LoadFromUserProfile(const JSONNode &jnNode) @@ -420,3 +420,5 @@ CVkUserItem::CVkUserItem(CVkProto* vkProto, const JSONNode &jnNode, vkJSONNodeTy m_hContact = m_bIsMUChat ? m_VK->FindChat(m_iChatId) : m_VK->FindUser(m_iUserId); m_hContact = m_hContact ? m_hContact : INVALID_CONTACT_ID; } + +#endif \ No newline at end of file diff --git a/protocols/VKontakte/src/vk_struct.h b/protocols/VKontakte/src/vk_struct.h index e17a18ec9a..3660165f1f 100644 --- a/protocols/VKontakte/src/vk_struct.h +++ b/protocols/VKontakte/src/vk_struct.h @@ -316,7 +316,9 @@ struct CVKOptions { CMOption iStickerSize; CMOption pwszDefaultGroup; +#if (VK_NEW_API == 0) CMOption pwszReturnChatMessage; +#endif CMOption pwszVKLang; CVKOptions(PROTO_INTERFACE *proto); @@ -345,7 +347,7 @@ struct CVKImageSizeItem { }; /////////////////////////////////////////////////////////////////////////////////////////////// - +#if (VK_NEW_API == 0) enum vkJSONNodeType { vkJSONTypeProfile = 0, vkJSONTypeGroup, vkJSONTypeConversation }; class CVkUserItem : public MZeroedObject { @@ -425,4 +427,4 @@ class CVkUserItem : public MZeroedObject { }; - +#endif -- cgit v1.2.3