From 4fdf5f999f94ad09a2cb44c8e879b98a6a5fcf0f Mon Sep 17 00:00:00 2001 From: ElzorFox Date: Sat, 6 Apr 2024 12:25:25 +0500 Subject: VKontakte: fix load userinfo for users with id = chat id fix temporary non-readonly contacts --- protocols/VKontakte/src/vk_messages.cpp | 4 ++++ protocols/VKontakte/src/vk_thread.cpp | 9 ++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) (limited to 'protocols/VKontakte/src') diff --git a/protocols/VKontakte/src/vk_messages.cpp b/protocols/VKontakte/src/vk_messages.cpp index cfdb82145d..5f1a2e55dd 100644 --- a/protocols/VKontakte/src/vk_messages.cpp +++ b/protocols/VKontakte/src/vk_messages.cpp @@ -334,6 +334,10 @@ void CVkProto::OnReceiveMessages(MHttpResponse *reply, AsyncHttpRequest *pReq) WriteQSWord(hContact, "out_read", jnItem["out_read"].as_int()); if (m_vkOptions.iMarkMessageReadOn == MarkMsgReadOn::markOnReceive) MarkMessagesRead(hContact); + + const JSONNode& jnCanWrite = jnItem["can_write"]; + if (jnCanWrite) + Contact::Readonly(hContact, !jnCanWrite["allowed"].as_bool()); } } diff --git a/protocols/VKontakte/src/vk_thread.cpp b/protocols/VKontakte/src/vk_thread.cpp index a7281dc010..08a09e3ca9 100644 --- a/protocols/VKontakte/src/vk_thread.cpp +++ b/protocols/VKontakte/src/vk_thread.cpp @@ -30,7 +30,7 @@ static char szVKLoginDomain[] = "https://m.vk.com"; static char szVKCookieDomain[] = ".vk.com"; static char szFieldsName[] = "id, first_name, last_name, photo_100, bdate, sex, timezone, " "contacts, last_seen, online, status, country, city, relation, interests, activities, " - "music, movies, tv, books, games, quotes, about, domain"; + "music, movies, tv, books, games, quotes, about, domain, can_write_private_message"; ///////////////////////////////////////////////////////////////////////////////////////// @@ -644,6 +644,9 @@ MCONTACT CVkProto::SetContactInfo(const JSONNode &jnItem, bool bFlag, VKContactT setWString(hContact, "Homepage", wszUrl); } + if (jnItem["can_write_private_message"]) + Contact::Readonly(hContact, jnItem["can_write_private_message"].as_int() == 0); + return hContact; } @@ -697,7 +700,7 @@ void CVkProto::RetrieveUsersInfo(bool bFreeOffline, bool bRepeat) int i = 0; for (auto &hContact : AccContacts()) { VKUserID_t iUserId = ReadVKUserID(hContact); - if (iUserId == VK_INVALID_USER || iUserId == VK_FEED_USER || iUserId < 0) + if (iUserId == VK_INVALID_USER || iUserId == VK_FEED_USER || iUserId < 0 || isChatRoom(hContact)) continue; bool bIsFriend = !getBool(hContact, "Auth", true); @@ -715,7 +718,7 @@ void CVkProto::RetrieveUsersInfo(bool bFreeOffline, bool bRepeat) Push(new AsyncHttpRequest(this, REQUEST_POST, "/method/execute.RetrieveUsersInfo", true, &CVkProto::OnReceiveUserInfo) << CHAR_PARAM("userids", userIDs) - << CHAR_PARAM("fields", (bFreeOffline ? "online,status" : szFieldsName)) + << CHAR_PARAM("fields", (bFreeOffline ? "online,status,can_write_private_message" : szFieldsName)) << INT_PARAM("norepeat", (int)bRepeat) << INT_PARAM("setonline", (int)m_bNeedSendOnline) << INT_PARAM("func_v", (bFreeOffline && !m_vkOptions.bLoadFullCList) ? 1 : 2) -- cgit v1.2.3